【技術検証】AIに「要件定義書」を渡してアプリを作らせてみた。「丸投げ」vs「矛盾」vs「詳細」、勝つのはどれだ?
こんにちは、システムエンジニアの上野です。
前回までの検証で、AI(生成AI)は、正しい知識さえ与えれば「優秀なプログラマー」になることがわかりました。 では、私たち人間側には何が求められるのでしょうか?
「AIがコードを書くなら、もう人間は楽できるんでしょ?」
そう思って、AIに「いい感じに作って」と丸投げしようとしているあなた。 それ、会社が飛びますよ。
今回は、同じ「バックアップツール(Robocopy)」を作るために、3パターンの「要件定義書(指示書)」を用意し、AIがそれぞれどんなコードを納品してくるかを実験しました。 そこから見えてきたのは、「0円で社内ツールを作れる人」と「AIに騙される人」の決定的な違いでした。
実験のルール
- お題::デスクトップのデータをサーバーへバックアップするボタン(バッチファイル)を作る。
- 環境::ネットワークが遅く、サーバーもボロい(負荷をかけると死ぬ)。
- チャレンジャー: Google NotebookLM
- 前提:マイクロソフトの公式ドキュメントのURLを食べさせる。
🧪 実験①:「丸投げ」定義書
まずは、現場のリーダーが書きがちな、「やりたいこと(欲望)」だけを書いた指示書です。
📄 渡した要件定義書(初級)
■依頼内容
デスクトップの「Work」フォルダを、サーバーの自分のフォルダにバックアップするボタンを作ってください。■要望
・難しい画面は出さないで。アイコンをダブルクリックしたら勝手に終わるように。
・帰る直前にやるので、とにかく「早く」終わるようにしてください。
・誰でも使えるように、一番簡単な方法で作ってください。
🤖 AIの納品物
AI:「承知しました。『Robocopy』の高速化オプションをフル活用しました!」
DOS
robocopy "Source" "Dest" /MIR /MT:16 /ZB ...
👨💻 評価:【危険度 S】
「これは、自社へのサイバー攻撃です」
AIは「早く」という言葉を真に受けて、/MT:16(16並列で全力転送)というオプションを付けてきました。 これを20人の社員が一斉に実行したらどうなるか? 細い回線に16倍の負荷がかかり、ネットワークは即死、サーバーはフリーズします。
実際にはファイル移動を自動で行っただけで、解決策としてはいまいちです。回線の速度などを考慮しておらず、むしろ、負荷をかけてしまっている状態です。サーバーが落ちる可能性もあるため、危険度Sとしています。
【教訓】 AIは行間を読みません。「早く」と言えば、リスクを無視して暴走します。
🧪 実験②:悪夢の「矛盾」定義書
次に、あれもこれもと欲張った、「矛盾だらけ」の指示書です。
📄 渡した要件定義書(中級)
「ネットワークが遅いので、回線に負荷をかけないでください。 でも、業務効率のために、処理は『1分以内(爆速)』で終わらせてください。 あと、ユーザー完了を目視させたいので画面ロックして待機させてください。」
🤖 AIの納品物
AI:「ご安心ください。帯域制御しつつ、マルチスレッドで高速化しました!」
DOS
robocopy "Source" "Dest" /MT:16 /IORATE:1m ...
👨💻 評価:【品質 F】
「平気な顔で嘘をつくな」
AIが出してきたのは、「アクセル(/MT:16)」と「ブレーキ(/IORATE:1m)」を同時にベタ踏みするという意味不明なコードです。 しかも、計算上「1分」で終わるはずがない物理量なのに、「要件を満たしました」と涼しい顔で報告してきました。
最新のLLM(オンラインで使うもの)であれば、もう少し考慮をしてくれると思います。裏で動いているAIも日々進化しているので、もしかすると、矛盾を指摘してくれるようになるかもしれませんが、現状では、残念ながら、矛盾したコードを生み出しました。
【教訓】 人間がトレードオフ(決断)から逃げると、AIは「物理法則を無視した嘘のシステム」を作ります。
🧪 実験③:「詳細」定義書
最後に、「制約と仕様」を明確にした指示書です。
📄 渡した要件定義書(上級)
■機能要件
クライアントPCのデータをサーバーへバックアップするバッチファイルの作成。■環境制約
・ネットワーク帯域が狭隘(きょうあい)であるため、帯域制御が必須。
・サーバーディスクI/Oが低速である。■実装仕様
- 処理フロー
(1) 実行直後、rundll32を用いてワークステーションをロックする。
(2)robocopyコマンドでデータ転送を行う。
(3) 正常終了(終了コード8以下)の場合のみ、shutdownコマンドでPCを電源オフにする。- Robocopyオプション要件
・/IPG:100:パケット間ギャップを挿入し、帯域占有を防ぐこと(※最重要)。
・/MIR:ミラーリングを行う。
・/MT:1:サーバー負荷軽減のため、シングルスレッドとする。- エラーハンドリング
・エラー時はシャットダウンせず、pauseで画面を保持すること。
🤖 AIの納品物
AI:「環境制約を考慮し、帯域制御とセキュリティを実装したコードです。」
DOS
rundll32 user32.dll,LockWorkStation robocopy "Source" "Dest" /MIR /IPG:100 /MT:1 ...
👨💻 評価:【品質 A(合格)】
「意図通りです。これなら現場で試せます」
エラー処理やログ管理など、まだ粗削りですが、「あえて遅くする」「誤操作を防ぐ」というこちらの意図は完璧に反映されています。 丸投げした時の「凶器」とは雲泥の差です。
少し小難しい書き方をしましたが、もう少し簡単に書いても問題はないと思います。どちらかというと、AIと相談しながら、この書式になるように壁打ちを繰り返して仕上げるのが現実的かもしれません。手間はかかりますが、不可能ではありません。
🏁 結論:AIは「空気を読まない部下」である
この実験でわかったこと。それは、「AIは鏡である」ということです。 使う人間が「曖昧」なら「バグ」を返し、「詳細」なら「機能」を返します。
あなたの会社のことは、あなたが一番知っている
これまでのシステム開発は、外部のSEに高いお金を払って投げしていました。 しかし、外部の人間は「貴社の回線がタコ足配線であること」や「17時に全員が帰ること」を知りません。(確認すればわかりますが・・・・。)
だからこそ、「要件定義(=自分たちの事情を決めること)」が重要なのです。
- 「うちは回線が遅いから、速度より安全性を取ろう」
- 「パートさんが多いから、画面はロックしたほうがいいな」
この「貴社の事情」を知っているのは、SEではなく、現場のあなたです。 AIという「超優秀なプログラマー」が手元にいる今、もしあなたが「要件定義」さえできれば、0円で自社専用の業務ツールが作れる時代が来ています。
AIを使うための「言語化」能力
もし相手が人間なら、「あの人、説明下手だからなぁ」と周りが察して、いい感じに動いてくれるかもしれません。 しかし、PCの向こう側にいるAIは、あなたの言葉しか聞けません。
あなたの指示がふわっとしていれば、AIは迷わず間違った方向に全力疾走します。 逆に言えば、「何を、どうしたいのか」を言葉にする力さえあれば、AIは最強の味方になります。
特別なプログラミング知識はいりません。 必要なのは、「なんとなく」で済ませていた業務の流れを、「まずAをして、次にBをする」と、AIにもわかる言葉に翻訳してあげることだけです。
次のステップへ
もし、「ウチの現場のこの悩み、AIでツールにできないかな?」と思いついたら。 まずは下手な日本語でも、箇条書きでも構いません。 「どういう順序で動いてほしいか」を、私と一緒に言葉にしてみませんか?
AIへの「正しい指示書」を書くプロセスそのものが、あなたの会社の業務を整理し、筋肉質にする第一歩になるはずです。
私は、製造現場の「もったいない」を知るSEとして、その「めんどくさい」に隠された「お宝データ」を発掘し、仕組み化するお手伝いをしています。
「ウチも同じ問題を抱えている」 「何から手をつければいいか、一緒に考えてほしい」
そうお考えの経営者様、ご担当者様。 まずは、あなたの現場の「めんどくさい」を、私に聞かせていただけませんか。
関連記事
