Hooks
ClaudeCodeのHooks機能を使用することで、ツール実行の前後に自動的にコマンドを実行できます。弊社では、コードフォーマッターの自動実行、型チェック、テストの実行などに対してHooksを活用しています。
https://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
この記事を参考にしています。
コマンドの構成要素
jq -r- JSONを処理し、raw出力(引用符なし)で結果を返す.tool_input.file_path- ClaudeCodeから渡されるJSONのfile_pathフィールドを取得select(endswith(".ts") or endswith(".tsx"))- ファイル拡張子でフィルタリングxargs -r- 入力がある場合のみ後続のコマンドを実行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"