自働化ラボ

2026/9/3・ claude-code

CLAUDE.mdの指示が守られない時に見直すべき仕組み

Claude CodeにCLAUDE.mdでルールを書いたのに、途中から守られなくなったと感じたことはないでしょうか。実はこれは仕様であり、原因と対処法があります。

結論:CLAUDE.mdは「指示」であり「強制」ではない

CLAUDE.mdはセッション開始時にClaude Codeへ読み込まれる文脈情報であり、必ず実行される設定ではありません。公式ドキュメントでも「Claudeはこれを文脈として扱い、強制される設定としては扱わない」と明記されています。

一方で、特定のタイミングで必ず実行してほしい処理(コミット前のフォーマット、ファイル編集後のテスト実行など)がある場合は、CLAUDE.mdではなくフック(hooks)という別の仕組みを使う必要があります。

なぜCLAUDE.mdだけでは不十分なのか

CLAUDE.mdはプロンプトの一部としてモデルに渡される文章です。モデルは指示を読んで従おうとしますが、指示が曖昧だったり、他の指示と矛盾していたりすると、どちらを優先するかはモデル側の判断に委ねられます。

公式ドキュメントも、指示が守られない場合の対処法として「より具体的な指示に書き換える」「矛盾する指示がないか確認する」ことを挙げています。逆に言えば、これらを徹底しても、モデルの判断が入り込む以上、実行を完全に保証することはできません。

対してフックは、Claude Codeというプログラム自体が特定のタイミング(ファイル編集の前後、セッション開始時など)でシェルコマンドを実行する仕組みです。公式ドキュメントは「フックはClaude Codeが特定のライフサイクルの時点で実行するユーザー定義のシェルコマンドであり、特定の行動を毎回確実に発生させる決定的な制御を提供する」と説明しています。つまり、モデルの判断に頼らず動作するのがフックの特徴です。

具体的には、次のようなタイミング(イベント)でフックを実行できます。

  • PreToolUse:Claude Codeが特定のツール(ファイル編集やコマンド実行など)を使う直前
  • PostToolUse:ツールの実行が成功した直後
  • SessionStart:セッションを開始したとき
  • Stop:Claude Codeが応答を終えたとき

これらのイベントに処理を紐づけることで、「編集の直前に必ずバックアップを取る」「編集の直後に必ずフォーマッタを走らせる」といった運用を、モデルの判断を介さずに実現できます。

使い分けの目安

やりたいこと 適した仕組み
コーディング規約や設計方針を伝えたい CLAUDE.md
ファイル編集のたびに必ずフォーマッタを走らせたい フック(PostToolUse)
危険な操作を確実にブロックしたい 権限設定(permissions.deny)またはフック
セッション開始時に毎回同じ情報を渡したい CLAUDE.md

フックを追加する基本の流れ

フックは、プロジェクトの.claude/settings.json(チーム共有用)か、.claude/settings.local.json(個人設定用)に追加します。公式ドキュメントの手順に沿うと、大まかな流れは次の通りです。

  1. 反応させたいイベント(例:PostToolUse)と対象ツール(例:WriteEdit)を決める
  2. 設定ファイルにhooksブロックを追加し、実行したいシェルコマンドを記述する
  3. 実際にそのツールを使う操作を行い、コマンドが動くことを確認する
  4. 想定外の副作用がないか(意図しないファイルを書き換えていないか等)を確認する

フック1つにつき、対応するイベントと実行コマンドの2点を決めれば最小構成が作れます。複雑な処理は、シェルコマンドから別のスクリプトファイルを呼び出す形にすると管理しやすくなります。

フックを設定する際の注意点

フックは.claude/settings.jsonhooksブロックを追加することで設定します。設定ファイルの書式を誤ると、そのファイルの他の設定(権限設定なども含む)ごと無効になることがあるため、追加後は必ず動作確認をすることが推奨されています。

また、フックはプロジェクトの信頼設定にも関わります。特に共有リポジトリ由来の設定ファイルにフックが含まれる場合、意図しないコマンドが実行されるリスクがあるため、内容を確認してから使うことが公式ドキュメントでも案内されています。

まとめ

  • CLAUDE.mdはClaude Codeへの「文脈」であり、実行を保証する仕組みではない
  • 「必ず毎回実行してほしい処理」はフック(hooks)で実装する
  • フックを追加したら、設定ファイルの構文と実際の動作の両方を確認する
広告枠(準備中)

参考にした一次ソース