Hooks システム

Hooks で Claude Code の動作をカスタマイズ — 自動フォーマット、セキュリティブロック、通知プッシュなど

Hooks システム

Hooks を使うと、Claude Code の重要なライフサイクルポイントにカスタムロジックを挿入できます。例えば、コードの自動フォーマット、危険なコマンドのブロック、通知の送信などが可能です。

コアコンセプト

各 Hook は 3 つの要素で構成されます:

  • イベント:トリガーのタイミング(例:PreToolUse — ツール実行前)

  • マッチャー:オプションのツール名フィルター(例:BashWrite のみにマッチ)

  • ハンドラー:Shell コマンド、プロンプト、またはサブエージェント

主なイベント

イベント トリガーのタイミング ブロック可否 典型的なユースケース
PreToolUse ツール実行前 可(exit code 2) セキュリティブロック、ファイル保護
PostToolUse ツール実行後 不可 自動 lint/フォーマット
Notification Claude が通知を送信時 不可 Slack/チャットツールへのアラート
UserPromptSubmit ユーザーがプロンプトを送信時 コンテキストの拡張
Stop Claude がレスポンスを完了時 不可 品質チェック、要約
SessionStart セッション開始時 不可 環境の初期化

設定方法

.claude/settings.json(プロジェクトレベル)または ~/.claude/settings.json(ユーザーレベル)に追加します:

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "prettier --write $FILEPATH"
          }
        ]
      }
    ]
  }
}

実用的な例

1. ファイル保存後の自動フォーマット

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "npx prettier --write $FILEPATH"
          }
        ]
      }
    ]
  }
}

2. 危険な Shell コマンドのブロック

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "echo $TOOL_INPUT | grep -qE 'rm -rf|sudo|git push --force' && exit 2 || exit 0"
          }
        ]
      }
    ]
  }
}

exit 2 でツールの実行をブロックし、exit 0 で続行を許可します。

3. 機密ファイルの読み取りを防止

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Read",
        "hooks": [
          {
            "type": "command",
            "command": "echo $TOOL_INPUT | grep -qE '\\.env|credentials|secret' && exit 2 || exit 0"
          }
        ]
      }
    ]
  }
}

4. タスク完了時に通知を送信

{
  "hooks": {
    "Notification": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "osascript -e 'display notification \"$NOTIFICATION_MESSAGE\" with title \"Claude Code\"'"
          }
        ]
      }
    ]
  }
}

入出力メカニズム

  • Hook スクリプトは stdin 経由で JSON データ(session_idtool_nametool_input を含む)を受け取ります

  • 環境変数$FILEPATH$TOOL_INPUT$NOTIFICATION_MESSAGE など

  • PreToolUse の exit code:0 = 許可、2 = ブロック

デバッグのヒント

  • Ctrl+O を押して verbose モードを有効にし、Hook の stdout/stderr 出力を確認

  • Hook スクリプトをテストする前に、ターミナルで手動実行してロジックが正しいか確認

注意事項

  • Hook スクリプトの実行時間が長すぎると、Claude Code のインタラクションがブロックされます

  • プロジェクトレベルの Hooks はユーザーレベルの Hooks よりも優先されます

  • エンタープライズ版では managed-settings.json を使って組織全体にセキュリティ Hooks を強制できます

次のステップ

🚀
QCode を始めよう — AI プログラミングアシスタント
Claude Code 公式リレー、高速・安定・すぐに使える
料金プランを見る → アカウント登録