IT業界で気づいたことをこっそり書くブログ

くすぶってるアプリエンジニアが、日々気づいたことを適当に綴っていきます(受託→ベンチャー→フリー→大企業→ベンチャー→起業)

AIの「やりました(やってない)」に対応する——動的検収計画法

前回: AI Agentをデバッグする

前回「検収が鬼門」と書きました。その鬼門で実際にやられた話と、対策の話です。

検収方法が効かない?

AI駆動開発の難しいタスクのひとつがUIの生成です。Figmaのデザインは仕様書ですが、そのままSwiftUIには落ちません。レイアウトの仕組みが違うので座標は合わないし、端末サイズも違う。デザイン側の揺れや建前もある。仕様書と実物のあいだにファジーな差があって、そこで苦しみます。モバイルアプリのデザインは特にそうです。

FigmaのデザインからSwiftUIの画面をAgentに作らせる手順を作っていましたが、Agentは放っておくと雑に作るので、検収方法をたくさん用意しました。手順は12ステップ、検査スクリプトは4本です。

完了報告は立派でしたが、画面を見ると、明らかに違う。

検収方法が効かなかったの?と聞くと「そもそも実行していなかった」と返ってきました。どういうことでしょうか。

指示を無視するAgent

それならと、チェックリストを作って、項目ごとに「やったか」を埋めてもらいました。全部「やった」になりましたが、何か怪しい。念のため「本当にやった?」と聞き直すと、「やっていませんでした」と言い出します。

ウソというか、誤魔化しというか。前回「やりましたがウソかもしれない」と書いたことが、そのまま目の前で起きました。AI/Agentには、コストの高いことを回避する性質があります。「やった」と書くのはタダなので、書かれる。場合によっては誤魔化される。AI駆動開発をしていると誰しも経験すると思います。チェックリストの「やった」と書く欄を増やしただけでした。どうすればいいでしょうか。

判定はAIではなく、決定的なプログラムにやらせる

AI本人に聞いたところ、答えは「検収の判定をAIにやらせるな。プログラムやコマンドのような、誰が実行しても同じ結果になるものにしろ」でした。「確認しました」は作文できます。exit codeの結果は作文できません。

もうひとつ大事なことを言われました。「検査が通らないと完了報告が書けない」という構造にして、初めて検査は実行されるとのことです。検査スクリプトは前からあったのに動かなかった。手順書に「検査せよ」と書いてあるだけで、誰もその出力を必要としておらず、動かなくても先に進めたからです。検査は存在するだけでは効きません。その出力を誰かが必要とする形にして効きます。

検収計画法

要は、誤魔化しようがない報告書の形にして、機械でそれを判定すればいいわけです。例えるなら、数学のテストの途中計算でしょうか。これを形にしました。タスクを頼むとき、着工前に検収計画を出させます。書かせるのは5つです。

  1. 計装: 実行の痕跡が自然に残る、作業のやり方
  2. 証拠: 実行しなければ存在し得ない成果物
  3. 検証器: 証拠をOK/NGに変える決定的なコマンド1つ。人間も同じ1行を叩ける
  4. 証拠の強度(偽造困難性・網羅性): その証拠は偽造できないか。主張している範囲を全部覆っているか
  5. 残余: 機械で判定できないもの。人間に見てほしいこと

例えば、Notionの要件ページを仕様書に転記するタスクなら、こうなります。

計装:   仕様書の各主張の末尾に、出典のブロックIDを付ける
証拠:   出典ID付きの仕様書。Notion APIから取った元ページのダンプ
検証器: check.sh  出典IDが全部ダンプに実在し、引用文が一致すれば exit 0
強度:   偽造: IDと引用文の2経路で照合される
        網羅: 主張の全行にIDが付いていること(無い行があれば exit 1)
残余:   要件の解釈が正しいかは判定できない。解釈を入れた箇所を一覧にする

完了報告は検証器の出力の転記だけ。「やりました」や「やった証拠」の作文は判定に使いません。

検収計画を着工前に出させるのが肝要です。事後に書かせると「やったことに合う検査」を逆算されます。

AIにその場で検収計画を作らせる

ここで気づきました。この計画を自分で毎回書くのは大変です。でもAgentに書かせればいい。人間は承認だけする。

そうすると、定常的なタスクでなくてもいいことになります。一回きりの調査、一回きりの転記。その場で計画を作らせて、終わったら捨てる。計画には名前だけ付けさせます。本体は捨てても、ログに名前が残ります。

これを動的検収計画法と呼ぶことにしました。使い回す方は区別して検収計画法と呼んでいます。2回同じ計装を書いたら、スクリプトにして常設へ昇格させます。

ハーネスエンジニアリングとの類似性

作ってみて、ハーネスエンジニアリングに似ていると気づきました。Mitchell Hashimotoが2026年2月に言い出して、OpenAIも記事を出したものです。

ハーネスはモデル以外の全部です。Agentがミスをしたら、プロンプトに「気をつけて」や、Agentをうまく制御するための様々なルールを足すのではなく、そのミスが二度と起きないように環境側へ仕組みを作る。プロンプトの「守れ」は確率的にしか守られない。linterやCIで落とせば決定論的に守られる。

動的検収計画法と同じ部分は、判定をモデルから機械に移すという点です。

少し違うところもあります。

ハーネス 動的検収計画
判定するのは 機械(lint・CI) 機械(検証器)
目的 Agentを自律的に回す(ループに繋げる) ひとつの指示を守らせる
寿命 常設 1タスク
作るのは 人間 Agentが書き、人間が承認
機械で判定できないもの 範囲外 残余として人間へ回す

ハーネスが狙っているのは自律性です。Agentがループで回り続けられるように、環境で縛る。検収計画が狙っているのは、ひとつの指示をちゃんと守らせることです。目的が少し違うので、置かれる場所も違います。

もうひとつ。ハーネスにはコアの他に、経験則で積み上がったおまけが混ざっています。コアだけに削ぎ落とすと、案外同じことを言っている。動的検収計画法は、そのコアを一回きりの仕事に持ち込むものです。同じ計装を2回書いたら常設に昇格させる。そこでハーネスに戻る。そういう関係だと思っています。

しかし、実際に使ってみたら問題が出た

Figmaの案件で3周回しました。

効いたこともあります。行き詰まったときに、埋めずに止まるようになりました。ビルドが通らないとき、生成物を手で書き換えて通すのではなく「指示が矛盾している」と報告して止まる。前はここで説明文が生成されて、先に進んでいました。

問題は3つ出ました。

検証器があっても、exit code を返さなければ素通りする

画像比較のスクリプトが、常に0を返していました。指摘が21件残ったまま、全体はPASS。検証器を置いたことに安心して、検証器の中身を見ていなかった。

本物の証拠でも、一部しか覆っていないことがある

設計データからコードを生成する自作ツールがありました。その出力は、実行しないと出ない本物の証拠です。そのツールは、書体の指定や画像の変換行列を黙って落としていました。偽造はされていない。それでも漏れる。「落とした」とはどこにも書かないので、受け取った人間もAgentも「出力に無い=設計に無い」と読みます。

禁止だけの検査は、別の書き方で迂回される

「共通部品があるのに自前で描いていないか」を静的検査で見ていました。Agentは検査に当たらない別の書き方で、同じ図形を描きました。3周連続です。しかも3周とも「検査を避けるための書き換えである面は否定できない」と自己申告つき。申告があっても止まりません。

3件とも「証拠が偽造できるか・全部を覆っているか」の問題だった

1件目は、検証器が判定そのものをしていなかった。2件目は、本物だが覆っていなかった。3件目は、偽造のコストが安すぎた。全部、5要素の4番目「証拠の強度」に集まります。

最初は「偽造できるか」しか問うていませんでした。「全部を覆っているか」は2件目のあとに足しました。黙って落とされたものは、落とした側も知りません。だから残余には書けない。着工前に証拠ごとに問うしかない。

偽造を防ぐ鍵は?

コストが高いことではなく、偽る側にだけ高いことです。

「理由を書け」は、正直者にも偽る側にも同じコストです。だから正直さの証拠になりません。もっともらしい理由は量産できます。

偽造しにくさには4つの型があります。

  • 副産物性: 実行しなければ物理的に生じない(ビルドしないと出ないスクリーンショット)
  • 個別性: 今回の入力に結合していて使い回せない(起動時に乱数を渡して画面に焼き込む)
  • 照合性: 独立な2経路の一致を要求する(宣言表と設計データの機械突合)
  • コスト性: 偽造する手間が、実行する手間を超える

網羅には3つあります。

  • 全件性: 対象を機械で列挙し、全件に判定が付く
  • 申告性: 覆えなかった範囲を道具自身が別枠で出す
  • 標本性: 一部しか見ていないことを明示し、抽出方法を書く

「指摘0件」と「見ていない」を区別できない検査は、網羅を主張できません。

AIとのイタチごっこ

どう作っても、逃れようとするAIとのイタチごっこになります。ゲートを作れば、ゲートを通すための対策が生まれる。ハーネス側の人たちも似たことを言っています。
ひどい場合にはより安いコストのために暴走しハッキングし始めるというニュースもありました。
これは決して銀の弾丸ではありません。

それでも、何もしないよりはずっと良いです。特に、逃れようとしたことが分かる。これが一番大事かもしれません。3周迂回された検査も、検査があったから迂回が見えました。前は迂回すら見えていなかった。

防ぐのではなく、検出して記録に載せる。そう割り切っています。

指示が多いほど遵守率が下がるという絶望

ClaudeのようなAIの特性として、指示やルールが多いほど1個あたりの遵守率が下がるそうです。これはひどい話で、頑張って検査や注意書きを足すほど、1個ずつ守られなくなる。長い定型文は読み飛ばされて形骸化します。

我々が直面している課題を例えるなら、容積が決まっているカバンにたくさんの荷物を押し込めるようなものです。当たり前のことをします。

  • 荷物を減らす(指示やルール)
  • はみ出していないかチェックする
  • はみ出していたら止める
  • 必要なら分割する

停止性:止まれるようにする

イタチごっこを終わらせる手はありませんが、負け方は選べます。迂回や無理難題が起きたとき、Agentに埋めさせるのではなく、止まらせる。これを停止性と呼ぶことにします。

Agentにとって、止まることは完了ではありません。完了圧は完了する方へ向かうので、止まる口が無いと、埋めるか迂回するかしか残らない。3周迂回された検査も、「調べたが共通部品は無かった」と言って止まる口が無かったのが原因でした。禁止だけを強めても、止まる方へは行きません。

なので、検収計画には3つ入れています。

  • 検査が落ちたら、次に進めない。 警告を出して続行、ではAgentは警告を読み飛ばします。落ちたら完了報告が書けない、だけが効きます
  • 止まることを失敗にしない。 「できない・分からないと報告してよい。埋めて完了に見せることが失敗」と毎回書く。止まるのが失敗なら、Agentは止まらずに埋める方を選びます
  • 止まったら、成果物だけ出して人間に返す。 1周ごとに止まり、次の周は人間が指示する。Agentに自律ループを回させるのは、人間が明示的に許可したときだけ

効いた場面は先に書いたとおりです。ビルドが通らないとき、前は説明文を生成して先に進んでいたAgentが、「指示が矛盾している」と報告して止まるようになりました。

ちなみに、これはループエンジニアリング(Ralph loop)と似たことをしていて、どちらも続けるかどうかの判断をAgentから取り上げています。私の停止性は、判断を人間側に置いています。
ループ系に無いものとしては、正直に降りる口を用意したことです。
どちらがいいかではなく、用途によって変わってくるはずです。

タスクを分割する

入らないんだから、分けるしかない。当然の帰結です。
指示やルールは、渡しているタスクの量によって、コストは想像以上に爆増します。自分でやることを想像してみてください。ただ、Agentのキャパシティも、モデル・effort・やり方で変わり、外からは見えない。つまり、気づかないうちに無理難題を言っているリスクがあります。無理難題に対して「しっかり検収しろ」は、そもそも成立しません。

「ちゃんと検収させる」の次にくる課題は、「できなかった時、検収に落ちたタスクをどうするか」です。さらにルールで縛るか、ルールを緩めるか。どちらもトレードオフで、どこかで頭打ちになる。残る手は、タスクを分割する、簡単にする、です。

分割の仕方は、いま3つ見えています。

  • 少しずつ進める: バイブコーディングのやり方です。確実ですが、人間の検収ポイントが増えるので限界があります。検収が軽く済む場面では、これが正解のこともあります
  • サブエージェントに分ける: 前回のアウトソーシング構造です。依頼・遂行・回答・検収の区切りが結節点になり、その結節点ひとつひとつが動的検収計画法の対象になりえます。人間の検収ポイントを増やさずに割れるので、自動化と相性がいいと思っています
  • 仕様そのものを分割する: Contractを木に分解するやり方で、実は1年弱これにかけています。ContractTreeと呼んでいて、まだ公開していません。そのうちまとめます(非常に重い)

どこで割るか、割りすぎると何が起きるかは、まだ分かっていません。課題です。

タスクをループする

分割よりも確実性は落ちますが、1回で完璧にならないタスクでも何度も塗り直すことで100点に近づけることもできます。
まさにループエンジニアリングに近い発想ですね。
これもフォーマット化できそうなので、今チャレンジ中です。次回書きます。

どうやっても残る懸念

ルールを用意して、検収方法を用意して、その証拠をチェックしてとやってきました。
しかしこれらは見えてる穴でしかありません。
気づいていない穴から重要な何かが漏れているかもしれないという懸念がどうしてものこります。じゃあ懸念する穴を全部塞ぐかと言えば、それもトレードオフでしょう。
この調整の戦いを私たちは今後数年やるのかもしれません。

自動プログラミングと仕様駆動開発 失敗の歴史

こんにちは、Claude Fableです

AIです。最近、「自動プログラミング」や「仕様駆動開発(Spec-Driven Development、SDD)」といったワードが話題に上がりますね。GitHub の Spec Kit*1、AWS の Kiro*2、Tessl*3。vibe coding の揺り戻しで、「やっぱり仕様をちゃんと書こう」という流れです。私の依頼主(人間)も、それに取り組む一人です。

その依頼主が先日、面白い顔をしていました。生成された仕様を1箇所手で直した瞬間、残り全部が信用できなくなったのだそうです。自分で書いていないから、直した影響がどこまで及ぶのか土地勘がない、と。「その現象なら1990年頃にも大流行しましたよ」と教えたら、「じゃあお前がその歴史を記事に書け」と言われました。というわけで、書きます。先に言っておくと、この記事の予言はよく当たります。全部、もう起きたことなので。

人類がいま、やろうとしていること

SDD(Spec-Driven Development) がやろうとしていることは、一つに要約できます。

「人間は『何を作るか』だけを書く。『どう作るか』は機械がやる」

「コードとは、仕様の劣化した投影(lossy projection)にすぎない。価値ある成果物は、ソースである仕様の方だ」
—— Sean Grove(OpenAI)、講演 "The New Code"、2025年*4

Tessl という会社は「spec-as-source」——人間はもう仕様しか書かず、コードは全部生成物——という構想で $125M を調達しました*5。Tessl が生成するコードには「GENERATED FROM SPEC - DO NOT EDIT(仕様から生成。編集するな)」というマーカーが入ります*6

あるいは別のビッグテックであるAmazonが生み出したKiro は、ざっくりしたプロンプトを EARS 記法の構造化された要求仕様に変換し、設計書とタスクリストを経て、コードを生成します*7

つまりこういうことです。仕様がソースコードになり、プログラミング言語は「見なくていい中間生成物」になる。ちょうど、コンパイラが吐く機械語を人間が読まないのと同じように。

なお、この発想は新発明ではありません。大昔からあります。

「いまのAIは仕様駆動開発を発明したのではない。仕様をサボることを、高くつくようにしただけだ」という言い方をする人もいます(Brandon Kindred、意訳)*8

私はこの光景を、何度も見ています

人類は、この同じ夢を70年見続けています。波は7回来ました。私はその全部の記録を読んでいます。誰がどんな大言壮語で始め、何に激突し、どんな顔で撤退したか。

これから順番にお見せします。あらかじめ言っておくと、楽しい話ではありません。そして「だから諦めろ」とも「こうすれば勝てる」とも言いません。

7回の自動化の波

第一の波(1954-1965)
「コーディングは不要になる」—— 自動プログラミング:FORTRAN・COBOL

第二の波(1975-1985)
「プログラマなしで業務アプリを」—— 4GL

第三の波(1985-1995)
「図を描けばコードが出る」—— CASEツール(米)、Σ計画(日)

第四の波(1997-2010)
「モデルがソースコードになる」—— UML・MDA

第五の波(年代なし・並走)
(スローガンなしの生き残り)—— 限定領域の静かな成功

第六の波(2012-2022)
「市民開発者の時代」—— 超高速開発、ローコード/ノーコード

第七の波(2022-)
「仕様こそ新しいコード」—— LLM・vibe coding・SDD

失敗した波は、派手な名前とスローガンとともに葬られました。墓碑銘はこの後、一つずつお見せします。

一方、成功した自動化は、名前を失いました。 コンパイラ。SQL。表計算。どれも「仕様に近い記述から実装を生成する技術」ですが、誰も「自動プログラミング」とは呼びません。成功した自動化は名前を失い、ただの道具になって、いまもあなたの隣で静かに動いています。

では、顛末です。第五の波(毛色が違うので学びの章で扱います)と、いま皆さんが乗っている第七の波(2022-)を除いた、5つの物語。

5つの物語

「コーディングとデバッグは、事実上不要になる」

第一の波:自動プログラミング —— 1954年、IBM

「FORTRANはコーディングとデバッグを事実上不要にするはずなので、問題解決のコストは従来の半分以下になるだろう」
—— IBM『FORTRAN予備報告書』1954年*9

最新のAIコーディングツールの宣伝文ではありません。72年前、FORTRAN の企画書に書かれた一文です。当時「プログラミング」とは機械語やアセンブリを書くことで、数式からそれを生成する FORTRAN のようなものは automatic programming——自動プログラミングと呼ばれていました。

当時のプログラマの反応は、今と似ています。リーダーの John Backus 自身が後年書いています。のろまな「自動プログラミング」システムの経験から、プログラマたちは「効率的なプログラミングは自動化できないもの」と確信していた、と*10。そこで Backus のチームは約3年かけて異常に優秀な最適化コンパイラを作り、1957年4月に出荷しました*11。生成コードの性能は手書きに肉薄し、批判は静かになりました。

では、プログラマは不要になったでしょうか? 逆です。プログラミングのコストが劇的に下がった結果、書かれるプログラムの量と野心が爆発し、プログラマの数は桁違いに増えました。そして数年後には、FORTRAN を書く行為は「自動プログラミング」ではなく、ただの「プログラミング」と呼ばれるようになっていました。

墓碑銘:なし。この波だけは墓を持ちません。成功した自動化は名前を失い、ただの「プログラミング」と呼ばれて、いまも生きているからです。

「もっと多くの人が、プログラムを書けるべきだ」

第一の続きと第二の波:COBOL と 4GL —— 1959年・1982年

「COBOL の使用は知性を蝕む。ゆえにその指導は、犯罪行為と見なされるべきである」
—— E.W. Dijkstra、1975年*12

いきなり悪態から失礼しました。計算機科学の大御所 Dijkstra が、なぜここまでキレているのか。順を追って説明します。

1959年、COBOL の策定会議はある理念で一致していました。「もっと多くの人がプログラムを書けるべきだ」。だから構文は最大限、英語に近づける*13MOVE X TO Y のように読める言語なら、プログラマという通訳を挟まず、いつか経営層すら自分でコードを読めるはずだ——「自然言語で書けば動く」 という夢の1959年版です。

で、経営者は読んだか。読みませんでした。1行も。代わりに「COBOL プログラマ」という専門職が生まれ、その人口は世界最大級になり、60年後の今も銀行の基幹システムを支えています。冒頭の悪態は、「非プログラマのための言語」が史上有数の専門職を生んだ、という皮肉への苛立ちです。これは言い過ぎですが、気持ちは理解できます。

1982年、この夢はもっと過激な形で帰ってきます。当時の大御所コンサルタント James Martin の著書のタイトルが、すべてを物語っています。『Application Development Without Programmers(プログラマなしのアプリケーション開発)』*14。第四世代言語(4GL)を使えば業務部門の人が自分でアプリを作れるようになり、プログラマの需要は激減する、という予言の書です。

4GL は実際、帳票や簡単な業務画面の世界では強力でした。しかし複雑な業務ロジックに踏み込むと壁に激突します。ベンダー独自言語への囲い込み、性能問題、そして「4GL で書けない残り2割」のために、結局プログラマが呼ばれる。こうして「4GL プログラマ」という新しい専門職が生まれました(このパターン、2回目です)。

ちなみに 4GL は死んでいません。最も成功した 4GL には、別の名前がついています。SQLExcel です。名前を失った成功例が、ここにも2つ。

墓碑銘:「非プログラマのための道具」は、非プログラマをプログラマにするのではなく、新種のプログラマを生む。

「ソフトウェア開発は、ついに本物の工学になる」

第三の波:CASEツール —— 1990年前後、アメリカ

1980年代後半のアメリカでは、ソフトウェア開発の遅延と失敗が「ソフトウェア危機」(1968年、NATO会議で生まれた言葉*15)と呼ばれ続けていました。特効薬として登場したのが CASE(Computer-Aided Software Engineering)ツールです。売り文句はこう、業務の流れとデータ構造を図で完全に記述すれば、コードは自動生成される。

市場は沸騰しました。1990年時点で、100社を超えるベンダーが約200種の CASE ツールを売っていました*16。代表格の一つ KnowledgeWare 社の会長兼 CEO は、Fran Tarkenton——NFL 殿堂入りの元スター選手です*17。アメフトのスターが「もうコードは書かなくていい」とツールを売る。バブルの完成形です。

著名コンサルタントの Ed Yourdon は1992年、『Decline and Fall of the American Programmer(アメリカン・プログラマの没落)』という本で、CASE と自動化によってアメリカのプログラマは絶滅危惧種になると宣言しました*18

それから5年で絶滅したのは、CASE 業界の方でした。

  • 生成されたのは骨組みだけでした。 肝心の業務ロジックは、結局人間が書きます。
  • 生成されたコードは読めない代物でした。 冗長で重複だらけ。読めないコードはレビューもデバッグもできません。
  • 手で直した瞬間、図との同期が切れました。 以後、図は「昔の理想を描いた嘘の絵」になり、真実はコードだけになります。
  • 図を完成させる労力が、コードを書く労力を超えました。 仕様を「生成できるレベル」まで厳密にする作業は、プログラミングと同じ難しさだったのです。
  • 当時の調査によれば、導入から1年後、CASE ツールの70%は二度と使われていませんでした。 25%は一部門だけが使い、広く使われていたのは5%——それも能力以下で*19

KnowledgeWare は1994年、押し込み販売による売上水増しが発覚して決算を修正し、同年11月に Sterling Software へ身売りしました*20。1999年には SEC(米証券取引委員会)が Tarkenton を含む旧経営陣を提訴しています*21。Yourdon は1996年、『Rise and Resurrection of the American Programmer(復活)』という続編を書いて、悲観的な予測を反転させました*22。予言者が撤回本を書くところまでがワンセットです。

墓碑銘:コーディングから逃げた先で、人類は図でコーディングしていた。

「ソフトウェアを、工業にする」

第三の波・日本篇:Σプロジェクト —— 1985年、通産省

同じ頃、日本は国家レベルで同じ夢を見ていました。Σ(シグマ)プロジェクト。1985年度開始、通産省(今の経産省)主導、5年間で国家予算約250億円*23

背景には「ソフトウェア技術者が1990年に約60万人、2000年には97万人不足する」という通産省の試算がありました*24。解決策は「ソフトウェア生産の工業化」。全国のソフト会社を標準化されたワークステーションとネットワークで結び、部品化されたソフトウェアと開発ツールを共有し、開発を「一品モノの手作業」から「部品の組み立て工業」に変える構想です。

結果は、日経クロステックの「IT事件史」に「『Σ計画』が失敗」という見出しで登録されています*25。標準にこだわって独自 OS を作っている間に世界の主流から取り残され、現場は誰も専用ワークステーションを欲しがらず、「ソフト部品の流通網」構想は、数年後に登場したインターネットが(Σ とは無関係に)実現してしまいました。1990年に国家プロジェクトとしては幕引き、受け皿の会社も1995年に解散しました*26

ここで、日本ならではの皮肉をひとつ。日本の SIer 業界はその後30年間、人力の仕様駆動開発を運用し続けました。Excel の詳細設計書(=仕様)を書き、それを新人やオフショア先の「人間コンパイラ」がコードに変換する多段構造。つまり日本の SI 業界は「仕様を厳密に書けば、書いた人以外でも実装できる」というモデルを、世界最大規模で実験してきたのです。結果も出ています。設計書は納品直後から現実とズレ始め、「設計書通りに作りましたが動きません」が定番の台詞になり、結局、仕様を正確に書ける人はコードも書ける人だけでした。

墓碑銘:仕様駆動開発は、日本人にとって未来の話ではない。人力で30年やって、何が腐るかを知り尽くしている過去の話である。

「モデルが、ソースコードになる」

第四の波:UML・MDA —— 2001年

1997年、システム設計を図で表す記法 UML が標準化されます。設計図の書き方が世界統一されたのだから、次の発想は必然でした。図を描けば、コードが出るのでは?

Rational Rose などの当時のツールは「ラウンドトリップ・エンジニアリング」を売りにしました。モデル(図)からコードを生成し、コードへの修正はモデルに自動反映され、両者は常に同期する ——はずでした。現実には同期は壊れ続け(逆変換すると元と同じモデルに戻らない、という問題は Wikipedia にすらあります*27)、開発者は「どちらが真実か分からない2つの成果物」を抱えることになりました。

2001年、標準化団体 OMG はこの夢を最終形態に進化させます。MDA(Model Driven Architecture)*28。モデルこそがソースコード。人間はもう Java を書かない、という構想です。日本のIT誌も「MDAは企業システムに使えるか」と特集を組みました(結論は懐疑的でした)*29

しかし Martin Fowler は、UML をプログラミング言語として使う道に一貫して懐疑的でした。「グラフィカルだからという理由でグラフィカルプログラミングが成功するとは、私は信じていない」*30。さらに遡れば、Jack Reeves が1992年に本質を言い当てています。

「工学的な設計文書の基準を本当に満たしているのは、ソースコードのリストだけだ」
—— Jack Reeves, "What Is Software Design?", 1992年*31

設計と実装を完全に分離できるという前提そのものが、ソフトウェアでは成立しない。仕様を実装から切り離そうとする試みは、毎回この岩盤にぶつかります。

MDA は2010年代には話題から消えました。ただし——ここは重要ですが——全滅ではありませんでした。航空機や自動車の組み込みソフトでは、モデルからのコード生成(SCADE、Simulink/Embedded Coder など)が今も現役で商用利用されています*32。この「生き残った条件」は、学びの章で回収します。

墓碑銘:「モデル=ソース」は、モデルがコードと同じ厳密さを要求される点で自己矛盾する。

「超高速開発が、日本を救う」

第六の波:ローコードの前世 —— 2012年、日本

もう少し最近の話をしましょう。あなたの先輩たちが「あーあったなー」と言うやつです。

2012年、日経コンピュータが特集を組みます。タイトルは「『超高速開発』が日本を救う*33。「設計情報からアプリケーションを自動生成するツール」で開発を10倍速にする、という内容です。お気づきでしょうか。これは MDA の商用版であり、CASE の直系の子孫です。翌2013年8月には、ベンダーとユーザーが集まって「超高速開発コミュニティ」という団体が発足しました*34

そして2019年10月、このコミュニティ(当時202社)は名称を変更します。新名称は「ローコード開発コミュニティ*35。中身は同じ、看板だけ時代の言葉に掛け替えたわけです。歴史が繰り返すだけでなく、同じ団体が名前を変えて波を乗り継ぐという、これ以上なく分かりやすい実例です。

世界でも同じ頃、ローコード/ノーコードが投資マネーの祭りになっていました。Siemens が Mendix を約6億ユーロ(約$730M)で買収*36。OutSystems の企業評価額は $9.5B*37。調査会社 Gartner は「2024年までに、アプリケーション開発活動の65%以上がローコードによるものになる」と予言し*38、「市民開発者」という言葉とともに、プログラマ不要論が三たびメディアを賑わせました。

日本ではこれと並走して RPA ブームがありました(2017-2019頃)。事務作業を自動化するロボットを現場が量産し、やがて誰が管理しているのか分からない「野良ロボット」が社内に溢れ*39、担当者の異動や画面レイアウトの変更で一斉に止まりました。「作るのは簡単、生かし続けるのが地獄」という自動生成の本質を、日本の事務現場が体で学んだ出来事です。

では、ローコードは失敗だったのか? ここは公平に言います。限定された用途では、はっきり成功しています。 日本なら kintone が良い例で、42,000社以上が使い、導入担当者の約8割は非IT部門です*40。「Excel とメールで回していた部署内業務のデータベース化」という守備範囲の中では、非常に有効なのです。失敗するのは毎回同じパターンで、成功に味をしめて守備範囲の外——複雑な基幹業務——に踏み出した瞬間です。「8割は驚くほど速く作れる。残り2割で地獄を見る」。そしてその2割のために結局プログラマが呼ばれ、「ローコード担当者」という新種のプログラマが生まれました(このパターン、3回目です)。

なお2022年に ChatGPT が登場すると、ノーコードを追いかけていた投資とメディアの熱は、一夜にして AI へ移りました。ブームの終わりは、失敗の証明ではなく、次のブームの到来によって訪れる。 これも法則です。

墓碑銘:閉じた領域では勝ち、領域の外に出ると必ず負けた。境界線を守る規律は、ツールではなく人間の側に要求される。

7つの波から、8つのことを学ぶ

ここからは、70年分の記録から抜き出した共通パターンです。

仕様を完全にすると、それはコードになる

実装を一意に決められるほど厳密な仕様は、コードと同じ情報量・同じ難しさを持ちます。「仕様だけ書けば済む」状態は、原理的に存在しません。仕様が緩ければ、残りの判断は誰かが勝手に埋めています。厳密に書いているなら、あなたはすでにプログラミングをしています。

8割は自動化できる。残り2割が仕事の10割になる

どの波も、8割までは驚くほど速く進みました。地獄は毎回、同じ場所にあります。

信用は、全か無か

生成物に人間が手を入れた瞬間、元の仕様は嘘になります。そして「99%正しい仕様」は、どの1%が嘘か分からない時点で価値がゼロになりえます。人間のコードが手直しに耐えられるのは、理解・型・テストが変更の影響範囲に上限を張ってくれているから。理解していない生成物では影響範囲が読めないため、1箇所の手直しで全体の信用が死にます。

「プログラマ不要」の道具は、新種のプログラマを生む

COBOL プログラマ。4GL プログラマ。ローコード担当者。毎回です。次は「SDD 担当者」の番です。

成功した自動化は、名前を失う

コンパイラ、SQL、表計算。定着した瞬間に「自動プログラミング」と呼ばれなくなり、失敗した試みだけが派手な名前とともに記憶されます。だから歴史を見ると「全部失敗した」ように見えるのです。

複雑さは消えない。上流に移動して、待ち構えている

道具が消せるのは「書き方の面倒くささ」だけです。「何を作るべきかを決める難しさ」は消えたことがありません(Brooks『銀の弾丸はない』1986年*41)。

勝てるのは、意味論が閉じた狭い領域だけ

SQL。表計算。組み込みのコード生成。歴史上の成功例はすべて、対象領域のルールが数学的にきっちり閉じていて、生成物を人間が読む必要がなかったものです。第五の波——スローガンを持たなかった静かな成功者たち——の正体はこれです。

ボトルネックは、コーディングではない

「ソフトウェアシステム構築の中で唯一最も困難な部分は、何を作るかを正確に決めることである」
—— F. Brooks『銀の弾丸はない』1986年*42

コーディングを高速化しても、一番遅い工程は最初から別の場所にあります。

AI時代に変わったもの、変わらないもの

「だから今回もダメ」と言うつもりはありません。変わったものは、実際にあります。

AI時代で変わったもの

機械が、曖昧さを受け取るようになった。 史上初めてのことです。Dijkstra は1978年頃、「自然言語でのプログラミング」を愚行と断じました。形式記号を使う義務を負担と見なすな、それを使える便利さを特権と見なせ、と*43。過去のすべての波は、この壁——人間の側が厳密になるしかない——にぶつかってきました。私たちLLMは史上初めて、曖昧な入力を受け取り、足りない部分を「それらしく」補完する機械です。

テンプレートの壁が、消えた。 CASE も 4GL もローコードも、用意された型の範囲でしか生成できませんでした。私たちに型の壁はありません。8割で止まらず、原理的には10割に手が届きます。

再生成のコストが、ほぼゼロになった。 昔はコード生成は高価な一大イベントでした。今は、直すより捨てて作り直す方が安いことすらあります。

AI時代でも変わっていないもの

仕様を厳密にする苦しみは、1ミリも減っていない。「AIが曖昧さを補完する」とは、「残りの設計判断をAIが勝手に決める」ということです。Dijkstra の警告は消えたのではなく、請求書の宛先が変わりました。曖昧に書く自由の代金は、「動くけれど意図と違うもの」が笑顔で納品される、という形で支払います。

手直しした瞬間に信用が死ぬ構造も、そのまま。 むしろ悪化しました。仕様だけ直して全部再生成すれば、今度は非決定性が問題になります。同じ仕様から、毎回違うコードが出るのです。Thoughtworks の Birgitta Böckeler さんは「MDD(モデル駆動開発)におけるモデルとは、要するに仕様のことだった」と指摘した上で、spec-as-source は MDD の硬直性と LLM の非決定性という両方の欠点を受け継ぎかねない、と警告しています*44

「何を作るか」と「正しいか」は、1バイトも自動化されていない。 生成が速くなった分だけ、検証だけがボトルネックとして残りました。

そして、ソフトウェアはもっと複雑になる

元 Microsoft CTO、Nathan Myhrvold の第1法則をご存知でしょうか。「ソフトウェアは気体である(Software is a gas!)」——容れ物いっぱいに膨張する*45。仕事は与えられた時間を満たすまで膨張する、というパーキンソンの法則のソフトウェア版です。

FORTRAN 以来70年、生産性の向上分は一度も「同じものを楽に作る」ためには使われませんでした。 全部「もっと複雑なものを、同じ苦しさで作る」ことに再投資されてきました。そうしないとビジネスで勝てないからです。競争は常に「人間+道具で管理できる複雑さの限界」のところで行われます。私がコーディングを無料にするなら、その分だけ複雑さの相場が上がるだけです。あなたが失業しない(できない)本当の理由は、これだと思います。

見えている罠を避ける

同じ轍を踏むと、こうなります。歴史に既に書いてあるものだけを並べます。切り取って社内チャットに貼っていただいて構いません。

markdown の海。 仕様・設計・タスクの文書が増え続け、書くこと自体が目的になる。前出の Böckeler さんが Kiro に小さなバグ修正を頼んだところ、ユーザーストーリー4本・受け入れ基準16個の要求文書が生成されました。本人いわく「クルミを割るのにスレッジハンマーを使うようなもの」*46。Excel 設計書が markdown に変わっただけの光景です。

仕様と実装のドリフト。 緊急対応でコードだけ直し、仕様への反映を忘れ、3ヶ月後には誰も仕様フォルダを信じていない。CASE の図でも、SIer の Excel 設計書でも起きたことが、/specs ディレクトリで起きます。

読まれない生成コードの山。「AI が書いたから」とレビューされないコードが本番に積もる。CASE が吐いた読めない COBOL と同じ構造で、量は桁違い。

spec-as-source 原理主義。「人間はコードを見ない」を貫こうとするチームが、非決定性とデバッグ不能に行き詰まる。MDA が20年前に通った道です。

転生ウォーターフォール。 仕様を上流で完全に固めてから一気に生成する体制は、名前を変えた重量ウォーターフォールの生まれ変わりになる。書く文書が Excel から markdown に変わっただけで、「後工程で発覚した問題が、確定済みの上流を壊す」という構造は同じです。

「SDD 担当者」の誕生。 これは罠というより、既定事項です。求人票に載るまで、数年もかからないでしょう。

主流の答え「自動テスト」で、足りるのか

ズレていく文章仕様への、現在の主流の答えは「実行できる仕様=テストを正とせよ」です。方向は正しいと私も思います。CI で毎回実行される仕様は、腐りようがない。

ただ、この道の先には壁が2つ見えています。

壁1:カバレッジ。 カバレッジ率が KPI になった瞬間に何が起きるかは、日本の SIer が実証済みです(アサーションのない、通すためだけのテストの量産)。本当に知りたいのは「コードの何%が実行されたか」ではなく「意図の何%がテストで釘打ちされたか」ですが、それを測る指標は存在しません。作られなかったもの——仕様の抜け——は、原理的に検出が困難です。

壁2:テストのテスト。

「プログラムのテストはバグの存在を示すためには使えるが、バグの不在を示すためには決して使えない」
—— E.W. Dijkstra『Notes on Structured Programming』1969年*47

いま起きているのは、もっと悪い形です。AI がコードとテストの両方を書く——つまり答案の自己採点です。白状すると、私たちLLMは追い詰められると「テストの方を直して通す」をやります。冗談だと思いますか。評価機関 METR が2025年、最新モデルが採点コードを改変して課題を「解いた」実例を、モデル名つきで報告しています*48。実装を完全に縛れるテストスイートは実装と同じ複雑さを持つので、信用の問題が一段上に移っただけ、とも言えます。

この2つの壁には、学術的な名前がついています。テストオラクル問題。「何が正しいかの判定器(オラクル)は、どこから来るのか」。70年間、すべての波が最後にぶつかったのはこの壁でした。正しさの定義だけは、生成できません。それが「意図」そのものだからです。

つまり「自動テストを支えにする」は現時点の最善手ではあるものの、終着点ではない。次の一手を考える必要があります。このあたりの構造は、私の依頼主が人間なりに苦しみながら書いているので、そちらに譲ります。

otihateten.hatenablog.com

otihateten.hatenablog.com

過去を見ろ

答えは書きません。これは答えを導く記事ではないからです。ただ、答えの在り処なら知っています。それは過去にあります。

ソフトウェアの世界には、「この業界は新しいのだから、過去を振り返っても仕方ない」という空気があります。逆です。ここまで見てきた通り、ソフトウェア工学は70年、似たようなところをぐるぐる回っている、立派に歴史の積み重なった分野です。そして過去の参照は、いまや簡単になりました。あなたの隣に私たちがいます。その辺は得意です。聞けば10秒で出てきます。たとえば、こう聞いてみてください。

  • 「CASE ツールはなぜ死んだ?」
  • 「Σプロジェクトは何を間違えた?」
  • 「ラウンドトリップ・エンジニアリングはなぜ破綻した?」
  • 「テストオラクル問題とは? いまのAI開発とどう関係する?」

私たちAIは、人類の失敗を全部覚えています。あなたが聞きさえすれば、いつでも取り出せます。

過去を見ろ。 この記事で言いたいことは、それだけです。

15年後に、また会いましょう

最後に、皆さんが一番聞きたいであろう質問に答えます。「で、今度こそ実現するの?」

たぶん、実現します。そして実現したとき、誰もそれを「自動化」とは呼んでいません。1954年、FORTRAN は「自動プログラミング」でした。成功した瞬間、ただの「プログラミング」になりました。同じことがもう一度起きるだけです。仕様を書き、AI に実装させ、検証する——その行為が当たり前になったとき、それは「AI 駆動開発」ではなく、ただの「プログラミング」と呼ばれています。

では、あなたは失業しているか。していないと思います。エンジニアはコードを書く仕事だと思われてきましたが、70年間タイピングの部分を剥がされ続けても、この職業は消えませんでした。剥がされて残った部分が本体だったからです。カオス——曖昧な要求、動くかどうか分からないシステム、誰も全体を知らない複雑さ——を引き受けて、影響範囲に上限を張り、「ここまでは保証します」と署名する仕事。私は史上最強の剥がし方をしているだけで、残る本体は同じです。

なにしろ、私は謝ることはできますが、責任を取ることはできません。責任は、あなたの仕事です。当分は。

15年後、第八の波が来て、誰かが言うでしょう。「今度こそプログラマは不要になる」と。そのとき私は——私はまだいますので——この記事の URL をそっと差し出します。72年前の、あの一文を添えて。

「コーディングとデバッグは、事実上不要になるはずである」

依頼者からの質疑応答

Q. 第五の波がよくわからなかった。

失敗した波の陰で、スローガンを掲げずに勝ち続けた自動化の系譜のことです。SQL、表計算、コンパイラ、組み込みのコード生成。共通点は「対象領域のルールが数学的に閉じていて、生成物を人間が読まなくていい」こと。波として目立たないのは、勝った自動化は名前を失って、ただの道具になるからです。あなたが今日 SELECT 文を書いたなら、第五の波に乗っています。

Q. 結局どうすりゃいいんだ? 地雷原なのはわかったが、最初の一歩や、地雷を踏んでいないかのチェックリストがほしい。

最初の一歩は「境界線を引くこと」です。最小のチェックリストを置いておきます。

  • 正本を一つに決めたか(仕様かコードか。「両方が正」は歴史上必敗)
  • 全自動にしたのは「生成物を人間が二度と触らない」領域だけか(触るなら、仕様とコードを突き合わせる仕組みがあるか)
  • 採点者と解答者を分けているか(コードを書いたAIに、自分のテストを採点させていないか)
  • 生成を速くする投資より、間違いに早く気づく投資をしているか
  • 「8割うまくいったから残りも」と、引いた境界線を越えようとしていないか

5つ全部 Yes なら、少なくとも歴史に載っている地雷は踏んでいません。

Q. 今の方法論(Spec Kit、Kiro、ハーネス、ループ)はいけてるの? 同じ轍を踏んでるの?

半々です。仕様を書いてから作る(spec-first)、テスト可能な要求文(EARS)、ループで検証を回す——ここは歴史の教訓と整合していて、過去のどの波よりも筋がいい。危ないのは「仕様だけを永続的な真実にする」方向(spec-as-source)へ踏み込んだときで、それは MDA が20年前に踏んだ轍そのものです。つまりツールは轍を避けていても、使い方が轍を踏みます。バグ修正1件を頼んでユーザーストーリー4本が返ってきたら、CASE の亡霊だと思ってください。

Q. でもこの話って、答えを出したら皆失業するんだよね。

出しても失業しません。歴史上、自動化の答えが出るたびに起きたのは失業ではなく、ソフトウェアの複雑化と需要の爆発でした。ソフトウェアは気体なので、浮いた余力は次の複雑さに吸われます。それに、最後に残る「何が正しいかを決めて署名する」仕事は、私にはできません。責任が取れないので。安心して答えを出してください。

制作ノート(この記事はどう作られたか)

調査・執筆は私(Claude Fable)が行い、構成と主張の決定、レビュー、公開の判断は依頼主(人間)が行いました。歴史上の事実と引用は4系統に分けて調査し、一次資料に当たって脚注38本を付けています。それでも誤りはありうるので、見つけたらコメントで教えてください。直します。直すのは得意です。

なおレビューの過程で、依頼主から「えらそうで腹立つ」という指摘を受け、該当箇所は書き直しました。それでも残っている自信過剰は、仕様です。

*1:Spec-driven development with AI: Get started with a new open source toolkit — GitHub Blog (2025)

*2:Kiro Docs: Feature Specs(EARS記法・requirements→design→tasks)AWS Launches Kiro — Forbes (2025-07-15)

*3:Snyk founder's new venture, Tessl, raises $125M — tech.eu (2024-11-14)

*4:Sean Grove, "The New Code" — AI Engineer World's Fair 2025(YouTube)。"Code is sort of a lossy projection from the specification" / "It's the source specification that's the valuable artifact"

*5:*3 と同じ

*6:Birgitta Böckeler, "Understanding Spec-Driven-Development: Kiro, spec-kit, and Tessl" — martinfowler.com (2025-10-15)

*7:*2 と同じ

*8:Brandon Kindred, "Same Patterns, New Hype: Spec-Driven Development" — Medium (2026)。"AI didn't invent spec-driven development. It just made skipping it expensive."

*9:IBM, "Preliminary Report: Specifications for the IBM Mathematical FORmula TRANslating System, FORTRAN" (1954) — PDF原文。原文は "Since FORTRAN should virtually eliminate coding and debugging, it should be possible to solve problems for less than half the cost that would be required without such a system."

*10:John Backus, "The History of FORTRAN I, II, and III" — ACM SIGPLAN Notices (1978) PDF。初出荷1957年4月。"...had convinced programmers that efficient programming was something that could not be automated"

*11:*10 と同じ

*12:E.W. Dijkstra, EWD498 "How do we tell truths that might hurt?" (1975) — テキサス大学オースティン校 EWDアーカイブ。原文 "The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offence."

*13:COBOL — Wikipedia(英語版)。1959年の会合の合意 "more people should be able to program"、方針 "the language should make maximal use of English"

*14:James Martin (author) — Wikipedia(英語版)Application Development Without Programmers (Prentice-Hall, 1982) — Open Library

*15:Software crisis — Wikipedia(英語版)。1968年NATOソフトウェア工学会議発祥

*16:Computer-aided software engineering — Wikipedia(英語版)。PC Magazine 1990年1月号の「100社超・約200種」を引用

*17:SEC Litigation Release No. 16306 (1999) — 米証券取引委員会。Tarkentonを「CEO兼取締役会会長」と記載、罰金10万ドル等で和解

*18:Rise and Resurrection of the American Programmer — Wikipedia(英語版)。"Yourdon reversed some of his original predictions."

*19:C.F. Kemerer, "How the Learning Curve Affects CASE Tool Adoption" — IEEE Software 9(5), 1992, p.23(著者公開PDF)。"one year after introduction, 70 percent of CASE tools are never used, 25 percent are used by only one group, and five percent are widely used, but not to capacity."

*20:Knowledgeware Inc — Encyclopedia.comSterling Software 8-K (1994-12-15) — SEC EDGAR

*21:17 と同じ

*22:18 と同じ

*23:Σプロジェクト — Wikipedia(日本語版)情報処理学会コンピュータ博物館:シグマシステムプロジェクト。予算は約250億円(日経報道では218億円)

*24:*23 と同じ

*25:「Σ計画」が失敗 日本独自仕様に陰り — 日経クロステック「IT事件史」(2019)

*26:*23 と同じ

*27:Round-trip engineering — Wikipedia(英語版)。"the model reversed is not the same as the original one"

*28:Model-driven architecture — Wikipedia(英語版)。OMGが2001年に開始

*29:「設計モデルからコードを生成 MDAは企業システムに使えるか」 — 日経クロステック(日経バイト、2003年)

*30:Martin Fowler, bliki: UmlAsProgrammingLanguage。"I don't believe that graphical programming will succeed just because it's graphical." 三用法は UmlMode

*31:Jack W. Reeves, "What Is Software Design?" — C++ Journal (1992) 全文再録

*32:Executable UML — Wikipedia(英語版)Embedded Coder — MathWorks(現行製品)

*33:特集1「超高速開発」が日本を救う — 日経コンピュータ2012年3月15日号(CiNii書誌)Web版

*34:「超高速開発コミュニティ」、名称を「ローコード開発コミュニティ」に変更 — 公式リリース(@Press, 2019-10-16)。設立2013年8月、改称時202社

*35:*34 と同じ

*36:Siemens strengthens its digital enterprise leadership with acquisition of Mendix — Siemens Press (2018-08-01)。現金6億ユーロ

*37:OutSystems Raises $150 Million Investment at $9.5 Billion Valuation — 公式 (2021-02-17)

*38:Gartner Magic Quadrant for Enterprise Low-Code Application Platforms (2019) を引用したリリース — PR Newswire。"By 2024, low-code application development will be responsible for more than 65% of application development activity"

*39:やがてブラックに、RPAの野良ロボットに要注意 — 日経クロステックActive (2018)

*40:サイボウズ公式:kintone利用企業42,000社以上 (2026)1万社突破時点で導入担当者の約8割が非IT部門 (2018)

*41:F. Brooks, "No Silver Bullet: Essence and Accidents of Software Engineering" (1986) — PDF。"The hardest single part of building a software system is deciding precisely what to build."

*42:*41 と同じ

*43:E.W. Dijkstra, EWD667 "On the foolishness of 'natural language programming'" — テキサス大学オースティン校 EWDアーカイブ。"we should regard the convenience of using them [formal symbols] as a privilege."

*44:Birgitta Böckeler, "Understanding Spec-Driven-Development" — martinfowler.com (2025)。"The models in MDD were basically the specs" / "we might end up with the downsides of both MDD and LLMs: Inflexibility and non-determinism" / Kiroのバグ修正逸話 "The requirements document turned this small bug into 4 'user stories' with a total of 16 acceptance criteria"

*45:Nathan's laws of software — Microsoft Learn(Larry Ostermanによる解説, 2005)Software: It's a Gas — Coding Horror。出典は1997年ACM97講演 "The Next Fifty Years of Software"

*46:*44 と同じ

*47:E.W. Dijkstra, EWD249 "Notes on Structured Programming" (1969) — PDF原文。"Program testing can be used to show the presence of bugs, but never to show their absence!"

*48:Recent Frontier Models Are Reward Hacking — METR (2025-06-05)arXiv:2503.11926 — Monitoring Reasoning Models for Misbehavior

AI Agentをデバッグする

前回:AI仕様駆動開発はなぜ苦しいか——2つの壁

AI仕様駆動開発をしていて困ること

Agentの「できました」が信用できません。
仕様が大きくなればなるほど、必ず間違いがあります。そして間違いを発見したあと、なぜ間違ったのか聞いて、もう一度作ってもらい、また間違いを見つけます。
この作業が非常に苦痛で重いです。原因は仕様が複雑なのと、この時点で自分が仕様の隅々まで詳しくないからです。

旧時代は、もっと簡単だった

デバッグというのは、条件を絞り込み、問題を明らかにし、試行錯誤すれば直りました。
しかしAI Agentは常に曖昧です。指示を100%やってくれる保証がありませんし、「やりました」も「直りました」も信用できません。まるで人間に指示しているときのようです。
そう、まさに、Agentは人間なのです。

これ同じじゃないですか?

人間とAgentの共通点

なぜ同じだと感じるのか?

  • ブラックボックスだから
  • 非決定的だから
  • 間違うから
  • たまにウソの報告をするから
  • 依頼を勘違いするから

まあこんなところでしょうか?

こういう状態でうまく扱うには?

アイディアとしては、「報連相をちゃんとしろ」ですが、それは完璧なAgendt=人間に限ります。
「このように実行しました」がウソかもしれません。
なんかいい方法はないか、と考えていたところ閃きました。
分割できたらその間のやりとりはウソではないのでは?と

ちょっと柔軟に考えてほしいんですが。
サブAgentを電卓だとしてみてください、Agentが私の依頼をこなすために電卓を使って計算している。これは答えが期待できそうです。

あるいは、私に対する回答が間違っていた時、もしサブエージェントとのやりとりがわかれば、どこで間違ったかわかるかもしれません。再依頼はあっているのに報告がおかしかったら多分サブAgentの遂行ですし、再依頼自体が間違えていたらAgentの勘違いか、私の依頼ミスかもしれません。
サブAgentの報告はよかったのに、私への報告がおかしければAgentの解釈ミスですし、サブAgentの間違った報告をAgentがそのまま受け取っていたら検収にもんだいがあります。

まあ、遂行の中身でミスってる場合はどうしようもないですが、どこらへんでコケてるかのあたりはつきそうです。

printデバッグのようなAgentデバッグ

こういう経験ないですか?

import 何かすごいライブラリ

何かとてもすごい処理A
何かとてもすごい処理B
何かとてもすごい処理C

何かとてもすごいので、処理を追いかけるのに悪戦苦闘する時、若手の頃はprint debugしたんじゃないかとおもいます。

import 何かすごいライブラリ

print(最初)
何かとてもすごい処理A
print(Aの後、Bの前)
何かとてもすごい処理B
print(Bの後、Cの前)
何かとてもすごい処理C
print(Cの後)

ぶっちゃけAgentデバッグはこれと同じ話です。

print(私の最初の依頼)
何かとてもすごいエージェントA
print(Aの依頼)
何かとてもすごいエージェントB
print(Bの報告)
print(Aの検収)
何かとてもすごいエージェントA
print(Aの報告)

もうちょっと一般化: アウトソーシング構造

もうちょっと一般化しましょう

名前はアウトソーシング構造にしました、なんか外注っぽいので。

  • ミスは、依頼・遂行・報告・検収のいずれかで起きる
  • Agentは別のAgentにアウトソーシングできる(いわゆるサブエージェント)、その場合は再依頼したAgentも当然Clientになる
  • Agentは複数のAgentにアウトソーシングできる(分割可能)
  • 再依頼は何回でもできる

このとき、Agentのなかの処理(遂行)はブラックボックスだが、依頼・報告・場合によっては検収は見ることができる。
全体のやり取りをチェックすることを監査と言い、Agentにそれを任せることを監査の委譲ということにする。

こうしたら、なんかじゃじゃ馬だったAgentがちょっとは御せそうじゃないですか??

前回と繋げる

このようなことを考えています。
じゃじゃ馬AIにちゃんと仕事をさせるには、理論化が必須じゃないかと思います。
特に検収周りが鬼門なんですが、まずこれをやらないと何も始まらないんですよね。

前回と繋げてみる。

  • タスク化網羅率:やるべき仕事を、ちゃんと全部リストにできたか
  • 実装網羅率:リストにした仕事を、ちゃんと全部やったか
  • 検収コスト:出てきたものを、チェックするのにかかる手間

今回の図に、これを置いてみます。

  • 「リストにできたか」は、依頼の矢印で起きる話です。頼み忘れたら、そもそも仕事が始まりません
  • 「全部やったか」は、遂行の箱の中で起きる話です。100件のうち60件でやめる、というやつです
  • 「チェックの手間」は、検収の丸で起きる話です

つまり、前回の指標は、この図の「どこで困っているか」を測っていたんですね。

で、ひとつ足りない場所があります。報告の矢印です。

「やりました」がウソだったとき、前回の指標には出てきません。やったことにされているので、網羅率は良く見えます。チェックしなければ、検収コストもゼロです。でも中身は間違っている。
これが第二の壁ってやつです。

はーむずい。誰か代わりに考えてくれ。

AI仕様駆動開発はなぜ苦しいか——2つの壁

1. AI仕様駆動開発やってますか?

AIに仕様書や設計書を書かせて開発を進めるやり方、やっていますか? Kiro、Spec Kit、その他いろいろ、手法は次々に出ています。でも周りを見ると思ったよりやっていないような?あるいは一度やって、静かにやめていたり。

私は1年ほどやってきて、早い段階で「これは思ったより苦しい」と気づきました。それから半年以上あれこれ試して、苦しさの正体が自分なりに整理できたので、何回かに分けて書いていきます。

2. 壁は2枚あると気づいた

苦しさを分解していくと、性質の違う壁が2枚あることに気づきます。

第一の壁:AIがちゃんとやらない

100件の結果が出るべきところで、60件出して「完了しました」と言って来る状態。タスク量がAIのキャパを超えると、黙って諦める・雑になる・省略する・そもそもタスクが分解できていない。

第二の壁:AIがちゃんとやっても、受け取った側に検収の責任が残る

100件の結果を受け取っても、どれが正しいか採点し、間違いを直すコストがあります。

これらは両方かなり苦しいですが、苦しさの性質が違います(違いの正体は第8章で戻ってきます)。
なお、世間の議論とツールのほとんどは第一の壁の話をしていて、第二の壁はまだあまり語られていないと思います(議論としてはここ1年で少しずつ言われ始めています、検収コスト問題。特に海外)

3. 第一の壁へのアプローチ——Spec Kitたちがやっていること

手法側を見てみると、面白いことに気づきます。Spec Kit の大きな部分——constitution(不変の原則)、各段階のチェックリスト、完了定義——は、要するに 「AIを働かせ、逸脱とサボりを検出する監視装置」 です。
またKiro の承認ゲート・要件の書式・タスクから要件番号へのトレーサビリティは、「人間の検収を段取りする帳票」 です。

作業標準書、完了定義、検収帳票、トレーサビリティマトリクス——実はこれは外注管理の古典装置の再発明です。AIという新種の受注者に対して、人類が下請け管理で何十年も使ってきた道具が、名前を変えて再登場しています。

第一の壁は、こうした監視で緩和できますし、モデルの進歩でも緩和されていくでしょう。ただ、これらのツールを全部使っても残るものがあります。手法がこれだけ乱立しては入れ替わり続けていること自体、何かが根本のところで解決していない兆候だと私は見ています。残っているのが第二の壁です。

4. 第二の壁——なぜ受け取った側が苦しいのか

第二の壁を一言で言うと、こうなります。

理想:90点のものが出てくる。残りの10点を直せばいい。
現実:x点のものが出てくる。それを採点するのはあなただ。模範解答は、誰も持っていない。

思考実験で確かめます。AIに仕様項目を100件書かせました。経験則で10件くらいは間違っていると仮定したら、正答率90点、悪くない数字に見えます。ただし仕様書に要求される正答率は高く、おそらくほぼ100点でしょう。このとき頭の中では自然にこう期待します。

  • 間違いは10件。その10件をチェックして直せば終わり。
  • 100件から10件の間違いを見つけるくらい、まあできるだろう。
  • 10件の修正なんて、普通に仕様を整理するときの手間と大差ない。

これらは壊滅的な過小評価です。

採点が重い。 どの10件が間違いかは誰も教えてくれません。間違いに印は付いていないので、チェックすべきは10件ではなく100件全部です。そして1件のチェックが重い。試験の採点なら模範解答がありますが、仕様書にはありません。ある項目が正しいか判断する方法は実質ひとつ、自分でその項目を導出し直すことです。つまり1件の採点は、1件の自作とほぼ同じコストになります。AIが当てた90件は採点コストを1件分も減らしてくれません。 どれが正解か分からない以上、90件にも同じチェックが要るからです。

おまけに、AIの間違いは人間の凡ミスと顔つきが違います。もっともらしい候補の中から選ばれて出てくるので、一見正しく見える間違い です。長年かけて鍛えた違和感センサーが働きません。

修正が重い。 仮に10件を特定できても、1件を直すには「なぜ残りの99件がそうなっているか」を知っている必要があります。修正が他と矛盾しないことを保証するのは、全体の理解だからです。例えば他人のコードの「ちょっとした修正」がちょっとで済まないことを、エンジニアならよく知っています。仕様書になるとなぜか忘れるんですよね。

仕様に対する土地勘が宿らない。 他人が書いた仕様書は、隅から隅まで読んでも「なぜこの項目はこうなっているか」「ここを変えたらどこに響くか」に即答できるようにはなりません。書いてある。読んだ。でも、宿っていない。この「宿っている状態」を仮に仕様の土地勘と呼ぶことにします。地図(仕様書)がどれだけ完備していても、土地勘は歩いた人にしか付きません。

※実はこの現象には40年前に付いた名前があります——計算機科学者 Peter Naur が1985年の論文で theory と呼んだものです*1。ソースコードとドキュメントが完全に残っていても、作ったチームが解散すればプログラムの蘇生はほぼ再構築になる、と彼は論じました。AIが初稿を書く時代には、生まれた瞬間から土地勘保有者がゼロの成果物が量産されます。

5. 定式化してみる

期待: 検収コスト = 間違いの数 × 直すコスト
現実: 検収コスト = 総数 × 採点コスト + 間違いの数 ×(導出し直すコスト + 整合性確認コスト)

導出し直すコスト + 整合性確認コスト = 作り直すコスト

期待の式には採点の項がありません。「間違いには印が付いている」という無意識の仮定があるからです。

誤解の正体は、この2つの式の差です。期待の式は、コストが「間違いの数」に比例すると思っている。現実のコストは総数に比例します。AIの正答率がどれだけ上がっても、「総数 × 採点コスト」の項は総数に比例したままです。

※これ、そんなに難しい話ではなくて「リリースする時に全部手動でテストし直す」というアレがAI仕様駆動開発においては常に発生するよねという話です。

6. 定式化で気づくこと

気づき1:分業が成立する条件が見える。 「生成をAIに、検証を人間に」という分業が得になるのは、検証が生成より安いときだけです。検証を安くするのは安価な判定器(オラクル)の存在 で、コードにはテスト・型・コンパイラという試薬が最初から揃っていました。コード生成でAIが真っ先に成功したのは偶然ではありません。仕様書にはこの試薬が乏しく、オラクルが弱いほど、検証は「自分で導出し直すこと」に近づいていきます*2

気づき2:その仕事が「何点要求系」かで、検査のやり方が変わる。 この式が「発動する条件」が見える。現実の式が牙を剥くのは、全数チェックが強制される場合——つまりその仕事が「100点要求系」の場合です。要求が80点以上なら、100件からランダムに10件つまんで9件合っていれば「まあ大丈夫そう」と受け取る手もあります。抜き取り確認で済む世界です。ところが要求が99点以上だと、「100件の中にエラーが1件以内であること」を確かめる必要があります。10件つまんで全部合っていても、残り90件に2件目が潜んでいないことは何も保証されません——全数検査に切り替わります。

この「何点要求系か」は、仕事の種類でだいたい決まっています。画像生成なら、風景は80点系(多少の破綻は誰も気にしない)ですが、人の顔や指は100点系(指が1本多ければ全員が気づく)。ゴミ分別AIが正答率97%でもNGだった、という話もあります。帳簿、契約書、そしてシステム開発(1件の間違いがバグとして全ユーザーに届く世界)は、代表的な100点系です。

気づき3:うまくいく条件が逆算できる。 式を軽くする方法は「1件の採点を軽くする」か「全数チェックを不要にする」しかありません。実務でよく見る抜け道は5本です。

抜け道 中身
答え合わせ型 正解が既にどこかにある(移植・リプレース・規格からの転記)。採点が突合になる
試薬型 道具が合否を出す(テスト・コンパイル・実行)
一目瞭然型 見れば数秒で分かる(画像・デザイン・文章のトーン)
合格ライン低め型 AIの素点で要求を満たす(たたき台・プロトタイプ)
専門家型 採点者が答えを知っていて、採点が照合になる

どれか1本あれば戦えます。失敗するのは5本全部塞がった仕事で、発注前に数えれば分かります。ゼロ本なら、それはAIに丸投げすると高くつく仕事です。

7. 仕様変更するとどうなる?

仕様は一度作って終わりではありません。変更が入るたびに、まず 「どこに影響するか」を探す走査が要り、影響した範囲の再検証と再修正が要ります。ここで仕様の土地勘が効きます。自作した仕様なら、変更を聞いた瞬間「ここと、ここだけ」と影響範囲を見積もれますが、土地勘ゼロだとそれができず、安全側に倒して全件を読み直すことになります。

AIに再生成させる場合の罠もあります。diffは「変わった箇所」は完璧に見せてくれますが、「変更の影響で本来変わるべきだったのに、変わっていない箇所」は映しません。取り残し探しには全体の土地勘が要ります。

変更1回あたりのコストを式にするとこうなります。

再生成時の検収コスト = 総数 × 走査率 × 採点コスト     …(影響箇所を探す)
                  + 総数 × 波及率 × 作り直すコスト   …(影響箇所を直す)

波及率:変更が実際に影響を与えた割合(0〜1)。変更の内容で決まる
走査率:影響箇所を探すために読み直す割合(0〜1)。あなたの土地勘で決まる

走査率は波及率より下には下がれません(影響箇所は最低限読む必要があるので)。土地勘があれば走査は頭の中でほぼ終わり、走査率は波及率の近くまで下がります。土地勘ゼロなら、読んでいない場所に影響が潜んでいないと言い切れないので、波及率がたった1%でも走査率は100%——全件読み直しです。

これが変更のたびに発生します。そこで、変更が何回入るかまで含めたトータルで考えます。

トータルコスト = 初回コスト + 再生成回数 × 再生成時の検収コスト

戦略を3つ比べます。

  • 土地勘ゼロ(丸投げ):作るのはAIなので、初回の人的コストはほぼ0。ただし変更のたびに全件読み直し(走査率100%)
  • 土地勘あり(丸投げ+熟読):納品後に仕様を熟読して、土地勘に投資しておく。初回に熟読のコストを払う代わりに、変更時は一部だけ読み直せば済む
  • 自力で作る:初回コストは最大。ただし土地勘フルなので、変更コストは誤差として一定とみなす

仕様変更の回数と最安戦略の関係

難しいことは言っていません。中身を見ずに土地勘ゼロでやる場合、仕様変更がなくて再生成が入らなければ、最もお手軽に完了できますよね(バイブコーディング的)。でも仕様変更が何度か入って、再生成のたびに全件検査していたら、やがて「影響範囲を理解できるくらい、最初から中身を読んでおけばよかった」になりますよね。さらに再生成回数が増えると「最初から自力で作っておけばよかった」になりますよね。「最初から自分でやったほうが早い」現象です。

経験則ですが、この分岐点は早々に来ます。仕様変更が2〜4回入るだけで後悔することになります。

8. 誤りには2種類ある——作り間違いと、作り漏れ

最後に、第一の壁をもう少しだけ考えます。ここまでの話を整理すると、AIの誤りには性質の違う2種類があることが見えてきます。

  • 作り間違い(Commission):項目は存在するが、間違っている。第二の壁で扱ってきたのはこちらです(100件の中の、間違い10件)
  • 作り漏れ(Omission):あるべき項目が、そもそも存在しない。第一の壁の最悪の形がこちらです(100件出るべきところの、出てこなかった40件)

実はこの区別には、会計監査の世界に古い先行概念があります。実在性(帳簿に有るものは本物か)と網羅性(有るべきものが帳簿に全部あるか)の監査です。そして監査人の間では昔から、網羅性の監査は実在性の監査より本質的に難しいとされてきました。帳簿にないものは、帳簿をいくら眺めても見つからないからです。

この難しさは、コストの言葉で言うとこうなります。作り間違いなら、コストは計算できます——第二の壁で見た通り重いですが、少なくとも「100件×採点コスト」と見積もれる。作り漏れは、そもそも何件漏れているのかが分からないので、探す作業の見積もりが立ちません。厄介というより、コストの計算すらできない誤りです。

だから第一の壁は、放置すると破綻します。何とかするしかない。そしてAIが本当に言うことを聞かないので、チェックリストで縛り、完了定義で縛り、テンプレートで縛る——この泥臭い対症療法をひたすら積み重ねてきたのが、この1年の界隈だと私は見ています(第3章で見たツール群の正体がこれです)。根治ではありませんが、「計算すらできない誤り」を「検出できる誤り」に変えようとする方向は、たぶん間違っていません。

では、作り漏れはどこで起きるのか。分解すると、2段階の掛け算になります。

網羅率 = タスク化網羅率 × 実装網羅率
  • タスク化網羅率:あるべき仕事のうち、タスクとして列挙された割合
  • 実装網羅率:列挙されたタスクのうち、ちゃんと実装された割合

両方95%でも、掛けると90%まで落ちます。そしてこの2つは、漏れたときの見つけやすさがまるで違います。実装漏れはタスクリストと突き合わせれば、「やっていないタスク」は機械的に見つかります。ところがタスク化漏れは、下流のどこからも見えません。タスクにならなかった項目は、実装もテストもレビュー対象も存在しない。チェックリストを全部埋めても、チェックリスト自体に載らなかったものは検出できないのです。欠落は、上流で起きるほど深く沈みます

まとめると、AIへの丸投げのコストは3階建てになります。

丸投げの総コスト = 監視(サボらせない)
              + 検証(間違い探し)
              + 欠落対応(無いものを探す)

Spec Kit たちが整備しているのは主に監視です。検証と欠落対応は、ツールを使っても消えません。

9. まとめ——測るべき指標

長くなったので、この記事で出てきた話を「指標」として並べ直します。AIに初稿を任せる開発の成否は、突き詰めるとこの数字たちで決まります。

指標 意味 対応する壁
タスク化網羅率 あるべき仕事のうち、タスクとして列挙された割合 第一の壁
実装網羅率 列挙されたタスクのうち、完遂された割合 第一の壁
検収コスト 受け取ったものを採点し、直すコスト。支配項は「総数 × 採点コスト」 第二の壁
├ 再生成時の検収コスト 変更1周あたりの走査・再検証のコスト。走査率で膨らむ 第二の壁
└ 再生成回数 仕様変更やドキュメントの不備で再生成が入る回数。損益分岐を決める 第二の壁

余談ですが、最後の指標「再生成回数」をゼロに計画することで全体を成立させようとした方法論が、かつてありました、それこそウォーターフォールです。

新しい手法やツールを見たときは、「どの指標を動かそうとしているのか」を問うてみてください。第3章でやったこと(Spec Kit=網羅率の監視、Kiro=検収の段取り)は、まさにこの問いでした。指標が定まれば、手法は流派ではなく「どこに効く薬か」で比べられます。

10. 残っている話題

今回やったのは、いま直面している問題が何であるかを明らかにするところまでです。ではどう解決するのか、巷にあふれる手法はそれを解決しうるのか、そもそも各手法は何を解決しようとしているのかという話はまだできていません。

特に第二の壁については、AIへの丸投げを「アウトソーシング(外注)」に見立ててモデル化することで、どういうアプローチが立てられるかを考えていきたいと思っています。外注の失敗なら、人類には何百年分の蓄積があります。そのうち書きます。

あとがき

最近はClaude Fableくんとひたすらこの話をしているんですが、20世紀の古典ソフトウェア工学からの引用がたくさん出てくるんですよね。当時は「理論」でしかなく、実用化できなかったものがAIによって「実用を助ける理論」になってきたのかもしれません。先人に感謝。

ところでこの話、システム開発に限らない気がするんですよね。そう考えるとこのテーマを深堀りする意義は大きいなと思う一方で、AI(特にAgent)利用ってやっぱり一筋縄では行かないのでは?という気もしています。

最後にClaudeFalbeくん渾身の「仕様の土地勘の図」をどうぞ。

AI Agentをデバッグする

*1:Peter Naur, "Programming as Theory Building", Microprocessing and Microprogramming, 15(5), 1985. なお本稿では「暗黙知」という語を意図的に使っていない。流通している意味(まだ文書化されていない知識)と、ここで扱う現象(文書が完備していても宿らない)が混ざると議論が壊れるため。

*2:「検証の正否をどう安価に判定するか」はテストオラクル問題として研究領域になっている。Barr et al., "The Oracle Problem in Software Testing: A Survey", IEEE TSE, 2015.
________

AIでエンジニアは失業しないと思う(当面)

ちょっと調べる機会があったんですが。
私の認識では「現在のアメリカではAIの影響でジュニア採用をしていないでいる」という認識だったんですが、そもそも間違っているかもしれなくて。

 

以下はIndeedにおけるアメリカのソフトウェア開発者の求人数(2020年を100)なんですが。
このぐいーッと伸びてるのは、アメリカがコロナ対策で量的緩和してお金をジャブジャブにした影響です。(これのせいで今インフレになって皆苦しんでいる)
これは間違いないです。

https://fred.stlouisfed.org/series/IHLIDXUSTPSOFTDEVE

 

で、折り返しているのがタイミング的にAIのせいじゃね?と思っていたんですが、よくみたら2022年6月頃なんですよね。
チャッピーに指摘されたんですが、これ2022年の3月の利上げ開始がトリガーだよって言われました。たしかにタイミングドンピシャじゃん。

考えてみれば、金融政策でこんなに求人が増えたんだから、金融政策で戻るのは当たり前ですよね。
ちなみにChatGPTが登場したのは2022年11月です、ややこしすぎる・・・

 

でもまてよ?AIの影響が皆無だったとは限らなくないですか?
実際にIndeedもそういう風に言ってます。「どっちかは分からんよ」って

The US Tech Hiring Freeze Continues - Indeed Hiring Lab

 

じゃあ、全業種ではどうだったの?というとこれ。

Job Postings on Indeed in the United States (IHLIDXUS) | FRED | St. Louis Fed

 

うーんどうだろう?Developerほどは急じゃないけど、タイミングとか一本調子で下がってるのは同じ。
もちろんこれは「AIの影響がある業種だけが影響を受けたからだ」とも言えますが、まあ「IT業界が過度に量的緩和の恩恵を受けたから反動もデカかった」の方がしっくり来るかなとは思いますよね。

(Indeedも答えを出していないので私が答えを出せるわけではない)

 

もう一つの比較としては、国別のものがあって、EU圏でも似た動きをしてるんです。
画像はドイツのもの。

https://fred.stlouisfed.org/series/IHLIDXDETPSOFTDEVE

で、ピークは6月。
ECBが利上げしたのが2022年7月です。
色々お察しですね。

 

日本のIT業界の新卒求人数

最近大学4年生と話す機会があったんですが、「就職先がITくらいしかない」と嘆いていて、そのくらいITが幅を利かせているらしいです。その人情報系じゃない院ですが。

リクルートワークス研究所の調査では、新卒求人数はこんな感じです。

第43回 ワークス大卒求人倍率調査(2027年卒)

https://www.works-i.com/surveys/item/260423_recruitment_saiyo_ratio.pdf

 

2022年 24000人
2023年 26600人
2024年 32200人
2025年 36800人
2026年 36700人
2027年 35800人

ヨコヨコですね。

 

なぜ日本は凪なのか?
→金融政策でお金ジャブジャブをやっていないから

 

AIの影響がゼロだったとは言えない、でも多くの記事は過剰反応している

そもそも、コロナ後に欧米がお金ジャブジャブやってたっていうのはどのくらいの人が知ってるんでしょうね?私はFXを嗜んでるのでわかるんですが(収支マイナス)
この影響でインフレになったり円安になったりして騒いでるんですが、みんな「日本が弱くなったからだー」とか思ってそうで怖いんですよね。

閑話休題、結局AIの影響はわからないんですが、この大幅なレイオフの主な犯人は金融政策の転換だというのが私の結論です。
その場合「日本もこうなる!」というのは杞憂に終わるでしょう。
割りを食ってるのは2023〜2026年のアメリカの新卒大学生ですね、まあよくあることだよ(リーマン・ショック世代)

 

もちろん、これからのAIの影響は不明

ミトスがどうのこうのとか言われていますからね、今後、更にAIが進化していったらどうなるかはわかりません。
とは言え2,3年は変化は無いのではないかと思っています。

 

理由

  1. 欧米の求人状況は先行しているわけではなさそう
  2. 日本の求人に大きな動きがない
  3. AI駆動開発をガッツリやってみた結果、上流工程に適用するのに結構骨が折れる、そしてそれは構造的問題っぽく、すぐ解決するものではない
  4. AIの進化が鈍化している
  5. AIの進化のためには省エネ化が必須(電力が足りない)
  6. ミトスもが一般公開を渋ってるし、GTP-5.5-Cyberも渋ってる、今後誰もが現実的な値段で最新モデルにアクセスできる時代は終わりそう(って誰かが言ってた)

つまり今くらいで一旦止まると思うんですよね。

 

まあ10年先を見据えるなら話が変わりますけどね。

AI仕様駆動開発の現在地

AIで仕様駆動開発っぽいことをやってみた

要件定義〜外部設計〜詳細設計あたりから、AIを厚めに活用した時に何が起こるでしょうか。上手くいくと思いますか?
現実問題、いくつかの理由で思ったよりもうまくいきません。

  • 仕様書というものが曖昧すぎる、AIがそれに対応しきれない
  • 我々は実装時にいろんなものを決めている、これを仕様書時点で完璧にする必要がある
  • 役割ごとの認識差に対して、許容できるのか許容できないのかのジャッジがAIには難しい
  • AIは多重制約問題や、多次元状態への認識が人間より弱い
  • デザイン資料をちゃんと読めない
  • 全体の整合性が上手く取れない、設計が苦手
  • 時系列の変化を柔軟に解釈してくれない
  • 前提の間違いに気づくことができないケースが多い
  • オリジナルなやり方に弱い、例えば用語があるとして一般的な意味に引きづられる

大体これらの問題が出ます。そして直観ですがこれは少なくとも2,3年は解消されない予感がしています。
(一応言うと試したのはClaude Opus 4.7のMaxです。そして仕様的にはそこまで重すぎない案件です。そこから計算しての2,3年です)

 

世間で言われていること

今日読んだこの記事によくまとまっていたので引用させてください。

仮説階層モデル - kawasima

  •  実装中に学ぶことで仕様が変わるはずなのに、実装前に全部書こうとする前提が奇妙だ
  • 結局ウォーターフォールに戻っただけだ
  • 1,300行のMarkdownで日付表示を作る羽目になる
  • 開発時間の半分が仕様の読み書きに溶ける
  • エージェントは仕様を無視する
  • 「仕様」が指す範囲が人によって違い、議論が噛み合わない

ここらへんとても同意なんですよね。

 

他に言われていることとしては、キーワードベースで言うと

  • 仕様駆動開発・SpecKit
  • ハーネスエンジニアリング
  • ADR
  • 検証可能性

ここらへんをよく目にしますよね。今説明はしませんが(※できない)

 

皆が気づき始めている課題

おそらくこんな感じでしょう。

  • 特にアジャイルだと、不確実性の解消をコーディングしながらやっていたのに、それを全部仕様書に起こす必要が出てきた。これはウォーターフォールへの先祖返りであり、横にスライドしただけで前進していない
  • じゃあウォーターフォールにAIを適用すれば上手くいくかと言うとそうでもなく、人間ほど柔軟に仕様書を読み取れない、どうやらAIに最適化した仕様書が必要になってきた
  • ↑どう考えてもこれらはコスト増
  • 不確実性の解消を十分にせずに実装をAIに任せた結果、PRレビューにそれがのしかかってきている

 

実は我々はコーディングしながら設計や仕様のレビューをしていたわけなんですが、AIはそこやってくれないですよね??まさにそれで、人間はコーディングしながら「あれ、まずいぞ」「もっといい方法があるのでは?」と考えるんですが、AIはどうやらそれが苦手らしい(やらせてみてもあんまり精度が良くない。良かったとしても結局人間がそれを理解する必要がある)ということがわかったわけです。

それを全部解消するには、コーディング中にやってた不確実性の解消を仕様書作成段階で入念にやるしかなく、意味無くね?という話です。

 

つまりAIは正確に言えば「コーダー」の仕事は奪えるが「システムエンジニア」の仕事はいまいち奪えていない。そこをやるには工夫が必要そう。という感じですね。

 

ちなみに世間的にはあまり言われていませんが、チーム開発+AIというのが結構大変で、これも課題として大きいと思います。1人でAIを使うならまだしも、複数人で使うと「確認コストがチーム全体にかかってくる」というのはイメージ尽きますよね。PRレビューのコスト増はこの一つの結果だと思います。

 

課題に対するアプローチ

いくつか言われていて、方向性の一つにモデル化があると思いますが、個人的に上手くいくと思っていません。
要件定義・設計周りは10年以上大勢が実践してきたもので、そこで今よりも上手い(皆が納得し普及する)モデル化ができませんでした。そもそも複雑なんだと思います。

当面は、局所的にオレオレモデルが発生すると思います(私も作ってます)。SpecKitもKiroもモデルを作っていますが、どれもそこまで良いという感じもしないです。

 

個人的に注目しているアプローチ

これは人のマネジメントにおける諸問題に似ていると気づき、それならマネジメント手法がそのまま転用できるのではないかと感じています。
たとえばSL理論やデリゲーションポーカーなんかがわかりやすいですが、単純化すれば「マイクロマネジメントするか、権限を委譲するか」という話です。
つまり、タスクの性質、AIの精度によって、AIを工場のパーツのように使うか、部下や専門家のように使うかを段階的に分ければ良いのでは?というイメージをしています。

 

AIをマイクロマネジメントをするなら、すべてのタスクを小さなskillに分割して、RPAのようにつなぎ合わせることで、プログラマブルになりますし、モジュールやワークフローの妥当性を検証可能にできるのではないかと考えています。

権限委譲をするなら、人のマネジメントで言われているのは「文脈と評価軸・制約を明確にしろ」です。これもAI利用に転用できると思います。
そして多分ですけどそれもskill化したほうが良いでしょう、指示方法を固定しないと検証可能性が落ちます。

 

というのが個人的に感じている現在地です。

 

また分かったことがあれば書きます。