機能深掘り

Claude Code Hooks:AI コーディングを自動化し、危険操作を防ぐ

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

Claude Code hooks block in project settings.json wiring the PreToolUse event to a Bash matcher that runs block-dangerous-commands.sh from the .claude directory
プロジェクトの .claude/settings.json にある hooks ブロック:イベント、マッチャー、実行するコマンド。

全 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. 1

    問題から始める:プロンプトの指示は信頼できない

    CLAUDE.md に「すべての編集後に eslint を実行して」と書けば、たいていの場合 Claude は従います。でも、見逃した一度でファイルが壊れるなら「たいてい」では足りません。hooks は「毎回必ず実行したい」処理のための仕組みです。

    CLAUDE.md file open in VS Code showing a new IMPORTANT section that asks Claude to run eslint after every tool call, the prompt-based alternative to hooks
    モデルが黙ってスキップしうる CLAUDE.md のルール。0:30 から視聴
  2. 2

    hook の構造:イベント、マッチャー、コマンド

    hooks は settings.json の hooks ブロックに書きます。イベント(ここでは PreToolUse)、任意のマッチャーで対象ツールを絞り(ここでは Bash)、実行するコマンドを指定します。条件に一致した呼び出しは例外なくフックが実行されます。

    Claude Code hooks configuration in .claude/settings.json mapping the PreToolUse event with a Bash matcher to the block-dangerous-commands.sh script
    PreToolUse + Bash マッチャー + block-dangerous-commands.sh。0:14 から視聴
  3. 3

    1 つのファイルに 2 つの自動化

    完成した設定は上から読めます。ファイル編集ツールの呼び出しの後は auto-format.sh がコードを整え、Bash 呼び出しの後は log-commands.sh がコマンドをコンプライアンスログに追記します。どちらも .claude/hooks に置いた普通のプロジェクトスクリプトです。

    VS Code view of a finished hooks setup where PostToolUse edits trigger auto-format.sh and every Bash command is logged by log-commands.sh
    フォーマットとログ記録の PostToolUse エントリーが並ぶ。0:36 から視聴

雑務を自動化する

二度言わせない:編集のたびにフォーマット、コマンドのたびにログ。

  1. 4

    ファイル編集用のマッチャーを追加する

    編集後にフォーマットしたい場合は、PostToolUse に Edit、MultiEdit、Write を対象にしたマッチャーを追加します。下には既に Bash ログ用のフックが入っています。

    Typing a new PostToolUse hook matcher for Edit tools in Claude Code settings.json while a completed async Bash logging hook sits below it
    Edit マッチャーを入力中。その下に Bash ロガー。1:30 から視聴
  2. 5

    コマンドをプロジェクトスクリプトへ向ける

    command フィールドは任意のシェルコマンドを実行します。入力中に VS Code のオートコンプリートが .claude/hooks のパスを補完します。hook スクリプトは専用フォルダにまとめるのが鉄板です。

    Folder autocomplete dropdown appearing in VS Code while entering the .claude/hooks path for a PostToolUse matcher covering Edit MultiEdit and Write
    オートコンプリートが .claude/hooks へのパスを入力中。1:38 から視聴
  3. 6

    タイムアウトを設定し、フックでセッションが止まらないようにする

    完成したエントリーは Edit・MultiEdit・Write を .claude/hooks/auto-format.sh に接続し、タイムアウトを 20 秒に設定しています。スクリプトは拡張子を見て prettier、go fmt、ruff など、プロジェクトのフォーマッターを実行します。

    Completed PostToolUse hook entry in settings.json pointing Edit MultiEdit and Write tools at .claude/hooks/auto-format.sh with a 20 second timeout
    auto-format.sh がすべての編集を 20 秒タイムアウト付きで処理。1:39 から視聴
  4. 7

    Stop フックの実行をリアルタイムで見る

    フックはツール呼び出し以外のライフサイクルイベントでも発火します。画面のステータス行は、セッション終了前に実行される Stop フックとそのタイマー、トークン数を表示しています。Claude が入力を求めたときには Notification イベントも同じように発火します。

    Claude Code terminal status line reading running stop hook with a 37 second timer and 433 tokens, showing a Stop hook executing before the session ends
    「running stop hook」とタイマーが表示されたステータス行。0:08 から視聴

危険な操作をブロックする

PreToolUse フックが、破壊的なコマンドを実行前に拒否します。

  1. 8

    危険なコマンドを拒否する PreToolUse フック

    ブロックスクリプトは jq でツール入力を JSON として読み、破壊的な rm パターンや force push を grep で検出し、理由を stderr に書いて終了コード 2 で終了します。Claude は理由を見て、実行する代わりに軌道修正できます。

    Bash script for a Claude Code PreToolUse hook that parses the tool command with jq and exits with code 2 to block destructive rm commands and force pushes
    終了コード 2 が呼び出しをブロック。stderr が Claude へのフィードバックに。1:54 から視聴
  2. 9

    構造化 JSON で拒否を返す

    より強い保証が必要な場合、フックは hookSpecificOutput(JSON ペイロード)で PreToolUse 呼び出しを拒否できます。この例は DROP TABLE をブロックし、マイグレーションの利用を促します。本番環境は無傷のままです。

    Claude Code blocking script that answers DROP TABLE statements with a jq-built hookSpecificOutput JSON decision denying the PreToolUse tool call
    jq で組み立てた拒否決定が Claude をマイグレーションへ誘導。2:16 から視聴

チームと hooks を共有する

プロジェクト設定と /hooks メニューで、全員が同じガードレールの下で作業できます。

  1. 10

    hooks はマシンではなくプロジェクトに置く

    .claude/settings.json の hooks はプロジェクトレベルです。このファイルをコミットすれば、チーム全員の次のセッションに同じガードレールが自動で適用されます。スクリプトは隣の .claude/hooks に置きます。

    VS Code explorer with the .claude folder expanded revealing a hooks directory and a modified settings.json ready to be committed for the whole team
    コミット待ちの .claude 内 hooks と settings.json。2:30 から視聴
  2. 11

    パスには $CLAUDE_PROJECT_DIR を使う

    Claude の作業ディレクトリはセッション中に変わることがあるため、相対パスは壊れます。$CLAUDE_PROJECT_DIR 変数は常にプロジェクトルートを指すため、どこから実行してもフックスクリプトを解決できます。

    Claude Code settings.json command field highlighting the $CLAUDE_PROJECT_DIR variable so hook scripts resolve relative to the project root
    project-dir 変数がコマンドパスを固定する。2:38 から視聴
  3. 12

    /hooks メニューで設定を監査する

    Claude Code 内で /hooks を実行すると、設定済みのフック、そのイベント、発火条件の一覧が表示されます。このメニューは読み取り専用。追加・変更は settings.json を編集するか、Claude に依頼します。

    Claude Code slash hooks menu listing five configured hooks across PreToolUse PostToolUse Notification and UserPromptSubmit with their firing conditions
    /hooks メニューが 5 件のフックを一覧表示。2:54 から視聴

よくある質問