Skip to content

原文(日本語に翻訳)

Windows PowerShell 5.1でgit pushのようなコマンドがstderrに進捗を書き込む際に、PowerShellツールが誤って失敗と報告していた問題を修正しました。

原文(英語)

Fixed PowerShell tool incorrectly reporting failures when commands like git push wrote progress to stderr on Windows PowerShell 5.1

概要

Windows PowerShell 5.1環境において、git push などのコマンドが正常に完了しているにもかかわらず、進捗情報をstderrに出力する挙動があるため、Claude CodeのPowerShellツールがこれを失敗と誤判断して報告するバグがありました。git push は進捗表示(Counting objects: 100% など)をstderrに書き出す仕様のため、成功してもエラーとして扱われていました。v2.1.89でstderrへの出力が即座にエラーとして扱われないよう修正されました。

基本的な使い方

powershell
# Windows PowerShell 5.1でのgit push
git push origin main

# 修正前: stderrへの進捗出力が失敗として報告されていた
# Error: Command failed (stderr output detected)

# 修正後: 終了コードで成功/失敗を判断する
# Successfully pushed to origin/main

実践例

git pushの正常な動作確認

powershell
# Claude CodeでPowerShellツールを使ったgit操作
# 修正後: 進捗表示がstderrに出力されても失敗と報告されない

git fetch origin        # stderrに進捗出力
git pull origin main    # stderrに進捗出力
git push origin main    # stderrに進捗出力
git clone <url>         # stderrに進捗出力

# すべて修正後は正しく成功として報告される

stderrを使用する他のコマンド

powershell
# stderrに出力するが成功するコマンドの例

# npm install
npm install  # deprecation warningsがstderrに出力される
# 修正後: warningsがあっても成功として扱われる

# curl
curl -s https://api.example.com/data 2>$null
# 修正後: stderrへの出力に関わらず終了コードで判断

# wget
Invoke-WebRequest -Uri https://example.com -OutFile output.html

PowerShell 5.1での終了コード確認

powershell
# コマンドの終了コードを確認する方法
git push origin main
echo "Exit code: $LASTEXITCODE"
# 0 = 成功
# 非0 = 失敗

# 修正後: Claude Code はこの $LASTEXITCODE で判断する

注意点

  • この問題はWindows PowerShell 5.1固有の問題でした(PowerShell 7+は影響なし)
  • Windows PowerShell 5.1はWindows 10/11にデフォルトでインストールされている古いバージョンです
  • git push 以外にも git clonegit fetchgit pull などstderrに進捗を出力するコマンドが影響を受けていました
  • 修正後も実際にエラーが発生した場合は正しくエラーとして報告されます

関連情報