
「Claude Code Hooks」という言葉を最近よく見かけませんか?Claude Codeの動作をLLMの判断に委ねず、決定論的に制御できる仕組みとして注目が集まっています。
そこで今回は、Claude Code Hooksの全体像を一望できるように、イベントの種類・基本設定・目的別の実践記事をまとめてみました!初めての方でも迷わず必要な情報にアクセスできる構成にしていますので、ぜひ目次から気になる項目をチェックしてみてください!
この記事で分かること
- Claude Code Hooksの基本的な仕組みと役割
- PreToolUse・PostToolUse・Notification・Stopなど全イベントの使い分け
- 目的(危険コマンド防止/通知連携/テスト強制/デバッグ)に応じた詳細記事へのアクセス方法
Claude Code Hooksとは
Claude Code Hooksとは、Claude Codeのライフサイクル内の特定タイミングで自動実行される、ユーザー定義のシェルコマンド・HTTPエンドポイント・LLMプロンプトの仕組みです。ツール呼び出しの前後や会話終了時など、あらかじめ決められたポイントでスクリプトを差し込めるため、「Claudeが判断して実行するかどうか」ではなく「必ず実行される」という決定論的な制御が可能になります。
この決定論的な位置づけこそがClaude Code Hooksの最大の特徴です。プロジェクトルールの強制、危険コマンドのブロック、フォーマッターの自動実行、通知の送信など、LLMの気まぐれな判断に依存させたくない処理をHooksに任せることで、Claude Codeの動作を安定させることができます。
Hooksの全イベント一覧
Claude Code Hooksには非常に多くのイベントが用意されていますが、まず覚えておきたい代表的なものを表で整理しました。それぞれ「どの場面で使うか」がイメージできれば、Claude Code Hooksの活用イメージが一気に具体化します。
| イベント | 発火タイミング | 主な用途(1文) |
|---|---|---|
| PreToolUse | ツール実行の直前 | 危険なBashコマンドなどの実行をブロックする |
| PostToolUse | ツール実行の成功直後 | ファイル編集後の自動フォーマットやLintを走らせる |
| Notification | Claude Codeが通知を送るとき | 入力待ち状態をSlackやデスクトップ通知で知らせる |
| Stop | Claudeが応答を終えるとき | テスト未実行などの状態でタスク終了を防ぎ継続を強制する |
| SessionStart | セッション開始・再開時 | プロジェクト規約や最新コミット情報をコンテキストに注入する |
| SubagentStop | サブエージェント完了時 | サブエージェントの処理結果をログ・検証する |
このほかにもPermissionRequestやUserPromptSubmitなど多数のイベントが存在しますが、まずはこの6種類を押さえておけば、Claude Code Hooksの大半のユースケースに対応できます。
settings.jsonの基本構文
Claude Code Hooksは.claude/settings.json(またはユーザー単位の~/.claude/settings.json)にJSON形式で定義します。ここでは最小限の構文だけを示し、具体的な実装パターンは後述の個別記事に譲ります。
# ファイル名: .claude/settings.json
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/check.sh"
}
]
}
]
}
}
構造は「イベント」→「マッチャー(対象ツールの絞り込み)」→「実際に実行するハンドラー」の3階層です。この基本形さえ理解していれば、後は目的に応じてmatcherとcommandを差し替えるだけでClaude Code Hooksを自由に拡張できます。より実践的なスクリプト内容や終了コードの使い分けは、次章の目的別記事で詳しく解説しています。
目的別の実践記事まとめ
ここからは、目的別にClaude Code Hooksを深掘りした記事へのリンクをまとめます。自分がやりたいことに近い項目から読み進めてください。
危険コマンドをブロックしたい
「rm -rf」のような破壊的なコマンドをClaudeが誤って実行してしまうリスクは、開発を自動化するうえで最も避けたい事故のひとつです。PreToolUseイベントとif条件を組み合わせることで、危険なサブコマンドだけを検知してブロックする実装が可能になります。
Claude Code Hooksで『rm -rf』を防ぐ実装ガイド
テスト・Lintを強制したい
コードを編集したのにテストを実行し忘れる、Lintが通っていないままコミットしてしまう、といった問題はPostToolUseやStopイベントで解決できます。終了コードを使ってClaudeに作業続行を強制する仕組みを、具体的なスクリプト付きで解説しています。
Claude Code Hooksでテストとlintを強制する仕組み
Slack/Discord通知を設定したい
Claude Codeが入力待ちになったタイミングをターミナルを監視せずに把握したい場合、NotificationイベントをSlackやDiscordのWebhookと連携させる方法が有効です。この用途に特化した記事は現在準備中で、公開後にこちらへリンクを追加予定です。
よくある質問
Claude Code Hooksが動かないときは?
まず/hooksコマンドで設定が読み込まれているか確認し、スクリプトに実行権限(chmod +x)が付与されているかをチェックしてください。JSONの構文ミスやmatcherの指定ミスも動作しない原因として多く見られます。
複数のHooksが登録されている場合の実行順序は?
同一イベントにマッチする複数のClaude Code Hooksは並列で実行され、すべての完了後に結果がマージされます。PreToolUseの許可判定はdeny・defer・ask・allowの順で最も制限的な結果が優先されます。
Claude Code Hooksはパフォーマンスに影響する?
ハンドラーの起動自体には多少のオーバーヘッドがありますが、if条件でフィルタリングすればスクリプトの不要な起動を減らせます。重い処理はasyncオプションでバックグラウンド実行にすることで、Claude Codeの応答速度への影響を抑えられます。
関連するSubagent・MCPとの連携
Claude Code Hooksは単体でも強力ですが、SubagentやMCPと組み合わせることでさらに応用範囲が広がります。SubagentStopイベントはサブエージェントの完了時に発火するため、コードレビュー専用のSubagentと連携した自動検証フローを構築できます。
また、MCPサーバーのツールもPreToolUse・PostToolUseなどの対象になるため、外部サービス連携時の検証やログ記録にClaude Code Hooksを活用できます。接続エラーへの対処法は以下でまとめています。