はじめに
これまで開発する際には、AIエージェントに対して実装したい内容を大まかに伝えてコードを生成する、いわゆるバイブコーディングで開発を進めていました。
これは、ここ半年ほど比較的小規模な機能開発やバグフィックスが主なタスクだったため、これでも問題ありませんでしたが、今回、数ヶ月単位の大きめな機能の開発に着手することとなったため、より効率的な手法として、仕様駆動開発(Spec-Driven Development)を試験的に導入してます。
今回は、この仕様駆動開発について概要をまとめました。
仕様駆動開発(SDD)とは
仕様駆動開発(Spec-Driven Development)とは、ざっくり言うと、コードを書き始める前に仕様(Specification)をドキュメントに起こし、それをもとに設計・実装・検証をすすめる開発手法です。
ここで言う仕様とは、ウォーターフォールのような重い要件定義とは別物です。
ここで大事なことは、受け入れ条件、対象外、依存関係、設計上の前提などが事前にチーム内で共有されていることです。
仕様を先に書くメリット
仕様を書くことにより、実装の前に「何をどのように作るか」を明確にすることで、AIが生成するコードのブレを抑え、品質を安定化させることができます。
仕様駆動開発での仕様とは
仕様駆動開発における仕様とは、単なる要件定義や設計書ではありません。
AIへ指示する際の基準となるもので、何を作るか、何故作るかを明文化したものです。
他の開発手法との関係
ここでは、仕様駆動開発と他の開発手法との関係性を見ていきます。
ウォーターフォールとの違い
ウォーターフォールでは、実装の前に要件定義を行ってから設計や開発を行う点で仕様駆動開発と似ていますが、ウォーターフォールでは一度定義した仕様を固定することに対して、仕様駆動開発では開発を通じて気づいたことを元に仕様を継続的にアップデートしてくるという点でことなります。
つまり、仕様駆動開発における仕様とは、あらかじめ定められた設計書ではなく、開発とともに育てていくものとして位置づけられています。
TDDとの違い
TDDはざっくり言うと、事前にテストコードを書いてそのテストをパスするようにコードを書いていく手法です。
TDDはコードが正しく動くかという点に重きをおいているのに対して、仕様駆動開発は何を何故作るかという点に重きをおいているため、より上流の工程に焦点をあてたものになっています。
バイブコーディングとの比較
バイブコーディングはやりたい内容をざっくりとした指示で与えてスピードを重視して開発を行うのに対して、仕様駆動開発では事前に仕様を練ってから開発を行います。
これらは、目的と有効な開発対象がことなります。
バイブコーディングではPoCなどのように初期フェーズで手早く実装してコンセプトを検証するようなケースに向いています。
一方、仕様駆動開発では、すでにリリースされているプロダクトや、要件が固まっているようなケースで効果を発揮します。
仕様駆動開発をサポートするツール
仕様駆動開発をサポートするツールについて紹介します。
Spec Kit
Github Spec Kitは、2025年にGithubが公開したオープンソースのツールキットです。
GitHub Copilot、Claude Code、Gemini CLIなどの複数のAIエージェントと組み合わせて使用することでできます。
仕様の定義からタスクの分解・実装まで一連の流れをサポートしています。
より詳しく知りたい方は、過去に投稿した記事をご覧ください。
Kiro
AWS Kiroは、AWSが2025年にリリースしたエージェント型のIDEです。
要件定義、技術設計、タスク実装の3つのフェーズをIDE上で一貫して進めることができます。
Kiroは特定のクラウドサービスに依存しないスタンドアロン型のIDEとして設計されています。
仕様駆動開発の流れ
仕様駆動開発では、仕様の定義から実装までを以下の4ステップで進めます。
- Requirements(要件定義)
- Design(設計)
- Tasks(タスク分解)
- Implementation(実装)
各ステップの内容について見ていきます。
Requirements(要件定義)
要件定義は、何を作るか(What)、何故作る(Why)かを言語化するステップです。
ここでは技術的な実装方法(How)は定義しません。
Design(設計)
要件をもとにシステムの構造や技術選定を定義するステップです。
技術的な実装方法(How)を具体的に定義します。
具体化する内容の例は以下の通りです。
- 使用言語やフレームワーク
- フォルダ構成
- DBスキーマ
- APIの型定義
逆に書かない内容は以下のとおりです。
- 内部のループ処理
- 条件分岐の書き方
- 具体的なアルゴリズム
実装方法については具体的に決めないでAIに任せるほうが良いです。
Tasks(タスク分解)
設計をもとに実装可能な最小単位のタスクに分解するステップです。
タスクを細かく分けることでAIの生成するコードの精度が上がり、レビューも容易になります。
Implementation(実装)
これまでに定義した、仕様、設計、タスクをもとにAIがコードを生成するステップです。
これらが明確であるほど、AIが生成するコードの品質が安定し、手戻りが少なくなります。
良い仕様書とは
仕様駆動開発では、仕様書の質がコードの品質を大きく左右します。
AIへの指示としての良い仕様書とは、以下のとおりです。
- 何を何故作るかについて詳しく書く
- どう作るかは書き過ぎない
- あいまいな表現を避ける
さいごに
仕様駆動開発について概要をまとめました。