Claude Code hooks設定

hooksとは

特定のタイミングで自動実行されるスクリプト。Claude Codeの動作をカスタマイズできる。

設定ファイル: ~/.claude/settings.json

hookの種類

タイミング説明用途例
SessionStartセッション開始時環境確認・INDEX更新
PreToolUseツール実行前危険コマンドのブロック
PostToolUseツール実行後ログ記録・自動整形
PostToolUseFailureツール失敗時エラー記録
Stopセッション終了時ログ保存・ハンドオフ生成
Notification通知時Discord通知等

基本構造

"hooks": {
  "SessionStart": [
    {
      "matcher": "",
      "hooks": [
        {
          "type": "command",
          "command": "/path/to/script.sh",
          "timeout": 5000
        }
      ]
    }
  ]
}
matcher: ツール名で絞り込み。"" = 全ツール、"Bash" = Bashのみ、"Edit|Write" = 複数指定
必ず hooks 配列の中に typecommand を入れること。直接 command を書くとエラーになる。

実例: セッション開始時に挨拶

"SessionStart": [
  {
    "matcher": "",
    "hooks": [
      {
        "type": "command",
        "command": "echo 'セッション開始しました'",
        "timeout": 3000
      }
    ]
  }
]

実例: 危険コマンドをブロック

"PreToolUse": [
  {
    "matcher": "Bash",
    "hooks": [
      {
        "type": "command",
        "command": "/path/to/guard-destructive.sh",
        "timeout": 3000
      }
    ]
  }
]
スクリプトが exit 1 を返すとツール実行がブロックされる

実例: 編集後に自動処理

"PostToolUse": [
  {
    "matcher": "Edit|Write",
    "hooks": [
      {
        "type": "command",
        "command": "echo '$TOOL_INPUT' | python3 check.py",
        "timeout": 5000
      }
    ]
  }
]
$TOOL_INPUT でツールの入力内容(JSON)にアクセス可能

トラブルシューティング

症状原因対処
hooksエラーで起動失敗JSON構文エラーhooks 配列構造を確認
hookが実行されないmatcherが合ってないツール名とmatcherを確認
タイムアウトするスクリプトが重いtimeout値を増やす or スクリプトを軽くする
← ガイド一覧に戻る