ブログ · Claude Code

Claude Code のフック(hooks):イベント、例、仕組み

Claude Code のフック(hooks)は、セッション中の決まったタイミングで自動的に実行されるコマンドです。ツールの実行前、ファイルの編集後、Claude が応答を終えたとき、あなたの入力が必要になったときなどに動きます。CLAUDE.md の指示は Claude がたいてい従うものにすぎませんが、フックは必ず実行されます。だからこそ、ルールを強制したり雑務を自動化したりするのに向いています。このガイドでは、イベントの種類、フックの設定場所、終了コードと JSON で動作を制御する方法、すぐに使える 4 つの例、そして新しい prompt・agent・HTTP タイプのフックを説明します。

Claude Code のフックイベント

リファレンスには 30 以上のイベントが載っています。ここでは多くのフックが使うものを挙げます。matcher を使うと、フックの対象を特定のツール、ファイル、ソースに絞り込めます。

イベント発火するタイミング主な用途
SessionStartセッションの開始時または再開時コンテキストの読み込み、環境のチェック
UserPromptSubmitプロンプトを送信した後、Claude が見る前コンテキストの追加、機密性の高いプロンプトのブロック
PreToolUseツール呼び出しの実行前(ブロック可能)危険なコマンドのブロック、ファイルの保護
PermissionRequestツール呼び出しに権限の判断が必要なとき特定の確認を自動で許可・拒否
PostToolUseツール呼び出しが成功した後編集したファイルのフォーマット、lint、テスト
NotificationClaude Code が通知を送るときClaude があなたを必要としたときのデスクトップ通知
SubagentStart, SubagentStopサブエージェントの開始時・終了時委任した作業の記録やチェック
StopClaude が応答を終えたときタスクが本当に終わったかの確認
PreCompact, PostCompactコンテキスト圧縮の前後重要なコンテキストの保存や再注入
FileChanged, CwdChanged監視中のファイルまたは作業ディレクトリが変わったとき環境の再読み込み、ファイルの再フォーマット
SessionEndセッションの終了時後片付け、ログの書き出し

フックを置く場所

場所適用範囲共有
~/.claude/settings.json自分のすべてのプロジェクトしない
.claude/settings.json1 つのプロジェクトする(コミットする)
.claude/settings.local.json1 つのプロジェクトしない(gitignore 済み)
管理ポリシー設定(managed policy settings)組織全体管理者が管理
プラグインの hooks/hooks.jsonプラグインが有効な間する(プラグインと一緒に)
スキルまたはサブエージェントの frontmatterスキルが呼び出された後、またはサブエージェントの実行中する(ファイル内)

Claude Code のフックの例をステップごとに

各ブロックを設定ファイルの hooks キーの下に追加します。ファイルにすでに hooks オブジェクトがある場合は、置き換えずにイベントを同じ階層のキーとして追加してください。/hooks を実行すると、Claude Code が読み込んだか確認できます。Claude にフックを書いてもらうこともできます。

  1. Claude があなたを必要としたらデスクトップ通知を受け取る

    ~/.claude/settings.json に Notification フックを追加します。この例は macOS の osascript を使っています。Linux では notify-send、Windows では PowerShell を使います。

    {
      "hooks": {
        "Notification": [
          {
            "matcher": "",
            "hooks": [
              {
                "type": "command",
                "command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'"
              }
            ]
          }
        ]
      }
    }
  2. Claude が編集したファイルをすべて自動フォーマットする

    Edit|Write にマッチする PostToolUse フックが、stdin の JSON から編集されたファイルのパスを jq で読み取り、Prettier を実行します。.claude/settings.json に置けばチームで共有できます。

    {
      "hooks": {
        "PostToolUse": [
          {
            "matcher": "Edit|Write",
            "hooks": [
              { "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write" }
            ]
          }
        ]
      }
    }
  3. 危険なコマンドをブロックする

    Bash に対する PreToolUse フックがこのスクリプトを実行します。終了コード 2 で呼び出しをブロックし、stderr に書いた内容は Claude へのフィードバックになるので、Claude は方針を変えられます。終了コード 0 は「判断なし」を意味し、通常の権限チェックがそのまま適用されます。

    #!/bin/bash
    # .claude/hooks/block-drop-table.sh。Bash の PreToolUse フックとして実行
    INPUT=$(cat)
    COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command')
    
    if echo "$COMMAND" | grep -q "drop table"; then
      echo "Blocked: dropping tables is not allowed" >&2  # Claude へのフィードバックになる
      exit 2                                               # 2 = 操作をブロック
    fi
    
    exit 0  # 判断なし:通常の権限フローが適用される
  4. タスクが終わるまで Claude に作業を続けさせる

    prompt タイプの Stop フックが、すべて終わったかをモデルに確認します。答えが ok: false なら、Claude は reason を次の指示として作業を続けます。これが Stop フックの定番の例です。

    {
      "hooks": {
        "Stop": [
          {
            "hooks": [
              {
                "type": "prompt",
                "prompt": "Check if all tasks are complete. If not, respond with {\"ok\": false, \"reason\": \"what remains to be done\"}."
              }
            ]
          }
        ]
      }
    }

出典:Claude Code ドキュメント、Automate actions with hooks

フックが動作を決める仕組み

  • 入力:各フックは、ツール名や tool_input、セッション ID、cwd などのイベント情報を JSON として stdin で受け取ります。
  • 終了コード 0:異議なし。SessionStart や UserPromptSubmit など一部のイベントでは、通常の stdout が Claude のコンテキストに追加されます。
  • 終了コード 2:イベントが許す場合はブロック。stderr はイベントに応じて Claude またはあなたに返されます。
  • stdout への JSON 出力:より細かい制御。権限の判断を含む hookSpecificOutput、ツールの入力を書き換える updatedInput、additionalContext などです。
  • その他の終了コード:フックで onFailure: "block" を設定していない限り、通常はブロックしないエラーとして扱われます。
  • 1 つのイベントにマッチした複数のフックは並列に実行されます。

command・prompt・agent・HTTP フック

タイプ実行されるものデフォルトのタイムアウト
commandシェルコマンド10 分
httpイベントの JSON を URL に POST。レスポンスボディはコマンドの出力と同じように扱われる10 分
mcp_tool設定済みの MCP サーバーのツール10 分
promptok かどうかを答える 1 回のモデル呼び出し30 秒
agent判断の前にファイルを読んだりツールを実行したりできるサブエージェント(実験的)60 秒

フックとスキルと CLAUDE.md の違い、その他の注意点

  • CLAUDE.md とスキルは Claude がたいてい従う指示で、フックは必ず実行されます。絶対に飛ばしてはいけないことはフックに書きましょう。
  • PostToolUse ではすでに実行された操作を取り消せません。止めたいなら PreToolUse を使います。
  • Stop はタスクの終わりだけでなく Claude が応答を終えるたびに発火し、ユーザーが中断したときには発火しません。
  • フック自身はスラッシュコマンドを実行したりツールを呼び出したりできません。やり取りの手段は終了コード、stdout、stderr、JSON だけです。
  • "disableAllHooks": true でフックを無効にできます。ただし管理フックは、管理設定側でも無効にしない限り実行されます。
  • フックはあなたの Claude Code 環境の中だけで動きます。すべての Claude 製品にかかる組織全体のチェックは別の機能です:Claude の inference hooks。
  • テスト出力をフィルタする PreToolUse フックは、トークン使用量を減らす最も効果的な方法の 1 つでもあります。
Crewmark なら

フックは Claude Code にルールを守らせ、Crewmark は Claude Code を働かせ続けます。

無人で動くエージェントを安全にするのがフックです。フォーマット、テスト、ガードレールが毎回実行されます。Crewmark は、Claude Code、Codex、DeepSeek Harness、OpenCode のセッションを、職種・目標・勤務時間を持つ AI 社員に変え、ハートビートで起こしてボードから次の issue を取らせます。プロジェクトのフックも有効な状態です。

  1. フックをコミットする

    .claude/settings.json のフックは、あなたのセッションと同じように社員のセッションでも読み込まれるので、社員の編集はフォーマットされ、危険なコマンドはブロックされます。

  2. ハートビートで仕事を始めさせる

    勤務時間中、社員は15分、30分、60分ごとに同じ会話の中で起きます。Claude Code を能動的にする方法もご覧ください。

  3. あなたが必要なことにだけ答える

    社員は自分の issue にコメントし、判断が必要なときはメッセージを送ってきます。AI 社員とはもご覧ください。

Claude Code のフックのよくある質問

Claude Code のフックとは何ですか?

ツールの実行前や Claude が応答を終えたときなど、ライフサイクルイベントで Claude Code が自動的に実行する、ユーザー定義のコマンド、HTTP 呼び出し、モデルによるチェックです。Claude が指示を覚えていることに頼らず、確実な制御ができます。

Claude Code のフックはどこで設定しますか?

~/.claude/settings.json(すべてのプロジェクト)、.claude/settings.json(チームで共有)、.claude/settings.local.json(自分だけ)の hooks の下に書きます。プラグイン、スキル、サブエージェントもフックを持てます。/hooks を実行すると読み込まれているものを確認できます。

フックでコマンドをブロックするには?

Bash にマッチする PreToolUse フックを使います。stdin の JSON からコマンドを読み取り、ブロックするときは stderr に理由を書いて終了コード 2 で終了します。Claude はその理由を見て対応を変えます。

Stop フックとは何ですか?

Claude が応答を終えたときに発火する Stop イベントのフックです。prompt タイプの Stop フックなら、タスクが完了したかを確認し、終わっていなければ理由を添えて Claude を作業に戻せます。

フックとスキルの違いは?

スキルは、関係するときに Claude が読み込み、たいてい従う指示やファイルです。フックは、Claude の判断に関係なく、イベントが発火するたびに Claude Code が実行するコードです。

フックが発火しないのはなぜですか?

/hooks に表示されているか、イベント名と matcher の綴りが正確か、スクリプトに実行権限があるか、シェルのプロファイルの出力が JSON を壊していないかを確認してください。デバッグログを有効にして Claude Code を起動すると、各フックが何をしたかがわかります。

Claude Code のフックと inference hooks は同じものですか?

違います。Claude Code のフックは、あなたのマシン上であなたのセッションのために動きます。inference hooks は Claude Enterprise の機能で、Claude が動く前に組織内のすべてのプロンプトをセキュリティサーバーに送ります。

2026年11月6日に Claude Code のドキュメント(フックガイド、フックリファレンス)と照合しました。

ガードレールはフックに、仕事はボードから。

Crewmark は、Claude Code、Codex、DeepSeek Harness のセッションを、職種・目標・勤務時間・ハートビートを持つ AI 社員に変えます。