CLAUDE LABEN
FORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられていますFORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられています
記事一覧/Claude Code
Claude Code/2026-04-02中級

Claude Code Hooks:自動化ワークフローの実践的な構築方法

Claude Code Hooksの仕組みを体系的に解説。PreToolUse・PostToolUse・Stop・Notificationなど各フックの活用方法から、実践的な自動化ワークフローの構築まで丁寧に紹介します。

Claude Code197Hooks4自動化68ワークフロー20開発効率化8

Claude Code Hooksは、AIによるコーディング作業に「人間の意図」を精密に織り込むための仕組みです。ツールの実行前後にカスタムスクリプトを差し込むことで、コード品質の自動チェックやログ記録、通知送信といった繰り返し作業を大幅に効率化できます。

Claude Code Hooksとは何か

Claude Code Hooksとは、Claude Codeがツールを実行する際に、特定のタイミングでシェルコマンドやスクリプトを自動実行できる仕組みです。従来は「AIが作業する → 人間が確認する → 次のステップへ」という流れでしたが、Hooksを使えば「AIが作業する → 自動検証・通知 → 次のステップへ」という洗練されたワークフローを実現できます。

Hooksが特に威力を発揮する場面をいくつか挙げてみましょう。

コードの自動品質チェック: AIがファイルを編集するたびにLinterやFormatterを走らせ、問題があれば即座に検知できます。

変更履歴の自動記録: どのファイルがいつ編集されたかをログに残すことで、デバッグや監査が容易になります。

外部サービスへの通知: Slackやメールと連携し、重要な作業完了を自動で関係者に知らせることができます。

セキュリティチェック: センシティブなファイルへのアクセスを検知し、必要に応じてブロックすることも可能です。

Hooksの設定ファイル

Hooksの設定は ~/.claude/settings.json(グローバル設定)または プロジェクトルートの .claude/settings.json(プロジェクト固有設定)に記述します。

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "echo '🔧 Bashツール実行前: $CLAUDE_TOOL_INPUT' >> /tmp/claude-hooks.log"
          }
        ]
      }
    ],
    "PostToolUse": [
      {
        "matcher": "Edit",
        "hooks": [
          {
            "type": "command",
            "command": "cd $CLAUDE_PROJECT_DIR && npx eslint --fix $CLAUDE_TOOL_INPUT_FILE_PATH 2>/dev/null || true"
          }
        ]
      }
    ]
  }
}

設定はJSON形式で記述し、フックタイプごとに matcher(対象ツール名)と実行する command を指定します。

4つのフックタイプを理解する

Claude Code Hooksには現在、4つのタイミングでスクリプトを実行できます。それぞれの特性を把握することが、効果的な活用の第一歩です。

PreToolUse:ツール実行前に動く

PreToolUse フックは、Claude Codeがツールを呼び出す直前に実行されます。最大の特徴は「ツールの実行を阻止する(blocking)」かどうかを選択できる点です。

スクリプトの終了コードが 0 であれば通常通りツールが実行され、0以外 の場合はツールの実行が阻止されます。これにより、危険なコマンドの自動検知やアクセス制御が実現できます。

#!/bin/bash
# 本番環境への直接デプロイを防ぐPreToolUseスクリプト例
TOOL_INPUT="$CLAUDE_TOOL_INPUT"
if echo "$TOOL_INPUT" | grep -q "production" && echo "$TOOL_INPUT" | grep -q "deploy"; then
  echo "⚠️  本番環境へのデプロイはレビューが必要です"
  exit 1  # ツール実行をブロック
fi
exit 0  # 通常通り実行

PostToolUse:ツール実行後に動く

PostToolUse フックは、ツールの実行が完了した直後に動きます。ツール実行の結果を受け取れるため、後処理や検証に最適です。

Editツール実行後に自動でフォーマットをかける使い方が特に人気です。

#!/bin/bash
# Editツール後に自動でPrettierを実行するスクリプト例
FILE="$CLAUDE_TOOL_INPUT_FILE_PATH"
if [[ "$FILE" =~ \.(js|ts|jsx|tsx|json|css)$ ]]; then
  npx prettier --write "$FILE" 2>/dev/null
  echo "✅ $FILE をフォーマットしました"
fi

Stop:Claude Codeが作業を終了するとき

Stop フックは、Claude Codeがセッションを終了する際に一度だけ実行されます。作業完了の通知や、最終的なサマリーの生成に活用できます。

#!/bin/bash
# 作業完了をSlackに通知するスクリプト例
SESSION_ID="$CLAUDE_SESSION_ID"
curl -s -X POST "$SLACK_WEBHOOK_URL" \
  -H 'Content-type: application/json' \
  -d "{\"text\":\"✅ Claude Code セッション完了 (ID: ${SESSION_ID})\"}"

Notification:通知イベント

Notification フックは、Claude Codeが何かを通知しようとするタイミングで実行されます。例えばユーザーの入力待ち状態になったときなどに活用でき、長い処理の途中経過を外部に伝えるのに便利です。

環境変数で渡される情報

Hooksスクリプト内では、実行コンテキストに関する情報が環境変数として自動的に設定されます。主要なものを把握しておきましょう。

環境変数内容
CLAUDE_TOOL_NAME実行されるツールの名前(例: Bash, Edit
CLAUDE_TOOL_INPUTツールへの入力内容(JSON形式)
CLAUDE_TOOL_INPUT_FILE_PATHEditツール使用時のファイルパス
CLAUDE_PROJECT_DIR現在のプロジェクトのルートディレクトリ
CLAUDE_SESSION_IDセッションの識別子
CLAUDE_HOOK_EVENT_NAME発火したフックタイプの名前

これらを組み合わせることで、ツールの種類やファイルパスに応じた柔軟な処理が可能になります。

matcherでフックの適用範囲を制御する

matcher フィールドでは、どのツールに対してフックを適用するかを指定します。完全一致のほか、正規表現も使用できます。

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "/path/to/auto-lint.sh"
          }
        ]
      }
    ]
  }
}

上記の例では、EditWrite の両方のツールが実行された後にLintスクリプトを実行します。matcher を空文字列にすると、すべてのツールが対象になります。

実践レシピ集

レシピ1:TypeScriptファイルの自動型チェック

#!/bin/bash
# auto-typecheck.sh
FILE="$CLAUDE_TOOL_INPUT_FILE_PATH"
if [[ "$FILE" =~ \.tsx?$ ]]; then
  PROJECT_DIR="$CLAUDE_PROJECT_DIR"
  cd "$PROJECT_DIR"
  npx tsc --noEmit --skipLibCheck 2>&1 | head -20
fi
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit",
        "hooks": [{ "type": "command", "command": "/path/to/auto-typecheck.sh" }]
      }
    ]
  }
}

レシピ2:セキュアなシークレット検出

機密情報(APIキー、パスワード等)がコードに混入するのを防ぐ設定です。

#!/bin/bash
# secret-detector.sh
FILE="$CLAUDE_TOOL_INPUT_FILE_PATH"
PATTERNS="(API_KEY|SECRET|PASSWORD|TOKEN|PRIVATE_KEY)\s*=\s*['\"][^'\"]{8,}"
 
if [ -f "$FILE" ] && grep -qE "$PATTERNS" "$FILE"; then
  echo "🚨 機密情報の可能性があるパターンを検知しました: $FILE"
  grep -nE "$PATTERNS" "$FILE" | head -5
  exit 1  # 上書きをブロック
fi
exit 0

レシピ3:作業ログの自動記録

#!/bin/bash
# activity-logger.sh
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
TOOL="$CLAUDE_TOOL_NAME"
FILE="${CLAUDE_TOOL_INPUT_FILE_PATH:-N/A}"
LOG_FILE="$HOME/.claude/activity.log"
 
echo "[$TIMESTAMP] $TOOL$FILE" >> "$LOG_FILE"

このスクリプトをPostToolUseに設定することで、Claude Codeのすべての作業が ~/.claude/activity.log に自動記録されます。

レシピ4:テストの自動実行

#!/bin/bash
# auto-test.sh
FILE="$CLAUDE_TOOL_INPUT_FILE_PATH"
PROJECT_DIR="$CLAUDE_PROJECT_DIR"
 
# テストファイルが変更されたらすぐにテストを実行
if [[ "$FILE" =~ \.(test|spec)\.(js|ts)$ ]]; then
  cd "$PROJECT_DIR"
  npx jest "$FILE" --passWithNoTests 2>&1 | tail -10
fi

Hooksを安全に運用するポイント

Hooksはシェルコマンドをそのまま実行するため、設定を誤ると意図しない動作が起きる可能性もあります。安全に運用するための注意点を整理しておきましょう。

スクリプトのエラーハンドリング: set -e を使い過ぎると、細かいエラーでHooksが止まります。意図的にエラーを許容したい場合は || true を活用しましょう。

実行権限の確認: スクリプトファイルには chmod +x で実行権限が必要です。設定後に動作しない場合はまず権限を確認してください。

デバッグにはログを活用: echo "デバッグ情報" >> /tmp/hooks-debug.log のようにログを書き出しながら開発すると、問題の特定が容易になります。

冪等性(べきとうせい)を意識する: 同じHooksが複数回実行されても問題ないよう設計する点が肝心です。特にファイル生成や状態変更を伴う処理では注意が必要です。

全体を振り返って:Hooksで「賢い開発環境」を作ろう

Claude Code Hooksは、一度設定してしまえば毎回の作業を着実に支援してくれる、非常に実用的な機能です。最初は小さなログ記録から試してみて、徐々に自動フォーマットやセキュリティチェックへと拡張していくのがおすすめです。

「AIが作業する → 自動で品質が担保される → 人間は本質的な判断に集中できる」という循環を実現できたとき、開発体験は大きく向上するはずです。ぜひ、自分のプロジェクトに合ったHooks設定を育てていただければと思います。


🌟 プレミアム会員限定のコンテンツもあります

Claude Labでは、今回ご紹介したHooks活用術のさらに深い内容をプレミアム記事として公開しています。

  • MCPサーバーとHooksの組み合わせ:外部APIと連携した高度なワークフロー構築
  • チーム開発でのHooks共有ベストプラクティス:組織全体でHooksを標準化する方法
  • Claude Code + CI/CDパイプライン統合:GitHubActionsとの実践的な連携レシピ

プレミアム会員(月額¥280〜)になると、これらの深掘り記事すべてにアクセスできます。Claude AIを日々の開発に活かしたい方に、心からおすすめしています。

シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

Claude Code2026-04-27
Claude Code Hooks — 8種類のフックを使い分ける設計判断と落とし穴
Claude Code のフックは強力ですが、どのイベントで何ができるかが曖昧で、結局使いこなせないまま終わる人が多いです。私が半年運用して辿り着いた、フック種別ごとの設計判断と典型的な落とし穴を整理します。
Claude Code2026-03-21
CLAUDE.md の設計で Claude Code の出力が安定する — 階層構造・サブエージェント・外部メモリの実践
CLAUDE.md を階層設計(グローバル・プロジェクト・ルール)で整え、サブエージェントと外部メモリを組み合わせて Claude Code の出力を安定させる方法を、実際の運用で効いた工夫とともに解説します。
Claude Code2026-07-05
Trusted Devices を小規模チームで運用する — メンバー端末の検証とローテーション設計
Team/Enterprise の Trusted Devices を2〜5人規模で導入する際の、端末登録・無人実行前のプリフライト・端末ローテーション時の漏れ対策を、実運用の手順とスクリプトで整理します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →