中級
Hook でツール実行を自動化する
PreToolUse, PostToolUse, SessionStart などのフックを使って、ツール実行前後に自動処理を組み込む方法
hooksautomationconfiguration
クイック実践ガイド -- Hooksの設定をすぐ試せるレシピ集です。体系的に学びたい方は Hooks自動化ガイド をご覧ください。
Hook でツール実行を自動化する
Claude Code のフックシステムを使うと、ツールの実行前後にカスタムスクリプトを自動実行できます。コードフォーマット、型チェック、セキュリティスキャンなどを自動化して、コード品質を維持しましょう。
フックのイベント種別
| イベント | タイミング | Matcher の有無 |
|---|---|---|
PreToolUse | ツール実行前 | あり(ツール名、正規表現可) |
PostToolUse | ツール実行後 | あり(ツール名、正規表現可) |
Notification | 通知送信時 | なし |
UserPromptSubmit | ユーザー入力時 | なし |
Stop | メインエージェント完了時 | なし |
SubagentStop | サブエージェント完了時 | なし |
PreCompact | compact 実行前 | manual / auto |
SessionStart | セッション開始時 | startup / resume / clear / compact |
SessionEnd | セッション終了時 | なし |
InstructionsLoaded | CLAUDE.md/rules ロード時 | session_start, compact 等 |
設定例: Edit 後の自動フォーマット
settings.json の hooks ブロックに設定します。
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write|MultiEdit",
"hooks": [
{
"type": "command",
"command": "npx prettier --write $CLAUDE_FILE_PATH 2>/dev/null"
}
]
}
]
}
}
設定例: TypeScript ファイル編集後の型チェック
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "if [[ \"$CLAUDE_FILE_PATH\" == *.ts || \"$CLAUDE_FILE_PATH\" == *.tsx ]]; then npx tsc --noEmit 2>&1 | head -20; fi"
}
]
}
]
}
}
終了コードの意味
| コード | 意味 | 動作 |
|---|---|---|
0 | 成功 | stdout がユーザーに表示 |
2 | ブロック | stderr が Claude へフィードバックされる |
| その他 | 非ブロックエラー | stderr がユーザーに表示 |
終了コード 2 を使うと、Claude にフィードバックを返して操作を修正させることができます。
非同期フック
async: true を設定すると、Claude の処理をブロックせずにフックを実行できます。
{
"type": "command",
"command": "notify-send 'Claude Code: Task complete'",
"async": true,
"timeout": 30
}
実践的なフック構成
| 目的 | イベント | Matcher |
|---|---|---|
| 編集後にフォーマット | PostToolUse | Edit|Write |
| Push 前にレビュー | PreToolUse | Bash(git push:*) |
| セッション開始時にコンテキスト注入 | SessionStart | startup |
| compact 前に状態保存 | PreCompact | manual |
| console.log 検出 | PostToolUse | Edit |
フックは軽量なスクリプトに保ち、重い処理は async: true で実行しましょう。
あわせて読む
- キーボードショートカットで入力効率を上げる - 入力効率化の基本
- セッションの再開と継続を活用する - セッションライフサイクル管理