NILTOナレッジ

AI時代のウェブサイト運用ノウハウ

最終更新日:2026.5.27

Claude Codeを自動化するhooksの使い方

Claude Codeを自動化するhooksの使い方
Claude Codeを使い込むうちに、こんな課題はありませんか。 - ファイル編集後のフォーマットやlintが抜ける - 危険なコマンドを実行前に検査したい - 長時間タスクの完了を見逃したくない - MCPツールや外部APIとの連携を自動化したい - CLAUDE.mdだけでは制御しきれない処理がある Claude Code hooksを使うと、Claude Codeの実行タイミングに合わせて処理を自動化することができます。本記事では、Claude Code Hooksについての基本的な知識、設定方法、実践サンプル、注意点を解説しています。

具体的な活用イメージを39個収録 具体的な活用イメージを39個収録

AI活用術39選

ウェブ運用の工数削減に役立つ

AI活用術39選

ウェブ運用の膨大なタスクを「CMS×AI」で削減する39個のユースケースをご紹介します。単なるテキスト生成を超え、AIがCMS操作そのものを支援する次世代の運用フローをご覧ください。

39個のAI活用術を見る

Claude Code hooksとは

Claude Code hooksは、Claude Codeの特定の実行タイミングで、あらかじめ設定した処理を自動実行する仕組みです。

たとえば、Claudeがファイルを編集した後にフォーマットを実行したり、Bashを実行する前に危険なコマンドを検査したりできます。

CLAUDE.mdは、Claudeに共有したい方針や前提知識を書くファイルです。一方、hooksは特定のタイミングで処理を発火させる設定です。

設計方針や前提知識はCLAUDE.mdに書き、実行したい処理はhooksに設定する、という使い分けができます。

フックイベント一覧

Claude Code hooksでは、実行タイミングごとに複数のフックイベントが用意されています。

以下は、2026年5月27日時点で公式リファレンスに掲載されているフックイベントです。

イベント

分類

発火タイミング

主な使いどころ

SessionStart

セッション

セッション開始・再開時

初期化、環境確認

Setup

セッション

--init-only-pモードの初期化時

CIや一度きりの準備

UserPromptSubmit

入力

ユーザー送信直後

入力内容の検査

UserPromptExpansion

入力

コマンドがプロンプトへ展開される前

展開前の制御

PreToolUse

ツール

ツール実行前

危険操作のブロック

PermissionRequest

ツール

権限確認が表示される時

権限判断の補助

PermissionDenied

ツール

自動モードでツール実行が拒否された時

拒否ログ、再試行の判断

PostToolUse

ツール

ツール実行成功後

format、lint、通知

PostToolUseFailure

ツール

ツール実行失敗後

エラー通知、復旧処理

PostToolBatch

ツール

並列ツール呼び出し完了後

一括後処理

Notification

通知

Claude Codeが通知を送る時

通知の転送

SubagentStart

サブエージェント

サブエージェント起動時

監査、ログ記録

SubagentStop

サブエージェント

サブエージェント終了時

結果確認

TaskCreated

タスク

タスク作成時

タスク管理連携

TaskCompleted

タスク

タスク完了時

完了通知

Stop

応答

Claudeの応答完了時

完了通知、後処理

StopFailure

応答

APIエラーでターン終了時

エラー通知

TeammateIdle

チーム

チームメンバーが待機状態になる前

チーム運用の通知

InstructionsLoaded

設定

CLAUDE.mdなどが読み込まれた時

ルール読込の確認

ConfigChange

設定

設定ファイル変更時

設定変更の検知

CwdChanged

環境

作業ディレクトリ変更時

direnv連携など

FileChanged

環境

監視対象ファイル変更時

.env変更検知

WorktreeCreate

Worktree

worktree作成時

作業環境の初期化

WorktreeRemove

Worktree

worktree削除時

作業環境の後処理

PreCompact

コンテキスト

コンテキスト圧縮前

圧縮前の保存

PostCompact

コンテキスト

コンテキスト圧縮後

圧縮後の確認

Elicitation

MCP

MCPサーバーがユーザー入力を求めた時

入力要求の制御

ElicitationResult

MCP

MCP入力結果を返す前

入力結果の確認

SessionEnd

セッション

セッション終了時

ログ保存、後処理

hooksの基本構造

hooksの設定は、3つの要素で構成されます。

  1. どのイベントで処理を動かすか
  2. matcherで対象を絞るか
  3. どのtypeで処理するか

以下は、Claudeがファイルを編集した後にシェルスクリプトを実行する例です。

{
  "hooks": {
    // 1. どのイベントで動かすか
    "PostToolUse": [
      {
        // 2. どのツールを対象にするか
        "matcher": "Write|Edit",
        "hooks": [
          {
            // 3. どのtypeで処理するか
            "type": "command",
            "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/format.sh",
            "args": []
          }
        ]
      }
    ]
  }
}

上記は説明用にコメントを入れた例です。実際のJSONでは、//から始まるコメント行を削除します。

matcherについて

matcherは、hookを発火させるツール名を指定する項目です。

たとえば、Bashを指定すると、ClaudeがBashを実行する時だけhookが発火します。

{
  "matcher": "Bash"
}

複数のツールを対象にする場合は、|でつなげます。

{
  "matcher": "Write|Edit"
}

正規表現も使えます。

{
  "matcher": "^Notebook"
}

MCPツールは、mcp__<server>__<tool>の形式で指定します。

{
  "matcher": "mcp__github__.*"
}

ツールの引数まで見て条件を分けたい場合は、hook handler側のifを使います。

{
  "hooks": {
    "PreToolUse": [
      {
        // Bashツールに絞る
        "matcher": "Bash",
        "hooks": [
          {
            // Bashの中でもgitコマンドだけを対象にする
            "if": "Bash(git *)",
            "type": "command",
            "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/check-git.sh"
          }
        ]
      }
    ]
  }
}

以下は、2026年5月27日時点で公式Tools referenceに掲載されている、hook matcherで指定できる主な組み込みツール名です。

matcher

何を対象にするか

主な使いどころ

Agent

サブエージェント起動

サブエージェント利用の記録

AskUserQuestion

ユーザーへの質問

質問発生の記録

Bash

シェルコマンド実行

危険コマンド検査、実行ログ

CronCreate

セッション内タスク作成

予約タスクの記録

CronDelete

セッション内タスク削除

タスク削除の記録

CronList

セッション内タスク一覧取得

タスク確認の記録

Edit

既存ファイルの部分編集

編集後のlint、format

EnterPlanMode

plan modeへの移行

実装前の計画開始ログ

EnterWorktree

worktreeへの移動や作成

作業環境作成の記録

ExitPlanMode

plan modeの終了

実装開始前の確認

ExitWorktree

worktreeから戻る

作業環境終了の記録

Glob

ファイル名検索

検索対象の監査

Grep

ファイル内容検索

検索対象の監査

ListMcpResourcesTool

MCPリソース一覧取得

MCP参照の記録

LSP

言語サーバー機能

型エラー確認、参照検索の記録

Monitor

バックグラウンド監視

長時間監視の記録

NotebookEdit

Notebookセル編集

Notebook編集後の検査

PowerShell

PowerShellコマンド実行

Windows環境のコマンド検査

PushNotification

通知送信

通知内容の記録

Read

ファイル読み取り

機密ファイル参照の検査

ReadMcpResourceTool

MCPリソース読み取り

MCPリソース参照の記録

RemoteTrigger

claude.ai上のRoutine操作

Routine操作の記録

ScheduleWakeup

/loopの次回実行予約

ループ実行の記録

SendMessage

agent teamへの送信

チーム内メッセージの記録

ShareOnboardingGuide

onboarding guideの共有

共有操作の記録

Skill

Skill実行

Skill利用の記録

TaskCreate

タスク作成

タスク作成の記録

TaskGet

タスク詳細取得

タスク参照の記録

TaskList

タスク一覧取得

タスク一覧参照の記録

TaskOutput

タスク出力取得

非推奨。出力参照の記録

TaskStop

タスク停止

タスク停止の記録

TaskUpdate

タスク更新

タスク更新の記録

TeamCreate

agent team作成

チーム作成の記録

TeamDelete

agent team削除

チーム削除の記録

TodoWrite

Todo更新

タスク管理の記録

ToolSearch

遅延ツール検索

ツール検索の記録

WaitForMcpServers

MCPサーバー接続待ち

MCP接続待ちの記録

WebFetch

URL取得

外部URL参照の検査

WebSearch

Web検索

Web検索の記録

Write

ファイル作成・上書き

作成後のformat、lint

typeについて

typeは、hookで実行する処理の種類です。

type

役割

向いている用途

command

シェルコマンドを実行する

format、lint、test、通知

http

HTTP POSTで外部URLへ送信する

Webhook、監査ログ、外部API連携

mcp_tool

接続済みMCPツールを呼び出す

セキュリティ確認、外部情報取得

prompt

Claudeモデルに単発判定させる

入力内容や完了条件の判定

agent

サブエージェントに確認させる

複数ファイルの影響調査

agentは、公式リファレンスで実験的な機能とされています。

設定ファイルの置き場所

hooksは、設定ファイルの置き場所によって適用範囲が変わります。

場所

適用範囲

共有

~/.claude/settings.json

自分の全プロジェクト

共有しない

.claude/settings.json

現在のプロジェクト

リポジトリで共有できる

.claude/settings.local.json

現在のプロジェクト

共有しない

Claude Code hooksを試してみる

ここでは、5種類のtypeごとに簡単なサンプルを紹介します。

この記事のJSON例では、理解しやすいようにコメントを入れています。実際に.claude/settings.jsonへ保存する場合は、コメント行を削除します。

commandでシェルスクリプトを実行する

commandは、ローカルのコマンドやシェルスクリプトを実行するtypeです。

{
  "hooks": {
    // ファイル編集後に発火する
    "PostToolUse": [
      {
        // WriteまたはEditのときだけ実行する
        "matcher": "Write|Edit",
        "hooks": [
          {
            // ローカルのシェルスクリプトを実行する
            "type": "command",
            "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/format.sh",
            "args": [],
            "timeout": 30
          }
        ]
      }
    ]
  }
}

httpで外部APIに通知する

httpは、hookの入力JSONをHTTP POSTで送信するtypeです。

{
  "hooks": {
    // Bash実行前に発火する
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            // 外部APIへPOSTする
            "type": "http",
            "url": "http://localhost:8080/hooks/pre-tool-use",
            "timeout": 30
          }
        ]
      }
    ]
  }
}

mcp_toolでMCPツールを呼び出す

mcp_toolは、接続済みのMCPサーバーのツールを呼び出すtypeです。

{
  "hooks": {
    // ファイル編集後に発火する
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            // 接続済みMCPサーバーのツールを呼ぶ
            "type": "mcp_tool",
            "server": "my_server",
            "tool": "security_scan",
            "input": {
              "file_path": "${tool_input.file_path}"
            }
          }
        ]
      }
    ]
  }
}

promptでLLMに判定させる

promptは、Claudeモデルに単発の判定をさせるtypeです。

{
  "hooks": {
    // Claudeの応答完了時に発火する
    "Stop": [
      {
        "hooks": [
          {
            // Claudeモデルに判定させる
            "type": "prompt",
            "prompt": "作業が完了しているか判定してください。入力: $ARGUMENTS",
            "timeout": 30
          }
        ]
      }
    ]
  }
}

agentでサブエージェントに確認させる

agentは、サブエージェントに確認作業を任せるtypeです。

{
  "hooks": {
    // Claudeの応答完了時に発火する
    "Stop": [
      {
        "hooks": [
          {
            // サブエージェントに確認させる
            "type": "agent",
            "prompt": "関連するテストが通っているか確認してください。入力: $ARGUMENTS",
            "timeout": 120
          }
        ]
      }
    ]
  }
}

おすすめの使い方

hooksは、Claude Codeの作業を補助する用途に向いています。

実装後にサブエージェントで影響範囲を確認する

PostToolUseWrite|Editを組み合わせ、編集後にサブエージェントで影響範囲や追加テストの必要性を確認します。

危険なコマンドを実行前に止める

PreToolUseBashのmatcherを組み合わせると、Bash実行前にコマンドを検査できます。

編集後にフォーマットやlintを実行する

PostToolUseWrite|Editを組み合わせると、ファイル編集後に処理を実行できます。

長時間作業の完了を通知する

StopNotificationを使うと、作業完了や権限確認を外部に通知できます。

MCPツールの利用を記録する

MCPツールは、mcp__<server>__<tool>形式の名前でmatcherに指定できます。

hooks設定で気をつけること

hooksは便利ですが、設定内容によっては開発環境やセキュリティに影響します。

実行権限に注意する

command hooksは、ユーザーの環境でコマンドを実行します。

JSONにコメントは書けない

この記事のJSON例では、理解しやすいようにコメントを入れています。実際に.claude/settings.jsonへ保存する場合は、コメント行を削除します。

matcherが効かないイベントがある

UserPromptSubmitPostToolBatchStopTeammateIdleTaskCreatedTaskCompletedWorktreeCreateWorktreeRemoveCwdChangedはmatcher非対応です。

typeによって待ち時間が変わる

外部API連携、テスト実行、サブエージェント確認などでは、timeoutを明示すると待ち時間を管理しやすくなります。

agent hooksは実験的な機能として扱う

agent hooksは、公式リファレンスで実験的な機能とされています。

secretsの扱いに注意する

トークンやAPIキーをリポジトリに含めないようにし、.claude/settings.local.jsonや環境変数を使って分離します。

まとめ

Claude Code hooksは、Claude Codeの作業を安全に、安定して進めるための自動化機能です。

イベント、matcher、typeを組み合わせることで、ファイル編集後の整形、危険コマンドの検査、作業完了通知、MCPツールの監査などを実現することができます。

まずは、ファイル編集後にフォーマットを実行するような小さなhookから始めてみましょう。

おすすめ情報

タグ一覧