Claude Code Hooksとは:開発フローを自動化する仕組み
Claude Code Hooksは、Claude Codeの動作中に特定のイベントが発生したタイミングで、ユーザーが定義したスクリプトやコマンドを自動実行できる機能です。Gitのpre-commitフックやCI/CDパイプラインのトリガーに似た概念で、Claude Codeのワークフローに独自の自動化処理を組み込むことができます。たとえば、ファイルが編集されたら自動的にフォーマッターを実行したり、特定のコマンドが実行される前にセキュリティチェックを走らせたりといった処理を、設定ファイルに記述するだけで実現できます。
Hooksの最大の利点は、Claude Codeの操作に対して「ガードレール」と「自動化」の両方を提供できる点です。チーム開発において、コーディング規約の自動適用やセキュリティポリシーの強制が可能になり、Claude Codeをより安全かつ効率的に運用できます。Hooksはユーザーのマシン上でシェルコマンドとして実行されるため、既存のツールチェーン(ESLint、Prettier、pytest、Dockerなど)との連携も容易です。
Hooksの設定方法:settings.jsonの構造と記述ルール
Hooksは、Claude Codeの設定ファイル(settings.json)内の "hooks" セクションに定義します。settings.jsonの配置場所は、ユーザーレベルの場合は ~/.claude/settings.json、プロジェクトレベルの場合は .claude/settings.json です。プロジェクトレベルの設定はチーム全体で共有でき、リポジトリに含めることで統一的なHooks設定を維持できます。
基本的な構造は次の通りです。"hooks" オブジェクトの中に、イベント名をキーとして、実行するコマンドの配列を定義します。各コマンドオブジェクトには "matcher"(対象を絞り込む条件)、"command"(実行するシェルコマンド)、"timeout"(タイムアウト時間、ミリ秒)などのプロパティを指定できます。matcherはオプションで、省略した場合はそのイベントのすべての発火に対してコマンドが実行されます。たとえば、PostToolUseイベントでmatcherに "Write" を指定すると、ファイル書き込みツールが使用された後にのみコマンドが実行されます。
イベント種類の詳細:PreToolUse・PostToolUse・Notification
Claude Code Hooksでは、複数のイベントタイプが用意されています。最も頻繁に使用されるのは「PreToolUse」と「PostToolUse」の2つです。PreToolUseは、Claude Codeがツール(ファイル書き込み、Bash実行、ファイル読み取りなど)を使用する直前に発火します。このフックでは、ツールの実行を阻止(ブロック)したり、入力を変更したりすることが可能です。セキュリティチェックやバリデーションに最適なイベントです。
PostToolUseは、ツールの実行が完了した直後に発火します。ファイルが書き込まれた後のフォーマット適用、テストの自動実行、通知の送信などに使用します。このフックの出力がstderrに書き込まれるとClaudeにフィードバックとして渡されるため、「テストが失敗しました」といった情報をClaudeに伝えて自動修正を促すことも可能です。Notificationイベントは、Claude Codeがユーザーに通知を送る際に発火し、デスクトップ通知やSlack連携などに活用できます。その他にも、PreSubAgentやPostSubAgentなどのイベントがあり、サブエージェントの起動前後にカスタム処理を挟むことができます。
実用例1:ファイル保存時の自動フォーマット
最も一般的なHooksの使い方が、ファイル編集後の自動フォーマットです。PostToolUseイベントでWriteツールをmatcherに指定し、Prettierやblackなどのフォーマッターを実行します。設定例として、"PostToolUse" に {"matcher": "Write", "command": "prettier --write $CLAUDE_FILE_PATH"} を定義します。環境変数 $CLAUDE_FILE_PATH には、Claude Codeが操作したファイルのパスが自動的に設定されます。これにより、Claude Codeが生成・編集したすべてのファイルが自動的にプロジェクトのコーディングスタイルに準拠するようになります。Pythonプロジェクトの場合は、blackやruffを使って同様の自動フォーマットを実現できます。
実用例2:テスト自動実行とフィードバックループ
PostToolUseフックを使って、ファイル変更後に関連するテストを自動実行する設定も非常に有用です。たとえば、"PostToolUse" に {"matcher": "Write", "command": "cd /path/to/project && npm test 2>&1"} を定義します。テストが失敗した場合、その出力がstderrに書き込まれるとClaude Codeにフィードバックされ、自動的にコードの修正を試みます。これにより、「コード変更→テスト実行→失敗検知→自動修正」というフィードバックループが構築され、品質の高いコード生成が可能になります。ただし、テスト実行のタイムアウトを適切に設定し、無限ループを防止することが重要です。
実用例3:セキュリティチェックの自動化
PreToolUseフックを活用すると、セキュリティ上の危険な操作をブロックできます。たとえば、Bashツールの実行前に、コマンドに "rm -rf" や "sudo" が含まれていないかチェックするスクリプトを実行できます。設定例として、"PreToolUse" に {"matcher": "Bash", "command": "python3 /path/to/security_check.py"} を定義し、security_check.pyの中でstdinから入力を読み取り、危険なコマンドパターンを検出した場合にexit code 2を返してブロックします。exit code 2はツール実行のブロックを意味し、Claudeにはブロック理由が伝えられます。また、.envファイルや秘密鍵ファイルへのアクセスを防止するフックも設定可能です。
実用例4・5:デプロイ自動化とコードレビュー通知
4つ目の実用例として、Claude Codeでのコミット後に自動デプロイを実行するHooksがあります。PostToolUseイベントでBashツールのgit commitコマンドを検知し、ステージング環境へのデプロイスクリプトを自動実行する構成です。matcherに "Bash" を指定し、commandでgit commitの実行を条件としたデプロイスクリプトを呼び出します。これにより、Claude Codeでの開発作業からデプロイまでがシームレスに繋がります。ただし、本番環境への自動デプロイは避け、ステージング環境への反映に限定することをお勧めします。
5つ目は、Notificationイベントを活用したSlack通知連携です。Claude Codeが長時間のタスクを完了した際に、Slackチャンネルに通知を送るよう設定できます。"Notification" に {"command": "curl -X POST -H 'Content-Type: application/json' -d '{\"text\": \"Claude Codeのタスクが完了しました\"}' YOUR_SLACK_WEBHOOK_URL"} を定義します。チーム開発では、コードレビュー依頼の通知としても活用でき、Claude Codeが変更を加えた際にレビュアーに自動通知を送ることで、レビューサイクルの短縮に貢献します。
Slash Commandsとの連携でさらに効率化
Claude CodeのSlash Commands(カスタムコマンド)とHooksを組み合わせることで、開発ワークフローをさらに効率化できます。Slash Commandsは、.claude/commands/ ディレクトリにMarkdownファイルを配置することで定義できるカスタムプロンプトです。たとえば、/review コマンドで「コードレビューを実行し、指摘事項をGitHubのIssueに投稿する」というワークフローを定義し、Hooksで自動フォーマットとテスト実行を連動させることで、一貫した品質管理プロセスを構築できます。
また、プロジェクト固有のSlash Commandsを定義して、チーム全員が同じワークフローを利用できるようにすることも効果的です。たとえば /deploy-staging コマンドで「現在の変更をステージング環境にデプロイし、E2Eテストを実行する」というフローを定義し、HooksでデプロイのSlack通知を自動送信する構成が考えられます。HooksとSlash Commandsの組み合わせにより、Claude Codeは単なるAIコーディングアシスタントから、チーム全体の開発フローを最適化する統合開発プラットフォームへと進化します。開発チームの生産性を最大化するために、ぜひHooksの導入を検討してみてください。