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コマンドを最初からそちに流すようになると思います。