Skip to content

原文(日本語に翻訳)

カンマ区切りのマッチャーを持つフック(例: "Bash,PowerShell")がサイレントに発火しない問題を修正

原文(英語)

Fixed hooks with comma-separated matchers (e.g. "Bash,PowerShell") silently never firing

概要

settings.json のフック設定でカンマ区切りによる複数ツールマッチャー(例: "Bash,PowerShell")を使用していた場合、フックがエラーなく静かに無視されてしまうバグが存在していました。この修正により、カンマ区切りのマッチャーが正しく認識され、指定したすべてのツールでフックが発火するようになりました。

基本的な使い方

カンマ区切りで複数ツールを指定したフック設定が正しく機能します:

json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash,PowerShell",
        "hooks": [
          {
            "type": "command",
            "command": "echo 'コマンド実行前のログ'"
          }
        ]
      }
    ]
  }
}

実践例

複数のツールに共通のフックを設定する

json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash,Edit,Write",
        "hooks": [
          {
            "type": "command",
            "command": "/path/to/my-pre-tool-script.sh"
          }
        ]
      }
    ]
  }
}

このように設定すると、Bash、Edit、Write のいずれかのツールが呼ばれる前にスクリプトが実行されます(以前はサイレントに無視されていた)。

セキュリティログの記録

json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Bash,Edit,Write,MultiEdit",
        "hooks": [
          {
            "type": "command",
            "command": "logger -t claude-code 'ツール使用を記録'"
          }
        ]
      }
    ]
  }
}

既存の設定の確認と修正

バグの影響を受けていた可能性がある設定の例:

json
// 修正前(バグで動作していなかった可能性)
{
  "matcher": "Bash,PowerShell"  // カンマ区切り → 動作しないバグ
}

// 回避策として個別設定していた場合
{
  "hooks": [
    { "matcher": "Bash", "hooks": [...] },
    { "matcher": "PowerShell", "hooks": [...] }  // 冗長な設定
  ]
}

// 修正後(カンマ区切りで正しく動作するように)
{
  "matcher": "Bash,PowerShell"  // 正常に動作するようになった
}

注意点

  • このバグはエラーを出さずにサイレントに失敗していたため、フックが動作していないことに気づきにくい状態でした。
  • カンマ区切りの回避策として個別にマッチャーを設定していた場合、引き続き動作しますが、シンプルなカンマ区切り形式に統一できます。
  • フックの動作確認には CLAUDE_CODE_HOOKS_DEBUG=1 環境変数が役立ちます。

関連情報