機能深掘り
Claude Code Hooks:AI コーディングを自動化し、危険操作を防ぐ
Hooks は Claude Code の決定的な層です。すべての編集後に自動フォーマット、すべての操作をログに記録し、危険な操作は実行前にブロックします。設定の全手順をスクリーンショットで解説します。

全 12 ステップの図解ウォークスルーで、読了約 4 分。各ステップはソース動画の対応する瞬間へリンクしています。
TL;DR
Hooks は、Claude Code がライフサイクルの固定されたタイミングで自動実行するコマンドです。CLAUDE.md の指示は確率的にしか守られませんが、hooks は決定的で、イベントとマッチャーが一致すれば必ず実行されます。hook はイベント(例:PostToolUse)、任意のマッチャー(例:Edit|Write)、コマンドの 3 つで構成されます。hooks を .claude/settings.json に書けばチームと共有でき、スクリプトは $CLAUDE_PROJECT_DIR 経由で参照すれば作業ディレクトリの変更に影響されません。PreToolUse フックを終了コード 2 で終了させればツール呼び出しをブロックし、その理由を Claude に返せます。
ソース動画
このページは Claude 公式の hooks 解説動画に沿って、登場する設定を順に再構成したものです。各スクリーンショットは映っている正確な瞬間へリンクしています。
スクリーンショットは動画のフレームを制作者へのクレジット付きで使用しています。本文は独自執筆です。手順は 2026 年 9 月に動画と照合済みです。
hook の仕組み
JSON ブロック 1 つ:イベント、マッチャー、必ず実行されるコマンド。
- 1
問題から始める:プロンプトの指示は信頼できない
CLAUDE.md に「すべての編集後に eslint を実行して」と書けば、たいていの場合 Claude は従います。でも、見逃した一度でファイルが壊れるなら「たいてい」では足りません。hooks は「毎回必ず実行したい」処理のための仕組みです。

モデルが黙ってスキップしうる CLAUDE.md のルール。0:30 から視聴 - 2
hook の構造:イベント、マッチャー、コマンド
hooks は settings.json の hooks ブロックに書きます。イベント(ここでは PreToolUse)、任意のマッチャーで対象ツールを絞り(ここでは Bash)、実行するコマンドを指定します。条件に一致した呼び出しは例外なくフックが実行されます。

PreToolUse + Bash マッチャー + block-dangerous-commands.sh。0:14 から視聴 - 3
1 つのファイルに 2 つの自動化
完成した設定は上から読めます。ファイル編集ツールの呼び出しの後は auto-format.sh がコードを整え、Bash 呼び出しの後は log-commands.sh がコマンドをコンプライアンスログに追記します。どちらも .claude/hooks に置いた普通のプロジェクトスクリプトです。

フォーマットとログ記録の PostToolUse エントリーが並ぶ。0:36 から視聴
雑務を自動化する
二度言わせない:編集のたびにフォーマット、コマンドのたびにログ。
- 4
ファイル編集用のマッチャーを追加する
編集後にフォーマットしたい場合は、PostToolUse に Edit、MultiEdit、Write を対象にしたマッチャーを追加します。下には既に Bash ログ用のフックが入っています。

Edit マッチャーを入力中。その下に Bash ロガー。1:30 から視聴 - 5
コマンドをプロジェクトスクリプトへ向ける
command フィールドは任意のシェルコマンドを実行します。入力中に VS Code のオートコンプリートが .claude/hooks のパスを補完します。hook スクリプトは専用フォルダにまとめるのが鉄板です。

オートコンプリートが .claude/hooks へのパスを入力中。1:38 から視聴 - 6
タイムアウトを設定し、フックでセッションが止まらないようにする
完成したエントリーは Edit・MultiEdit・Write を .claude/hooks/auto-format.sh に接続し、タイムアウトを 20 秒に設定しています。スクリプトは拡張子を見て prettier、go fmt、ruff など、プロジェクトのフォーマッターを実行します。

auto-format.sh がすべての編集を 20 秒タイムアウト付きで処理。1:39 から視聴 - 7
Stop フックの実行をリアルタイムで見る
フックはツール呼び出し以外のライフサイクルイベントでも発火します。画面のステータス行は、セッション終了前に実行される Stop フックとそのタイマー、トークン数を表示しています。Claude が入力を求めたときには Notification イベントも同じように発火します。

「running stop hook」とタイマーが表示されたステータス行。0:08 から視聴
危険な操作をブロックする
PreToolUse フックが、破壊的なコマンドを実行前に拒否します。
- 8
危険なコマンドを拒否する PreToolUse フック
ブロックスクリプトは jq でツール入力を JSON として読み、破壊的な rm パターンや force push を grep で検出し、理由を stderr に書いて終了コード 2 で終了します。Claude は理由を見て、実行する代わりに軌道修正できます。

終了コード 2 が呼び出しをブロック。stderr が Claude へのフィードバックに。1:54 から視聴 - 9
構造化 JSON で拒否を返す
より強い保証が必要な場合、フックは hookSpecificOutput(JSON ペイロード)で PreToolUse 呼び出しを拒否できます。この例は DROP TABLE をブロックし、マイグレーションの利用を促します。本番環境は無傷のままです。

jq で組み立てた拒否決定が Claude をマイグレーションへ誘導。2:16 から視聴
チームと hooks を共有する
プロジェクト設定と /hooks メニューで、全員が同じガードレールの下で作業できます。
- 10
hooks はマシンではなくプロジェクトに置く
.claude/settings.json の hooks はプロジェクトレベルです。このファイルをコミットすれば、チーム全員の次のセッションに同じガードレールが自動で適用されます。スクリプトは隣の .claude/hooks に置きます。

コミット待ちの .claude 内 hooks と settings.json。2:30 から視聴 - 11
パスには $CLAUDE_PROJECT_DIR を使う
Claude の作業ディレクトリはセッション中に変わることがあるため、相対パスは壊れます。$CLAUDE_PROJECT_DIR 変数は常にプロジェクトルートを指すため、どこから実行してもフックスクリプトを解決できます。

project-dir 変数がコマンドパスを固定する。2:38 から視聴 - 12
/hooks メニューで設定を監査する
Claude Code 内で /hooks を実行すると、設定済みのフック、そのイベント、発火条件の一覧が表示されます。このメニューは読み取り専用。追加・変更は settings.json を編集するか、Claude に依頼します。

/hooks メニューが 5 件のフックを一覧表示。2:54 から視聴