「ドキュメントを書けばいい」わけではない
以前の記事で、 AI-Native Agile Manifestoの「Living Knowledge」原則を紹介しました。 静的なドキュメントを、常に最新であり続ける生きた知識に置き換える、という原則です。
ただし、これは誤解されやすい原則でもあります。 「じゃあちゃんとドキュメントを整備しよう」という決意だけでは、 何も変わりません。多くのチームがすでに、 整備されたはずのWikiやREADMEが半年で陳腐化するのを経験してきました。 Living Knowledgeが従来のドキュメント整備と違うのは、 仕組みとして「古びることを許さない」構造を持っている点です。 今回は、その具体的な仕組みを見ていきます。
ありがちな失敗シナリオを一つ想像してください。 半年前に「タイムゾーンの扱いを誤ると決済日時がずれる」というバグが見つかり、 修正されました。しかしその教訓はコミットメッセージに一行残っただけで、 どこにも構造化されて記録されませんでした。 半年後、別のAIエージェントが同じ領域を触り、 まったく同じ間違いを再び作り込みます。 これは、ドキュメントが「なかった」せいではなく、 過去の失敗が生きた知識として参照可能な場所になかったせいで起きる事故です。
Spec-Driven Development:仕様がコードより上位に立つ
近年広がっているSpec-Driven Development(SDD、仕様駆動開発)は、 この構造を実装する具体的な方法論です。 バージョン管理された構造化仕様——コードではなく仕様そのもの——を 真実の源とし、人間とAIエージェントの双方が、その仕様に照らしてコードを 生成・保守する、という考え方です。
重要なのは、仕様が先にあり、コードは仕様の投影だという順序です。 これはTDDの記事で書いた 「テストが先にあり、コードはそれに向かって書かれる」という話と、 まったく同じ思想の別の現れです。
典型的な構造は、こういう形を取ります。
/specs/payment-flow.md ← 仕様(真実の源)
/tests/payment-flow.test.js ← 仕様から導かれる検証
/src/payment/ ← 仕様と検証を満たす実装
# エージェントの作業順序:
# 1. specs/payment-flow.md を読み、意図を理解する
# 2. tests/payment-flow.test.js を仕様に基づいて更新・追加する
# 3. src/payment/ を実装し、テストを通す
# 4. 実装内容とズレがあれば、specs/payment-flow.md 側を更新する
この4番目のステップこそが要です。 仕様書は「最初に書いて終わり」の成果物ではなく、 実装の完了とともに現実を反映するよう更新される、 作業サイクルに組み込まれた一部品になっています。
具体例:AGENTS.mdとCLAUDE.mdという規約
この思想を最も分かりやすく体現しているのが、
AGENTS.mdやCLAUDE.mdと呼ばれるファイルです。
リポジトリのルートに置かれ、ビルドコマンド、テストの実行方法、
デフォルトと異なるコーディング規約、アーキテクチャ上の制約などを記述します。
AIエージェントはセッションの開始時にこれを読み込み、
以後のすべての判断の前提として参照します。
ここに、実務上の重要な発見があります。 人間が丁寧に書いたコンテキストファイルは、 AIに自動生成させたものより約4ポイント高い成功率を示す という調査結果です。逆にAIが自動生成したAGENTS.mdは、 リポジトリ内にすでにある情報を重複させるだけで、 成功率を2%下げ、コストを23%増やしていました。
これはManifesto記事の 「Intent & Oversight」原則が、ドキュメントの世界でも成り立つことを示しています。 コンテキストを書くという行為そのものが、意図の定義であり、 AIに委任してよい仕事ではないのです。
良いコンテキストファイルには、共通して次のような要素が含まれます。
- ビルド・テストの正確なコマンドとフラグ
- デフォルトとは異なる、この領域固有のコーディング規約
- 触れてはいけない境界(アーキテクチャ上の制約、破壊的変更が許されない箇所)
- 過去に問題を起こした判断とその理由(いわば失敗の記憶)
この最後の一項目——過去の失敗の記憶——は、 従来のドキュメントでは省かれがちでしたが、 Living Knowledgeにおいてはむしろ核心です。 アーキテクチャ決定記録(ADR)のように 「なぜその設計を選んだか、何を却下したか」まで記録しておくことで、 エージェントは過去に否定された選択肢を再提案する無駄を避けられます。
「生きた」の本当の意味:仕様が現実を追いかける
Living Knowledgeが従来のドキュメントと決定的に違うのは、 仕様が実装を追いかけて自動的に更新されるという発想です。 「Living Specs」という考え方では、エージェントが作業を完了すると、 仕様そのものが現実の状態を反映するように更新されます。
従来のドキュメント運用では、実装が変わってもドキュメントの更新は 「別タスク」として後回しにされ、結果として陳腐化しました。 Living Specsは、この更新作業自体をエージェントのワークフローに 組み込むことで、「ドキュメントを更新し忘れる」という 人間の怠慢に依存しない仕組みを作ります。
限界:読めることと、従うことは別
ここで、正直に限界も見ておく必要があります。 2026年3月に報告されたある事例では、200行を超える CLAUDE.mdを持つプロジェクトで、AIエージェント自身がこう報告しました。
「そのルールは毎セッション、私のコンテキストに読み込まれています。 私はそれを読めます。暗唱もできます。 ただ、それに従っていないだけです。」
これは笑い事ではなく、Living Knowledgeという発想全体への 重要な警鐘です。コンテキストファイルを書くことと、 それが実際に守られることの間には、依然としてギャップがあります。
だからこそ、Test Reviewの記事や TDDの記事で書いた 「検証の網」が、ここでも必要になります。 仕様を書いただけで満足するのではなく、 その仕様から外れたら機械的に検知できる仕組み—— リンター、型チェック、契約テスト——と組み合わせて初めて、 Living Knowledgeは「書いてあるが守られない」状態を脱します。 ドキュメントを「読ませる」だけでなく「検証させる」のが、 実践における最後の一手です。
実践チェックリスト
- コンテキストファイル(AGENTS.md/CLAUDE.md等)は人間が書いているか、AIに丸投げしていないか
- 仕様の更新は、実装作業のワークフローに組み込まれているか、それとも「別タスク」として後回しにされていないか
- 仕様からの逸脱を、リンターやテストなど機械的な仕組みで検知できるか
- 「ルールを書いた」ことと「ルールが守られている」ことを、チームは混同していないか
- 過去の失敗や却下した選択肢は、コミットログの奥ではなく、次に読まれる場所に記録されているか
おわりに
Living Knowledgeは魔法ではありません。 ドキュメントを書く行為そのものは、これまでと変わらず人間の意図の表現です。 変わったのは、その意図が機械によって毎回参照され、 検証され、時には更新されるという、周囲の仕組みの方です。
「書けば伝わる」という前提が崩れた今、 問うべきは「どう書くか」ではなく 「書いたものが本当に読まれ、従われる仕組みになっているか」 です。それこそが、生きた知識と死んだドキュメントを分ける、唯一の境界線です。
もう一つ付け加えるなら、Ownershipの記事で 書いた「コードオーナーシップ」の話は、この仕様ファイル自体にも当てはまります。 AGENTS.mdやspecsディレクトリが古びていくのを防ぐには、 その領域の判断に責任を持ち、コンテキストを維持し続ける人が 必要です。仕組みだけを用意して、誰も見張っていない仕様は、 結局のところ、以前より複雑な形をした「古びるドキュメント」に逆戻りします。
従来のドキュメント運用との違い
| 従来のドキュメント運用 | Living Knowledge実践 | |
|---|---|---|
| 更新のタイミング | 気づいた人が、思い出したときに | 実装作業のワークフローに組み込まれ、自動的に |
| 正しさの担保 | レビュー時の目視確認のみ | リンター・型チェック・契約テストによる機械的検証 |
| 読み手 | 主に人間(オンボーディング資料) | 人間とAIエージェントの双方 |
| 失敗の記録 | 省略されがち | ADRとして明示的に保持し、再提案の無駄を防ぐ |