なぜAIエージェントは「仕様書」を無視するのか?:Spec Driven Development (SDD) の必要性

この記事は、Growth Lab編集部 が AI Agent / SDD / Architecture の観点から検証結果を整理したものです。
読了前に全体像を掴み、その後に目次から必要な節へ進める構成を想定しています。
目次を表示
The Pain: AIとの会話は「揮発」する
AIエージェント(Copilot, Gemini, ChatGPTなど)を使っていて、こんな経験はありませんか?
- 「さっきこう決めたよね?」という指示を忘れて古いコードを復活させる。
- 会話が長くなるにつれて、最初の目的(Why)を見失い、枝葉末節(How)にこだわり始める。
- 翌日再開したら、昨日の文脈が完全にリセットされている。
これはAIの記憶力不足ではなく、「会話(Chat Log)」を仕様の拠り所(Source of Truth)にしていることが根本原因です。
The Solution: Spec Driven Development (SDD)
人間同士の開発と同様、AIとの開発でも「チャット」ではなく「仕様書」を正(SSoT)とする必要があります。これを Spec Driven Development (SDD) と呼びます。
SDDの3原則
- Document First: チャットで指示する前に、まず仕様ファイルを書く(または書かせる)。
- File as Anchor: エージェントには常に仕様ファイルを読ませ、「このファイルに従え」と指示する。
- Stateless Interaction: チャットログが消えても、仕様ファイルさえあれば作業を再開できるようにする。
The Implementation: バリデータによる強制
単に「仕様書を読んでね」と言うだけでは不十分です。CI/CDやプレコミットフックで、仕様書の整合性を機械的にチェックします。
import sys
from pathlib import Path
import yaml
REQUIRED_FIELDS = ["title", "slug", "date", "description"]
def validate_frontmatter(file_path: str) -> None:
text = Path(file_path).read_text(encoding="utf-8")
if not text.startswith("---"):
raise ValueError(f"{file_path}: missing frontmatter block")
# 最初の '---' ブロックを YAML として解釈する
_, frontmatter_text, *_ = text.split("---", 2)
data = yaml.safe_load(frontmatter_text) or {}
missing = [field for field in REQUIRED_FIELDS if field not in data]
if missing:
raise ValueError(
f"{file_path}: missing required fields: {', '.join(missing)}"
)
if __name__ == "__main__":
for path in sys.argv[1:]:
validate_frontmatter(path)
このように、コードだけでなくドキュメント自体もLintの対象にすることで、AIは「仕様書を無視すると怒られる(テストが通らない)」ことを学習します。
The Takeaway: AIを管理職にするな
「AIに要件定義から全部やらせよう」とすると失敗します。AIは優秀な実務者(Executor)ですが、長期記憶と一貫性を保持する管理者(Manager)としては未熟だからです。
SDDは、人間が「仕様(Spec)」という形で管理権限を握り続け、AIをその枠内で最大限に働かせるための統制フレームワークです。
次回は、この「仕様」を具体的にどう管理するか、「時間軸」の概念を取り入れたディレクトリ構造について解説します。
Growth Lab編集部
AI Agent / SDD / Architecture
AIエージェント開発、記事制作フロー、デザインシステム運用の接続を実装ベースで検証し、再現可能な手順へ落とし込むことを目的に運営しています。
あわせて読む
同じテーマや近い文脈の記事を続けて読めるようにする。
継続接点
更新を追いかける
新着記事、特集、検証ログをまとめて追える入口として使う。メール購読導線の本実装前でも、継続接点を切らさない。
- 新着記事をまとめて確認できる
- 関連記事や特集ページへつながる
- 実験ログを継続的に追える
本実装ではメール購読や通知機能へ差し替え可能。