CLAUDE.mdに書いても守られない|フックで確実に実行させる方法

CLAUDE.mdに書いても守られない|フックで確実に実行させる方法 AI

CLAUDE.md にルールを書いたのに、そのとおりに動かないことがあります。

私の場合は「返答の書き出しはこう書く」という指示でした。

しかし、この指示が守られる日と、守られない日がありました。

調べてみたところ、これは仕様通りということが判明しました。

実は、CLAUDE.md は読み込まれていますが、書いてあるとおりに動くかどうかは、そのつどAIが決めています。

そこで、確実に実行させたいなら、フック(hooks)という別の仕組みを使います。

CLAUDE.mdはAIへのお願い、フックはAIの外側で動く仕組み、という違いを表した図解
同じ「ルールを書く」でも、届き方が違います。

なぜCLAUDE.mdは守られないことがあるのか

CLAUDE.md の内容は、セッションが始まるときにAIへの指示文としてまとめて渡されます。

ただし渡されるのは情報であって、命令ではありません。

会話が長くなると、最初に渡したルールより、目の前の作業の指示のほうが多くなります。

フックとは何か

フックは、自分で書いたコマンドです。

Claude Code が、決められた場面で必ず実行します。

公式ドキュメントには「LLMがそれを実行すると決めるかどうかに頼らず、決めた動作が必ず起きる」と書かれています。

Claude Code runs them at specific points in its lifecycle, which gives you deterministic control: certain actions always happen rather than relying on the LLM to choose to run them.

Automate actions with hooks(Claude Code公式ドキュメント)

実行するのは Claude Code の側です。

CLAUDE.mdとの違い

CLAUDE.mdフック
届き方AIへの指示文に混ぜて渡すClaude Code がコマンドを実行する
実行するかAIが判断する必ず実行される
向いていること書き方の好み、判断の方針止める、記録する、毎回同じ処理をする
書く場所CLAUDE.mdsettings.json

使い分けの基準は1つです。

「その場の判断に任せたいこと」はCLAUDE.mdに、「例外を認めたくないこと」はフックに置きます。

いつ動くのか

フックは、決められた場面(イベント)が来ると自動で実行されます。

2026年9月時点で、公式ドキュメントに載っているイベントは33種類あります。

よく使うのはこのあたりです。

イベントいつ動くか時間制限
SessionStartセッションを始めた、または再開したとき600秒
UserPromptSubmitこちらが指示を送った直後、AIが読む前30秒
PreToolUseAIがツールを使う直前600秒
PostToolUseツールが成功して終わったあと600秒
PostToolUseFailureツールが失敗したあと600秒
StopAIが返事を返し終えたとき600秒
SessionEndセッションが終わるとき1.5秒

ツールの使用を全部記録したいなら、PostToolUse だけでは足りません。

成功したときにしか動かないので、失敗した分は PostToolUseFailure で拾います。

指示を送ってからAIが返事を返すまでの流れと、フックが発火する場所を示した図解
1回のやり取りの中で、フックが差し込まれる場所です。

このほかに、ファイルが書き換わったとき(FileChanged)、作業ディレクトリが変わったとき(CwdChanged)、会話が長くなって圧縮されるとき(PreCompact)などがあります。

実際に動かしている2つ

半年ほど前から、2つのフックを動かしています。

1. 毎回忘れてほしくない指示を差し込む

いちばん困っていたのが、返答の書き出しでした。

CLAUDE.md に書いてあるのに、長い作業の途中で崩れます。

そこで UserPromptSubmit のフックを作りました。

私が話しかけるたびに、その指示の後ろへ同じ注意書きを自動で足しています。

#!/bin/bash
cat <<'JSON'
{"hookSpecificOutput":{
  "hookEventName":"UserPromptSubmit",
  "additionalContext":"(毎回読ませたい指示をここに書く)"
}}
JSON

セッションの最初に1回ではなく、話しかけるたびに渡し直しています。

会話が何往復しても、この注意書きは直前にあります。

2. ツールの使用を記録する

PreToolUse・PostToolUse・UserPromptSubmit・Stop・Notification の5つで同じスクリプトを呼び、いつ何をしたかを残しています。

CLAUDE.md に「記録しておいて」と書く方法では、長い作業の途中で抜ける回がありました。

フックにしてからは、抜けていません。

設定のしかた

1. スクリプトを置く

さきほどのシェルスクリプトを、たとえば ~/.claude/hooks/my-hook.sh という名前で保存します。

保存したら、実行できる状態にします。

chmod +x ~/.claude/hooks/my-hook.sh

これを忘れると、フックは動きません。

2. 設定ファイルに登録する

ファイル効く範囲
~/.claude/settings.json自分のすべてのプロジェクト
.claude/settings.jsonそのプロジェクト(チームで共有できる)
.claude/settings.local.jsonそのプロジェクト(自分だけ)

さきほどのスクリプトを毎回動かすなら、こう書きます。

{
  "hooks": {
    "UserPromptSubmit": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "$HOME/.claude/hooks/my-hook.sh"
          }
        ]
      }
    ]
  }
}

対象を絞りたいときは matcher を足します。

次は「ファイルを編集・作成したあとに、整形チェックを走らせる」設定です。

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "/path/to/lint-check.sh"
          }
        ]
      }
    ]
  }
}
  • Bash … Bashツールのときだけ
  • Edit|Write … どちらかのとき
  • 省略 … そのイベントが起きたら毎回

ただし UserPromptSubmit や Stop は matcher に対応していません。

書いても無視されます。

3. 入っているか確かめる

Claude Code の入力欄に /hooks と打ってください。

いま読み込まれているフックの一覧が出ます。

Claude Codeで/hooksと打ったときに出るフック一覧の画面
読み取り専用の一覧です。増やすときは settings.json を直接編集します。

上の画面では6件が読み込まれていて、イベント名の右の数字が、そのイベントに登録されている件数です。

ここに出てこなければ、書いた場所かファイル名を間違えています。

設定を足したり消したりするときは、この画面ではなく settings.json を直します。

危ない操作を止める

フックは、AIがツールを使う直前に割り込んで、その実行を取り消せます。

止め方は2つあります。

方法1:終了コード2で終わる

終了コードは、コマンドが終わるときに返す番号です。

0が成功、それ以外が失敗を表します。

フックでは、2がAIの操作を取り消す合図になります。

方法2:拒否を表すJSONを返す

#!/bin/bash
COMMAND=$(jq -r '.tool_input.command')

if echo "$COMMAND" | grep -q 'rm -rf'; then
  jq -n '{
    hookSpecificOutput: {
      hookEventName: "PreToolUse",
      permissionDecision: "deny",
      permissionDecisionReason: "Destructive command blocked by hook"
    }
  }'
else
  exit 0
fi

rm -rf が含まれていたら拒否します。

このスクリプトには jq というコマンドが要ります。

入っていなければ、macOSなら brew install jq で入ります。

スクリプトに何が渡ってくるのか

1行目の jq -r '.tool_input.command' は、送られてきたJSONから値を取り出しています。

フックには、こういう形のJSONが渡ってきます。

{
  "session_id": "abc123",
  "cwd": "/home/user/my-project",
  "permission_mode": "default",
  "hook_event_name": "PreToolUse",
  "tool_name": "Bash",
  "tool_input": {
    "command": "npm test",
    "description": "Run test suite"
  },
  "tool_use_id": "toolu_01ABC123"
}

この中身が分かれば、自分の条件に書き換えられます。

たとえば .tool_name を見れば、どのツールを使おうとしているかで分けられます。

止められるイベント

代表的なのはこの3つです。

イベント止めると起きること
PreToolUseそのツールの実行を取り消す
UserPromptSubmitこちらの指示自体を取り消す
StopAIを終わらせず、作業を続けさせる

Stop のフックなら、「テストが通るまで終わらせない」ができます。

使う前に知っておきたいこと

1. 動かないときに気づきにくい

終了コード2以外は、何も止めません。

スクリプトが失敗していても、作業は進みます。

作ったら、一度わざと止まる条件で試してください。

止める設定なら、止まるはずのコマンドをAIに頼んでみる。

差し込む設定なら、/hooks で一覧に出ているかを見る。

2. 時間制限がある

コマンド型の初期値は600秒です。

ただし UserPromptSubmit は30秒、SessionEnd は1.5秒です。

時間切れになると、フックの出力は捨てられます。

作業のほうは止まりません。

3. 書いた内容が、そのまま自分のパソコンで動く

フックはシェルコマンドです。

設定した内容は、確認なしで自分のパソコンで実行されます。

他人が書いた設定も、AIに書かせた設定も、中身を読んでから入れてください。

Codexでも同じです

OpenAIのCodexにも、フックがあります。

Codexで指示を書くファイルは AGENTS.md です。

CLAUDE.md と同じく、渡されはしますが実行するかはAIが決めます。

Claude CodeCodex
指示を書くファイルCLAUDE.mdAGENTS.md
フックの設定settings.jsonhooks.json または config.toml
置き場所~/.claude/ または .claude/~/.codex/ または .codex/
止め方終了コード2/JSONで拒否同じ
/hooks でできること一覧を見る一覧・信頼・無効化

PreToolUse・PostToolUse・UserPromptSubmit・Stop・SessionStart・SessionEnd は、どちらにもあります。

ツールの入力を書き換えてから実行させる機能も、どちらにもあります。

違うのは、確認のこまかさ

Claude Code は、そのフォルダを信頼するかどうかを最初に1回聞きます。

Codexは、フックの定義ごとに聞きます。

しかも中身が変わると、また聞かれます。

他人の設定をそのまま動かしてしまうことは、Codexのほうが起きにくくなっています。

判断が要ることは、フックに向きません

フックが得意なのは、条件がはっきり決まっている処理です。

「このコマンドが含まれていたら止める」は書けます。

「文章のトーンが合っていなかったら直させる」は書けません。

そういう用途には、AIに判定させるタイプのフック(プロンプト型・エージェント型)もあります。

こちらの時間制限は30秒、エージェント型は60秒で、コマンド型の600秒より短くなっています。

まとめ

  • CLAUDE.md は指示文として渡されるが、実行するかはAIが判断する
  • フックは Claude Code が実行するので、判断が入らない
  • 止め方は2つ。終了コード2で終わるか、拒否のJSONを返す
  • 作ったら /hooks で読み込まれているか確かめる
  • 他人の設定をそのままコピーしない
  • Codexにも同じ仕組みがある

書いても守られない指示があるなら、そこはフックに移す。

この住み分けができると、CLAUDE.md に同じ注意を何度も書き足さずに済みます。

Claude Code にどこまで操作を許すかは、別の記事に書いています。

Claude Codeを安全に使う権限設定|どこまで操作できる?

ほかの記事は、業務別のまとめから探せます。

中小企業のAI活用ガイド|何から始める?業務別の使い方まとめ

参考にした情報

ルールを仕組みに変えるところから

あなたの会社では、決めたルールは誰が守らせていますか。

次のどれかに心当たりがあれば、一度話を聞かせてください。

  • AIに任せた作業の品質が、そのときどきで変わる
  • 注意した内容が、しばらくすると元に戻る
  • ルールを増やしたのに、かえって守られなくなった

30分のオンライン相談で、いま守られていないルールを1つ選び、仕組みに変えられるかを一緒に見ます。

無料でAI活用診断を受ける

すぐに相談するほどではないという方は、メルマガでも同じような話を書いています。

メルマガに登録する

いま受け取れる特典は、全部で8つ。すべて無料です。

  • AIが作る見た目を選べる デザイン様式50 … 名前をひとつ添えるだけで、サイトも資料も50通りに。
  • AIの仕上がりを毎回そろえる 型プロンプト … コピペするだけ・作成フォーム付き。
  • ChatGPT超入門ガイド … 「何ができるの?」がスッキリ分かる入門書。
  • AIで仕事をラクにする 業務改善チェックリスト … “任せられる仕事”を見つける。
  • 今日から使えるAI活用シーン10選 … まねするだけ。
  • NotebookLMでスライドを作ろう … 資料づくりを10倍速に。
  • 撮った動画を“見返せる資産”に変える 手順書 … 文字起こし→目次→字幕まで。
  • AI活用ガイドブック(全70ページ) … 登録+3分のアンケートで無料(Kindleでは980円)。

この記事は役に立ちましたか?

コメント

タイトルとURLをコピーしました