Claude Hooks とは

 🤖 Claude Code フック(Hooks)

~Claude.mdとの違いと主要イベントを整理~

Claude Codeを使い始めると、多くの人が次のような疑問にぶつかります。「Claude.mdにルールを書いたのに、時々守られない」実はこれはClaude Codeの仕様によるものであり、バグではありません。Claude CodeのHooks(フック)機能について、Claude.mdとの違いを含めて分かりやすく解説します。


📌 Claude.mdとフックの根本的な違い

まず最も重要なポイントです。

項目Claude.mdHooks
動作方式確率論的決定論的
AIの判断必要不要
実行保証なしあり
柔軟性高い低い
用途ルール・指示自動処理

Claude.mdは「お願い」

例えばClaude.mdに次のような内容を書いたとします。

ファイル編集後は npm format を実行してください

期待としては、

ファイル編集→フォーマット実行

しかし実際には、

ファイル編集→終了

となる場合があります。


なぜ実行されないのか?

Claude.mdに書いた内容は、AIへの指示(プロンプト)だからです。

Claudeは常に、「今何をするのが最も適切か?」を判断しながら動いています。

そのため、

  • コンテキストが長くなった
  • 他の指示が優先された
  • ユーザーが途中で停止した
  • 別の文脈が強くなった

といった場合、Claude.mdに書かれた内容を実行しないことがあります。


🎲 Claude.mdは確率論的

ClaudeなどのLLMは本質的に次に最も確率が高い行動を選択しています。

つまり、必ず実行ではなく、実行する可能性が高いという仕組みです。

これを確率論的(Probabilistic)と呼びます。


🔒 Hooksは決定論的

一方でHooksは違います。HooksはClaudeの判断に依存しません。

設定した条件に一致した場合、必ず実行されます。

例えば

ファイル編集後→npm format実行

というフックを設定した場合、

Claudeが忘れても、Claudeが判断を変えても、必ず実行されます。


🎯 Claude.mdとHooksの使い分け

Claude.mdが向いているもの

コーディングルール

TypeScriptで実装する

命名規則

変数名はcamelCaseを使用する

設計方針

SOLID原則に従う

こういったAIの判断が必要なものはClaude.md向きです。


Hooksが向いているもの

自動フォーマット

prettier

自動テスト

npm test

通知

作業完了通知

ロギング

履歴保存

危険操作のブロック

rm -rf

などです。


📌 Hooksでよく使う4つのイベント

Claude Codeには約10種類のイベントがあります。

しかし最初は次の4つだけ覚えれば十分です。

① PreToolUse

ツール実行前

Claudeがツールを使う直前に発火します。

ファイル編集→PreToolUse→実行

用途

危険操作の防止

例えば rm -rf のような削除コマンドを検出したら、実行を止めることができます。


特定フォルダ保護

/home/user や Desktop 配下の重要フォルダを守ることも可能です。

特徴

フックが exit 2 を返すと、Claudeの処理を中断できます。


② PostToolUse

ツール実行後

Claudeがツールを実行した後に発火します。

ファイル編集→編集完了→PostToolUse

用途

自動フォーマット

prettier

ESLint

eslint

テスト実行

npm test

ドキュメント生成

README更新

など。

最も利用頻度が高い

Claude.mdでは実行漏れが発生しますが、Hooksなら100%実行されます。


③ Stop

タスク完了時

Claudeが作業を終えて 次の指示待ち状態になった時に発火します。

用途

デスクトップ通知

作業完了

音を鳴らす

ピロン♪

ログ保存

実行履歴記録

長時間処理と相性が良い

AIに数十分作業させる場合、完了を見逃さないためによく使われます。


④ SessionStart

セッション開始時

Claude Code起動時に発火します。

Claude起動→SessionStart

用途

npm install

npm install

Docker起動

docker compose up

環境初期化

初期セットアップ

毎回行う作業を自動化できる

開発開始前に毎回やる処理をHooks化できます。


⚙️ Hooks設定の基本構造

設定は通常

settings.json

に記述します。

概念的には次のようになります。

{
"hooks": {
"PostToolUse": {
...
}
}
}

🔍 Matcherとは?

イベントだけではなく、どのツールに対して発火するかも指定できます。

これをMatcherと呼びます。

全ツール対象

"*" または ""

Bash実行時のみ

"Bash"

ファイル編集時のみ

"Write" "Edit"

Write→Hook発火→フォーマット実行

⚠️ サブエージェントでは発火しない

注意点があります。

例えば

Sub Agent→ファイル編集 した場合、

通常の Write/Edit フックは発火しません。

この場合は SubagentStop イベントを使用する必要があります。


その他のイベント一覧

イベント用途
PermissionRequest許可確認時
Notification通知送信時
UserPromptSubmitユーザー入力時
SubagentStopサブエージェント終了時
PreCompactコンパクト前
SessionEndセッション終了時

📝 まとめ

Claude Codeを本格的に活用する場合、Claude.mdで「AIの判断ルール」を管理し、Hooksで「必ず実行したい処理」を管理するという役割分担がベストプラクティスです。これを理解することで、より安定した自動化環境を構築できるようになります。