Skip to content

原文(日本語に翻訳)

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 オプションが有効です

関連情報