azukiazusa
Claude Code の hooks で if フィールドでフックが呼び出される条件を指定する
v2.1.85 で、Claude Code の hooks で if フィールドを指定できるようになりました。if フィールドには、フックが呼び出される条件を指定できます。条件に一致しない場合はプロセス自体が起動しないため、オーバーヘッド削減にもなります。
azukiazusa
例えば .ts, .js ファイルでのみ Prettier を実行したい場合、今までは以下のようにシェルコマンドでファイルパスをフィルタリングしていました。
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "jq -r '.tool_input.file_path | select(endswith(\".js\") or endswith(\".ts\") or endswith(\".jsx\") or endswith(\".tsx\"))' | xargs -r npx prettier --write"
}
]
}azukiazusa
これを if フィールドを使って以下のように指定できます。
{
"matcher": "Write",
"hooks": [
{ "type": "command", "if": "Write(**.ts)", "command": "..." },
{ "type": "command", "if": "Write(**.js)", "command": "..." },
{ "type": "command", "if": "Write(**.jsx)", "command": "..." },
{ "type": "command", "if": "Write(**.tsx)", "command": "..." }
]
}azukiazusa
if で or 表現をサポートしていないため少々冗長ですが、シェルコマンドでファイルパスをフィルタリングするよりはシンプルに指定できます。