実装が使い捨てになる AI 開発時代にテストが仕様の唯一の固定点になる

全般 公開:

AI が実装を何度でも書き直せる時代に、仕様の正本はどこにあるのか。公式ドキュメントが指示に強制力はないと書いている事実とフックの仕様を根拠に、テストが唯一の固定点になる理由と、成り立たない条件を書きます。

検証日 2026年10月9日 仕様変更が早い分野です。最新の公式ドキュメントも併せてご確認ください。
目次
  1. 指示は仕様ではない
  2. 固定点になるのは、機械が落とせるものだけ
  3. 公式ドキュメント自身が検証ターゲットを要求している
  4. 差分レビューは固定点にならない
  5. 反論と限界
  6. まとめ

実装が使い捨てになるほど、仕様の正本はテストに移ります。これがこの記事の主張です。

AI コーディングツールを使っていると、同じ機能の実装が 1 日のうちに何度も書き直されます。書き直されるものは仕様ではありません。残って、かつ機械が「違う」と言えるものだけが仕様です。現時点でそれに当たるのは、テストと型と、フックに書いた検査です。

根拠はツールの仕組みに置きます。以下は Claude Code の公式ドキュメント(2026 年 10 月 9 日取得)の記述だけで組み立てます。

KEY POINT

この記事で分かること

  • 自然言語の指示が仕様の固定点になれない理由(公式ドキュメントの記述)
  • 「機械が落とせるもの」だけが固定点になるという線引き
  • この主張が成り立たない条件

指示は仕様ではない

まず、よくある誤解を片付けます。CLAUDE.md に書いた約束は仕様ではありません。公式ドキュメントは CLAUDE.md と自動メモリについて「Claude treats them as context, not enforced configuration」と書き、続けて「To block an action regardless of what Claude decides, use a PreToolUse hook instead」と案内しています。文脈であって、強制されない設定だということです。

権限のドキュメントはもっと直接的です。「Permission rules are enforced by Claude Code, not by the model. Instructions in your prompt or CLAUDE.md shape what Claude tries to do, but they don't change what Claude Code allows」。指示は「何をしようとするか」を変えるだけで、「何が許されるか」は変えません。

つまり、自然言語で書いた「こう作ってほしい」は期待値の表明であって、固定点ではありません。読まれるかもしれないし、守られるかもしれない、という性質のものです。

固定点になるのは、機械が落とせるものだけ

では何が固定点になるのか。答えは「落ちるもの」です。フックのイベントごとの挙動を見ると、この線引きが設計として明示されています。

イベント終了コード 2 のとき固定点として使えるか
PreToolUseツール呼び出しをブロックする使える。実行前に止める
PostToolUseツールは既に実行済み。stderr が Claude に見える部分的。止められないが直させられる
PostToolBatch次のモデル呼び出しの前にエージェントループを止める使える
StopClaude を終了させず、会話を継続させる使える。「赤いまま終わらせない」
InstructionsLoaded終了コードが無視される使えない

テストと最も相性がいいのは Stop です。公式の説明は「Prevents Claude from stopping, continues the conversation」。テストスイートを走らせて赤ければ終了コード 2 を返すフックを置けば、「テストが通らない状態で完了報告をしない」という約束を、お願いではなく仕組みにできます。CLAUDE.md に同じ文を書いた場合との差が、この非対称性です。

PostToolUse は止められません。公式の表は「Shows stderr to Claude; the tool already ran」です。編集は起きてしまう代わりに、終了コード 2 で stderr を Claude に見せて直させる使い方になります。lint と formatter はこの位置が適切です。設定例は Claude Code の hooks で保存時に lint とフォーマットを走らせる にまとめてあります。

人の目が入らない実行では、この仕組みが唯一の防御になります(Claude Code をヘッドレスで CI から動かす)。

公式ドキュメント自身が検証ターゲットを要求している

興味深いのは、同じ結論がコスト削減の文脈からも出てくることです。コスト管理のドキュメントには「Give verification targets: Include test cases, paste screenshots, or define expected output in your prompt. When Claude can verify its own work, it catches issues before you need to request fixes」とあります。

これはテスト駆動の話ではなく、トークンを無駄にしないための項目として書かれています。それでも要求は同じで、「先に期待値を固定しろ」です。手戻りが高くつくから先に固定するという理屈は、プラン モードの推奨理由(「preventing expensive re-work when the initial direction is wrong」)とも一致します。方針を先に合意する話は Claude Code の Plan Mode に、テストを先に置く進め方は AI コーディングでテストを先に書くワークフロー にあります。

当サイトの記事も同じ構造で運用しています。公開前に lint スクリプトとビルドを必ず通す決まりにしてあり、文字数や見出し数、内部リンク先の存在はそこで落ちます。守らせたい約束は、落ちる形にしないと守られません。

差分レビューは固定点にならない

もう 1 つの含意として、プルリクエストの差分を人が読むことは、以前ほど固定点の役割を果たしません。実装が書き直されるたびに差分は総取り替えになり、前回の指摘が次の実装に残っているかは差分を見ても分かりません。残っていると言えるのは、その指摘をテストや型やフックに変換した場合だけです。

レビューをやめるべきという話ではありません。レビューの出力を「コメント」で終わらせず「落ちるもの」に変換するところまでをレビューの一部にする、という配置の変更です。権限で縛る側の設計は Claude Code の settings.json で permissions を設計する にまとめてあります。

反論と限界

この主張は、次の条件では成り立ちません。

テストも AI が書く場合。 実装を見ながらテストを書けば、テストは実装のトートロジーになります。固定点になるのは、人が実装より先に決めた期待値の部分だけです。実装後に生成したテストは回帰を検出する網としては働きますが、仕様の正本にはなりません。

テストで表せない仕様がある領域。 画面の見た目、操作の分かりやすさ、パフォーマンスの体感、アクセシビリティ、セキュリティ姿勢は自動テストに落としきれません。固定点を別の形(スクリーンショットの比較、ベンチマークの閾値、監査のチェックリスト)で用意するか、人が見続けるしかありません。

固定点を作るコストが成果を上回る場合。 テスト基盤のないレガシーコードに最初の 1 本を通すコストは高く、使い捨て前提のプロトタイプでは回収できません。固定点を作らない判断が正しいこともあります。ただしそれは「今回は固定点なしで進める」と明示した場合の話で、無自覚に省略した状態とは別です。

落とす対象の設計を間違えた場合。 フックは強制力を持ちますが、何を落とすかは人が決めます。PostToolUse で止められると思い込めば、実際には編集が通ったあとに警告が出るだけです。強制力がある仕組みを使うことは、正しい仕組みを使うことを意味しません。

まとめ

  • 公式ドキュメントは CLAUDE.md を「強制されない文脈」と明記しており、自然言語の指示は固定点にならない
  • 固定点になるのは機械が落とせるものだけ。PreToolUse と Stop は止められ、PostToolUse は直させるだけ
  • コスト削減の文脈でも、公式ドキュメントは「検証ターゲットを先に与えろ」と要求している
  • 差分は書き直しごとに総取り替えになるため、レビューの出力は「落ちるもの」に変換しないと残らない
  • テストも AI が書く場合、テストで表せない領域、固定点のコストが回収できない場合は成り立たない

よくある質問

テストを書く時間が惜しいときはどうすればいいですか?
期待値を 1 つだけ先に固定してください。公式ドキュメントも、プロンプトにテストケースや期待する出力を含めると、こちらが指摘する前に AI が自分で問題を見つけると書いています。全部を網羅する必要はありません。
CLAUDE.md に「テストを通してから報告する」と書けば十分ではないですか?
足りません。公式ドキュメントは CLAUDE.md を「強制されない設定ではなく、文脈」と明記しています。何があっても止めたいなら PreToolUse フック、終了を止めたいなら Stop フックを使う、と公式に書かれています。
テストが AI 時代に不要になることはありますか?
考えにくいと見ています。実装の生産コストが下がるほど、どれが正しい実装かを判定する仕組みの価値が相対的に上がります。ただし後述のとおり、テストで表せない仕様が残る領域では固定点を別に用意する必要があります。

参考にした一次情報

この記事は公式ドキュメントを基に AI が下書きを作成し、運営者が内容を確認して公開しています。誤りを見つけた場合は お問い合わせからお知らせください。