Claude CodeAnthropic の機能

FEATURE

Hooks (フック)

Hooks (フック) は、Claude Code がライフサイクルの特定の時点で実行する、ユーザー定義のシェルコマンドです。

提供中公式発表と照合済み
初出未調査
ページ更新
提供状態提供中
公式の記載で確認できた環境ターミナル、IDE 拡張
提供を確認できたプラン公式に記載なし
目次 CONTENTS
  1. できること
  2. 機能解説
  3. 使い方
  4. 利用シーン
  5. ChatGPT・OpenAI の対応する機能
  6. これまでの変更
  7. 関連する機能
  8. 出典
CAN DO

できること

POINT 01

決まった時点で処理を実行

Claude Code のライフサイクルの特定の時点で、ユーザー定義のシェルコマンドを実行します。編集後のファイル整形やセッション開始時のコンテキスト注入などを、LLM の判断に頼らず毎回実行させられます。

POINT 02

ツール呼び出しの制御

実行前のコマンドをブロックしたり、保護したいファイルの編集を止めたりできます。編集をブロックしたときは理由が Claude にフィードバックとして渡り、Claude はそれをもとに進め方を調整できます。

POINT 03

判断が要る条件の評価

決まったルールでは判断しにくい条件は、Claude モデルで条件を評価する prompt フックや agent フックで扱えます。

GUIDE

機能解説

概要

LLM が実行を選ぶかどうかに頼らず、決まった処理を毎回実行させる決定的な制御に使います。プロジェクトの規則の徹底、繰り返し作業の自動化、既存のツールとの連携に向いています。

Hooks は、Claude Code がライフサイクルの特定の時点で実行するユーザー定義の処理です。イベントが発火すると、該当するフックを並列に実行します。

  • フックは stdin・stdout・stderr と終了コードで Claude Code とやり取りし、イベントごとのデータを JSON で stdin から受け取ります。終了コードでできるのはブロックするか何もしないかだけで、より細かく制御するときは終了コード 0 で終わり、stdout に JSON オブジェクトを出力します。
  • matcher を指定しないフックは、そのイベントが起きるたびに発火します。matcher で発火の対象を絞れます。if フィールドは permission rule syntax でツール名と引数を合わせて絞り込む仕組みで、ツールのイベントでだけ使えます。
  • 多くのフックは "type": "command" でシェルコマンドを実行します。ほかに http・mcp_tool・prompt・agent の型があります。HTTP フックはイベントのデータを HTTP エンドポイントに POST し、command フックと同じ形式の JSON で結果を受け取ります。
  • prompt フックは、プロンプトとフックの入力データを Claude モデルに送って判断させます。agent フックはサブエージェントを起動し、ファイルの読み取りやコード検索などのツールで条件を確かめてから判断を返します。
  • 実現したい内容を CLI で説明して、Claude にフックを書かせることもできます。

ツール呼び出しと権限の制御

  • 複数の PreToolUse フックが許可の判断を返したときは、deny・defer・ask・allow の順で、最も制限の強い判断が適用されます。
  • permissionDecision: "deny" を返すフックは、bypassPermissions モードや --dangerously-skip-permissions の指定があってもツールをブロックします。
  • PermissionRequest フックが "behavior": "allow" を返すと、Claude Code が利用者に代わって許可要求に応答します。PermissionRequest では agent 型のフックは実行されず、command または http フックを案内するエラーが表示されます。
  • PreToolUse と PermissionRequest フックが返す updatedInput は、Claude 自身の入力と同じように検証されます。未知のキーは除去され、ツールが受け付けない入力の場合は呼び出しが拒否されます。
  • command と HTTP フックに onFailure: "block" を指定すると、フックが起動できない・タイムアウトする・想定外の終了コードで終わる場合に、操作を通さずにブロックします。
  • PostToolUse フックはツールの実行後に動くため、実行済みの操作を取り消せません。

設定と導入時に確認したい点

  • フックを追加する場所で、そのフックの適用範囲が決まります。/hooks を実行すると、設定済みのフックをイベントごとにまとめた 1 つのリストで確認できます。
  • フックを無効にするには、設定ファイルで "disableAllHooks": true を指定します。managed settings のフックは、managed settings 側にも同じ指定をしない限り実行されます。
  • allowManagedHooksOnly を設定しているとき、管理設定で強制的に有効化されたプラグインのフックは実行されます。
  • VS Code ではコマンドメニューの Hooks (フック) ダイアログで、user・project・local 設定のフックを表示・追加・編集・削除できます。managed・plugin・session のフックは読み取り専用です。
  • prompt フックと agent フックは、サブエージェントを含めてセッションあたり同時に最大 24 個まで実行され、これに加えてイベントのタイムアウトより長く待ったものが最大 12 個実行されます。
  • 5 万文字を超えるフックの出力は、コンテキストに直接挿入されず、ファイルパスとプレビュー付きでディスクに保存されます。
  • フックの実行結果は、Ctrl+O で transcript view (会話記録の表示) を開いて確認できます。
HOW TO USE

使い方

  1. ~/.claude/settings.json を開き、Notification フックを追加します。ファイルが無い場合は作成します。
  2. Claude Code のプロンプトで /hooks と入力して hooks browser (フックの一覧) を開き、追加したフックが Notification の下に表示されていることを確認します。
  3. Esc で CLI に戻り、ステータスバーに ⏸ manual mode on が表示されるまで Shift+Tab を押します。
  4. 許可が必要な作業を Claude に頼み、ターミナルから別の画面に切り替えます。デスクトップ通知が届けば設定は動いています。
公式ヘルプを開く ↗
USE CASES

利用シーン

CASE 01

.env・package-lock.json・.git/ 内のファイルなど、変更させたくないファイルの編集を止める場面に向いています。

CASE 02

PostToolUse イベントと Edit|Write の matcher を組み合わせ、Claude が編集したファイルに Prettier をかける用途に使えます。

CASE 03

外部のプロセスやエディターが設定ファイルを変更したときに発火する ConfigChange イベントで、変更の記録や許可されていない変更のブロックに使えます。

CASE 04

Claude が入力や許可を待っているときに発火する Notification イベントで、作業の待ち状態を知らせる場面に向いています。

COMPARISON

ChatGPT・OpenAI の対応する機能

比較の単位となる業務: エージェントのライフサイクルイベントに応じたカスタム処理の自動実行とツール呼び出しの制御

Codex の Hooks (フック) と比べると、大きな出力の扱い方に違いがあります。Claude Code では 5 万文字を超えるフックの出力をディスクに保存し、ファイルパスとプレビューを渡します。Codex では、フックのコンテキストのスピル上限を設定できます。

設定を確認する画面も異なります。Claude Code は VS Code のコマンドメニューの Hooks ダイアログで user・project・local 設定のフックを編集できます。Codex アプリにはフックのアプリ内信頼レビューフローがあり、フックの設定が終わる前でも Hooks 設定を開けます。

権限まわりでは、Claude Code の PermissionRequest フックは "behavior": "allow" を返して許可要求に応答できます。Codex では、権限フックが厳格な自動レビューのリクエストを解決できます。

TIMELINE

これまでの変更

  1. UserPromptSubmit フックが、スキルやカスタムスラッシュコマンドの展開前に実行されるようになりました。

  2. モデル切り替えをブロック・確認・注釈できる PreModelSwitch と PostModelSwitch イベントが加わりました。

  3. /add-dir などで作業ディレクトリが追加された後に発火する DirectoryAdded フックが加わりました。

  4. Stop と SubagentStop フックが hookSpecificOutput.additionalContext で Claude にフィードバックを与え、ターンを続行させられるようになりました。

  5. SessionStart フックが reloadSkills: true でスキルディレクトリを再スキャンできるようになり、表示時にメッセージ本文を変換・非表示にできる MessageDisplay イベントが加わりました。

  6. JSON 出力に terminalSequence フィールドが加わり、制御端末なしでデスクトップ通知・ウィンドウタイトル・ベルを出せるようになりました。

  7. シェルを介さずコマンドを起動する args フィールドと、PostToolUse 用の continueOnBlock 設定が加わりました。

  8. PostToolUse フックが hookSpecificOutput.updatedToolOutput で全ツールの出力を置き換えられるようになりました。

  9. type: "mcp_tool" で MCP ツールを直接呼び出せるようになり、PostToolUse と PostToolUseFailure の入力に duration_ms が加わりました。

  10. Windows で CLAUDE_ENV_FILE と SessionStart フックの環境ファイルが適用されるようになりました。

  11. PreCompact フックが加わり、終了コード 2 または {"decision":"block"} でコンパクションをブロックできるようになりました。

  12. settings.json に認識できないフックイベント名があっても、ファイル全体が無視されなくなりました。

  13. UserPromptSubmit フックで hookSpecificOutput.sessionTitle によりセッションタイトルを設定できるようになりました。

  14. PreToolUse フックに "defer" の判断が加わり、ヘッドレスセッションをツール呼び出しで一時停止し、-p --resume で再開してフックに再評価させられるようになりました。auto mode の分類器が拒否した後に発火する PermissionDenied フックも加わりました。

SOURCES

出典

出典 19 件を表示