Interactive

Hooks

ClaudeCodeのHooks機能を使用することで、ツール実行の前後に自動的にコマンドを実行できます。弊社では、コードフォーマッターの自動実行、型チェック、テストの実行などに対してHooksを活用しています。

https://docs.anthropic.com/ja/docs/claude-code/hookshttps://docs.anthropic.com/ja/docs/claude-code/hooks

システムプロンプトでも「コードを書き換えたらテストを実行する」などの設定が可能ですが、Hooksを使用して実行する方が確実です。

基本的な設定

設定ファイル(.claude/settings.json)でHooksを定義します。以下は、TypeScriptファイルの編集後に自動フォーマットを実行する例です。

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit|MultiEdit",
        "hooks": [
          {
            "type": "command",
            "command": "jq -r '.tool_input.file_path | select(endswith(\".ts\") or endswith(\".tsx\"))' | xargs -r bun run format"
          }
        ]
      }
    ]
  }
}

この設定により、TypeScriptファイル(.ts.tsx)が編集されると自動的にフォーマッターが実行されます。コマンドの実行結果は自動的にClaudeにフィードバックされ、エラーが発生した場合は修正を促します。

用途

Hooks機能は以下のような場面で活用できます:

  • コードフォーマット - ファイル編集後に自動でフォーマッターを実行し、コードスタイルを統一
  • 型チェック - TypeScriptファイル変更時に型エラーを即座に検出
  • テスト実行 - テストファイル編集後に関連テストを自動実行し、破壊的変更を防止
  • Biomeの実行 - Biomeでコード品質を自動チェック
  • 依存関係の更新 - package.json変更時に自動でbunを実行する

jqコマンドの詳細

Hooksで使用されるjqコマンドは、JSONデータを処理することが出来るみたいです。

jq -r '.tool_input.file_path | select(endswith(".ts") or endswith(".tsx"))' | xargs -r bun run format

この記事を参考にしています。

コマンドの構成要素

  1. jq -r - JSONを処理し、raw出力(引用符なし)で結果を返す
  2. .tool_input.file_path - ClaudeCodeから渡されるJSONのfile_pathフィールドを取得
  3. select(endswith(".ts") or endswith(".tsx")) - ファイル拡張子でフィルタリング
  4. xargs -r - 入力がある場合のみ後続のコマンドを実行
  5. bun run format - 実際のフォーマットコマンド

TypeScript型チェック

ファイル編集後に型チェックを自動実行する設定です。

"jq -r '.tool_input.file_path | select(endswith(\".ts\") or endswith(\".tsx\"))' | xargs -r npx tsc --noEmit"

テストファイルの自動実行

テストファイルが編集されたら自動的にテストを実行します。

"jq -r '.tool_input.file_path | select(contains(\".test.\") or contains(\".spec.\"))' | xargs -r bun test"

参考