SpecKitで始める仕様駆動開発(SDD)入門:開発の「ズレ」をなくし効率を最大化する

AI AI
AI

「APIの仕様が変わったのに、フロントエンドに伝わっていなかった」「実装してみたら定義書と型が微妙に違う」……。

チーム開発において、APIの仕様と実装の「ズレ」は、生産性を著しく低下させる要因となります。こうした課題を根本から解決するのが、仕様を開発の中心に据える仕様駆動開発(Specification-Driven Development: SDD)です。

本記事では、エンジニアの利便性を追求したツール「SpecKit」を使い、どのように仕様定義からコード生成、テストまでを一貫して効率化できるのかを解説します。初級者の方にもわかりやすく、現場で使える知識を凝縮してお伝えします。

AI時代の仕様駆動開発(SDD)とSpec Kitの正体

「コードの前に仕様を書く」ことの真価

AIコーディングエージェント(GitHub Copilot, Claude Code, Cursorなど)の普及により、コードを書くスピードは劇的に向上しました。しかし、曖昧な指示でコードを生成させると、意図しない実装や技術的負債が生まれる「Vibe Coding(雰囲気でのコーディング)」に陥りがちです。

これを解決するのが、GitHubが提唱する Spec Kit を使った仕様駆動開発(SDD)です。

Spec Kitとは?

Spec Kitは、AIが迷わずに高品質なコードを出力できるよう、「仕様(何を・なぜ)」をエンジニアリングプロセスの中心に置くためのツールキットです。

最大の特徴は、以下の厳格なワークフローを強制する点にあります。

  1. Specify(仕様化): 実装詳細は無視し、ユーザー体験と成功基準を定義。
  2. Plan(計画): 使用する技術やアーキテクチャ、データ構造を決定。
  3. Tasks(タスク分解): 実装可能な小さなタスクに切り分ける。
  4. Implement(実装): 定義されたタスクに基づき、AIがコードを出力。

このフローを回すことで、人間は「舵取り(仕様策定)」に集中し、AIは「重労働(コーディング)」を正確にこなすという、理想的な分業が可能になります。

Spec Kitの導入と環境構築

Spec KitはPythonベースのツールとして提供されており、高速なパッケージマネージャーである uv を使用して導入するのが推奨されています。

1. 準備:uvのインストール

まずは、環境に uv がインストールされているか確認してください。未導入の場合は以下のコマンドでインストールします。

# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

2. Spec Kit(specify-cli)のインストール

次に、Spec Kitの本体である specify-cli をインストールします。GitHubリポジトリから直接最新版を取得するのが確実です。

uv tool install specify-cli --from git+https://github.com/github/spec-kit.git

3. プロジェクトの初期化(Initialization)

開発を行いたいディレクトリで、プロジェクトを初期化します。

# プロジェクトルートの上にいる場合
specify init <プロジェクト名>

# プロジェクトルートにいる場合
specify init .

実行するとインタラクティブなウィザードが始まります。

  • AI Assistant: 使用するAI(GitHub Copilot, Claude Code, Gemini CLI, Cursorなど)を選択します。
  • Shell: 利用しているシェル(sh, zsh, bashなど)を選択します。

初期化が完了すると、プロジェクト内に .speckit/memory/(プロジェクトの原則を記した constitution.md を含む)といったディレクトリが作成されます。これが、AIとの「共通言語」となる基盤です。

【実践】「何を作るか」を言語化する(Specifyフェーズ)

Spec Kitを用いた開発の第一歩は、コードを書くことではなく、「何を作り、何が達成されれば成功なのか」を明確に言語化することです。これが「Specify」フェーズです。

1. spec.md の作成

Spec Kitでは、すべての原点となるドキュメント spec.md を作成します。これを手動で作ることもできますが、CLIを使ってAIと対話しながら練り上げるのが基本です。

# AIエージェント(Claude Code等)を起動し、仕様策定を開始する
/specify "ユーザーがブログ記事を投稿し、タグで分類できる機能を実装したい"

このコマンドを実行すると、AIはあなたの要望を深掘りし、標準的な spec.md のテンプレートに従って仕様を肉付けしてくれます。

2. spec.md に含めるべき要素

良い仕様書には、AIが迷わないための「ガードレール」が必要です。以下の項目を意識して記述します。

  • Goals (目標): 何を実現したいのか。
  • Success Criteria (成功基準): 何ができれば「完了」と見なすのか(例:APIがステータス201を返し、DBに保存されること)。
  • User Stories (ユーザーストーリー): ユーザーがどのような操作を行うのか。
  • Out of Scope (範囲外): 今回はやらないこと(AIの「やりすぎ」を防ぐために重要)。

3. 仕様の具体例(Markdown)

AIによって生成、または修正された spec.md は以下のようになります。

# Spec: ブログ投稿機能とタグ管理

## Goals
* ユーザーがWebエディタから記事を作成・保存できる。
* 各記事に複数のタグを紐付け、検索性を高める。

## Success Criteria
* [ ] `POST /articles` エンドポイントで記事が正常に保存される。
* [ ] 存在しないタグを指定した場合、自動的に新規作成される。
* [ ] フロントエンドのバリデーションでタイトル未入力エラーが表示される。

## Constraints
* データベースは PostgreSQL を使用。
* タグは1記事につき最大5つまで。

4. 人間による「承認」が鍵

ここが従来の開発と異なる点です。AIが提案した仕様を人間が確認し、「これで間違いない」と確信が持てるまで修正を繰り返します。

ここで妥協すると、後の実装フェーズでAIが「想像でコードを書く」ことになり、手戻りが発生します。「AIを部下として教育する」ような気持ちで、仕様を研ぎ澄ませるのがコツです。

技術設計とタスク分解(Plan & Tasksフェーズ)

spec.md で「何を」作るかが決まったら、次にAIと一緒に「どうやって」実現するかを考えます。ここでのアウトプットが、実装時の「設計図」と「手順書」になります。

1. Plan(計画)フェーズ:技術スタックと構造の決定

/plan コマンドを使用すると、AIは spec.md の内容を読み取り、現在のプロジェクト構成に合わせた最適な実装プランを提案します。

  • アーキテクチャの選定: どのディレクトリにファイルを配置するか、既存の関数を再利用するかなどを決定。
  • データ構造の定義: DBのスキーマや、APIの入出力インターフェースの設計。

出力例(plan.mdの一部):

  • Backend: src/api/articles.ts に新規エンドポイントを作成。Prismaを使用して Article モデルを拡張する。
  • Frontend: components/Editor.tsx にタグ入力用のマルチセレクト機能を追加する。

この段階で人間が「そのライブラリではなく、こちらを使ってほしい」といったフィードバックを与えることで、プロジェクトの方針に沿った設計が保証されます。

2. Tasks(タスク分解)フェーズ:実行可能な最小単位へ

設計(Plan)ができたら、それをAIが迷わず実行できる 「小さなタスク」 に分解します。これが /tasks コマンドの役割です。

AIは一つの大きな機能を一気に作ろうとすると、細部でバグを出しやすくなります。そのため、Spec Kitでは以下のように「1タスク1機能」の粒度でリスト化します。

タスクID概要完了条件
T-01DBマイグレーションtags テーブルが作成され、articles とリレーションが貼られること
T-02API実装POST /articles でタグの保存ができること(テスト通過)
T-03UI作成タグ選択用のコンポーネントが Storybook で確認できること

3. なぜ「タスク分解」が必要なのか?

エンジニアにとっての最大のメリットは、「進捗の可視化」と「エラーの局所化」です。

  • コンテキストの保護: AIは一つのタスクに集中するため、関係ないコードを書き換えるリスクが減ります。
  • レビューの容易さ: 1つのタスクが終わるごとにコードをチェックできるため、大規模な手戻りを防げます。

このフェーズが終わると、あなたの前には「承認済みの設計図」と「整理されたToDoリスト」が並んでいるはずです。あとはAIに「実装を開始して(/implement)」と伝えるだけです。

Spec Kitを使いこなすためのベストプラクティス

Spec Kitは強力なツールですが、その真価を発揮させるには「AIとの付き合い方」にコツがあります。長期的なプロジェクトでコードの品質を維持するための3つの秘訣を紹介します。

1. constitution.md でプロジェクトの「憲法」を定める

Spec Kitのディレクトリ(memory/)内にある constitution.md は、プロジェクトにおける 「絶対のルール(憲法)」 を記す場所です。

AIは放っておくと一般的なコードを書きますが、プロジェクト固有のルール(命名規則、使用禁止ライブラリ、テストの書き方など)をここに記述しておくことで、AIの出力を強制的に制御できます。

  • 記述例:
    • 「非同期処理には必ず async/await を使い、Promise.then は禁止する」
    • 「すべての新規関数には、JSDoc形式のコメントとVitestによる単体テストを必須とする」

2. 仕様変更は「コード」ではなく「仕様書」から直す

開発途中で要件が変わったとき、直接コードを書き換えたくなるかもしれません。しかし、SDD(仕様駆動開発)においては 「まず spec.md を更新する」 のが鉄則です。

  1. spec.md を修正する。
  2. /plan を再実行して影響範囲を確認する。
  3. /tasks で変更箇所のタスクを再生成する。

この手順を踏むことで、ドキュメントと実装が乖離する「仕様書の腐敗」を完全に防ぐことができます。

3. AIの提案を「鵜呑み」にせず「レビュー」する

Spec Kitのワークフローに /specify, /plan, /tasks と人間による承認ステップが含まれているのは、AIのハルシネーション(もっともらしい嘘)を防ぐためです。

  • Plan(計画)のチェック: 提案されたライブラリが古くないか、プロジェクトのセキュリティポリシーに反していないかを確認しましょう。
  • Tasks(タスク)のチェック: 1つのタスクが大きすぎないか(目安は数分〜十数分で実装できる量)を確認しましょう。

Spec Kitを使うと「AIに命令する側」としてのスキルが問われます。コードを書く能力以上に、「論理的な矛盾を見抜く力」と「明確な言葉で指示を出す力」が、エンジニアにとってますます重要になります。

まとめ:Spec Kitで「AIを使いこなす側」のエンジニアへ

本記事では、GitHubが提唱する Spec Kit を活用した仕様駆動開発(SDD)の入門ガイドをお届けしました。

記事の要約

  • SDDの重要性: AI時代の開発では、曖昧な指示による「Vibe Coding(雰囲気実装)」を避け、仕様を唯一の正解とするプロセスが不可欠。
  • 4つのフェーズ: 「Specify(仕様化)」「Plan(計画)」「Tasks(タスク分解)」「Implement(実装)」という厳格なサイクルが、高品質な出力を生む。
  • Spec Kitの導入: uv を活用して specify-cli を導入し、AIとの共通言語となる環境を構築する。
  • 運用のコツ: constitution.md でプロジェクトの「憲法」を定義し、常に「仕様書から直す」文化を徹底する。

最後に

AIエージェントの進化により、エンジニアの役割は「コードを書く人」から、「仕様を定義し、設計の正しさを保証するディレクター」へとシフトしています。

Spec Kitを導入することは、単に開発を効率化するだけでなく、この新しい時代に求められる「AIとの協働スキル」を磨くことと同義です。まずは小さな機能追加から、/specify コマンドを叩いてみてください。

タイトルとURLをコピーしました