Claude Codeにおける「フック(Hooks)」の意味と定義をしっかり押さえる:基本概念を理解するポイントを解説
目次
- 1 Claude Codeにおける「フック」の意味と定義をしっかり押さえる:基本概念を理解するポイントを解説
- 2 Claude Code Hooksの仕組みを理解する:AIエージェントのライフサイクルにおけるフック動作
- 3 Claude Codeが提供するフックの種類(イベント一覧)と各フックの実行タイミング【完全ガイド】
- 4 Claude Code Hooksの設定方法:セットアップ手順と設定ファイルの編集【初心者向けガイド】
- 5 Claude Code Hooksの基本的な使い方:フック登録から実行までの流れと簡単な例を詳しく解説
- 6 Claude Code Hooksの実用例・活用シナリオ集:コード品質向上からCI/CD自動化まで網羅
- 7 Claude Code Hooks利用時のセキュリティ上の注意点:安全に運用するためのベストプラクティス
- 8 Claude Code Hooksによくあるトラブルと対策:フックが動かない場合の原因と解決策を詳しく解説
- 9 Claude Code Hooksのカスタマイズ・応用テクニック:高度な設定方法と活用のヒント【上級編】
Claude Codeにおける「フック」の意味と定義をしっかり押さえる:基本概念を理解するポイントを解説
Claude Codeの「フック (Hooks)」とは、AIアシスタントであるClaude Codeの動作中に特定のイベント発生時に自動実行されるユーザー定義の処理を指します。簡単に言えば、開発者が用意したスクリプトやコマンドを、Claude Codeのワークフロー内の決まったタイミングで差し込み実行する仕組みです。例えばAIがコードを生成する前後や、エラーが起きた時などに、自動で特定のスクリプトを実行できます。これによりAIの判断任せではなく、開発者が意図した決まった処理を確実に行わせることが可能になります。
Claude Codeにおけるフックは、伝統的なソフトウェア開発でいうところのGitのフック(コミット前後にスクリプトを走らせる機能)に似た概念です。ただしClaude CodeではAIエージェントのワークフローに組み込むため、AIによるコード生成プロセス内でフックを動作させられる点が特徴です。Hooks機能の定義と目的を押さえることで、Claude Codeの自動化能力をさらに活用できるようになります。
AI開発ワークフローにおけるHooks機能の役割とは何か:再現性向上と自動化の視点から徹底考察・分析
Claude Code Hooksの役割を一言でいうと、AI支援による開発フローに「決定論的な制御」と「自動化」をもたらすことです。通常、AIエージェントは与えられたプロンプトに基づいてコード生成や編集を行いますが、その挙動は時に非決定的で、実行する処理にムラが生じる可能性があります。Hooksを使うことで、AIエージェントのワークフロー中に重要な処理を組み込み、毎回確実に実行させる仕組みを提供します。
再現性の観点では、フックがAIに頼らずとも常に一定の処理(例えばコード整形やリンターの実行)を行うことで、実行結果のばらつきを抑えます。また自動化の観点から見ると、今まで人手や追加スクリプトで対処していた繰り返し作業をフックに任せることで、開発フロー全体をシンプルかつ効率的にできます。つまり、Claude Code HooksはAI主導の開発プロセスにおける「抜け漏れ防止」と「手順の自動化」という重要な役割を担っているのです。
Claude Code Hooksが解決する課題とは何か?モデル任せの不安を解消する仕組みに迫る【徹底解説】
AIエージェントだけにコード整形やテスト実行などのタスクを任せていると、時にAIがそれらの処理を「忘れてしまう」ことがあります。従来のClaude Codeでは、AIに「コードを生成したらフォーマッターをかけて」とプロンプトで指示するような方法も取れましたが、AIがその要求を無視したり結果が不定になるケースもありました。このようなモデル任せの不確実性が課題となっていたのです。
Hooks機能はまさにこの課題を解決します。開発者がフックとして「必ず実行してほしい処理」を登録しておけば、Claude CodeはAIモデルの判断に関係なくその処理を自動的に実行します。例えばコード生成後に自動でリンターを走らせるフックを設定すれば、AIが忘れようと確実にリンティングが実施されます。この仕組みによって「重要なタスクをAIがスキップしてしまう」という不安を解消し、モデルの非決定的な動作による揺らぎを減らすことができるのです。
AnthropicがClaude Codeにフック機能を導入した理由:従来のAIコーディング手法の限界と課題
Claude Code Hooksが導入された背景には、従来のAIコーディングワークフローの限界があります。フック登場以前、開発者はAIエージェント任せでできない処理を補うために、周辺に独自の自動化スクリプトを組み込むなどの工夫をしていました。しかしこのアプローチにはいくつかの課題がありました。
- 非決定性による不安定さ:AIモデルが任意のタイミングで期待通りの処理をしない可能性があり、プロンプトの書き方次第で挙動が変わる不安定さがありました。
- スクリプト管理の複雑化:AIとは別に外部スクリプトを用意し、実行をオーケストレーションする必要があり、設定が煩雑でメンテナンスが大変でした。
- 可視性・監査性の不足:AIエージェントが裏で何をしているか追跡しづらく、チーム全体でその動作を共有・監査するのが困難でした。
Anthropic社はこれらの課題を踏まえ、Claude Codeにフック機能を導入しました。フックによって、AIコーディングの流れに開発者が決めた処理をシームレスに組み込めるようになり、上記の限界を克服しています。特にバージョン管理システムやCI/CDパイプラインとの統合が容易になり、AIエージェントの動作をチームでコントロール・監視しやすくなった点が大きな理由です。
フック機能の利用がもたらすメリットと効果とは:開発効率・コード品質向上・自動化促進への貢献度を徹底検証
Claude Code Hooksを活用することで得られるメリットは多岐にわたります。まず、開発効率の向上です。面倒な整形作業やテスト実行が自動化されるため、開発者は本来のロジック実装に集中できます。次にコード品質の向上があります。常にフォーマッターやリンターが走ることで、スタイル統一やバグ検出が徹底され、品質がばらつく余地が減ります。
さらに、Hooksは開発フローの自律的な自動化を後押しします。AIとフックが連携することで、CI/CDパイプラインの一部をAIが対話的に担いつつも、決まった処理は確実に実行されます。これにより人手による介入やチェック作業が減り、全体のスループットが向上します。実際の検証でも、Hooks導入後に手戻り作業の削減や平均リリース時間の短縮といった効果が報告されています。総じてClaude Code Hooksは、AI活用の恩恵を享受しつつ開発プロセスの信頼性と効率を大幅に高めることに寄与しています。
Claude Code Hooksの仕組みを理解する:AIエージェントのライフサイクルにおけるフック動作
Claude Code Hooksが内部でどのように動作するかを理解することで、より効果的に使いこなせます。Claude CodeではAIエージェントがコードの生成・編集・実行を行いますが、そのライフサイクルの各所に「フックポイント」が定義されています。開発者はこれらフックポイントに対してスクリプトを登録することで、特定のタイミングで自動処理を挿入できます。つまり、AIエージェントのライフサイクルにフックを差し込むことで、通常のAI動作フローを拡張・カスタマイズできる仕組みなのです。
Claude Codeの動作中、フックが実行されるタイミングはあらかじめ定義されています。例えば「コマンド実行前」や「コマンド実行後」、「エラー発生時」、「セッション終了時」などです。各フックポイントに名前が付けられており、それぞれのタイミングで登録されたフックスクリプトが起動します。AIエージェントがこれからツールを実行しようとする直前や、実行し終わった直後など、ライフサイクルの区切りごとにフック処理が差し込まれるイメージです。
Claude Code動作ライフサイクルにおけるフック実行のタイミング:どの段階でフックが動くのかを押さえる
Claude Codeのエージェントは、コードの提案→ツール実行→結果反映→次の提案…といったサイクルで動きますが、フックはこのサイクル中の要所要所で実行されます。その代表的なタイミングとして、以下のようなイベントがあります。
- コマンド実行前 (Pre-Command):AIが何らかのコマンド(ツール実行やコード編集)を実行する直前。
- コマンド実行後 (Post-Command):AIによるコード変更やコマンドの実行が完了した直後。
- エラー発生時:AIの操作でエラーや予期しない結果が生じたとき。
- セッション終了時:AIエージェントのタスク完了や対話セッションが終了するタイミング。
例えば、AIがコードを編集する旨の出力を出したら実際に適用する前にPre-Commandフックが走り、終了した後にPost-Commandフックが走る、といった具合です。これらの段階を押さえることで、「いつ自分のフックが実行されるのか」を正確に理解できます。
フックが実行される一連の流れと内部制御フローの仕組みを詳しく解説し、その処理順序の全貌を把握するためのポイント
フック実行の流れは次のようになります。まず、Claude Codeが特定のイベントに差し掛かると、該当イベントに登録されたフックの一覧を確認します。フックがあれば、それぞれ順番に対応するスクリプトやコマンドが起動されます。例えばPre-Commandフックが複数登録されている場合、あらかじめ定められた順序(設定ファイル上の順番や優先度による)で一つずつ実行されていきます。
内部的には、Claude Codeが現在どのフェーズにいるかを監視し、該当フェーズ開始時にフック処理をキューイングする形です。AIが「コードを実行します」となった瞬間、Pre系フックをすべて実行し終えるまで本来のコード実行を待機させる制御が入ります。各フックスクリプトが完了すると、Claude Codeは次に進み、AIによる処理を再開します。そして処理完了後にPost系フックを順次実行します。このようにフック→AI処理→フック→…という一連の流れが内部で管理され、処理の前後にフックが差し込まれる仕組みとなっています。
Hooks機能がAIエージェントの処理に与える影響と連携:AIの自由度を制御し、非決定的な動作に対処する
Hooks機能により、AIエージェントの挙動に開発者側からの確定的なアクションを織り交ぜることが可能になります。これは言い換えると、AIの自由な判断に任せていた補助作業を人間が設定したルールで制御できるということです。例えば、AIがコードを生成したあとに必ずフォーマッターを実行するように制御すれば、AIがフォーマットを怠るケースにも確実に対処できます。
またフックを活用することで、AIが本来行わないような外部連携処理を勝手に行わせたり、逆にAIが行うと危険な操作を未然に防ぐこともできます。フック内のコードからAIの出力を検査し、例えば「rm -rf」のような破壊的コマンドが出現したらエラーとして止める、といった安全策も実装可能です。このようにHooksはAIエージェントと連携しつつ、AIには任せづらい部分をしっかり補完します。結果として、AIの非決定的・危険な動作に対処し、AIと人間の強みを組み合わせた信頼性の高いワークフローを実現できるのです。
ユーザー定義スクリプト(シェルコマンド)の実行方法と安全に実行するための仕組み:環境と権限の重要な考慮点
Claude Code Hooksでは、フックとして任意のシェルコマンドやスクリプトを実行できます。例えばBashシェルで書かれたスクリプトをフックに登録すると、該当イベント時にそのシェルスクリプトが実行されます。実行環境としてはClaude Codeを動かしているマシン上でスクリプトが走るため、開発環境のCLIツールやファイルにアクセスすることが可能です。
一方で、安全にフックスクリプトを実行するための仕組みも用意されています。Claude Codeの設定ではフック機能を有効化しない限りフックは動作しないようになっており、また実行されるコマンドは構成ファイルに明示的に記述されたもののみです。スクリプト実行時はそのプロセスが別途起動され、Claude Code本体とは切り離されるため、仮にスクリプトがクラッシュしてもAIエージェント自体のプロセスが巻き込まれないようになっています。
フックスクリプトの実行にあたって留意すべきは環境変数や権限です。スクリプトが期待通り動作するように、必要な環境変数(例えば外部サービスのトークンなど)を設定しておく必要があります。また実行権限については、スクリプトファイルに実行権限(chmod +x)を付け忘れると動かないので注意が必要です。加えて、スクリプト実行ユーザーの権限は必要最小限とし、root権限で危険な操作をしないようにすることも安全性の観点で重要です。
複数フック登録時の優先度設定と競合を防ぐ方法:実行順序の制御とフック衝突防止の仕組みを詳細に理解する
1つのイベントに対して複数のフックを登録することも可能です。その場合、どの順序でフックが実行されるかが問題になります。Claude Codeでは、基本的に設定ファイルに記述した順序や、フック定義に指定する優先度 (priority)によって実行順序を制御できます。例えばPriorityが低い数字のフックを先に実行し、高い数字のフックを後に実行する、といったルールです。優先度を指定しない場合、定義順が適用されます。
複数フックがある場合の競合にも配慮が必要です。例えば「コマンド実行後」に2つのフックが登録されていて、それぞれが同じリソースを更新するような場合です。このような競合を防ぐには、フックごとに条件 (matcher)を付けて適用範囲を限定したり、前述のpriorityを活用して適切な順に処理するようにします。Claude Codeではフックの実行前に現在のフック一覧のスナップショットを取得する仕組みがあり、実行途中で新たなフックが割り込んだりしないようになっています。開発者側でも、複数フックを設計する際は処理順序と影響範囲を整理し、必要に応じてフック間でロックや依存関係を調整することが重要です。
Claude Codeが提供するフックの種類(イベント一覧)と各フックの実行タイミング【完全ガイド】
Claude Codeで利用可能なフックには、いくつかの種類(イベント)が存在します。各フックは特定のタイミングで発火し、そのタイミングごとに意味と用途が異なります。ここでは主なフックの種類と、そのイベントが発生するタイミングおよび典型的な用途について説明します。適切なフック種別を選ぶことで、狙った場面で自動処理を実行できるようになります。
Pre-Commandフック(コマンド実行前フック):実行前に整合性チェックや環境設定を自動実行する
Pre-Commandフックは、AIが実際のコマンド(ツール実行やコード適用)を行う直前に発火するフックです。このフックでは、コマンドを実行する前に必要な準備やチェックを行うことができます。例えば、コードを実行する前にコードスタイルの整合性チェックを走らせ、基準を満たさない場合は実行を中断するといったことが可能です。また環境変数の設定や一時ファイルの用意など、コマンドを走らせる前に必要な環境準備もPre-Commandフックで自動化できます。
典型的な用途としては、安全装置としての役割が挙げられます。AIが生成したコマンドをそのまま実行すると危険な場合、Pre-Commandフックで内容を検査して危険な操作(例えばデータ消去コマンド)を検知したら実行を止めることもできます。これにより、AIの出すコマンドを鵜呑みにせず事前に審査する仕組みを組み込めます。Pre-Commandフックは開発フローの入り口でガードマンのように振る舞い、実行前のあらゆるチェック処理を担う重要なフックです。
Post-Commandフック(コマンド実行後フック):実行後に自動フォーマットやログ送信などの後処理を行う
Post-Commandフックは、AIによるコード変更やコマンド実行が完了した直後に発火するフックです。コマンド実行「後」のタイミングで動くため、いわば後片付けや追加処理を行うのに適しています。代表的な用途は、コードのフォーマット整形やログ記録です。
例えばAIがコードを書き換えた直後に自動フォーマッター (prettier --write など)を実行するようPost-Commandフックを設定しておけば、生成されたコードは常に自動整形されます。また、各コマンドの実行結果を監査ログに残す処理をPost-Commandフックで行えば、どんな操作が行われたかを逐次記録できます。さらに、AIのコード変更後にSlackやメールで通知を飛ばすといったことも可能です。
このようにPost-Commandフックはアクション後の仕上げ処理を自動化するのに役立ちます。人間に置き換えると「作業が終わったら道具を片付けて報告する」工程を忘れずに実施してくれるアシスタントのようなものです。AIがコードを生成・適用した直後のタイミングを逃さずフォローすることで、品質と開発体験の向上に寄与します。
エラー時フック(エラー発生時のフック):AI操作失敗時に自動ロールバックや管理者への通知を実行して安全停止する
エラー時フックは、AIが何らかの操作を行った際にエラーが発生した場合に起動されるフックです。AIエージェントがコードの実行やツール操作で失敗したとき、その事後処理を自動化できます。典型的な使い方は、エラーが起きたことを検知して安全な復旧処理を行うことです。
例えばAIがテストを実行した結果、多数のテスト失敗が出た場合に、エラー時フックでテスト結果ログを要約してSlackに通知するようにすれば、即座にチームに問題発生を共有できます。また、AIの実行が想定外のエラーで停止した際に、システムの状態をロールバックするスクリプトを実行することも可能です。これにより、AIの誤操作でシステムが不安定になった場合でも自動で元の安全な状態に戻すことができます。
さらに、エラー時フックでAIエージェント自身に「エラーが発生した」ことを対話メッセージとして伝えさせ、人間の指示を仰ぐといった実装も考えられます。いずれにせよ、エラー時フックはAI任せにはできない異常系の処理を自律的に補完し、システム全体の安全性・信頼性を高める役割を果たします。
Stopフック(セッション終了時のフック):エージェント完了時にログ収集や終了通知などの後処理を実行する
Stopフックは、Claude Codeのエージェント対話やタスクが完了してセッションが終了するときに実行されるフックです。AIが一連の指示をすべて終えたタイミングや開発セッションを終了したタイミングで動作するため、最後の仕上げ処理に使われます。
Stopフックの典型的な用途は、セッション全体のまとめや後始末です。例えば、セッション中に蓄積したログや生成物を整理・保存するスクリプトをStopフックで実行すれば、その開発セッションの成果や履歴をまとめて記録できます。また「作業が完了しました」といった終了通知をSlack等に送る処理を行えば、チームメンバーにタスク完了を知らせることができます。
他にも、セッション終了時にローカルの一時ファイルを削除してクリーンアップする、AIが出した提案の要点をまとめてレポートする、といった使い方も可能です。Stopフックは人間でいえば「作業終了の報告と後片付け」を自動化する役割であり、これを設定しておくことで作業完了後の抜け漏れを防ぎ、スムーズな次作業への引き継ぎができます。
カスタムイベントフック:ワークフローに独自のチェックポイントを追加して柔軟に処理を拡張し、複雑な統合にも対応する
上記以外にも、Claude Codeではカスタムイベントフックという形で独自のフックポイントを作り出すことができます。これは、開発者が自分のワークフローに合わせて任意のタイミングでフックを仕掛けることを意味します。たとえば、「特定の外部ツールを呼び出す直前」や「一定の対話が完了したと判断した時」など、デフォルトのイベント以外にもフックを挿入できます。
カスタムイベントフックを利用するには、Claude Codeの高度な設定で任意のイベント名を定義し、それにフックを紐付けます。具体例として、テストの粒度によって処理を変えたい場合にon: junit:failedのようなイベントを設定し、ユニットテスト失敗時だけ特別なフック処理(例:エラーログの要約とチケット発行)を走らせることができます。また、開発者独自のスクリプトが完了した際にSubagentStopのようなイベントを発火させ、それをフックトリガーに別のツールを実行することも可能です。
このようにカスタムフックを活用すると、Claude Codeの標準的な流れに縛られない柔軟な処理拡張ができます。複雑な企業内フローや特定プロジェクトの要件に合わせてフックポイントを増やすことで、AIエージェントを自社の開発プロセスに深く統合させることが可能です。カスタムイベントフックは、Claude Code Hooksを単なる決まりきった自動処理ツールから、高度に適応可能な自動化プラットフォームへと昇華させる強力な機能と言えます。
Claude Code Hooksの設定方法:セットアップ手順と設定ファイルの編集【初心者向けガイド】
ここではClaude Code Hooksを使うための初期設定や、フックを登録・管理する方法について説明します。Hooks機能を正しく利用するには、まずClaude Code自体を最新状態にし、フック機能を有効化する必要があります。その上で、フックの登録方法として大きく「設定ファイルを直接編集する方法」と「CLIのコマンド/対話モードで設定する方法」の2通りがあります。順を追ってセットアップ手順を見ていきましょう。
【事前準備】Hooks機能を有効化するための手順:Claude Codeのバージョン確認と機能フラグ設定ガイド
まずはHooksを利用するための事前準備です。Claude CodeのバージョンがHooks機能に対応していることを確認しましょう。一般に2025年7月以降のリリース (バージョン1.0.0以上) でHooksがサポートされています。CLIでclaude-code --versionと実行し、バージョンが十分新しいか確認してください。古い場合は後述の方法でアップデートが必要です。
次に、Claude Codeの設定でHooksモジュールを有効化します。Claude Codeは設定ファイル(JSONやYAML)で機能フラグを管理しています。通常.claude/settings.json等に"features": ["hooks"]のようなエントリを追加し、フック機能をONにする必要があります。初期状態ではフック機能が無効化されていることがあるため、この設定を忘れないようにしましょう。
まとめると、事前準備として「Claude Code本体を最新バージョンにアップデート」「設定ファイルでHooks機能を有効化」という2点を完了させておきます。これでClaude Codeがフック機能を認識し、以降のフック登録手順に進める状態になります。
Claude Code CLIのインストールとアップデート方法:最新バージョンでHooks機能に対応させる
Claude Codeをまだ導入していない場合、もしくはバージョンが古い場合は、CLIのインストールまたはアップデートを行いましょう。Claude CodeはNode.jsおよびPython環境向けに提供されています。
- Node.js環境の場合:npmを使用してグローバルインストールできます。
npm install -g @anthropic-ai/claude-codeと実行すると最新バージョンがインストールされます。既にインストール済みでアップデートしたい場合も同じコマンドで更新可能です。 - Python環境の場合:pipでインストールします。
pip install -U anthropic-cli等のコマンドで最新版にアップグレードしてください(パッケージ名は環境によって適宜確認)。
インストール後、claude-code --versionでバージョンを確認し、Hooks対応版になっていることを確かめましょう。以上でClaude Code本体のセットアップは完了です。最新バージョンになっていれば、Hooks機能関連のコマンド(後述のclaude-code hook ...)も利用できる状態になっています。
設定ファイルでのフック定義方法:.claude/settings.jsonやhooks.dフォルダの編集手順とポイント
Claude Codeでは、フックを設定ファイルに直接定義することも可能です。基本的な方法は、Claude Codeの設定JSONに"hooks"セクションを追加し、その中にイベントごとのフック内容を記述するやり方です。例えば.claude/settings.jsonに以下のような構造を追記します。
{ "hooks": { "PostToolUse": [ { "matcher": "Write|Edit", "hooks": [ { "type": "command", "command": "./scripts/format.sh" } ] } ] } }
上記例では、AIが「Write」や「Edit」操作(コード編集系)を行った後に、./scripts/format.shというスクリプトを実行するPostToolUseフックを定義しています。"matcher"でフィルタをかけ、特定の操作にだけ適用することもできます。複数のフックを登録する場合はこのように配列で記述し、"type": "command"の他に必要なら別の種類も指定可能です。
なお、最近のバージョンでは.claude/hooks.d/フォルダにYAMLやJSファイルを置いてフックを宣言的に記述する方法も提供されています(より高度なカスタムフック向け)。初学者はまず設定JSONで基本を押さえ、必要に応じてこのhooks.dによる高度な定義に進むと良いでしょう。
設定ファイル編集のポイント: Claude Codeが起動中に設定ファイルを書き換えた場合、変更がすぐには反映されない点に注意してください。Claude Codeは起動時にフック設定のスナップショットを取り込み、そのセッション中は同じ内容を使い続けます。したがって、設定を編集した後はClaude Codeを再起動するか、後述するインタラクティブメニューからフックを再読み込みする必要があります。
対話モードでのフック登録:CLI対話UI (/hooksコマンド) を使ったフック設定手順を詳しく解説
Claude Codeは、インタラクティブな対話モードでフックを設定・管理する機能も備えています。Claude Codeを起動している状態で/hooksコマンドを入力すると、専用のフック設定メニューが表示されます。このメニューを使ってGUI的にフックを登録・編集することが可能です。
/hooksコマンドを実行すると、例えば次のような手順になります。
- まず
hooksメニューが開き、既存のフックイベント一覧(Pre-Command、Post-Command等)が番号付きで表示されます。 - 追加・編集したいイベント番号を選択すると、そのイベントに登録されているフックの詳細を確認・変更できます。未登録であれば新規追加画面になります。
- 画面の指示に従って、実行したいコマンドやスクリプトのパス、マッチャー条件などを入力します。
- 設定を保存すると、その内容がClaude Codeの設定に反映されます。
この対話UIは初心者にとっても扱いやすく、設定JSONを直接いじるリスクなくフックを設定できる利点があります。また、複数セッションを跨いで設定変更を適用するオプションなど、安全性の確認プロンプトも用意されており、間違った設定が即座に適用されない仕組みになっています。Hooksメニューを終了するときは変更内容の確認を求められるため、安心してフックの追加実験ができるでしょう。
コマンドラインでのフック管理方法:claude-code hook register/list等の基本操作と便利Tips
Claude CodeはCLIコマンドベースでもフック管理ができます。対話メニューを使わず直接コマンドを叩きたい場合、claude-code hook ...コマンド群が用意されています。主な基本操作は以下のとおりです。
- フックの登録:
claude-code hook register [イベント] [実行するコマンド]
例:claude-code hook register pre-command ./scripts/check-style.sh
この例では「pre-command」イベント(コマンド実行前)にcheck-style.shを登録しています。 - フックの一覧表示:
claude-code hook list
現在有効なフックの一覧とそれぞれのIDが表示されます。イベントごとに登録されたスクリプトを見ることができます。 - フックの削除:
claude-code hook unregister <フックID>
一覧表示で確認したIDを指定して削除します。該当のフックが無効化され、リストから取り除かれます。
これらの操作により、対話UIと同等以上にフックを柔軟に管理できます。特にCI環境など、人が直接操作しない場面では、スクリプトからclaude-code hook registerコマンドを実行して自動設定する、といった使い方も可能です。なお、便利なTipsとして、claude-code hook listで出力されるIDを活用して、プログラム的に一括登録・削除するスクリプトを組むことも考えられます。コマンドラインでの管理は自動化との親和性が高く、使い慣れると大量のフック設定も容易に扱えるでしょう。
Claude Code Hooksの基本的な使い方:フック登録から実行までの流れと簡単な例を詳しく解説
ここでは、Claude Code Hooksを実際の開発フローでどのように使うか、基本的な流れを説明します。フックの登録が完了した後、AIエージェントを起動して作業を進めると、設定した通りにフックが働きます。その一連の流れを把握し、簡単な活用例を通じてHooksの使い所を確認しましょう。また、フックが正しく動作しているかの確認方法や、不要になったフックを無効化・削除する手順についても触れます。
フック登録から実行までの基本フロー:Claude Codeにおけるフック動作の一連の手順と仕組みを理解する
Claude Code Hooksの基本フローは次のようになります。
- フックを登録する – 前述の方法で、狙ったイベントに対して実行したい処理(スクリプトやコマンド)を設定します。
- Claude CodeのAIエージェントを通常通り起動・実行します。コード生成や編集の指示をAIに与えて、開発対話を進めます。
- AIエージェントが処理を進める中で、設定したイベントに到達すると、自動的にフックがトリガーされます。例えばコード編集直後ならPost-Commandフックが起動します。
- フック処理が実行されます – 該当スクリプトがバックグラウンドで実行され、整形・チェック・通知などの処理を完了します。必要に応じてAIのメイン処理は一時停止し、フック完了後に再開します。
- AIエージェントはフック実行結果を取り込みつつ次のステップへ継続します。例えばフックでエラーが無ければ次のプロンプト生成に移ります。
以上が1サイクルです。この流れを繰り返し、最終的にStopフックなどが走ってセッションが終了します。開発者の目線では、最初にフックを仕込んでおけば、あとは普段通りClaude Codeと対話するだけで裏側で自動処理が次々と実行されるというイメージです。Hooksの仕組みを理解すると、AIが何をしてくれて何をフックで補うかの役割分担が明確になり、安心してAIエージェントに任せることができるでしょう。
簡単なフック例(具体例):Pre-Commandフックでコード整形ツールを自動実行する活用シナリオを紹介
基本的な活用例として、コードフォーマッターの自動実行を考えてみましょう。開発では、コードを書いた後に整形ツール(例えばPrettierやgofmt)を実行してコードスタイルを整えることが一般的です。これをClaude Code Hooksで自動化するには、AIがコードを書き終えた直後にフォーマッターを走らせるフックを設定します。
具体的には、Post-Commandフックにprettier --writeなどのコマンドを登録します。これにより、AIがソースコードファイルを生成・編集するたびに、その直後に自動でPrettierが実行され、コードがフォーマットされます。開発者はわざわざ手動でフォーマットをかける必要がなく、生成されたコードは常に規約に沿った形になります。
さらに高度な例として、Pre-Commandフックでリンターを実行し、問題があればコマンドの実行をキャンセルする、という使い方もあります。例えばclaude-code hook register pre-command ./scripts/check-style.shで、コミット前にスタイルチェックするスクリプトを登録したとします。このスクリプトがスタイル違反を検知した場合、終了コードを非0で返すことでClaude Codeの処理をストップさせられます。こうしたシナリオにより、人の手を介さず品質と規約を自動担保できるのがHooks活用の醍醐味です。
Claude Codeでフック有効なエージェントセッションを開始する方法と実行確認の実践ガイドを解説
フックを設定し終えたら、実際にClaude Codeのエージェントセッションを開始してみましょう。基本的には通常のClaude Code利用と同じく、CLIから対話を始めればOKです。フック機能が有効になっている場合(設定ファイルで"hooks"が有効化済み)、セッション開始時に「Hooksモジュールがロードされました」といったログが表示されることがあります。
エージェントを起動したら、試しにフックが働くケースを作ってみます。例えば先ほど設定したフォーマッターのPost-Commandフックを試すなら、AIに「簡単なコードを書いて」と依頼します。AIがコードを生成し、それをファイルに書き込む操作をすると、背後でフォーマッターが実行されるはずです。Claude Codeのターミナル出力には、フックが走った場合にその旨がメッセージで表示されることがあります(「Running hook: format.sh」のようなログ)。これでフック実行が確認できます。
また、/hooks対話メニューを使っている場合は、メニューを閉じてエージェント対話に戻るとフック設定が反映されています。セッション開始後に設定を変更した場合は、一度Claude Codeを再起動してからエージェントを走らせましょう。フック有効下でのセッション開始から終了まで一通り体験すると、どのタイミングで何が自動実行されるか感覚がつかめてくるはずです。
フック実行結果の確認方法:ログや通知メッセージで動作をチェックして正しく機能したか検証する方法を解説
Hooksが正しく動作しているか確認することも大切です。基本的な確認方法はログ出力を見ることです。Claude Codeはフックスクリプトの標準出力・標準エラー出力をコンソールに表示します。例えば、フックスクリプト内でecho "Formatting complete"と出力すれば、Claude Code実行中のターミナルにそのメッセージが現れます。これにより、「あ、今フォーマッターが走ったな」と確認できます。
また、フックスクリプト側でログファイルに結果を書き出すのも有効です。フォーマッターやリンターの実行結果ログを専用ファイルに追記していき、後からそのファイルを見れば、どのセッションで何が起きたか履歴を辿れます。さらに通知系のフック(Slack通知など)では、実際に通知が届いたこと自体が成功の証となります。例えば「テスト失敗要約」のフックを設定したら、Slackの指定チャンネルにAI生成の要約メッセージが届くか確認しましょう。
フックが動いているか疑わしい場合は、Claude Codeのデバッグモードを活用する手もあります。コマンドラインでclaude-code hook listを実行してみて、フックが登録されているか改めて確認したり、特定のフックだけ試すためのテストコマンドを用意するのも一案です。いずれにせよ、ログと通知をチェックしてフックの挙動を検証することで、安心して本番運用できるようになります。
フックを無効化(一時停止)・削除する場合の手順と注意点:一時的に無効にする場合と完全に削除する場合の方法
Hooksを設定したものの、状況に応じて一時的に止めたい、あるいは不要になったので削除したい場合もあるでしょう。その際の手順と注意点を説明します。
一時的にフックを無効化するには、設定ファイルでそのフックの定義をコメントアウトする方法があります。JSONであれば該当部分を削除(または"enabled": falseのフィールドがある場合それを設定)してClaude Codeを再起動します。インタラクティブUIの場合、一時停止の明示的な機能はありませんが、Hooksメニューから該当フックを削除せずに条件を満たさないよう変更する(例えばmatcherにヒットしない値を入れる)ことで実質無効化できます。
完全に削除する場合は、CLIコマンドclaude-code hook unregister を使うのが簡単です。フックIDはclaude-code hook listで確認できます。特定IDをアンレジスターすればそのフックは設定から消え、次回以降発動しなくなります。また設定ファイルを直接編集して該当エントリを削除する方法もありますが、その場合は削除漏れがないよう注意してください。編集後はClaude Codeの再起動を忘れないようにしましょう。
注意点:フックを無効化・削除した際、Claude Codeが現在起動中であれば先述の通りセッション内では古いフック設定が保持されています。したがって、削除直後のセッションではまだフックが効いてしまう場合があります。確実に無効化を反映させるために、全てのClaude Codeセッションを再起動し、claude-code hook listでフックが消えていることを確認すると安心です。
Claude Code Hooksの実用例・活用シナリオ集:コード品質向上からCI/CD自動化まで網羅
Claude Code Hooksは様々な現場で活用できます。その応用範囲は、ローカルでのコード品質改善から大規模なCI/CDパイプラインの自動化、チーム開発でのコラボレーション支援まで多岐にわたります。ここでは代表的なユースケースをいくつか紹介し、実際にどのように開発効率や品質向上に貢献するかを見てみましょう。
Pre-Commandフックを使ったコードフォーマット・リンティングの自動実行によるコード品質向上の実現
開発者にとってコードのフォーマット統一やリンティングは欠かせない作業ですが、手作業では漏れがちです。Claude Code Hooksを用いることでこれを自動化し、常に高いコード品質を維持できます。例えばPre-Commandフックにて、AIがコードを書き込む前にリンター (ESLintやFlake8など)を必ず実行するよう設定します。違反が見つかった場合、リンターが非ゼロ終了コードを返してAIのコード適用をブロックする、といった仕組みです。
また、Post-Commandフックでフォーマッターを掛けることも品質向上に大きく寄与します。AIが出力したコードに対し自動フォーマットを即座に実行するため、どんな場合でもコードスタイルがプロジェクトの規約に沿った状態で保たれます。人がフォーマット忘れを指摘する手間が省け、コードレビューでもスタイル指摘に時間を割かずに済むでしょう。
このようにHooksでフォーマット・リンティングを組み込む運用は、多くの開発現場で「静的解析の徹底」と「レビュー負担軽減」というメリットをもたらしています。AI支援下でも人間と同等以上にコード品質が確保できるのは大きな効果です。
Post-Commandフックでテスト結果を自動要約・通知してCIパイプラインを効率化する事例を紹介
CI/CDパイプラインでHooksを活用すれば、AIがテスト結果を解析して自動通知するなど、一歩進んだ自動化が実現できます。例えば、テスト実行後にPost-Commandフックでテスト結果のサマリーを作成しSlackに通知する事例があります。AIが膨大なテストログを読み取り、失敗したテストの一覧や主要なエラー原因を自然言語でまとめてくれるため、開発者は即座に重要ポイントを把握できます。
具体的には、CI上でユニットテストを走らせる際、テスト完了を検知してon: junit:failedのようなカスタムイベントフックを発火させます。そのフックでAIに「テスト失敗の要約と優先度」を書かせ、それをSlack API経由でチームに共有する、といった流れです。結果、CIの結果を人が逐一ログから読み解かなくても、AIがポイントをまとめて知らせてくれるようになります。
さらに、Post-CommandフックでJenkinsやGitLab CIのステータスに連動し、テスト結果に応じてCIを通す/止める判断に役立てることも可能です。こうしたHooks活用により、CIパイプラインがより賢くなり、チームの反応速度・効率が向上した事例が報告されています。
脆弱性検出時に自動アラートとロールバックで即対応:Claude Code Hooksで実現するケース
セキュリティ面でもHooksは威力を発揮します。例えば、依存ライブラリの脆弱性スキャンを自動化し、高リスクな脆弱性が検出された場合に即座にアラートを発し対処するケースです。CIパイプラインに脆弱性スキャンツール(SnykやTrivyなど)が組み込まれている場合、その結果に応じてフックを発火させます。
具体的には、on: vulnerability:highのようなイベントでカスタムフックを設定し、重大な脆弱性が見つかった際にClaude Codeが自動で影響範囲の分析と通知を行います。AIが「このライブラリの脆弱性はシステム全体に大きな影響を及ぼす可能性があります」などとレポートし、Slackやメールでセキュリティ担当者に送信します。同時に、必要に応じてデプロイのロールバックを自動実行させることも可能です。
例えば、本番環境にデプロイ直後に監視アラート閾値を超えた場合、Hooksが検知してAIにログ解析させ、「原因は新バージョンのX機能にある可能性」が特定されるとします。すると自動的にkubectl rollout undo等を実行して前の安定版にロールバックする、という流れです。これにより深夜に担当者が駆けつける前にシステム復旧が始まるなど、平均復旧時間 (MTTR) が大幅短縮した例もあります。
Pull Requestレビューの自動化:フックでAIがコード変更をチェックし自動コメント投稿を実現
Claude Code Hooksはチーム開発のコードレビューにも応用できます。具体的には、GitHubやGitLabのPull Request (PR) に対して、AIが自動で内容チェックを行いコメントを投稿する仕組みです。例えば、AIがPR中のコード差分を読み、潜在的なバグや改善提案を見つけてコメントすることで、レビュワーのサポートを行います。
これは、CIパイプラインからPRイベントを検知してフックを動かす実装になります。コードがプッシュされPRが作成された際に、Claude Codeをエージェントとして起動し、差分内容をインプットとして「この変更箇所の問題点を指摘して」とプロンプトするのです。AIが生成した指摘コメントをGitHub API経由でPRに投稿するところまでを自動化します。
実際の活用例では、単体テスト不足を指摘したり、境界条件の漏れをコメントしたりと、AIがレビュアーの観点を補完しています。HooksによるPRレビュー自動化は、開発スピードを落とさず品質チェックが強化できるため、特に大規模チームや高速リリース環境で有用でしょう。もちろん最終判断は人間が行いますが、AIの下準備によってレビュー効率が飛躍的に向上します。
タスク完了時の通知と個人ワークフロー改善:Claude Code HooksとSlack連携の活用例
個人開発の効率化にもHooksは役立ちます。例えば、長時間かかるAIタスクが完了した際に自分のスマホに通知が飛ぶようにすれば、席を離れていても完了を知ることができます。Claude Code HooksとSlackやモバイルプッシュサービスを連携させることで、このようなパーソナルな通知システムを構築できます。
具体例として、Stopフックでcurlなどを使いSlackのWebhookにメッセージを送るスクリプトを実行すれば、「Claude Codeの作業が完了しました」という通知が自動送信されます。ある開発者は、AIエージェントがタスクを終えると自分にSMSを送る仕組みをHooksで構築し、PCから離れて作業していても即座に結果を確認できるようにしたそうです。
また、個人プロジェクトで定型的な作業(環境構築やデプロイなど)をHooksに任せてしまう例もあります。これにより手作業ミスが減り、安心して開発に集中できるという効果があります。小規模な現場でも「自分専用のAI助手」としてClaude Code Hooksを使いこなすことで、従来は人力でやっていた雑務から解放されるでしょう。
Claude Code Hooks利用時のセキュリティ上の注意点:安全に運用するためのベストプラクティス
Claude Code Hooksは強力な反面、使い方を誤るとセキュリティリスクも孕みます。フックは任意のシェルコマンドを実行できるため、慎重に運用しないと不正なコード実行や情報漏洩に繋がる恐れがあります。ここでは、Hooks利用時に特に注意すべきポイントと、安全に運用するためのベストプラクティスを解説します。
フック実行による潜在的リスク:任意コード実行やデータ破壊の危険性に注意し、十分に理解しておく必要がある
まず認識すべきは、Hooksを使うと任意のコードが自動実行されるという事実です。便利な反面、これは極端に言えば「OS上で自由にコマンドを走らせる」ことでもあります。そのため、開発者自身が記述したスクリプトとはいえバグや不備があると、誤って重要データを削除したり外部に漏洩させたりする危険性があります。
特に破壊的なコマンド(例:rm -rf)を実行するようなフックは要注意です。AIが生成したコマンドをフックでチェックせず実行してしまうと、最悪の場合システムに致命的な損害を与える可能性もあります。従って、Hooks導入時には「このフックは何をするのか」「最悪どういう事態が起こりうるか」を十分理解し、必要ならテスト環境で検証することが必要です。
また、フックで扱うデータにも気を配りましょう。万が一フックスクリプトに脆弱性があると、悪意ある入力で不正コード実行を招くリスクもゼロではありません。まとめると、Hooksは便利さと引き換えに任意コード実行リスクを内包するため、その点を肝に銘じて安全策を講じる必要があります。
なぜセッション中のフック設定変更が即時反映されないのか:安全のためのスナップショット機構を徹底解説
Claude Codeではセキュリティの一環として、フック設定のスナップショット機構が採用されています。具体的には、Claude Code起動時に現在のフック設定をキャプチャし、そのセッション中は同じ設定を使い続けます。これが意味するのは、セッション開始後に設定ファイルを改変しても、基本的にその変更は即座には適用されないということです。
この設計は、実行中のセッションに外部から悪意あるフック変更を加えられないようにするためです。もしリアルタイムに設定が反映されると、AIエージェントが動いている最中に第三者が設定ファイルを書き換えて危険なフックを忍ばせる、といった攻撃が理論上可能になります。それを防ぐため、Claude Codeは起動時に読み込んだフック設定以外は受け付けず、さらに外部で設定が変わった場合には警告を出す仕組みになっています。
したがって、セッション中にフックを追加・変更したい場合は、安全のために一旦Claude Codeを再起動して新しい設定を適用する手順が推奨されます。対話型メニュー経由で変更した場合も、内部的には確認プロンプトを挟んで適用するため、突発的な変更は行われません。このようにスナップショット機構により、Hooks設定は改ざんや不整合から保護されているのです。
最小権限の原則で安全性を確保:フックスクリプトに付与する権限を限定(IAMロール等)し被害を最小化する
Hooks運用における重要なセキュリティ原則の一つが「最小権限の原則 (Principle of Least Privilege)」です。つまり、フックスクリプトにはその役割を果たすために必要最低限の権限だけを与える、ということです。例えば、Gitの操作をするフックスクリプトであればリポジトリへの書き込み権限だけ付与し、サーバ全体の管理者権限などは与えるべきではありません。
クラウド環境でClaude Codeを使っている場合は、AWS IAMロールやGCPサービスアカウントといった仕組みで権限を細かく制御しましょう。外部API呼び出し用のトークンもScopeを絞ったものを使います。ローカル環境でも、可能であればClaude Codeを管理者権限ではなく通常ユーザー権限で実行し、フックが重要ファイルを触れないようにする工夫が考えられます。
また、フック用のスクリプト自体も権限を限定しておくと安心です。例えばスクリプトファイルの所有者・パーミッションを厳格に設定し、他ユーザーが書き換えられないようにします。万一フックスクリプトが悪用されても被害範囲を局所に留めることができます。最小権限の原則に従うことで、Hooks実行時の万一のリスクを最小化し、安全な運用を実現できます。
AI利用コストと実行頻度の監視:claude hooks statで利用状況を可視化しコスト増大を防止
AIを活用した自動化では、API利用コストや処理時間も管理の一環として考慮すべきです。Hooksを設定すると、多数の自動処理が走るため、場合によっては予想以上にAPIコストや計算リソースを消費する可能性があります。そこで役立つのが、Claude Codeの提供する統計コマンドやモニタリング機能です。
claude-code hooks statコマンド(あるいはGUI上の統計表示)は、フックの実行回数や消費したAPIトークン数、実行時間などを集計してくれます。これを月次や週次で確認することで、「このフックは月に何回動いて、だいたいどれくらいコストがかかっている」という情報を把握できます。
必要に応じて、AnthropicのAPI側でコスト上限 (costLimit)を設定したり、Claude Code側でHooksの実行頻度に制限を設けることも検討しましょう。例えば1日1回以上は同じ通知を送らないといったロジックを入れることも可能です。また、実行頻度の高いフック処理はより効率的な実装に見直すことも重要です。こうした監視と最適化により、便利さの裏でコストが膨れ上がるのを防ぐことができます。
重大操作には承認フロー導入:重要処理は人的レビューを要求し多重ガードレールで安全性を担保する仕組みを構築
最後に、特に破壊的・重大な操作を行う可能性があるフックについては、人的な承認フローを取り入れることが推奨されます。AnthropicのHooks機能には、特定のフック処理に対してrequires: reviewer_approvalのように人間の確認を要求するオプションも存在します。これを設定すると、AIが実行しようとした重大コマンドに対し、実行前に人の承認を得るまで止めることができます。
例えば本番データベースを変更するようなフックには二重・三重のガードレールを敷きます。具体的には、フック実行前にSlackで管理者に承認ボタンを押させる、あるいはCLI上でYes/Noの確認入力を求めるような仕組みです。また、Hook設定そのものの変更時にもチーム内でセキュリティチェックリストを用いてレビューする運用が効果的です。新しいフックを導入する際にはPull Requestで「このフックは想定外に危険な操作をしないか?」といった項目をチェックし、DryRun結果などを添付してレビューすることで、ミスや見落としを防げます。
要するに、技術的ガードレール + 人的プロセスのハイブリッドで安全性を確保するのがベストプラクティスです。AIとHooksが高度化しても最終的な責任は人間にあります。承認フローの導入は煩雑に見えますが、重大事故を未然に防ぐための保険として是非取り入れてください。
Claude Code Hooksによくあるトラブルと対策:フックが動かない場合の原因と解決策を詳しく解説
Claude Code Hooksを使い始めた際に直面しがちな問題と、その対処法をまとめます。フックが期待通りに動かない場合でも、原因を切り分けて対策すれば解決できるケースがほとんどです。以下に、よくあるトラブルのシナリオ別にチェックポイントとソリューションを解説します。
フックが動作しない場合の基本チェック:設定ファイルでhooks機能が有効か、バージョンを確認する方法
まず「フックがまったく発動しない」「何も起きない」という場合に確認すべき基本事項があります。
- Hooks機能が有効化されているか:Claude Codeの設定ファイルに
"hooks"モジュールの有効化設定を入れ忘れていないか確認します。.claude/settings.jsonの"features"に"hooks"が含まれているかをチェックしてください。 - Claude Codeのバージョン:Hooks機能対応のバージョンか確認します。古いバージョンではHooks自体が動作しないため、
claude-code --versionでバージョンを確認し、必要ならアップデートしましょう。 - フックの登録状況:期待するイベントに対してフックが正しく登録されているか、
claude-code hook listで一覧を確認します。登録漏れやタイポがないか見直してください。
以上が基本のチェックリストです。多くの場合、このどれかが原因でフックが動かないケースが見られます。例えば、設定ファイルには書いたがClaude Code再起動をしておらず無効だった、バージョンが古かった、実はイベント名を間違えていた、等です。これらを確認しても問題ないのに動かない場合は、次項以降の具体的なトラブル例に当てはまらないか見ていきましょう。
設定ファイルの変更が反映されない問題:Claude Code再起動と/hooks登録の対処法を詳しく解説
「設定ファイルにフックを書いたのに動作しない」という相談が非常に多いです。この原因の多くは前述したスナップショット機構によるものです。Claude Codeを起動したまま.claude/settings.json等を編集してフックを追記しても、現在のセッションではその変更が反映されません。
対処法: Claude Codeを一度終了し、再起動してください。起動時に最新の設定ファイルを読み込むため、編集したフックが有効になります。また、Claude Codeを複数ターミナルで起動している場合(複数セッション)には、全て停止してから再度立ち上げます。片方だけ再起動してももう片方には古い設定のスナップショットが残るため、全セッションリセットが必要です。
さらに、どうしても再起動せずに反映させたい場合は、前述の/hooks対話メニューから設定する方法があります。/hooksメニューでコマンドを登録すると、現在のセッションにも即時反映されます(ただし適用時に確認が求められます)。しかし基本的には、設定変更→Claude Code再起動が確実でトラブルも少ないでしょう。この一手間を惜しまないことで「編集したのに動かない!」と頭を抱える事態を防げます。
複数セッションで設定が反映されない場合の対応策:全セッションを一度切断し再接続する必要がある
Claude Codeを複数のターミナルやウィンドウで同時に起動している場合、フック設定の変更反映が思ったようにいかないことがあります。例えば、一つのセッションで/hooksコマンドからフックを登録したが、もう一つのセッションでは動作しない、といったケースです。これは各セッションが独立したフック設定スナップショットを持っているために起こります。
対処策: 複数起動しているClaude Codeセッションがある場合、設定変更後に全セッションを一度終了してください。その上で新たに必要なセッションを立ち上げ直せば、すべて最新の設定が反映された状態になります。特に対話UIで設定を弄った場合、別セッションには伝わらないので注意が必要です。
もし「どうしても多重起動が必要」という場合には、設定ファイルを共有せずセッションごとに別設定を使う手もありますが、一般的には複数起動はHooks設定の同期に悩む原因になるため避けた方が無難です。同時実行しなければならないときは、設定変更のたびに両方再起動するくらいの気持ちで運用しましょう。
フックスクリプトが実行されない場合:パスや実行権限、エラー出力をチェックして原因を特定する方法を解説
フック自体は起動している様子だが、肝心のスクリプトがちゃんと動いていないというケースもあります。例えば「フックでSlack通知を設定したのに通知が来ない」といった場合です。その際に確認すべきポイントは次の通りです。
- パスの指定ミス: 設定ファイルに書いたスクリプトのパスが正しいか確認します。相対パスの場合、Claude Codeのカレントディレクトリ基準になるため、期待する場所を指しているか要チェックです。
- 実行権限: スクリプトファイルに実行権限 (
chmod +x) が付与されているか。権限がなければフックから起動できません。 - エラー出力: ターミナルにスクリプトのエラーが出ていないか確認します。例えば「command not found」やパーミッションエラーが出ていれば原因特定に直結します。
- 依存ツールの有無: スクリプト内で使っているコマンドが実行環境にインストール済みか。CI環境などではツール不足が原因のこともあります。
上記を順に潰していくことで、多くの場合原因が判明します。例えば、Slack通知スクリプトが動かない場合、curlコマンドがインストールされておらず失敗していた、といったケースもあります。Claude Codeはフック実行時のエラーをコンソールに出力しますので、ログをしっかり確認することが解決への近道です。必要に応じてスクリプトを単体で実行してみて、期待通り動くか検証するのも有効です。
フック実行中のエラー・ハングアップ:終了コードとタイムアウト設定でシステム停止を防ぐ対処と予防策を解説
フックスクリプト自体がエラーを起こしたり、実行がハングアップしてしまった場合の対処法です。まず、フックスクリプトが非ゼロの終了コードを返した場合、Claude Codeはその時点でメインのAI処理を停止しエラーとして扱います。したがって、フック失敗が原因でAIエージェントが先に進まないことがあります。
対処: フックスクリプト内でエラー処理を行い、可能な限り最後はexit 0で正常終了させるようにしましょう。失敗を無視して続行してよいケースでは、エラーをキャッチしてもプロセスを落とさない工夫が必要です。一方、失敗を検知して止めること自体が目的の場合は、適切にエラーメッセージを出力して原因が分かるようにしておきます。
次に、フック処理が長時間終わらないケースです。例えば外部API待ちでハングしたり、無限ループに陥った場合、Claude Codeのメインループも止まってしまいます。この対策として、タイムアウトを設定すると良いでしょう。Linux系ならtimeout 10s ./myscript.shのように指定して、一定時間で打ち切る仕組みを組み込みます。これにより、フックがハングアップしてもAIエージェント全体が無期限にブロックされるのを防げます。
さらに予防策として、複雑なフックはDryRunで挙動を確認し、処理時間や失敗パターンを把握しておきます。終了コード管理とタイムアウト設定を徹底することで、フックが原因のシステム停止や遅延トラブルを未然に防ぐことができます。
Claude Code Hooksのカスタマイズ・応用テクニック:高度な設定方法と活用のヒント【上級編】
最後に、Claude Code Hooksをさらに高度に使いこなすための応用テクニックを紹介します。標準的な使い方に慣れたら、より柔軟な条件指定や複雑な処理の実装、外部ツールとの統合などに挑戦してみましょう。ここでは上級者向けのカスタマイズ方法と、その際のポイントを解説します。
YAMLフック定義で高度な条件指定:任意イベント(例:テスト失敗)をトリガーに自然言語プロンプトで柔軟なフローを構築
Claude Codeの高度な機能として、YAMLファイルでフックを定義する方法があります。これは、JSON設定よりも宣言的かつ柔軟にフック条件を記述できる手段です。例えば.claude/hooks.d/フォルダにjunit-summary.yamlのようなファイルを作り、そこに
on: junit:failed prompt: | テストが失敗したので、エラーログを要約してPull Requestにコメントしてください。
のように書きます。こうすると、ユニットテストが失敗したイベント(junit:failed)で自動的にAIが指定のプロンプトに従い動作します。Prompt部分は自然言語で指示を書けるため、AIに対して「〜してね」といった高度な依頼を組み込めます。これに外部投稿の設定を組み合わせれば、例えば一行のYAML定義で「テスト失敗時にAIがエラー原因を要約→Slack送信→Jiraチケット起票」といった多段処理も実現できます。
YAML定義では優先度や排他制御も宣言的に書けます。priority: 10のように数値を付与すれば複数フック間の実行順序も簡単に制御できます。また、matcher:で詳細な条件マッチ(正規表現等)を指定することも可能です。YAMLフック定義はGUI操作なしでGit管理できるため、高度なチームカスタマイズに向いています。
JavaScriptモジュールによる複雑ロジック注入:動的プロンプト生成や外部API呼び出しまで実装可能
Hooksの標準機能だけでは足りない場合、カスタムJavaScriptモジュールをフック処理に組み込むことも可能です。Claude CodeはNode.js環境と親和性があり、YAML定義内でhandler: ./myHook.mjsのように指定すれば、そのJSモジュールを介してフック処理を行えます。
このJavaScript内では、自由にプログラミングしてよいので、例えば動的にプロンプトを生成したり、複数の外部APIを順次呼び出すなど、複雑なロジックを注入できます。具体例として、Pull Requestの変更行数に応じて要約の詳細度を変える、あるいはOpenTelemetryで取得したトレースIDをAIのプロンプトに付加して精度を上げる、といった工夫もできます。
JSハンドラを使う場合は、Claude Code提供のHookEventオブジェクトを扱います。例えばTypeScript環境ではHookEvent型が定義されており、event.toolやevent.argsを読んで条件分岐が可能です。JS内からreturn event;で修正済みイベントを返せば、Claude Code側の処理に反映させることもできます(例えばコマンド引数を書き換える等)。このように、プログラミング可能なフックにより、単純なシェルコマンド以上のカスタマイズが実現できます。
フック開発のデバッグ方法:claude debugコマンドでDryRunし、スタブレスポンスとトークン消費量を可視化して動作確認
複雑なフックを開発・調整するときは、いきなり本番適用せずデバッグモードで試すのがおすすめです。Claude Codeにはclaude debug --hook <フック名>コマンドが用意されており、指定したフックをDryRunできます。DryRunではAIの応答をスタブ(模擬的な固定レスポンス)に置き換えたり、トークン消費量を計測するなど、本番さながらに動作確認が可能です。
例えば、Slack通知フックをデバッグする際、実際にSlackに送る代わりにコンソールに「(通知送信テスト)」と表示するスタブを返すよう設定してDryRunすれば、何度試しても実際の通知は飛びません。また、フック処理全体にかかった時間や消費APIトークン数も出力されるため、負荷の見積もりができます。この情報を基にフック処理をチューニング(例えばプロンプトを簡略化してトークン節約、並列処理を減らして処理時間短縮など)することができます。
デバッグ時に特に注意すべきなのは、フック処理内で同期的な重い処理をしないことです。例えば大きなファイルI/Oや無限待ち状態になると、DryRunでもそれがボトルネックになります。Claude Codeではデフォルトで10秒程度のタイムアウトがありますので、それに収まるよう設計するのが定石です。デバッグ→チューニングのサイクルを回し、安全かつ効率的なフックに仕上げてから本番投入しましょう。
外部サービス連携の応用:Slack通知やJiraチケット作成をuses:mcp経由の簡潔設定で実現する
Claude Code HooksはAnthropicのMCP (Multi-Channel Provider) 機能を介して、さまざまな外部サービスと簡単に連携できます。YAML定義内でuses: mcp://slack-notifier@prodのように記述し、CLAUDE_MCP_TOKEN 環境変数に認証トークンを設定しておけば、Slack通知を行うマイクロサービスを呼び出せます。複雑なHTTPリクエスト処理を自前で書かずに済むため非常に便利です。
同様に、uses: mcp://jira-ticket@prodのようなエンドポイントがあれば、AIがまとめた内容で自動的にJiraのチケットを起票することも可能です。これらMCP経由のサービス呼び出しは、Anthropicが用意した外部連携モジュールを利用する形になっており、セキュリティトークンも一元管理できるメリットがあります。
要するに、外部サービス連携はHooksで非常に簡潔に書けるのです。Slack通知とJira起票を合わせても数行のYAMLで済むため、開発者は本来のロジックに集中できます。もちろん自前でcurlを使ってREST APIを叩く方法もありますが、MCPの活用で保守性・安全性が向上します。クラウドの他サービスや社内APIとの連携も、この仕組みを使えば柔軟に組み込めるでしょう。
チーム導入時の運用工夫:テンプレート化とセキュリティチェックで安全なフック開発運用ノウハウを共有する
最後に、チーム全体でHooksを活用する際の運用上の工夫について触れます。組織でHooksを導入する場合、誰か個人だけが詳しくても属人化してしまうので、ナレッジをテンプレート化・共有することが重要です。
例えば「新しくHooksを追加する際のチェックリスト」を作成します。その中にはセキュリティ項目(権限は最小限か、危険なコマンドがないか)、コスト項目(想定実行頻度とコスト見積もり)、テスト項目(DryRun結果の確認)などを盛り込みます。実際にフック用YAMLファイルのGitHub Pull Requestを作成する際に、このチェックリストへの回答やDryRunログを添付し、他の開発者がレビューできるようにします。こうしたプロセスをテンプレート化することで、誰がフックを追加しても一定水準の安全性・品質が担保されます。
また、よく使うフックのパターン(例えばSlack通知用、フォーマッター用など)は社内向けにテンプレートを用意し、コピペで使えるようにしておくと便利です。さらに定期的にclaude-code hooks statの結果を皆で振り返り、「最近このフックの実行が増えているが費用対効果はどうか」など議論する場を設けるのも有効です。チーム全員でHooks運用ノウハウを共有し、継続的に改善していく体制を築くことで、Claude Code Hooksは単なる個人技ではなく組織の力として機能するでしょう。