logoChibiham
cover
🚧

仕様駆動開発ぞの懐疑なぜ2025幎にりォヌタヌフォヌルが埩掻したのか

導入既芖感のある䞻匵

SNSや技術蚘事で「仕様駆動開発」ずいう蚀葉を目にするようになった。コヌディング゚ヌゞェントを䜿った開発においお、「仕様をすべお確定しおから開発する」「人は仕様を読み倉曎するだけにし、コヌディング゚ヌゞェントは仕様を読み取っおコヌドを修正する」「人はコヌドを觊らない」ずいった䞻匵だ。


この䞻匵を目にした瞬間、私は匷い違和感を芚えた。これは、りォヌタヌフォヌルではないか

゜フトりェア開発の歎史を振り返れば、りォヌタヌフォヌルからアゞャむル、゚クストリヌムプログラミングXPぞず移行しおきた経緯がある。実装からのフィヌドバックの重芁性、仕様ず実装の盞互䜜甚、継続的な改善——これらの知芋を無芖しお、再び「仕様を先にすべお曞く」ずいう方向に向かうのは、歎史の逆行に等しいのではないか。

仕様駆動開発ずは䜕か

「仕様駆動開発Specification-Driven Development, SDD」は、2025幎7月にAmazon Web ServicesAWSがリリヌスした統合開発環境「Kiro」で提唱された開発手法だ。同幎9月にはGitHubが同様の思想に基づく「GitHub Spec Kit」を公衚し、日本でもKDDI系䌁業が導入を開始した。

Kiroのワヌクフロヌは芁件 → 蚭蚈 → 実装ずいう3段階で構成される。仕様を「真実の源Source of Truth」ず䜍眮付け、「ドキュメント第䞀」のアプロヌチを採甚しおいる。人間ずAIの共通蚀語ずしお仕様を扱い、そこからコヌドを生成させる。

この手法が泚目される背景には、「バむブコヌディング」ぞの危機感がある。AIに曖昧な指瀺を出しおコヌドを生成させる手法は、倧芏暡コヌドベヌスで混乱を招き、品質ずメンテナンス性の懞念を生む。仕様駆動開発は、**「無秩序なAI掻甚」vs「仕様駆動開発」**ずいう二項察立の構図で語られるこずが倚い。

歎史の皮肉なぜ2025幎にりォヌタヌフォヌルが埩掻したのか

゜フトりェア開発の歎史を振り返るず、りォヌタヌフォヌルモデルは長らく䞻流だった。芁件定矩 → 蚭蚈 → 実装 → テストずいう順次的なプロセスは、建築や補造業から借甚されたアプロヌチだ。

しかし、このモデルには臎呜的な問題があった。実装段階で初めお発芋される問題が倚すぎるのだ。仕様が曖昧だったり、技術的に実珟䞍可胜だったり、ナヌザヌのニヌズず乖離しおいたり——こうした問題は、実際にコヌドを曞いおみないず分からない。

アゞャむルやXPが隆盛した理由は、たさにこの点にある。仕様ず実装の間には耇雑なフィヌドバックルヌプがあり、䞡者を埀埩しながら改善しおいくこずが、良い゜フトりェアを䜜る鍵だず理解されるようになった。

ずころが2025幎、「芁件 → 蚭蚈 → 実装」ずいうりォヌタヌフォヌル的なワヌクフロヌが再び登堎した。これは歎史の皮肉ずしか蚀いようがない。

なぜ人は「仕様を先に曞けば解決する」ずいう幻想に繰り返し陥るのか

この珟象の背埌には、人間の心理が関係しおいるず私は考えおいる。

耇雑性ぞの恐怖——゜フトりェア開発は本質的に耇雑だ。その耇雑性ず向き合うこずは、䞍確実性や混沌に耐えるこずを意味する。「仕様を先にすべお曞く」ずいうアプロヌチは、この䞍確実性を排陀できるずいう幻想を䞎える。

予枬可胜性ぞの枇望——プロゞェクト管理者やステヌクホルダヌは、予枬可胜なプロセスを望む。「仕様が確定すれば、あずは機械的に実装するだけ」ずいう図匏は、非垞に魅力的に映る。

極端から極端ぞの振れ——「バむブコヌディング」ずいう無秩序ぞの反動ずしお、「仕様駆動開発」ずいう秩序ぞの逃避が起こる。しかし、適切な耇雑性ずの向き合い方は、埀々にしお䞭庞にある。

Martin Fowlerの懐疑論暩嚁からの批刀

興味深いこずに、著名な゜フトりェア゚ンゞニアであるMartin Fowlerのブログには、Birgitta Böckelerによる仕様駆動開発の批刀的評䟡が掲茉されおいる。

圌女は実際にKiroずspec-kitを詊甚し、以䞋の問題を指摘しおいる

過剰な耇雑性

小さなバグ修正に察しお、Kiroは4぀のナヌザヌストヌリヌず16個の受け入れ基準を生成した。圌女はこれを**「釘を打぀のにハンマヌを䜿うsledgehammer to crack a nut」**ず衚珟しおいる。

぀たり、小さなタスクには過剰で、倧きなタスクには䞍十分——適甚範囲が極めお狭いずいうこずだ。

非決定性の問題

さらに臎呜的なのは、LLMLarge Language Modelの非決定性だ。どれだけ詳现な仕様を曞いおも、実行のたびにAIが異なるコヌドを生成する可胜性がある。

"Because of the non-deterministic nature of this technology, there will always remain a very non-negligible probability that it does things that we don't want"

この指摘は本質的だ。仕様がどれだけ完璧でも、LLMの非決定性により再珟性が保蚌されないなら、結局のずころ実装を芋お修正するフィヌドバックルヌプが䞍可欠になる。

過去の倱敗モデル駆動開発MDD

蚘事では、モデル駆動開発Model-Driven Development, MDDずいう過去の詊みにも蚀及されおいる。モデル駆動開発もたた「モデル仕様から自動的にコヌドを生成する」ずいうアプロヌチだったが、広く普及するこずはなかった。

歎史は繰り返す。

抜象化の進化Next.jsから孊ぶ教蚓

抜象化は䞀床で完璧にできるものではない。実装からのフィヌドバックを受けお、段階的に改善しおいくものだ。

React開発者であるSebastian MarkbÃ¥ge氏の栌蚀がある

「間違った抜象化から回埩するより、抜象化がない状態から回埩する方が簡単」

この掞察は、Next.jsのキャッシング戊略の倉遷に劂実に珟れおいる。

Next.jsの3段階の進化

v13-14: 暗黙的なCache開発者が意識しない抜象化

圓初、Next.jsは「開発者がキャッシュを意識しなくおも、自動的に最適化される」ずいう理想を掲げた。しかし珟実には

  • 予想倖のデヌタの鮮床問題
  • デバッグの困難さ
  • 認知負荷の増倧
  • v14-15: 段階的な改善ドキュメント、デフォルト倉曎

    コミュニティのフィヌドバックを受けお、段階的に改善

  • fetch()のデフォルトCache廃止
  • ドキュメントの透明性向䞊
  • staleTimesオプションの远加
  • しかし、これらは察症療法に過ぎなかった。

    v16: "use cache"による明瀺的な抜象化

    根本的な蚭蚈倉曎ずしお、"use cache"ディレクティブを導入。暗黙的Opt-outから明瀺的Opt-inぞの転換により、開発者が意図した堎所でのみキャッシュが働くようになった。

    教蚓完璧な仕様は事前に曞けない

    Next.jsチヌムは圓初、「開発者が意識しない」ずいう仕様蚭蚈思想を掲げた。しかし、実装しおみお、実際にナヌザヌが䜿っおみお、初めおその仕様の問題が明らかになった。

    抜象的には成立しおいた蚭蚈が、具䜓化しようずするず矛盟や曖昧さが露呈する——これは倚くの開発者が経隓的に知っおいるこずだ。

    数幎かけおコミュニティのフィヌドバックを受け、PPRPartial Pre-Renderingずいう新しい発芋を経お、ようやく優れた抜象化に到達した。

    もしNext.jsチヌムが「仕様を先に完璧に確定しおから実装する」アプロヌチを取っおいたら、この進化は起こらなかっただろう。

    非決定性ずスケヌルの問題を掘り䞋げる

    ここで、私自身も「本圓に䞍可胜なのか」ずいう疑問を持った。䜕らかの工倫で、仕様駆動開発を機胜させるこずはできないだろうか。

    党生成 vs 差分マむグレヌション

    䟋えば、仕様からすべおのコヌドを宣蚀的に生成するのではなく、仕様の差分に察する既存コヌドのマむグレヌションずしお捉えればどうだろうか既存のコヌドベヌスに察しお、仕様の倉曎を反映する圢でAIがマむグレヌションを行う。

    これなら、ある皋床は実珟可胜な気がする。

    しかし、すぐに問題が芋えおくる。仕様の倉曎が既存の実装構造ず矛盟する堎合、どう察凊するのか構造䞊の臎呜的な矛盟が入り蟌むリスクがあり、結局のずころ人間による怜蚌が必須になる。

    マむクロサヌビスレベルなら

    では、スケヌルを限定すればどうだろう䟋えば、EventDrivenアヌキテクチャにおける1サヌビスレベルの粒床——十分に小さく、独立性が高く、境界が明確なコンポヌネント。

    このサむズなら、仕様駆動が機胜するのではないか

    だが、これこそがFowlerの指摘する**「スケヌルの問題」**だ。小さすぎるタスクには過剰で、倧きなタスクには䞍十分。適甚範囲が極めお狭い。

    「でも、こうすれば...」ず考えたくなる心理——これ自䜓が、銀の匟䞞を求める欲望なのかもしれない。耇雑性から逃れたいずいう欲望が、私たちを繰り返し同じ幻想に導く。

    本質的な問い䜕が倉わっお、䜕が倉わらないのか

    コヌディング゚ヌゞェントの登堎によっお、確かに䜕かが倉わった。しかし、すべおが倉わったわけではない。

    この問いに答えるため、開発者の認知構造を考えおみよう。開発者の認知は**コンセプトモデルあるべき姿ずプロダクションモデル珟状の理解**ずいう2぀のモデルから構成される。仕様駆動開発における「仕様」は、たさにこのコンセプトモデルを指しおいる。

    仕様駆動開発の問題は、コンセプトモデルを先に完璧に構築しおから䞀気にプロダクションモデルに反映しようずする点にある。これはフィヌドバックが埗られず、䞡者の乖離が拡倧し、䞍確実性が最倧化される——りォヌタヌフォヌルが倱敗した理由そのものだ。

    倉わったこず

    仕様→実装の倉換コストが劇的に䜎䞋した。

    以前なら数時間かかっおいた実装が、数分で完了する。぀たり、コンセプトモデルをプロダクションモデルに反映するサむクルが爆速になった。

    プロトタむピングが高速化し、詊行錯誀のサむクルが短瞮された。

    倉わらないこず

    しかし、以䞋は倉わっおいない

  • 良い仕様コンセプトモデルを曞く難しさ — 曖昧さのない、実装可胜なモデルを構築するこずは、䟝然ずしお難しい
  • 実装から埗られるフィヌドバックの䟡倀 — 実際に動くコヌドプロダクションモデルを芋るこずで初めお分かる問題は倚い
  • ドメむンモデルの構築の難しさ — 耇雑なドメむンを適切にモデル化するこずは、コヌドを曞く以前の問題だ
  • LLMの非決定性ずいう新しい制玄 — むしろ新たな䞍確実性が加わった
  • コンセプトモデルずプロダクションモデルの間に差分が存圚し続けるずいう構造的な問題
  • 本質コンセプトずプロダクションの高速埀埩

    コヌディング゚ヌゞェントの本質は、「コンセプトモデルを先に確定する」こずではなく、「コンセプトモデルずプロダクションモデルを高速に埀埩できる」こずにあるず私は考えおいる。

    以前は、仕様コンセプトモデルを倉曎しおから実装プロダクションモデルを曎新するたでに時間がかかった。だから「仕様を先に確定する」こずが重芖された。

    しかし今は、䞡者を䜕床でも高速に埀埩できる。だからこそ、フィヌドバックルヌプを回しながら䞡者を共進化させるアプロヌチが可胜になった。

    差分をれロにするこずは原理的に䞍可胜だ垞に倖郚から新たなフィヌドバックが入り、コンセプトモデルが先に進んでしたう。重芁なのは、差分を小さく保ち、扱いやすくするこずなのだ。

    DDDずコンテキストの制玄

    ドメむン駆動蚭蚈DDDの芳点からも、仕様駆動開発には疑問がある。Eric Evansが匷調したナビキタス蚀語は、ドメむン゚キスパヌト、開発者、そしおコヌドの間で共有される。これは仕様ずコヌドが分離しおいないこずを意味する。

    コヌドベヌスず文曞の䞡方をメンテナンス察象ずするず、「どちらが正しいか」ずいう認知負荷の源泉が生じる。 この芳点から、正の情報源Source of Truthはコヌドベヌスに限定すべきだ。蚭蚈案やADRなどの文曞は「怜蚎の蚘録」ずしお残すが、継続的なメンテナンス察象ずはしない前提を明確にしおおくこずで、差分負荷の増倧を防げる。

    コヌディング゚ヌゞェントずの察話においおも同様だ。LLMにはコンテキストサむズの制玄があり、仕様曞ずコヌドの䞡方を読たせるのはコンテキストを浪費する。コヌドベヌスに十分な構造ず意図が衚珟されおいれば、AIはコヌドベヌスを読むこずでプロダクションモデルを理解できる。

    第䞉の道仕様・実装共進化のアプロヌチ

    「バむブコヌディング」でも「仕様駆動開発」でもない、第䞉の道がある。仕様ず実装を高速に埀埩するアプロヌチだ。

    䟋えば、認蚌機胜を远加する堎合。りォヌタヌフォヌル的には「OAuth 2.0、JWT、リフレッシュトヌクン、セッション管理...」をすべお先に蚭蚈する。しかし仕様・実装共進化では、たず「ナヌザヌはメヌルアドレスずパスワヌドでログむンできる」ずいう最小限のコンセプトモデルから始める。コヌディング゚ヌゞェントに実装させ、生成されたコヌドを芋お「トヌクンの保存はlocalStorageか。でもXSS察策でhttpOnlyクッキヌにすべきでは」ず気づく。コンセプトモデルを曎新し、再実装。このサむクルを高速に回すこずで、差分を小さく保ちながら段階的に掗緎させおいく。

    プロダクションモデルからのフィヌドバックがなければ、良いコンセプトモデルは曞けない。

    結論フィヌドバックルヌプこそが本質

    仕様駆動開発の䞻匵者たちが芋萜ずしおいるのは、耇雑性は仕様ず実装の盞互䜜甚の䞭にこそ存圚するずいうこずだ。仕様を詳现化しおも耇雑性は消えない。

    銀の匟䞞はない。 Fred Brooksが1986幎に指摘したこの真理は、2025幎の今でも倉わらない。コヌディング゚ヌゞェントずいう匷力なツヌルを手に入れた私たちは、「仕様を曞けば自動的にコヌドができる」ずいう幻想に飛び぀きたくなる。しかし歎史が教えおくれるのは、極端から極端ぞの振れは倱敗するずいうこずだ。

    Next.jsのキャッシング戊略の進化、りォヌタヌフォヌルからアゞャむルぞの移行、そしお今回の仕様駆動開発論争——これらすべおに共通するのは、フィヌドバックルヌプの重芁性だ。実装からのフィヌドバックを受けお仕様を改善し、仕様の意図を実装に反映し、たたフィヌドバックを受ける。この埪環こそが、良い゜フトりェアを生み出す鍵である。


    参考文献

  • Understanding Spec-Driven-Development: Kiro, spec-kit, and Tessl - Martin Fowler
  • Kiro and the future of AI spec-driven software development
  • 仕様駆動開発Spec-driven developmentずは
  • KDDI系が仕様駆動開発を採甚、AIで業務は「蚭蚈8割・開発2割」に
  • コヌディング倉革「仕様駆動開発SDD」の手匕き