Claude Code の Hooks 機能 — イベント駆動で自動化する

約 2 分

Claude Code の Hooks を使って、ツール呼び出しやファイル変更時に自動でコマンドを実行する方法を解説します。

Claude Code の Hooks は、特定のイベント(ファイル変更、コマンド実行など)が発生したときに、自動でシェルコマンドを実行する機能です。開発ワークフローの自動化に活用できます。

前提

  • Claude Code がインストール済みであること
  • ~/.claude/settings.json または .claude/settings.json を編集できること
  • Hook 内で実行するコマンド(Prettier・型チェッカー等)がプロジェクトに導入されていること

Hooks とは

Hooks は「Claude Code がツールを呼び出すとき」や「ファイルを変更したとき」などのイベントに反応して、指定したコマンドを自動実行する仕組みです。

Git の pre-commit hook に似ていますが、Claude Code 固有のイベントに対応しています。

設定方法

~/.claude/settings.json または .claude/settings.json に Hooks を定義します。

{
	"hooks": {
		"PreToolUse": [
			{
				"matcher": "Edit|Write",
				"hook": "echo 'ファイルを変更します'"
			}
		],
		"PostToolUse": [
			{
				"matcher": "Edit|Write",
				"hook": "pnpm lint --fix"
			}
		]
	}
}

イベントの種類

イベントタイミング
PreToolUseツール実行の前
PostToolUseツール実行の後
Notification通知発生時
StopClaude Code の応答完了時

実用的な Hook の例

1. ファイル変更時に自動フォーマット

{
	"hooks": {
		"PostToolUse": [
			{
				"matcher": "Edit|Write",
				"hook": "prettier --write $CLAUDE_FILE_PATH"
			}
		]
	}
}

Claude Code がファイルを編集・作成するたびに、Prettier で自動フォーマットされます。

2. ファイル変更時に型チェック

{
	"hooks": {
		"PostToolUse": [
			{
				"matcher": "Edit|Write",
				"hook": "pnpm check 2>&1 | head -20"
			}
		]
	}
}

3. 特定のファイルの変更をブロック

{
	"hooks": {
		"PreToolUse": [
			{
				"matcher": "Edit|Write",
				"hook": "if echo $CLAUDE_FILE_PATH | grep -q '.env'; then echo 'BLOCK: .env ファイルの変更は許可されていません' && exit 1; fi"
			}
		]
	}
}

.env ファイルの変更を防止します。Hook が非ゼロで終了すると、ツールの実行がブロックされます。

4. 応答完了時に通知

{
	"hooks": {
		"Stop": [
			{
				"hook": "osascript -e 'display notification \"Claude Code の作業が完了しました\" with title \"Claude Code\"'"
			}
		]
	}
}

長いタスクの完了をデスクトップ通知で知らせます(macOS の場合)。

matcher パターン

matcher にはツール名の正規表現を指定します。

// Edit または Write ツールにマッチ
"matcher": "Edit|Write"

// Bash ツールにマッチ
"matcher": "Bash"

// すべてのツールにマッチ
"matcher": ".*"

環境変数

Hook のコマンド内では、以下の環境変数が使えます:

変数説明
CLAUDE_FILE_PATH操作対象のファイルパス
CLAUDE_TOOL_NAME実行されるツール名

ブロックの仕組み

PreToolUse の Hook が以下の条件を満たすと、ツールの実行がブロックされます:

  1. 終了コードが非ゼロ
  2. stdout に BLOCK: で始まるメッセージがある
# ブロックする場合
echo "BLOCK: この操作は許可されていません" && exit 1

# ブロックしない場合(情報表示のみ)
echo "INFO: ファイルを変更します"

設定のスコープ

ファイルスコープ
~/.claude/settings.jsonグローバル(全プロジェクト)
.claude/settings.jsonプロジェクト固有

プロジェクト固有の Hook は、チームで共有できます(Git にコミット可能)。

注意点

  • Hook のコマンドが長時間実行されると、Claude Code の応答が遅くなる
  • エラーが発生した場合、Claude Code のフィードバックとして表示される
  • Hook は同期的に実行される

まとめ

  • Hooks はイベント駆動で自動コマンドを実行する機能
  • PreToolUse でツール実行前のチェック、PostToolUse で後処理
  • ファイルの自動フォーマット、型チェック、変更のブロックなどに活用
  • settings.json で設定し、プロジェクト単位で管理できる

参照

関連記事

Claude Code でテストを書く — AI と TDD を実践する

Claude Code でテストを書く — AI と TDD を実践する

Claude Code を活用したテスト駆動開発(TDD)のワークフロー。テストの生成、実行、修正の流れを紹介します。

Claude Code の Plan モードで設計してから実装する

Claude Code の Plan モードで設計してから実装する

Claude Code の Plan モードを使って、実装前に設計を固めるワークフロー。コードの変更なしに調査・計画ができます。

Claude Code のメモリ機能 — 会話を跨いでコンテキストを保持する

Claude Code のメモリ機能 — 会話を跨いでコンテキストを保持する

Claude Code のメモリシステムの仕組みと活用方法。ユーザー情報、フィードバック、プロジェクト情報を永続化する方法を解説します。

© 2026 toishi. All rights reserved.