>_ claude-code.jp
記事一覧に戻る

Claude Code Hooks 設定ガイド|自動化フックで開発を効率化

Claude Code Hooks 自動化

Claude Code Hooks とは

Claude Code Hooksは、Claude Codeの各操作の前後に独自のスクリプトやコマンドを自動実行できる仕組みです。たとえば、ファイル編集後に自動でリンターを走らせたり、コマンド実行前にセキュリティチェックを挟んだりできます。

Hooksを活用することで、手動で行っていた作業を自動化し、一貫性のある開発ワークフローを構築できます。Claude Codeの基本的な使い方をすでに理解している方は、Hooksで次のステップに進みましょう。

フックタイプの一覧

Claude Code Hooksには、いくつかのタイプがあります。それぞれのトリガータイミングを理解することが重要です。

PreToolUse

ツール(ファイル編集、コマンド実行など)が実行されるに発火します。バリデーションやセキュリティチェックに最適です。

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Edit",
        "command": "bash /path/to/pre-edit-check.sh $CLAUDE_FILE_PATH"
      }
    ]
  }
}

PostToolUse

ツールが実行されたに発火します。フォーマッターの実行や通知送信に使えます。

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit",
        "command": "npx prettier --write $CLAUDE_FILE_PATH"
      }
    ]
  }
}

Notification

Claude Codeが通知を送るタイミングで発火します。長時間タスクの完了通知をSlackやDiscordに送る用途に便利です。

{
  "hooks": {
    "Notification": [
      {
        "command": "curl -X POST -H 'Content-Type: application/json' -d '{\"text\": \"Claude Code: タスク完了\"}' $SLACK_WEBHOOK_URL"
      }
    ]
  }
}

Stop

Claude Codeがタスクを完了して停止するときに発火します。クリーンアップ処理や最終チェックに使えます。

settings.json での設定方法

Hooksは .claude/settings.json に記述します。プロジェクトルートに配置することで、プロジェクト固有のフックを定義できます。

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "command": "echo \"コマンド実行前チェック: $CLAUDE_COMMAND\""
      }
    ],
    "PostToolUse": [
      {
        "matcher": "Edit",
        "command": "npx eslint --fix $CLAUDE_FILE_PATH"
      },
      {
        "matcher": "Write",
        "command": "npx prettier --write $CLAUDE_FILE_PATH"
      }
    ]
  }
}

matcher の指定方法

matcher にはツール名を指定します。主なツール名は以下のとおりです。

matcher対象操作
Editファイルの編集
Writeファイルの新規作成
Bashシェルコマンドの実行
Readファイルの読み取り

matcherを省略すると、すべてのツール操作に対してフックが発火します。

実践的なHooks設定例

例1: ファイル編集後に自動フォーマット

最も一般的な使い方です。Claude Codeがファイルを編集するたびに、Prettierで自動フォーマットをかけます。

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit",
        "command": "npx prettier --write $CLAUDE_FILE_PATH 2>/dev/null || true"
      }
    ]
  }
}

2>/dev/null || true を付けることで、Prettierが対応していないファイルでもエラーにならないようにしています。

例2: 危険なコマンドをブロック

本番環境に影響するコマンドを事前にブロックする例です。

#!/bin/bash
# pre-command-check.sh
BLOCKED_COMMANDS=("rm -rf /" "DROP TABLE" "git push --force")

for blocked in "${BLOCKED_COMMANDS[@]}"; do
  if echo "$CLAUDE_COMMAND" | grep -q "$blocked"; then
    echo "BLOCKED: 危険なコマンドが検出されました: $blocked"
    exit 1
  fi
done
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "command": "bash .claude/scripts/pre-command-check.sh"
      }
    ]
  }
}

例3: テストの自動実行

ソースコードが変更されるたびに、関連するテストを自動実行する設定です。

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit",
        "command": "bash -c 'if [[ $CLAUDE_FILE_PATH == *.ts ]]; then npx vitest run --reporter=verbose 2>&1 | tail -20; fi'"
      }
    ]
  }
}

Hooksのデバッグ方法

フックが期待通りに動かない場合は、以下の手順でデバッグしましょう。

  1. コマンド単体でテスト - フックに設定するコマンドを、まずターミナルで直接実行して動作確認します
  2. 環境変数の確認 - echo コマンドで環境変数の中身を出力して確認します
  3. ログ出力を追加 - コマンドの出力をファイルにリダイレクトして記録します
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit",
        "command": "echo \"$(date): $CLAUDE_FILE_PATH が編集されました\" >> /tmp/claude-hooks.log"
      }
    ]
  }
}

CLAUDE.md との連携

CLAUDE.mdファイルにHooksの存在を記述しておくと、Claude Codeがフックを考慮した操作を行いやすくなります。

## Hooks
- ファイル編集後にPrettierが自動実行されます
- テストファイル変更時にvitestが自動実行されます

まとめ

Claude Code Hooksは、開発ワークフローを自動化する強力な仕組みです。最初は単純なフォーマッター連携から始めて、徐々にセキュリティチェックやテスト自動実行など高度な設定を追加していくのがおすすめです。

Claude Code APIとの連携と組み合わせれば、CI/CDパイプラインに組み込んだ高度な自動化も実現できます。

AIでプロダクトを作りたい方へ

BlueAI Schoolは月額9,800円から。3ヶ月で自分のプロダクトを公開する実践コースも。

詳しく見る