【徹底解説】Claude Code Hooks で実現する、AIとの決定論的なコラボレーション
disler/claude-code-hooks-mastery
単に AI に指示を出すだけでなく、「AI の行動を強制的に制御する」「特定の処理を自動化する」 という、決定論的なレイヤーを追加できるのが最大の魅力です。
AI は便利ですが、時として「自由すぎて」困ることがありますよね。Hooks を使うと、エンジニアとしての「譲れない一線」をシステム的に保証できます。
安全装置
rm -rf / のような危険なコマンドや、.env ファイルの編集を物理的にブロックする。
品質管理
コードを書かせた後、必ず Prettier や ESLint を走らせてフォーマットを整える。
状況把握
AI が作業を終えたら、Slack やデスクトップ通知で「終わったよ!」と報告させる。
文脈注入
セッション開始時に、最新の Git ログやドキュメントを自動で読み込ませる。
Hooks は、プロジェクトルートの .claude/settings.json(プロジェクト用)または ~/.claude/settings.json(自分専用)で設定します。
一番簡単な始め方は、Claude Code のターミナルで /hooks と入力することです。対話形式で設定ガイドが表示されます。
大きく分けて 「どのタイミングで(Event)」「どんな条件で(Matcher)」「何をするか(Handler)」 の 3 つを定義します。
具体的にどんな風に使えるか、今日から使える実践的な例を紹介します。
AI が誤って重要なファイルを消したり、本番環境にデプロイしたりするのを防ぎます。
{
"hooks": {
"PreToolUse": [
{
"matcher": "run_command",
"hooks": [
{
"type": "command",
"command": "python3 -c \"import sys, json; data = json.load(sys.stdin); cmd = data.get('tool_input', {}).get('command', ''); exit(2 if 'rm -rf' in cmd or 'deploy' in cmd else 0)\""
}
]
}
]
}
}
ポイント
終了コード 2 を返すと、Claude はそのアクションを 実行できなくなります。まさに「鉄壁の守り」です。
AI のインデントが気に入らなくても、毎回「直して」と言う必要はありません。
{
"hooks": {
"PostToolUse": [
{
"matcher": "edit_file|write_file",
"hooks": [
{
"type": "command",
"command": "npx prettier --write $CLAUDE_PROJECT_DIR"
}
]
}
]
}
}
重たいリファクタリングを任せている間、別の作業をしていても安心です。
{
"hooks": {
"Stop": [
{
"matcher": "*",
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"タスクが完了しました!\" with title \"Claude Code\"'"
}
]
}
]
}
}
| イベント名 | タイミング | 主な用途 |
| UserPromptSubmit | あなたがプロンプトを投げた直後 | 文脈の追加、プロンプトのバリデーション |
| PreToolUse | AI がツール(コマンド実行等)を使う直前 | 危険な操作のブロック、権限チェック |
| PostToolUse | ツールの実行が終わった直後 | 自動フォーマット、テストの自動実行 |
| Stop | AI がすべての回答を終えた時 | 完了通知、作業レポートの生成 |
| SessionStart | 新しいセッションが始まった時 | 環境変数の読み込み、Git 状況の把握 |
Hooks はまさに「エンジニアのこだわり」を自動化するツールです。まずは /hooks コマンドで、通知設定あたりから「自分専用の Claude」に育ててみてはいかがでしょうか?