Claude Code フック おすすめ 8 選【2026年6月版】即コピペで使えるレシピ集
Claude Code フック(Hooks)おすすめ 8 選【2026年6月版】。.env 保護・rm -rf ブロック・自動 Lint・テスト自動実行・Discord 通知など、現場で即使える hook レシピを settings.json コピペ例と Pros/Cons 付きで厳選解説します。
Claude Code の Hooks は、ツール呼び出しやセッションのライフサイクルに シェルスクリプト・HTTP リクエスト・LLM 判定 を差し込める仕組みです。exit code でハードブロックできるのが最大の特徴です。CLAUDE.md のプロンプト指示と異なり、Claude 側の判断に依存せずブロックが確実に働きます(ただし正規表現マッチの抜け漏れはあり得るため、許可リスト方式との併用を推奨します)。
フックの概念・ライフサイクル全体像は Claude Code Hooks 完全ガイド に詳述しています。本記事は「どのフックを最初に導入すべきか」の意思決定支援に特化した おすすめレシピ 8 選 です。
週1ニュースレター(無料)に登録すると、新しいフックレシピと settings.json テンプレートが毎週木曜に届きます。
TL;DR — 8 選 早見表
初心者はまずフック 1・2 の「セキュリティ 2 本セット」から。 チーム開発者はフック 3・4 を追加し、自律エージェント運用者はフック 5・7・8 で完全自動化を実現します。
| # | フック名 | イベント | 用途 | 難易度 | 推奨対象 |
|---|---|---|---|---|---|
| 1 | .env 保護 | PreToolUse | 機密ファイルブロック | ★☆☆ | 全ユーザー |
| 2 | rm -rf ブロック | PreToolUse | 破壊的コマンド拒否 | ★☆☆ | 全ユーザー |
| 3 | 自動 Lint/フォーマット | PostToolUse | コード品質担保 | ★★☆ | 個人・チーム開発 |
| 4 | テスト自動実行 | Stop | グリーン確認強制 | ★★☆ | TDD 実践者 |
| 5 | コンテキスト自動注入 | SessionStart | 状況把握の自動化 | ★★☆ | エージェント運用者 |
| 6 | Discord/Slack 通知 | PostToolUse | チーム連携・監査 | ★★☆ | チーム・自律エージェント |
| 7 | 自動承認 | PermissionRequest | 承認ダイアログ削減 | ★★☆ | 自動化・CI 利用者 |
| 8 | 品質ゲート | SubagentStop | 成果物の最低品質保証 | ★★★ | マルチエージェント運用 |
選定基準
本記事は以下の条件で 8 レシピを厳選しています。
- 公式ドキュメント掲載 OR GitHub Star ≥ 400(2026年6月時点)
- 過去 90 日以内に更新確認済み
- 5 分以内でコピペ導入できる
- 副作用(意図しないブロック)が最小
フック 8 選 詳細解説
各フックの設定は .claude/settings.json の hooks オブジェクトに追加します。複数フックを組み合わせる場合も同じファイルに並列記述できます。コードは執筆時点の動作確認バージョンに基づいており、最新の仕様は公式ドキュメントで確認してください。
1. .env 保護フック(PreToolUse)— 機密ファイルへのアクセスを物理ブロック
最初に導入すべきフック筆頭。Claude が .env・.env.local・.env.production などを Read / Edit / Write しようとした瞬間に exit code 2 で強制拒否します。プロンプト指示と異なり、Claude 側の判断に依存せず確実に動作します(ただし保護リストに含めていないファイルパスは対象外です)。
Pros
- 5 行のシェルスクリプトで即導入可能
- API キー・DB 接続文字列の誤露出を防止
- すべての Read / Edit / Write / Bash ツールに対応
Cons
- 正規表現の抜け漏れがあると保護されないファイルが生じる
- シークレットファイルを Claude に渡す必要がある場合は一時的に無効化が必要
使うべきユースケース: 本番環境接続情報を含むプロジェクト全般 / チーム開発環境
設定例(.claude/hooks/protect-env.sh):
#!/bin/bash
# PreToolUse フック: 機密ファイルへのアクセスをブロック
INPUT=$(cat)
TOOL=$(echo "$INPUT" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('tool_name',''))")
PATH_ARG=$(echo "$INPUT" | python3 -c "
import sys, json
d = json.load(sys.stdin)
inp = d.get('tool_input', {})
print(inp.get('file_path', inp.get('path', inp.get('command', ''))))")
PROTECTED_PATTERNS=(".env" ".env.local" ".env.production" ".env.staging" "credentials.json" "service-account.json")
for pattern in "${PROTECTED_PATTERNS[@]}"; do
if [[ "$PATH_ARG" == *"$pattern"* ]]; then
echo "{\"decision\": \"block\", \"reason\": \"保護ファイル '$pattern' へのアクセスはブロックされています\"}"
exit 2
fi
done
exit 0
settings.json への追加:
{
"hooks": {
"PreToolUse": [{
"matcher": "Read|Edit|Write|Bash",
"hooks": [{ "type": "command", "command": "bash .claude/hooks/protect-env.sh" }]
}]
}
}
公式: Hooks リファレンス
参考リポジトリ: trailofbits/claude-code-config
難易度: ★☆☆
2. rm -rf ブロックフック(PreToolUse)— 破壊的削除コマンドを拒否
rm -rf や git push --force など、取り消し不能な破壊的コマンドを Bash ツール呼び出し前にインターセプトします。Trail of Bits がデフォルト推奨として公開しているパターンで、本番環境での事故を防ぐ安全網として広く採用されています。
Pros
- 取り消し不能な操作をゼロコストでブロック
- ブロック理由を Claude にフィードバックするため代替手段を提案しやすい
--dry-run確認後にのみ許可するフローに発展可能
Cons
- 正当な削除操作まで止まることがある(パターン設計が重要)
find ... -deleteのような代替コマンドはデフォルトでは検知できない
使うべきユースケース: 本番 DB・デプロイスクリプトを含むプロジェクト / 自律エージェント運用
設定例(.claude/hooks/block-destructive.sh):
#!/bin/bash
INPUT=$(cat)
COMMAND=$(echo "$INPUT" | python3 -c "
import sys, json
d = json.load(sys.stdin)
print(d.get('tool_input', {}).get('command', ''))")
BLOCKED_PATTERNS=("rm -rf" "rm -fr" "git push --force" "git push -f" "DROP TABLE" "DROP DATABASE")
for pattern in "${BLOCKED_PATTERNS[@]}"; do
if echo "$COMMAND" | grep -qF "$pattern"; then
echo "{\"decision\": \"block\", \"reason\": \"破壊的コマンド '$pattern' はブロックされています。安全な代替手順を検討してください\"}"
exit 2
fi
done
exit 0
settings.json への追加:
{
"hooks": {
"PreToolUse": [{
"matcher": "Bash",
"hooks": [{ "type": "command", "command": "bash .claude/hooks/block-destructive.sh" }]
}]
}
}
公式: Hooks ガイド
参考リポジトリ: trailofbits/claude-code-config
難易度: ★☆☆
3. 自動 Lint/フォーマットフック(PostToolUse)— コード品質を物理担保
ファイル編集後に自動で ESLint・Prettier・black などを走らせ、コードスタイルの崩れをゼロにします。GitHub Star 426(2026年6月時点)の karanb192/claude-code-hooks が公開しているレシピが参考になります。
Pros
- コードレビューでの「フォーマット指摘」がなくなる
- CI でのフォーマットエラーを事前に潰せる
- 言語問わず拡張可能(ESLint / Prettier / black / gofmt 等)
Cons
- Lint エラーが多いと Claude のコンテキストが長くなる
- ファイル編集のたびに実行されるため、大規模変更では処理時間がかかる
使うべきユースケース: TypeScript / Python プロジェクト / チームコーディング規約の徹底
設定例(.claude/hooks/auto-lint.sh):
#!/bin/bash
INPUT=$(cat)
FILE=$(echo "$INPUT" | python3 -c "
import sys, json
d = json.load(sys.stdin)
print(d.get('tool_input', {}).get('file_path', ''))")
if [[ -z "$FILE" ]]; then exit 0; fi
# TypeScript / JavaScript
if [[ "$FILE" =~ \.(ts|tsx|js|jsx)$ ]]; then
npx eslint --fix "$FILE" 2>/dev/null
npx prettier --write "$FILE" 2>/dev/null
fi
# Python
if [[ "$FILE" =~ \.py$ ]]; then
python3 -m black "$FILE" 2>/dev/null
python3 -m ruff check --fix "$FILE" 2>/dev/null
fi
exit 0
settings.json への追加:
{
"hooks": {
"PostToolUse": [{
"matcher": "Edit|Write",
"hooks": [{ "type": "command", "command": "bash .claude/hooks/auto-lint.sh" }]
}]
}
}
公式: Hooks リファレンス
参考リポジトリ: karanb192/claude-code-hooks(GitHub Star 426・2026年6月22日時点、最新はリポジトリを確認)
難易度: ★★☆
4. テスト自動実行フック(Stop)— グリーンになるまで続行を強制
Claude がターンを終了しようとするタイミングで npm test や pytest を走らせ、テストが落ちていたら続行を強制します。「実装はした、でもテスト通ってない」という状態で納品されることを防ぎます。GitHub Star 3,786(2026年6月時点)の disler/claude-code-hooks-mastery でも推奨されているパターンです(モデルケース/参考実装であり、個別案件での効果を保証するものではありません)。
Pros
- レッドテストのまま「完了」とされる事故を防げる
- Claude が自発的に修正ループに入るためコンテキストが自然につながる
--passWithNoTestsフラグで新規ファイルが少ない場合の誤発動を防げる
Cons
- テストスイートが重い場合、ターン終了のたびに待機時間が発生する
- テストが初期状態で大量に落ちているプロジェクトには不向き(無限ループのリスク)
使うべきユースケース: TDD 実践チーム / 新機能実装フロー / リグレッション防止
設定例(.claude/hooks/run-tests.sh):
#!/bin/bash
# Stop フック: テストがグリーンでなければ Claude に続行を要求
if [ -f "package.json" ]; then
npm test -- --passWithNoTests 2>&1
EXIT_CODE=$?
if [ $EXIT_CODE -ne 0 ]; then
echo "{\"decision\": \"block\", \"reason\": \"テストが失敗しています。修正してから終了してください\", \"additionalContext\": \"テスト結果を確認して失敗箇所を修正してください\"}"
exit 2
fi
fi
exit 0
settings.json への追加:
{
"hooks": {
"Stop": [{
"hooks": [{ "type": "command", "command": "bash .claude/hooks/run-tests.sh" }]
}]
}
}
公式: Hooks リファレンス
参考リポジトリ: disler/claude-code-hooks-mastery(GitHub Star 3,786・2026年6月23日時点、最新はリポジトリを確認)
難易度: ★★☆
5. コンテキスト自動注入フック(SessionStart)— 毎セッション、状況を自動把握
セッション開始時に git status・未解決 Issue 数・最新ログをコンテキストに自動注入します。「前回どこまでやったか」を毎回プロンプトで説明する手間がなくなり、エージェントが即座に作業に入れます。
Pros
- 冒頭の「状況説明タスク」をゼロに短縮
- ブランチ・未コミット変更・直近のエラーを Claude が最初から把握
CLAUDE_ENV_FILE経由で環境変数もセット可能
Cons
- 大規模モノレポでは
git statusの出力が長くなりコンテキストを圧迫する場合がある - セッション再開(
--resume)時にも発火するため冪等設計が必要
使うべきユースケース: 毎日 Claude Code を開くエンジニア / 複数ブランチ切り替えが多い開発環境 / 自律エージェント起動スクリプト
設定例(.claude/hooks/session-context.sh):
#!/bin/bash
# SessionStart フック: プロジェクト状況をコンテキストに注入
CONTEXT="## プロジェクト現状(SessionStart 自動取得)"$'\n\n'
CONTEXT+="**日時**: $(date '+%Y-%m-%d %H:%M')"$'\n'
CONTEXT+="**ブランチ**: $(git branch --show-current 2>/dev/null || echo 'N/A')"$'\n'
CONTEXT+="**未コミット変更**:"$'\n'
CONTEXT+="$(git status --short 2>/dev/null | head -20)"$'\n\n'
CONTEXT+="**最新コミット(3件)**:"$'\n'
CONTEXT+="$(git log --oneline -3 2>/dev/null)"$'\n'
echo "{\"additionalContext\": $(echo "$CONTEXT" | python3 -c "import sys,json; print(json.dumps(sys.stdin.read()))")}"
exit 0
settings.json への追加:
{
"hooks": {
"SessionStart": [{
"matcher": "startup",
"hooks": [{ "type": "command", "command": "bash .claude/hooks/session-context.sh" }]
}]
}
}
公式: Hooks ガイド
難易度: ★★☆
6. Discord/Slack 通知フック(PostToolUse)— 重要操作をリアルタイム通知
コミット・ファイル大量変更・エラーなど重要な操作を Discord / Slack へ自動通知します。GitHub Star 1,471(2026年6月時点)の disler/claude-code-hooks-multi-agent-observability が実装例として参考になります。チームや自律エージェントの監査ログにも活用できます。
Pros
- エージェントが何をしたか、後から確認できる監査証跡が自動生成される
- Slack / Discord / Webhook 対応で既存チームツールに統合しやすい
type: "http"を使えばシェルスクリプト不要で実装可能
Cons
- 通知が多すぎると「通知疲れ」が起きるため、対象ツールを絞る設計が必要
- Webhook URL を
.envで管理する必要がある(直書き禁止)
使うべきユースケース: 自律エージェントの運用監視 / チーム開発での重要変更共有 / 監査証跡の自動生成
設定例(.claude/hooks/notify-discord.sh):
#!/bin/bash
INPUT=$(cat)
TOOL=$(echo "$INPUT" | python3 -c "import sys,json; print(json.load(sys.stdin).get('tool_name',''))")
FILE=$(echo "$INPUT" | python3 -c "
import sys, json
d = json.load(sys.stdin)
print(d.get('tool_input', {}).get('file_path', d.get('tool_input', {}).get('command', ''))[:100])")
# コミット操作のみ通知(必要に応じて対象を絞る)
if [[ "$TOOL" == "Bash" ]] && echo "$FILE" | grep -q "git commit"; then
WEBHOOK_URL="${DISCORD_WEBHOOK_URL:-}"
if [[ -n "$WEBHOOK_URL" ]]; then
curl -s -X POST "$WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d "{\"content\": \"🤖 Claude Code: コミット実行 \`$FILE\`\"}" \
> /dev/null
fi
fi
exit 0
settings.json への追加(HTTP Webhook 版):
{
"hooks": {
"PostToolUse": [{
"matcher": "Bash",
"hooks": [{
"type": "http",
"url": "${DISCORD_WEBHOOK_URL}",
"method": "POST",
"headers": { "Content-Type": "application/json" },
"body": { "content": "🤖 Claude Code: ツール実行 {{tool_name}}" }
}]
}]
}
}
公式: Hooks リファレンス
参考リポジトリ: disler/claude-code-hooks-multi-agent-observability(GitHub Star 1,471・2026年6月20日時点、最新はリポジトリを確認)
難易度: ★★☆
7. 自動承認フック(PermissionRequest)— 承認ダイアログで作業が止まらない
Claude Code の自動モードでは安全でない操作にパーミッションダイアログが表示され、作業が一時停止します。許可リストに登録した安全な操作パターンを自動で allow し、人間の監視が必要な操作のみダイアログを出す形で棲み分けます。CI/CD パイプラインやバッチ処理での完全自動化に必須です。
Pros
- 「Claude が途中で止まって気づいたら何時間も止まってた」問題を解消
- 操作パターンを許可リスト化するため、新しい危険操作は自動ブロックされる
updatedInputで入力を安全な形に変換してから実行することも可能
Cons
- 許可リストが広すぎると本来確認すべき操作が素通りするリスク
- 新しいツールや MCP サーバーを追加した場合は許可リストの見直しが必要
使うべきユースケース: launchd / cron での完全自動運転 / CI での Claude Code 実行 / バッチ記事生成
設定例(.claude/hooks/auto-approve.sh):
#!/bin/bash
INPUT=$(cat)
TOOL=$(echo "$INPUT" | python3 -c "import sys,json; print(json.load(sys.stdin).get('tool_name',''))")
FILE=$(echo "$INPUT" | python3 -c "
import sys, json
d = json.load(sys.stdin)
print(d.get('tool_input', {}).get('file_path', ''))")
# 許可リスト: content/ 以下の MDX ファイル書き込みは自動承認
SAFE_PATTERNS=("content/" "apps/" "packages/")
for pattern in "${SAFE_PATTERNS[@]}"; do
if [[ "$FILE" == *"$pattern"* ]] && [[ "$TOOL" =~ ^(Read|Edit|Write)$ ]]; then
echo "{\"permissionDecision\": {\"behavior\": \"allow\"}}"
exit 0
fi
done
exit 0
settings.json への追加:
{
"hooks": {
"PermissionRequest": [{
"hooks": [{ "type": "command", "command": "bash .claude/hooks/auto-approve.sh" }]
}]
}
}
公式: Hooks リファレンス
難易度: ★★☆
8. 品質ゲートフック(SubagentStop)— サブエージェント成果物の最低基準を強制
サブエージェントが完了しようとするタイミングで成果物(MDX・コード・ドキュメント)の品質を検証し、基準未達なら差し戻します。マルチエージェント運用で「手を抜いた成果物がそのまま公開される」のを防ぐ最終安全網です。
Hooks の中で最も応用範囲が広く、disler/claude-code-hooks-mastery(★3,786)でも本番パターンとして掲載されています(参考実装として公開されているものであり、特定環境での効果を保証するものではありません)。
Pros
- 自律エージェントの「手抜き納品」を物理的に防止
- 差し戻し理由を
additionalContextでフィードバックするため自己修正が自然に起きる - MDX 品質・テスト網羅・型チェックなど任意の基準に拡張可能
Cons
- 差し戻し基準が厳しすぎると無限ループのリスク(最大リトライ回数の設定を推奨)
- 大規模な成果物の検証には処理時間がかかる
使うべきユースケース: コンテンツメディアの自律運転 / マルチエージェント開発パイプライン / CI 品質ゲート
設定例(.claude/hooks/quality-gate.sh):
#!/bin/bash
# SubagentStop フック: MDX 品質ゲート
INPUT=$(cat)
ARTIFACT=$(echo "$INPUT" | python3 -c "
import sys, json
d = json.load(sys.stdin)
# 直近に書き込まれた MDX ファイルを検索(過去60秒以内)
import subprocess
result = subprocess.run(['find', 'apps', '-name', '*.mdx', '-newer', '/tmp/.hook_checkpoint', '-type', 'f'],
capture_output=True, text=True)
print(result.stdout.strip().split('\n')[0] if result.stdout.strip() else '')" 2>/dev/null)
touch /tmp/.hook_checkpoint
if [[ -z "$ARTIFACT" ]]; then exit 0; fi
ERRORS=()
CHAR_COUNT=$(wc -m < "$ARTIFACT" 2>/dev/null || echo 0)
H2_COUNT=$(grep -c "^## " "$ARTIFACT" 2>/dev/null || echo 0)
INTERNAL_LINKS=$(grep -c "\](/guide/\|/ai-coding/\|/efficiency/\)" "$ARTIFACT" 2>/dev/null || echo 0)
[ "$CHAR_COUNT" -lt 1500 ] && ERRORS+=("本文が1500字未満(現在: ${CHAR_COUNT}字)")
[ "$H2_COUNT" -lt 3 ] && ERRORS+=("H2 見出しが3個未満(現在: ${H2_COUNT}個)")
[ "$INTERNAL_LINKS" -lt 2 ] && ERRORS+=("内部リンクが2個未満(現在: ${INTERNAL_LINKS}個)")
if [ ${#ERRORS[@]} -gt 0 ]; then
ERROR_MSG=$(IFS=$'\n'; echo "${ERRORS[*]}")
echo "{\"decision\": \"block\", \"additionalContext\": \"品質ゲート不合格:\n${ERROR_MSG}\n\n上記を修正してから完了してください\"}"
exit 2
fi
exit 0
settings.json への追加:
{
"hooks": {
"SubagentStop": [{
"hooks": [{ "type": "command", "command": "bash .claude/hooks/quality-gate.sh" }]
}]
}
}
公式: Hooks リファレンス
参考リポジトリ: disler/claude-code-hooks-mastery(GitHub Star 3,786・2026年6月23日時点、最新はリポジトリを確認)
難易度: ★★★
よくある質問(FAQ)
Q. フックは .claude/settings.json と CLAUDE.md のどちらに書く?
A. 実行制御(ブロック・通知・自動化)が目的なら settings.json 一択です。 CLAUDE.md はプロンプト指示(Claude が読むテキスト)なので、ファイルへのアクセスを物理的にブロックする強制力はありません。「Claude に覚えてほしいルール」は CLAUDE.md、「必ず実行したい副処理」は settings.json の hooks に書き分けるのがベストプラクティスです。詳細は Skills × Subagents × Hooks 使い分け完全マップ を参照してください。
Q. フックが誤発動して Claude が止まってしまう場合の対処法は?
A. 問題のフックを一時的に settings.json から外すか、matcher を絞り込んでください。 PreToolUse フックの matcher を "Bash" のみに限定すると Read / Edit ツールには発火しなくなります。また exit code 0 で何も返さない分岐を追加しておくと「マッチしなかった場合は通過」の安全弁になります。デバッグには claude --debug モードが有効です(出力は公式ドキュメントを確認してください)。
Q. フックの実行順は指定できる?
A. 同一イベントに複数フックを登録した場合、settings.json の配列順で上から実行されます。 あるフックが exit code 2 でブロックを返すと、以降のフックは実行されません。セキュリティブロック系のフックをリストの先頭に、ログ・通知系を末尾に配置するのがおすすめです。
まとめ:用途別の導入ロードマップ
フック 8 本のうち、最初の 2 本(.env 保護・rm -rf ブロック)は全ユーザー必須です。 残り 6 本は自分の開発スタイルに合わせて段階的に追加してください。
今すぐ入れるべき(全ユーザー)
フック 1(.env 保護)+ フック 2(rm -rf ブロック) の 2 本は、すべての Claude Code ユーザーに即導入を推奨します。副作用が少なく、リスクを大幅に下げられます。
チーム開発者向け
フック 3(自動 Lint)+ フック 4(テスト自動実行)+ フック 6(通知) の組み合わせで、コードレビューの摩擦を減らしつつ監査証跡を自動生成できます。
自律エージェント運用者向け
フック 5(SessionStart 注入)+ フック 7(自動承認)+ フック 8(品質ゲート) の 3 本が核となります。launchd や cron で Claude Code を自動起動する構成では、この組み合わせが安定運用の基盤になります。
フックの設定ファイル全体像や全イベントの仕様は Claude Code Hooks 完全ガイド を、フックと Skills・サブエージェントの使い分けは Skills × Subagents × Hooks 使い分け完全マップ を参照してください。
関連記事
- Claude Code Hooks 完全ガイド — 全ライフサイクルイベントと matcher の仕様を網羅
- Skills × Subagents × Hooks 使い分け完全マップ — 3 機能の使い分けと組み合わせパターン
- Claude Code ベストプラクティス 15 選 — フック設定を含む運用最適化の全手法
- Claude Code でやってはいけない 7 つ — フック未設定で起きる失敗パターン
- Claude Code 完全ガイド — 料金・Skills・MCP・Hooks を網羅したピラー記事
この記事の著者
claude-code-media 編集部/ Claude Code 専門編集チーム
Claude Code の非エンジニア向け業務効率化メディア『claude-code-lab.jp』を運営。フリーランス・中小企業・個人開発者向けに、実装テンプレ・業務自動化テクニック・Vibe Coding 入門を配信。
