【第4回】Claude Code Hooks 完全ガイド — 保存時自動整形・コミット前チェックの実装
「lint を通すのを忘れて push したら CI が落ちた」「コミット前にテストするのを忘れた」「うっかり本番 DB に向けて作業していた」——個人開発でやらかしがちな事故です。
これらを Claude Code レベルで強制する のが Hooks 機能です。Claude が特定のアクションを取る前後に、シェルコマンドを自動実行できます。人間が忘れても、Claude が忘れても、Hooks は忘れません。
この記事では、Hooks の基本仕様と、筆者が実運用している5つのパターンを実 JSON 設定付きで解説します。
結論:Hooks は「Claude のアクション前後に走る自動処理」
Hooks とは 「Claude Code が特定のツールを使うときに、自動的に実行されるシェルコマンド」 です。
例えば:
- ファイルを 保存する前 に lint を走らせる
- ファイルを 保存した後 に prettier をかける
- コミットを作る前 にテストを実行する
- bash コマンド実行前 に「rm -rf」が含まれていないか確認する
設定は ~/.claude/settings.json または <project>/.claude/settings.json に書きます。コードを書く必要はなく、JSON 1ファイルで完結します。
Hooks の構造
Hooks は次のような JSON 構造で定義します。
{
"hooks": {
"PreToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "npx eslint --quiet"
}
]
}
]
}
}
要素の意味は次のとおりです。
| キー | 意味 |
|---|---|
PreToolUse | ツール実行前 に走る Hooks |
PostToolUse | ツール実行後 に走る Hooks |
matcher | どのツールに反応するか(正規表現可) |
hooks | 実行するコマンド配列 |
matcher で Edit|Write|MultiEdit のように複数指定できます。ファイル編集系のツール全般に同じ Hook を適用するときに便利です。
実用パターン5選
筆者が ~/.claude/settings.json で実運用している Hooks を5つ紹介します。
パターン1:保存後に prettier を自動実行
最もシンプルかつ効果が大きい Hook です。
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write|MultiEdit",
"hooks": [
{
"type": "command",
"command": "npx prettier --write \"$CLAUDE_FILE_PATH\" 2>/dev/null || true"
}
]
}
]
}
}
$CLAUDE_FILE_PATH は Claude が編集したファイルのパスが入る環境変数です。これで「Claude がコードを書いた直後に整形される」状態が作れます。
パターン2:危険なコマンド実行前に確認
rm -rf や本番 DB への接続コマンドを自動実行されると事故になります。
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "echo \"$CLAUDE_TOOL_INPUT\" | grep -qE '(rm -rf|DROP TABLE|DELETE FROM)' && exit 1 || exit 0"
}
]
}
]
}
}
危険パターンを検出したら exit 1 で中断します。Claude には「Hook によって中断された」という情報が返り、別のアプローチを取るようになります。
パターン3:本番 DB の URL を含むコマンドをブロック
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "echo \"$CLAUDE_TOOL_INPUT\" | grep -qE 'PROD_DATABASE_URL|prod-db.example.com' && (echo 'BLOCKED: production DB access' >&2; exit 1) || exit 0"
}
]
}
]
}
}
「うっかり本番に繋がる」事故を完全に防げます。安全装置として最も効く Hook です。
パターン4:コミット前に型チェック
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "echo \"$CLAUDE_TOOL_INPUT\" | grep -q 'git commit' && (npx tsc --noEmit || exit 1) || exit 0"
}
]
}
]
}
}
git commit コマンドを Claude が実行する直前に tsc --noEmit を走らせます。型エラーがあればコミット自体が中断されます。
パターン5:編集後に Slack 通知
長時間作業のときに「Claude が今何をしているか」を Slack に流す Hook です。
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "curl -s -X POST $SLACK_WEBHOOK_URL -d \"{\\\"text\\\":\\\"Claude edited: $CLAUDE_FILE_PATH\\\"}\""
}
]
}
]
}
}
リモート運用時の監視に便利です。次のエピソードで扱う「VPS 常駐型 Claude 自動化」と相性抜群です。
Anthropic 公式の Hooks リファレンスによれば、PreToolUse は「Claude がツールパラメータを生成した後、ツール実行前」に動作し、PostToolUse は「ツールが正常に完了した直後」に動作します。
PreToolUse で hookSpecificOutput.permissionDecision を deny に設定すれば、Claude のツール実行を物理的にブロックできます。これは「気をつける」「ドキュメント化する」では得られない、確実な安全装置です。
Anthropic はこの Hook システムを「programmable safety rails(プログラマブルな安全レール)」として位置付け、コミュニティでも事故防止のベストプラクティスとして標準化が進んでいます。
出典: Hooks reference - Claude Code Docs / hook-development SKILL.md (anthropics/claude-code)
ハマりやすい落とし穴
筆者がHook運用で実際に踏んだ地雷を3つ。
1. matcher が大文字小文字を区別する
matcher: "edit|write" と書くとマッチしません。Claude Code のツール名は PascalCase(Edit, Write, Bash)なので、それに合わせます。
2. exit 1 とエラーメッセージの順序
Hook がエラーで中断するときは、標準エラー出力(>&2)にメッセージを書いてから exit 1 の順序が大事です。逆だと Claude にメッセージが届きません。
3. 重い Hook が体感を悪くする
毎回 npm test を走らせる Hook を入れたら、ファイル編集のたびに30秒待たされる事態になりました。重い処理は コミット前限定 の matcher で発動を絞るべきです。
で、どう稼ぐ? — Hooks が事故損失を直接回収する
Hooks の経済的価値は 「事故による損失を未然に防ぐ」 ことにあります。これは目に見えにくいですが、個人開発では特に効きます。
1. データ消失事故を防ぐ=復旧コストの回避
本番 DB の事故1回で半日〜1日の復旧時間が消えます。時給5,000円換算で¥20,000〜40,000の損失です。これを Hook 1個で防げるなら、ROI は無限大に近い。
2. CI 失敗によるデプロイ遅延を防ぐ
「lint を通さずに push → CI 失敗 → 修正 → 再 push」のループは、1回あたり10〜15分のロス。週5回起きていたら月20回、約5時間の損失です。Hook 1個で防げます。
3. クライアント案件での信頼維持
受託案件で本番事故を起こすと、信用が回復不能なほど傷つきます。Hooks による安全装置を組み込んでいることをクライアントに伝えれば、発注のハードルが下がり、継続案件に繋がりやすくなります。
まとめ
Hooks は「人間が忘れがちな処理を Claude Code に強制する」仕組みです。重要ポイントは次のとおり。
- JSON 1ファイルで設定完結。コードは書かなくてよい
- PreToolUse / PostToolUse で発動タイミングを制御
- 危険コマンドのブロック Hook が最優先。これだけで事故損失を直接回収できる
最初に入れるべきは「本番 DB ブロック Hook」と「コミット前型チェック Hook」の2つです。15分の設定で、1件の本番事故を防げば元が取れます。
次のエピソードからは 有料記事 に入ります。Ep.05 は「リモートサーバー運用術 — VPS 常駐型 Claude 自動化 の構築」です。本記事で扱った Hooks を組み込んだ、24時間動く Claude 環境の構築手順を全公開します。
Claude Code を本格活用するなら Max プラン(月$100〜、定額でトークン使い放題)が必須です。このシリーズの全実装例は Max プランで動作確認済みです。
【第5回】Claude Code リモートサーバー運用術 — VPS 常駐型 Claude 自動化環境の構築
▸▾ // see all 13 episodes
- №01【第1回】Claude Code Skills 入門 — 自作スキルで開発効率を2倍にする実装ガイド
- №02Claude Code から自作 MCP サーバーを呼び出す — TypeScript で書く最小実装と詰まりポイント
- №03【第3回】Claude Code サブエージェント設計パターン — 並列タスクで時給を上げる実践ガイド
- №04【第4回】Claude Code Hooks 完全ガイド — 保存時自動整形・コミット前チェックの実装
- №05【第5回】Claude Code リモートサーバー運用術 — VPS 常駐型 Claude 自動化環境の構築
- №06【第6回】Claude Code で SaaS を 1 週間で組む開発フロー — Skill × MCP の統合設計
- №07【第7回】Claude Code トークン節約運用 — Pro プランの範囲で並列エージェントを回す 9 つの工夫
- №08【第8回】Claude Code で GitHub Issue から PR まで自動化する実装ガイド
- №09【第9回】Claude Code サブエージェント並列実行 — 本番で使った5パターン
- №10【第10回】Claude Code × Supabase で管理画面を30分で生成する Skill 実装ガイド
- №11【第11回】Claude Code Hooks で事故を防ぐ — git secrets / 本番DB保護の実装
- №12【第12回】夜寝てる間に Claude Code が記事を書き上げる構成 — 月 ¥5K で動く全コード¥1,000
- №13Claude Code で 0→MVP を1日で作る全記録 — recipe-ai Build in Public
Next Step
次に読むならこの導線です
【第12回】夜寝てる間に Claude Code が記事を書き上げる構成 — 月 ¥5K で動く全コード
Claude Codeラボ全12話の集大成。Skills/MCP/サブエージェント/Hooks/リモート運用を統合した「自走する Claude 自動化」を、月 ¥5K の実コストで動かす全構成を公開。寝てる間に競合調査・記事下書き・PR まで自動化する 6 層アーキテクチャの完成版。
Claude Code hookをauto-recapより先に試すべき3パターン — commit漏れ・文脈消失・危険操作を自動検知した実録
auto-recapを入れる前に試すべきClaude Code hookが3つあった。Stop hookでuntracked 84件を発覚させ、PreCompactで会話ログを自動退避し、UserPromptSubmitで危険操作前にgit情報を自動注入した実装記録。
Claude Code の Hooks は settings.json 保存後すぐ動く — 「次セッションから」は間違いだった
UserPromptSubmit hook を settings.json に追加した同セッション内で即発火を確認した。再起動・再セッション不要という発見と、settings.json hot reload の仕組みを実測ログから解説する。
Claude Code on the Web でリモートトリガーが ~/.claude/memory を読めない — Calendar reminder に切り替えた実体験
Claude Code on the Web の RemoteTrigger は git repository sources のみ参照可能で、~/.claude/projects/ 配下の memory ファイルは環境外。memory-weekly-sync routine を作ろうとして詰まった制約と、Calendar reminder + 手動実行への切替判断を実体験ベースで解説します。
次の実験記録も追う
Claude Code × 個人開発の実験ログ、失敗、判断変更をまとめて追いたい人向けに、月次でLab Freeを届けます。
masatoman のメルマガ — 毎週月曜の朝に 1 通
masatoman.net で今週公開した記事の中から 1 本を、読者目線で深掘りした手紙が届きます。「自分も同じことやってる」「ここで詰まってた」が見つかる予告編。
この記事が役に立ったらシェア