◉CLAUDE LABEN
●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/Claude Code
⟐ Claude Code/2026-04-27上級

Claude Code Hooks — 中核8フックの設計判断と、33イベントに増えた今の歩き方

Claude Code のフックは強力ですが、どのイベントで何ができるかが曖昧で、結局使いこなせないまま終わる人が多いです。私が半年運用して辿り着いた、フック種別ごとの設計判断と典型的な落とし穴を整理します。

Claude Code265Hooks4自動化87ワークフロー21実践ガイドエージェント設計4

✦ プレミアム記事

Claude Code のフックを本格的に使い始めて半年ほど経った頃、私は同じ壁に何度もぶつかっていました。

ドキュメントには「PreToolUse でツール呼び出し前に何かできます」と書いてあります。でも実務では「その『何か』がまず定義できない」という問題に直面します。フックを設定してみても、思った通りに動かないことが多いのです。設定ファイルを見返しても、エラーが出ているわけでもありません。なのに、何も変化がありません。

この記事は「フックを導入して3ヶ月で挫折した人向けの再入門ガイド」です。骨格となる8種類のフックそれぞれについて、「実務のどんな場面で活躍するのか」を、実際に動いているコード例とともに示します。なお公開後の更新でイベントの数は大きく増えており、2026年8月末時点の公式リファレンスには33種類が並びます。増えた分をどう捉えるかは、後半の「2026年8月時点の全体像」と「PreModelSwitch / PostModelSwitch」の節で扱います。中核の8つを先に押さえる、という本記事の順路は今でも変わっていません。

フックを使う前に押さえるべき設計思想

Claude Code のフックを理解するには「フックは単なるトリガーではなく、フロー制御の仕組みそのもの」という視点が必要です。

従来のコード生成ツールは「プロンプト → コード生成 → 終わり」という一方向です。でも Claude Code は「ユーザー ⇄ Claude Code(フック) ⇄ ツール(git / npm / shell)」という双方向の関係を作ります。

フックはこの双方向性を司る司令塔です。

重要な設計原則は「責任の分離」です。

  • PreToolUse: ツール実行「前」の検証・準備
  • PostToolUse: ツール実行「後」の確認・修正
  • UserPromptSubmit: ユーザー入力の前処理・フィルタリング
  • Stop: フロー全体の停止判定

これらが交差すると、バグのもとになります。「あ、これ PreToolUse でやった方がいい」「いや、これは Stop で判定すべき」という判断が必要です。

もう1つ、頭に入れておくべきは「フックは同期的に動く」ということです。非同期処理(Promise)をフックに入れると、Claude Code は「あ、非同期か」と認識して待ってくれます。でも、その待ち時間が長すぎると、セッションがタイムアウトします。この均衡の取り方が、いちばん難しいところでした。

中核8フックの一覧と用途マッピング

本記事が中核として扱う8種類のフックを、簡易的な用途マッピングで整理します。

読み進める前に、この記事の JSON の扱いをお伝えしておきます。次の3節——「PreToolUse / PostToolUse の使い分け」「UserPromptSubmit でできること」「Session 系フックの活用」——に出てくる JSON は、各フックが何を責務とするのかを掴んでいただくための概念図で、そのままでは動きません。それ以外の節、すなわち Stop / SubagentStop・Notification・モデル切り替え・3つの落とし穴・テンプレート集・設定ファイル・終了コードの各節に載せた設定とスクリプトは、私の手元で動いている実物です。貼って試したい方は、先に後半をご覧ください。

フック名発火タイミング主な用途
PreToolUseツール実行「直前」コマンド検証・キャッシュ確認・セキュリティゲート
PostToolUseツール実行「直後」結果の検証・エラーハンドリング・ログ記録
UserPromptSubmitユーザーメッセージ送信「直前」入力の前処理・プロンプト注入対策・コンテキスト埋め込み
StopClaude が応答を終えようとする「直前」終了の差し止め・やり残しの検出
NotificationClaude Code が通知を出す「とき」許可待ち・待機状態の外部転送
SessionStartセッション開始「直後」初期化・環境変数設定・プロジェクト状態確認
SessionEndセッション終了「直前」クリーンアップ・最終レポート生成
SubagentStopサブエージェントが終了しようとする「直前」サブエージェントの終了の差し止め・やり残しの差し戻し

「いや待って、全部重要に見えるんだけど」という感覚は正しいです。だから、実務では「何を優先するか」を決めることが大事です。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦疑似スキーマではなく settings.json に書く実際の hooks 設定形式(matcher・command・stdin の JSON 契約・exit code 2 でのブロック)
✦2026年8月に33種へ増えたイベントの全体マップと、v2.1.251 で加わった PreModelSwitch / PostModelSwitch でモデル切り替えを運用ルール化する実設定
✦フック追加によるツール実行オーバーヘッドの実測値と、体感を損なわないための閾値設計
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

⟐ Claude Code2026-09-02
モデル切り替えの記録と歯止めを、フック2本で作る
PreModelSwitch と PostModelSwitch を使い、無人実行中のモデル切り替えを記録するフックと、約束していない切り替えだけを止めるフックをゼロから作ります。実測値つきの手順です。
⟐ Claude Code2026-09-01
heredoc のクォートを1つ落とすと、ログに書いた金額や日付が別物になります
未クォートの heredoc は本文の変数とバックティックを実行します。実測した4通りの書き換わり方、3種類のクォート記法の比較、プレースホルダと sed で値を安全に埋める手順、既存スクリプトを棚卸しする検出コードまでをまとめました。
⟐ Claude Code2026-08-31
無音で半分になっていた定期実行と、欠落を捕まえる突き合わせ
1日2回動いているはずのバッチが、実際には1回しか起動していませんでした。エラーは1件も出ていません。期待起動回数と実行記録を突き合わせて、無音の欠落を検出する仕組みを作ります。