Claude Code Hooks

Claude Code のライフサイクルイベントに処理を差し込む仕組み。シェルスクリプトを特定のタイミングで自動実行できる。

ライフサイクルイベント一覧

イベントタイミング
SessionStartセッション開始時
StopClaude が応答を完了したとき
PreToolUseツール実行の直前
PostToolUseツール実行の直後
SubagentStopサブエージェント完了時
UserPromptSubmitユーザーがプロンプト送信直前

設定方法

/hooks コマンドで対話設定するか、settings.json に直接記述する。

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [{ "type": "command", "command": "npm run format" }]
      }
    ]
  }
}

シェルスクリプトを .sh ファイルに切り出してコマンドとして呼ぶのが推奨パターン。

終了コードによる制御

PreToolUse フックで特定の終了コードを返すとツール実行をブロックできる。

終了コード動作
0正常通過
2ツール実行をブロック

主なユースケース

  • SessionStart — 依存関係インストール(npm install 自動実行)
  • Stop — 完了通知音・ログ記録
  • PostToolUse(Write/Edit) — フォーマッター・リンターの自動実行
  • UserPromptSubmit — プロンプトへのコンテキスト自動付与、機密情報フィルタリング

マッチャー

ワイルドカードでツール名を絞り込める。

"matcher": "Bash"          // Bash ツールのみ
"matcher": "Write|Edit"    // Write または Edit
"matcher": "*"             // 全ツール

環境変数

フック実行時にプロジェクト情報(プロジェクト名・ファイルパスなど)が環境変数として渡される。これを使ったログ記録や条件分岐が可能。

関連