原文(日本語に翻訳)
cmd.exeの代わりにGit Bashを使用することで、Windowsでフック(PreToolUse、PostToolUse)が実行されずにサイレント失敗していた問題を修正 (anthropics/claude-code#25981)
原文(英語)
Fixed hooks (PreToolUse, PostToolUse) silently failing to execute on Windows by using Git Bash instead of cmd.exe (anthropics/claude-code#25981)
概要
Windows環境でClaude Codeのフック機能(PreToolUse、PostToolUse)を設定していても、フックが実行されずにエラーも表示されないサイレント失敗が発生していました。この問題は、Windowsのデフォルトシェルであるcmd.exeではなくGit Bashを使用してフックを実行するよう変更することで修正されました。これにより、Bash構文で記述されたフックスクリプトがWindows環境でも正常に動作します。
基本的な使い方
json
// ~/.claude/settings.json でのフック設定例
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "echo 'Bashコマンド実行前の処理'"
}
]
}
],
"PostToolUse": [
{
"matcher": "Write",
"hooks": [
{
"type": "command",
"command": "echo 'ファイル書き込み後の処理'"
}
]
}
]
}
}実践例
ファイル変更時の自動フォーマット(PostToolUse)
json
// Windows環境でも動作するPostToolUseフック
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write",
"hooks": [
{
"type": "command",
"command": "prettier --write \"$CLAUDE_TOOL_INPUT_PATH\" 2>/dev/null || true"
}
]
}
]
}
}修正後はGit Bashで実行されるため、Bash構文($CLAUDE_TOOL_INPUT_PATH、リダイレクト、||演算子)が正しく機能します。
コマンド実行前のログ記録(PreToolUse)
json
// Windows環境でのPreToolUseフック - Bash構文が使用可能に
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "echo \"$(date): $CLAUDE_TOOL_INPUT_COMMAND\" >> ~/claude_audit.log"
}
]
}
]
}
}セキュリティチェックフック
json
// 危険なコマンドを検出するフック(Windows + Git Bash環境)
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "if echo \"$CLAUDE_TOOL_INPUT_COMMAND\" | grep -qE '(rm -rf|format|del /f)'; then echo '危険なコマンドを検出' >&2; exit 1; fi"
}
]
}
]
}
}注意点
- この修正はWindows環境でのみ関係します
- フックを使用するにはGit for Windowsがインストールされている必要があります(Git Bashを提供するため)
- Git Bashで実行されるため、Bash互換の構文で記述してください(cmd.exe固有の構文は動作しません)
- macOSやLinuxでは以前と変わらず動作します
- フックのデバッグには
claude --debugオプションが有効です