CLAUDE.md にルールを書いたのに、そのとおりに動かないことがあります。
私の場合は「返答の書き出しはこう書く」という指示でした。
しかし、この指示が守られる日と、守られない日がありました。
調べてみたところ、これは仕様通りということが判明しました。
実は、CLAUDE.md は読み込まれていますが、書いてあるとおりに動くかどうかは、そのつどAIが決めています。
そこで、確実に実行させたいなら、フック(hooks)という別の仕組みを使います。

なぜ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.md | settings.json |
使い分けの基準は1つです。
「その場の判断に任せたいこと」はCLAUDE.mdに、「例外を認めたくないこと」はフックに置きます。
いつ動くのか
フックは、決められた場面(イベント)が来ると自動で実行されます。
2026年9月時点で、公式ドキュメントに載っているイベントは33種類あります。
よく使うのはこのあたりです。
| イベント | いつ動くか | 時間制限 |
|---|---|---|
| SessionStart | セッションを始めた、または再開したとき | 600秒 |
| UserPromptSubmit | こちらが指示を送った直後、AIが読む前 | 30秒 |
| PreToolUse | AIがツールを使う直前 | 600秒 |
| PostToolUse | ツールが成功して終わったあと | 600秒 |
| PostToolUseFailure | ツールが失敗したあと | 600秒 |
| Stop | AIが返事を返し終えたとき | 600秒 |
| SessionEnd | セッションが終わるとき | 1.5秒 |
ツールの使用を全部記録したいなら、PostToolUse だけでは足りません。
成功したときにしか動かないので、失敗した分は PostToolUseFailure で拾います。

このほかに、ファイルが書き換わったとき(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 と打ってください。
いま読み込まれているフックの一覧が出ます。

上の画面では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 | こちらの指示自体を取り消す |
| Stop | AIを終わらせず、作業を続けさせる |
Stop のフックなら、「テストが通るまで終わらせない」ができます。
使う前に知っておきたいこと
1. 動かないときに気づきにくい
終了コード2以外は、何も止めません。
スクリプトが失敗していても、作業は進みます。
作ったら、一度わざと止まる条件で試してください。
止める設定なら、止まるはずのコマンドをAIに頼んでみる。
差し込む設定なら、/hooks で一覧に出ているかを見る。
2. 時間制限がある
コマンド型の初期値は600秒です。
ただし UserPromptSubmit は30秒、SessionEnd は1.5秒です。
時間切れになると、フックの出力は捨てられます。
作業のほうは止まりません。
3. 書いた内容が、そのまま自分のパソコンで動く
フックはシェルコマンドです。
設定した内容は、確認なしで自分のパソコンで実行されます。
他人が書いた設定も、AIに書かせた設定も、中身を読んでから入れてください。
Codexでも同じです
OpenAIのCodexにも、フックがあります。
Codexで指示を書くファイルは AGENTS.md です。
CLAUDE.md と同じく、渡されはしますが実行するかはAIが決めます。
| Claude Code | Codex | |
|---|---|---|
| 指示を書くファイル | CLAUDE.md | AGENTS.md |
| フックの設定 | settings.json | hooks.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活用ガイド|何から始める?業務別の使い方まとめ
参考にした情報
- Automate actions with hooks(Claude Code公式ドキュメント・英語)
- Hooks reference(Claude Code公式ドキュメント・英語)
- Hooks(Codex公式ドキュメント・英語)
ルールを仕組みに変えるところから
あなたの会社では、決めたルールは誰が守らせていますか。
次のどれかに心当たりがあれば、一度話を聞かせてください。
- AIに任せた作業の品質が、そのときどきで変わる
- 注意した内容が、しばらくすると元に戻る
- ルールを増やしたのに、かえって守られなくなった
30分のオンライン相談で、いま守られていないルールを1つ選び、仕組みに変えられるかを一緒に見ます。
すぐに相談するほどではないという方は、メルマガでも同じような話を書いています。
いま受け取れる特典は、全部で8つ。すべて無料です。
- AIが作る見た目を選べる デザイン様式50 … 名前をひとつ添えるだけで、サイトも資料も50通りに。
- AIの仕上がりを毎回そろえる 型プロンプト … コピペするだけ・作成フォーム付き。
- ChatGPT超入門ガイド … 「何ができるの?」がスッキリ分かる入門書。
- AIで仕事をラクにする 業務改善チェックリスト … “任せられる仕事”を見つける。
- 今日から使えるAI活用シーン10選 … まねするだけ。
- NotebookLMでスライドを作ろう … 資料づくりを10倍速に。
- 撮った動画を“見返せる資産”に変える 手順書 … 文字起こし→目次→字幕まで。
- AI活用ガイドブック(全70ページ) … 登録+3分のアンケートで無料(Kindleでは980円)。
この記事は役に立ちましたか?




コメント