azukiazusa

azukiazusa

Claude Code の hooks で if フィールドでフックが呼び出される条件を指定する

v2.1.85 で、Claude Code の hooks で if フィールドを指定できるようになりました。if フィールドには、フックが呼び出される条件を指定できます。条件に一致しない場合はプロセス自体が起動しないため、オーバーヘッド削減にもなります。

azukiazusa

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

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

azukiazusa

if で or 表現をサポートしていないため少々冗長ですが、シェルコマンドでファイルパスをフィルタリングするよりはシンプルに指定できます。