原文(日本語に翻訳)
カンマ区切りのマッチャーを持つフック(例: "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環境変数が役立ちます。
関連情報
- Claude Code ドキュメント - フック
- 関連設定:
settings.jsonのhooksセクション