CC逆引きリファレンス

ツール実行後にフックしたい

10. フック

コマンド / 機能

PostToolUse

事後処理

概要

ツールの実行が完了した後に呼び出されます。ファイル変更後の lint やフォーマット、テスト実行などに便利です。

設定例

// settings.json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write",
        "hooks": [
          {
            "type": "command",
            "command": "npx prettier --write \"$CLAUDE_FILE_PATH\" 2>/dev/null || true"
          }
        ]
      },
      {
        "matcher": "Edit",
        "hooks": [
          {
            "type": "command",
            "command": "npx eslint --fix \"$CLAUDE_FILE_PATH\" 2>/dev/null || true"
          }
        ]
      },
      {
        "matcher": "Write(*.test.ts)",
        "hooks": [
          {
            "type": "command",
            "command": "npm test -- --findRelatedTests \"$CLAUDE_FILE_PATH\" 2>&1 | head -20"
          }
        ]
      }
    ]
  }
}

こんな時に使う

  • ファイル保存後に自動処理したい時
  • 変更後に lint やフォーマットを実行したい時
  • テストファイル更新時に自動テストしたい時
  • ファイル変更をログに記録したい時

使い方

  1. 1PostToolUse イベントにフック定義を追加
  2. 2matcher で対象ツールやファイルパターンを指定
  3. 3環境変数 $CLAUDE_FILE_PATH で変更されたファイルパスを取得
  4. 4|| true を付けるとエラーでも続行

Tips

  • フォーマッターやリンターの出力を Claude にフィードバックできる
  • 2>/dev/null でエラー出力を抑制すると Claude が混乱しにくい
  • head -20 などで出力を制限すると効率的
  • Write と Edit の両方に設定すると漏れなく処理できる