フック(Hooks)
フックは、Claude Code のライフサイクルの特定のタイミングで自動的にシェルコマンドを実行する仕組みです。「ファイルを編集したら自動フォーマット」「権限確認が出たらデスクトップ通知」「セッション開始時にコンテキストを自動挿入」など、決定的(deterministic)な自動化を実現できます。Claude の判断に依存せず、必ず実行される点が AI への指示との違いです。
フックの動作フロー
イベント発生
→
matcher で判定
→
アクション実行
→
結果を返却
ホバーして各ステップの詳細を確認
フックの設定方法
settings.json の hooks セクションにイベントごとの設定を記述します。
json
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "npx prettier --write modified-file.ts"
}
]
}
]
}
}フックタイプ
フックには4つのタイプがあります。ほとんどの場合は command タイプで十分です。
| タイプ | 説明 | 用途 |
|---|---|---|
command | シェルコマンドを実行 | フォーマッタ実行、通知送信など |
prompt | シングルターンのLLM評価 | コード品質チェック |
agent | ツール付きのマルチターン検証 | 複雑な検証フロー |
http | URLにイベントデータをPOST | 外部サービス連携 |
利用可能なイベント一覧
Claude Code のライフサイクル全体にわたって、さまざまなタイミングでフックを設定できます。
| イベント | 発火タイミング | matcher 例 |
|---|---|---|
SessionStart | セッション開始・再開時 | startup, resume, clear |
UserPromptSubmit | ユーザーがプロンプトを送信した時 | なし |
PreToolUse | ツール実行の直前 | Bash, Edit, Write |
PostToolUse | ツールが正常に完了した後 | Edit, Write |
PostToolUseFailure | ツールがエラーで失敗した後 | Bash |
Notification | 通知が送信される時 | permission_prompt |
Stop | Claude の応答が完了した時 | なし |
ConfigChange | 設定ファイルが変更された時 | user_settings |
SessionEnd | セッションが終了する時 | clear, logout |
終了コードの意味
フックのコマンドが返す終了コードによって、その後の動作が変わります。
| 終了コード | 動作 |
|---|---|
| 0 | 正常完了。アクション続行。標準出力が Claude のコンテキストに追加される |
| 2 | ブロック。アクションを中止し、標準エラーが Claude にフィードバックされる |
| その他 | アクションは続行。エラーはログに記録されるのみ |