見出し画像

要件定義をAIに任せたら、決めることが71個に増えた

setlogみたいな感じで友達を招待する感じにするから立ち上がりの過疎って気にしなくてもいいと思う。この意図伝わる?

こんにちは、ハルトです。

これ、僕がAIに返した実際のレビューコメントです。誤字もそのまま残しました^^

いま、iPhoneアプリを1本作っています。24時間で消える部屋のアプリで、要件定義から設計、実装、テスト、TestFlightへの配布まで全部AIにやらせています。道具はClaude Code、中身はSwift 6とSwiftUI、バックエンドはSupabase。作っているのは僕ひとりです。

始める前は、こう思っていました。要件定義っていちばん面倒なところだし、そこをAIがやってくれるならだいぶ楽になるだろうな、と。

半分は当たりました。書く手間は、たしかに消えたんです。
でも、決める手間は1個も消えませんでした。

むしろ逆でした。今まで頭の中でぼんやりさせていたものが、全部「決めてください」という形で机の上に並びました。数えたら71個ありました。

人間が渡したのは、103行のメモ1枚だけ


AIに渡したインプットは、103行のメモが1枚です。これだけ。

中身は、アプリのコンセプトと、決まっている仕様の表と、いちばん怖いリスク(人が集まらないこと)と、最後に「まだ決まっていないこと」が8つ。

正直に書いておくと、このメモ自体もAIとの対話で作りました。 僕が思いつきを喋って、AIに聞かれて答えて、を何往復かして、この形に絞り込んだものです。「人間が103行書いた」というより「103行になるまで削った」が近いです。

大事なのは最後の8つのほうでした。部屋にどうやって入るのか。一覧の並び順は。読むだけの参加を許すか。人数の上限は。通知は要るのか。通報が何件で自動非表示にするか。アプリの名前は。

この時点で、僕は何ひとつ決めていません。

返ってきたのは、78ファイル・8,584行


で、これを渡して要件定義を書かせたら、こうなりました。

  • 78ファイル

  • 8,584行

  • 図が11枚(データのER図、画面の流れ、部屋の状態遷移)

  • ページ数にすると66ページ

概要、業務ルール、機能ごとの仕様、外部連携、データ、テスト、非機能、そして管理台帳。役割ごとに分かれていて、索引まで自動で出ています。いちばん厚いのは機能ごとの仕様で、78ファイルのうち37がそこでした。

103行から66ページ。これは素直にすごいです。ここは完全に期待どおりでした。自分で書いていたら1週間は溶けていたと思います。

問題は、そのあとでした。

楽になったのは「書くところ」だけだった

出てきたものを読み始めて、しばらくして気づきました。

AIが減らしてくれたのは、文章にする手間と、体裁を整える手間と、抜けを見つける手間です。ここは丸ごと消えました。

減らなかったのは、どっちにするかを決める手間です。

というより、増えました。今まで「まあそのへんは後で考えよう」で済ませていたものが、全部「決めてください」という行になって返ってきたからです。

逃げ場がなくなった、という感じが近いかもしれません。

決定が71件。そのうち56件は、自分が決めていた


要件定義書の中に「決定事項一覧」という台帳があります。決まったことを1行ずつ記録していく表です。

今は71行あります。そしてこの表、「決定者」という列を持っています。

数えてみました。

  • ユーザー(=僕)が決めた:56件

  • AIが提案して僕が承認した:15件

つまり71件全部、僕を通っています。 AIが勝手に決めて、そのまま通った行はひとつもありません。

もうひとつ面白かったのが、決定日です。9月7日に32件、9月12日に29件。この2日に固まっています。

これ、僕が腰を据えて読んだ日です。決める作業は分散してくれません。 ちょっとずつ進むんじゃなくて、まとめて塊で来ます。

レビューは107件。でも、直させたのは7件だけ

もっと正直な数字が、レビューログのほうに残っていました。


今のコンセプトになってから、僕がレビューで返事をしたのが107件。その内訳がこれです。

  • そのままでいい:91件

  • 直させた:7件

  • 今回は作らないことにした:6件

  • 保留にした:3件

AIの出力は、9割方そのままで正しいんです。数字だけ見たら「ほとんど直すところがない」という話に見えます。

でも、ここが今日いちばん言いたいところで。

「そのままでいい」と判断するのは、人間にしかできません。

91回「これでいい」と言う作業は、AIには渡せないんです。渡したら、それは誰もレビューしていないのと同じなので。直した7件より、OKを出した91件のほうが時間を食いました。

どのくらい読み直したのか、これも数えられる形で残っていました。レビュー用に書き出したページが、退避フォルダに86世代たまっていました。9月6日・7日・8日・12日の4日間分です。1日20回以上、読んでは直させて、また読み直しています。

このへんで、AIに任せるというのは「やらなくて済む」ことじゃないな、と思いはじめました。

自分で全部書いていたときは、「書きながら決める」をやっていたんだと思います。文章にしていく過程で、なんとなく辻褄が合っていく。そのぶん、決めていないことに自分で気づかないまま進めてしまう。

AIに書かせると、その「なんとなく」が挟まりません。書くのが一瞬で終わるので、決めることだけが手元に残ります。 楽になったというより、作業の中身が入れ替わったという感覚のほうが正確です。

決められないものは、決めないまま置いた

全部が決まったわけじゃありません。

「今は決められない」というものは、未確定の台帳のほうに置きました。全部で11件立てて、8件は決着、3件は今も決まっていません。

残っている1つを例に出すと、「韓国語の通報を、運営者ひとりで24時間以内に対処できるか」。これは僕ひとりでは決められません。回せないなら韓国では出せない、という重い論点です。

こういうとき、AIは勝手に「大丈夫です」とも「無理です」とも書きませんでした。代わりに、仮置きの値を入れてくれました。「回せる前提を置かない。検証するまで韓国では出さない」。

これが効きました。「決まっていない」を「決まっていない」の形のまま持てると、そこで止まらずに先へ進めます。 決まっていないことを曖昧なまま本文に混ぜられるのが、いちばん困るので。

差し戻したのは、AIが気を利かせたところ

7件の「直させた」が、どういうものだったか。

ひとつは、冒頭の生セリフです。AIは「立ち上がりに人が集まらない問題」を大きなリスクとして扱っていました。でも途中で招待制に決めたので、知らない人の流入をそもそも待っていません。だから「これは対策しなくていいです」と返しました。その場で台帳に反映されました。

もうひとつは、自分で決めた仕様が、自分の別の決定に潰されたケースです。

最初のメモに、僕はこう書いていました。「荒れ対策は、部屋主に削除権限+通報N件で自動非表示」。

ところが、部屋を招待制だけにすると決めた瞬間、この前提が崩れます。招待した人どうししかいない部屋に、取り締まる係を置く理由がない。むしろ「他人の発言を消せる人」を作るほうが危ない。

結果、台帳にはこう入りました。「部屋の中の権限は全員同じとする。部屋主という役割を持たない」。

自分で決めたことが、自分の別の決定にひっくり返された形です。そしてそれを指摘してきたのはAIでした。人間ひとりでやっていたら、たぶん気づかないまま実装まで行っていました。

ちなみに、僕が「参考にしてほしい」と投げたアプリについて、AIが実際に調べたうえで「それは仕組みが違いました」と返してきて、僕の案が却下されたこともあります。言われたとおりに作るだけの相手ではなかった、というのは正直びっくりしました^^

使うときの注意

これからAIに要件定義をやらせる人に、僕が今の時点で言えることを4つだけ。

  • 全部は読まなくていいです。でも決定の台帳と、未確定の台帳だけは全部読んでください。 ここに人間の判断が要るものが集まっています

  • 「AIに決めさせない」ではなく「決めた人を書かせる」。 どこを人が決めて、どこをAIの提案に乗ったのかが行ごとに残っていないと、あとで見直せません

  • 決まらないものには、必ず仮置きの値を置く。 空欄のままにすると、その先の文章が全部ふわっとします

  • 要件定義そのものは、コードと別の場所に置いています。 作り直しても残る側なので。僕はiCloudに置いていて、gitには入れていません

今日の1個

要件定義をAIに書かせるとき、最初にこの一行を足しておくと、あとのレビューが一気に楽になります。

決めたことは決定台帳に、決められないことは未確定台帳に、それぞれ決定者と仮置き値をつけて分けて書き出して。

次に潰す課題

次は「実装に入る前に通した2つのゲート」の話をします。

書き上がった要件定義を持ってすぐコードを書き始めた……のではなくて、その前に2つだけ実際に動かして確かめました。150人が同時にいる部屋でちゃんと会話が届くのか。時間が来たとき、本当に確実に消えるのか。この2つが通らなかったら、アプリのコンセプトごと成り立たないからです。実測の数字も出します。

みなさんがAIに任せたとき、「これでいい」と言い続ける作業は、どこに残りましたか?

スキ・フォローが続ける燃料になります🙌

いいなと思ったら応援しよう!