AI駆動開発

仕様駆動で分かったこと — ドキュメントを SSOT にしたら、判断は誰のものか

はじめに

結論から言うと、私はプロジェクト内のドキュメントを、信頼できる唯一の参照先として扱うようにしています。これを SSOT(Single Source of Truth、単一の情報源)と呼んでいます。

SSOT にすると、自分は「設計を決める人」ではなく「仕様と実装のズレを見つける人」に近づきました。以降、この記事では SSOT を正本とも呼びます。

正本は契約書の「正本と写し」の意味ではありません。チャットや口頭より、リポジトリ内のドキュメントを先に信じる、という運用上の呼び方です。

この記事は、仕様駆動の進め方を説明するものではありません。Colorism v2 で実際に起きた判断の場面を3つ挙げ、なぜそう感じたかを書きます。進め方は Kiro×Cursor の記事、プロジェクトの詳細は Colorism v2 の開発記のほうで触れています。

対象は、すでに SSOT(正本)や ADR(決定記録)を試している方、これから試す方です。用語の説明は判断ログのあとにまとめています。すでにご存じの方は読み飛ばしていただいて大丈夫です。

場面の例:仕様は満たしているのに、城の写真が出た

いちばん腹落ちしたのは、2026年5月の「紫のヒーロー画像」事件です(のちに不具合ログ IR-005。IR は Issue Resolution=不具合・手戻りの解決記録)。

仕様も実装も「紫のヒーロー画像を出す」は満たしていました。ところが画面には城やバイクの写真が返ってきました。原因は、画像検索 API に渡していた英語キーワードが「Royal Purple」だったことです。

キーワードの選び方は、仕様に書いていませんでした。ここでドキュメントを直し、検索語を単純な Purple に変えました。正本を守るとは、間違った正本を直すことも含む——そのとき初めて実感しました。

別の場面では、レッスン原稿の Markdown 表が画面では表にならなかった(IR-014)。仕様は正しかったのに、表示パイプラインが追いついていませんでした。詳細は後述の判断ログにまとめています。

なぜドキュメントを SSOT(正本)にしたか

v1 の Colorism は見た目は賑やかでした。6色を選ぶとヒーロー画像が変わる体験、色相環、色彩心理の UI。一方で「学習アプリとしては薄い」と感じる場面が続きました。

Kiro で起こした要件・設計・実装計画は、Cursor に引き継いだあとも増え続けました。ただ、どのファイルが最新かは曖昧でした。

チャットをまたいで「さっきの仕様どおりで」と言っても、エージェントが参照する文脈は毎回少しずつ違います。

v2 を作り直すとき、最初に決めたのは「プロジェクト内のドキュメントだけを信じる」というルールです。口頭の合意は、ドキュメントに書かれるまでは「まだ確定していない」ものとして扱うようにしました。

正本にしたのは、仕様駆動を厳密に守るためではなく、同じ議論の再発を減らすためでした。

正本化の最初の1週間

基盤フェーズの出口条件——その段階を終えて次へ進んでよいかを決めるチェックリスト——を書いた直後、Cursor に実装を任せ始めました。

決定ログに D1、D2…と ADR(決定記録)を足していく。チェックボックスが埋まっていく。ここまでは、昔の SI 案件で設計書を回していた感覚に近いです。

違和感が出たのは、エージェントが「仕様に沿っています」と言いながら、自分の頭の中の Colorism 像とズレているときでした。

例えば、ホーム画面に大型の色相環を常設する案。v1 では自然に思えました。v2 では「まず学ぶ」「説明の直後に見せる」と書いてあり、図解は各レッスンの中に閉じる方針でした。

仕様書のほうが正しく、古くなっていたのは自分の感覚のほうでした。

ドキュメントを正本にすると、自分の勘を疑う方向に引っ張られます。v1 では「とりあえず動くからこのまま」で進んでいた部分を、仕様が止めてくれました。一方で、全部を仕様に委ねると、プロダクトの温度感が下がる瞬間もありました。

まとめると、正本化の最初の1週間で分かったのは「決める人」ではなく「どちらが古いかを見極める人」に近づく、ということです。

判断ログ(3件・時系列)

実際にメモした判断の断片です。1件目は v1(正本化の前)、2・3件目は v2 です。

2025-08-22(v1)─ AI エディタの利用枠が先に尽きた
Kiro では仕様どおりに UI の一貫性を取るのが難しく、Specs / Vibe の利用枠の消費も異常に速かった。仕様書は増えているのに、動く画面は増えない。仕様の是非ではなく、当時のツールとフェーズの相性の問題と判断し、Cursor に引き継いだ。

2026-05-18(v2)─ レッスン原稿の表が、画面では表にならなかった
Markdown の表形式で書き始めたら、HTML 変換側に表対応が入っていないことに気づいた(IR-014)。仕様は正しかった。実装が遅れていた。教訓は、コンテンツの仕様を書く前に、表示パイプラインを1本だけ通しておくこと。

2026-05-28(v2)─ 紫のヒーロー画像は出たが、城やバイクだった(IR-005)
検索 API のキーワードが Royal Purple だったため。キーワード選びは仕様に書いていなかった。検索語を Purple に変え、キャッシュとランダム性も直した。

用語メモ(知っている人は飛ばしてOK)

v2 では、チャットの記憶に頼らず、ドキュメントで文脈を引き継ぐために次の付番を使いました。

  • SSOT / 正本
    Single Source of Truth(単一の情報源)。プロジェクト内で唯一信頼するドキュメント。チャットや口頭の合意は、ドキュメントに書かれるまで「まだ決まっていない」と扱う。
  • ADR / D番号
    ADR(Architecture Decision Record=アーキテクチャ上の決定記録)。「何を決めたか・なぜ・何を捨てたか」を1件ずつ短く残す書き方の型。Colorism v2 では decisions.md に D1、D15…と通し番号(D番号)を振って ADR を積み上げた。
  • IR番号(例: IR-005)
    IR(Issue Resolution=不具合・手戻りの解決記録)。現象・原因・対策・再発防止を1件ずつ時系列ログに残す付番。ADR が「決めたこと」なら、IR は「壊れて直したこと」。
  • Phase / 出口条件
    Phase(開発段階)。Colorism v2 では基盤 → コンテンツ → 仕上げのように、作業を段階に分けた。出口条件は、その段階を終えて次へ進む前に満たすべき完了条件(ゲート)。「動いたから次へ」を防ぐ柵。

番号そのものに魔法はありません。効いたのは、同じ議論を繰り返さず、別のチャットでも続きから話せるようにしたことです。

実装の進め方で変わったこと

v1 では「実装して」と投げることが多かったです。v2 では、投げる前に「どのドキュメントのどの節を読んで、完了したらどの節を更新するか」まで書くようにしました。手戻りは減った印象です。

人間側の作業は「差分のレビュー」から「ドキュメントとコードの矛盾検知」に寄りました。

不具合は IR(Issue Resolution)として IR-001 から順に残していくようにしました。たとえば再レンダーが無限に回り、開発用ビルドツールが暴走した件(IR-011 / IR-012)。次のチャットでは「IR-011 を見て」と言えるので、長い経緯の貼り付けが要らなくなります。

v1 の頃ドキュメント正本化のあと
チャットの文脈が正本になりがちプロジェクト内のドキュメントと決定ログが正本
「動いたから次へ」Phase の出口条件を満たすまで次へ進まない
同じ議論の繰り返しD番号で一度決めたら戻らない
エージェントの自己レビュー別タスクの検証(軽い自動テストやチェック用スクリプト)
口頭の「こういう感じ」機能対応表に「なぜ捨てたか」列を足す

自分の判断が変わったこと

大きく言うと、役割が「決める人」から「矛盾を見つける人」に寄りました。設計はドキュメントに書かれていて、自分はそのドキュメントと実装・コンテンツのあいだを行き来する編集者に近いです。

たとえば v2 で、バッジやポイントのようなゲーミフィケーションを見送った判断があります。AI には「バッジを付けましょう」と提案されがちです。

方針の「まず学ぶ」と照らすと、学習の深さを優先する方がプロダクトの芯に合いました。仕様書を根拠に「やらない」と決めやすくなりました。

個人的には、エージェントにコードを書かせる前にドキュメントを1段落更新するクセが、いちばん効いたと感じています。

見た目や振る舞いがそろう鍵は、生成物より正本のドキュメントと Phase(開発段階)の境界にある——というのは v2 を通して強く思いました(Colorism v2 の開発記でも同じことを書いています)。

それでも自分でしか決められなかったこと

仕様駆動にすると、全部が文書化できる錯覚に陥ります。v2 でも、次は最後まで人間の判断でした。

  • レッスンの説明が「足りない」と感じるかどうか
  • ヒーロー画像が「その色らしい」と感じるか(API は紫を返しても、城の写真は却下)
  • v1 ユーザーのブックマークを救うか、機能ごとに潔く捨てるか
  • AI の出力が「だいたい合っている」ときに、どこまでレビューを省略するか

「良い UX」や「十分な説明」は、プロジェクトの途中で基準が上がります。更新するかどうかのトリガーは、結局、自分の違和感です。

2025年9月の Kiro×Cursor 記事で書いた「一貫性や品質を確保するうえで AI に任せきりは難しい」という所感は、v2 でも変わりませんでした。

変わったのは、SSOT としてのドキュメント・ADR(D番号)・IR(不具合解決記録)・Phase(開発段階)と出口条件が手元に揃ったことです。レビュー時間の肩代わりではなく、レビューすべき場所を絞る道具、くらいの位置づけです。

これから試すこと

いま考えているのは、ドキュメントの更新を「実装のあと」だけでなく「違和感を感じた瞬間」にも起票する運用です。仕様と感覚のギャップも不具合ログに載せると、あとから読み返したときの脈絡がつながりそうです。

仕様駆動を試している方に一つ聞きたいです。最後に「仕様書ではなく自分の勘で上書きした」のは、どんな場面でしたか。逆に、勘を抑えて仕様に従ってよかった場面があれば、それも教えてください(X で @amayan_t に返信いただけると助かります)。

関連する記事

言葉とコードの揃え方をもう一段掘りたい方には、成瀬允宣『ドメイン駆動設計入門』(翔泳社)の第15章「ユビキタス言語」の節が参考になります。仕様の書き方の型としては、GitHub の spec-kit を眺めるのも手です。

※ 執筆支援に AI を使用しています。事実確認・コード検証・構成の最終判断は著者が行っています。

この記事で使ったサービス

※ 一部リンクはアフィリエイトを含みます。

シリーズ一覧を見る