Claude CodeでBash/PowerShellの取り違えによるリトライを止める

Windows環境でClaude Codeを使っていると、こんな挙動に出くわすことがあります。

  • Remove-Item を Bashツールで実行しようとして失敗
  • エラーを見て PowerShell に切り替えて再実行
  • ファイル操作のたびに同じことを繰り返す

シェル取り違え→リトライのループは、無駄にトークンを消費して勿体ないです。

原因:Bashツール/PowerShellツールの二重存在

Claude CodeはWindowsネイティブ環境で動かす場合、デフォルトではBashツールが優先されます。Git for Windowsが入っていればGit Bashが使われ、なければPowerShellにフォールバックする設計です。

加えて、Claude Code v2.1.84以降、PowerShellツールがオプトイン式の機能として追加されました。これは CLAUDE_CODE_USE_POWERSHELL_TOOL という環境変数で制御します。

つまりWindowsネイティブで運用していると、

  • Bashツールしか有効化されていない状態でPowerShellコマンドを生成して失敗
  • あるいはその逆

という取り違えが起こりやすい状況になっていました。

解決策:settings.json に環境変数を1行追加

~/.claude/settings.json(Windowsなら C:\Users\<ユーザー名>\.claude\settings.json)に以下を書きます。

{
  "env": {
    "CLAUDE_CODE_USE_POWERSHELL_TOOL": "1"
  }
}

これでClaude Code起動時に環境変数が読み込まれ、PowerShellツールが有効化されます。Claudeも「いまPowerShellツールが使える」と認識するため、Remove-Item などのPowerShellコマンドを最初からそちに流すようになると思います。