4

Hooks

Tool Call EventPreToolUseBefore executionPostToolUseAfter executionNotificationOn eventsTool Name MatcherGlob pattern: Edit, Bash, *Shell CommandUser-defined scriptAllowBlockModifyMessage

Hooksとは

Hooksは、Claude Codeのツール実行の前後に自動実行されるシェルコマンドである。 コード品質のガードレール、セキュリティチェック、自動フォーマットなどを ツール実行パイプラインに組み込める。

イベントタイプ

イベント実行タイミング主な用途
PreToolUseツール実行の直前入力の検証、危険な操作のブロック
PostToolUseツール実行の直後結果の検証、自動フォーマット
Notification通知発生時外部サービスへの通知
Stopエージェントループ終了時最終チェック、クリーンアップ

設定方法

Hooksは .claude/settings.jsonhooks フィールドに定義する。

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Edit|Write",
        "type": "command",
        "command": "echo 'File modification detected'"
      }
    ],
    "PostToolUse": [
      {
        "matcher": "Edit",
        "type": "command",
        "command": "npx prettier --write $CLAUDE_FILE_PATH"
      }
    ]
  }
}

Matcher パターン

matcher はツール名に対するパターンマッチングを行う。

パターンマッチ対象
"Edit"Editツールのみ
"Edit|Write"EditまたはWriteツール
"Bash"Bashツールのみ
"mcp__.*"すべてのMCPツール
"mcp__slack__.*"Slack MCPのすべてのツール
"mcp__.*__delete.*"任意のMCPサーバーのdelete系ツール
"" (空文字)すべてのツール

正規表現パターンが使用可能で、柔軟なマッチングを実現する。

Hookタイプ

command タイプ

シェルコマンドを実行する。終了コードで動作を制御する。

{
  "matcher": "Bash",
  "type": "command",
  "command": "python3 /scripts/validate-command.py"
}

終了コード:

終了コード動作
0承認(ツール実行を許可)
1ブロック(ツール実行を拒否)
2エラー(hookの実行失敗として処理)

prompt タイプ

LLMベースの検証を行う。プロンプトで判定基準を記述する。

{
  "matcher": "Edit",
  "type": "prompt",
  "prompt": "この編集がセキュリティ上の問題を含まないか確認してください。問題がある場合は理由を説明してください。"
}

環境変数

Hook実行時に以下の環境変数が利用できる。

変数説明
$CLAUDE_TOOL_NAME実行されるツール名
$CLAUDE_TOOL_INPUTツールへの入力(JSON)
$CLAUDE_FILE_PATH対象ファイルのパス(該当する場合)
$CLAUDE_TOOL_OUTPUTツールの出力(PostToolUseのみ)

セキュリティパターン

危険なコマンドのブロック

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "type": "command",
        "command": "echo $CLAUDE_TOOL_INPUT | jq -r '.command' | grep -qE '(rm -rf /|DROP TABLE|format)' && exit 1 || exit 0"
      }
    ]
  }
}

特定ファイルの保護

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Edit|Write",
        "type": "command",
        "command": "echo $CLAUDE_FILE_PATH | grep -qE '(\\.env|secrets\\.json|credentials)' && exit 1 || exit 0"
      }
    ]
  }
}

編集後の自動フォーマット

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "type": "command",
        "command": "npx prettier --write $CLAUDE_FILE_PATH 2>/dev/null; exit 0"
      }
    ]
  }
}

ベストプラクティス

  1. 冪等性 — Hookは何度実行しても同じ結果になるようにする
  2. 高速に保つ — 重い処理はHookに入れない(エージェントループが遅くなる)
  3. 失敗を安全に — Hookのエラーでワークフロー全体が停止しないよう設計する
  4. ログを残す — デバッグのためにHookの実行ログを出力する
  5. チームで標準化 — セキュリティHookはManaged設定で強制する

さらに詳しく

全18イベント・4ハンドラータイプの完全リファレンス、コピペ可能なレシピカード、セキュリティ脅威モデルマッピングは Hooks Cheatsheet を参照。