CLAUDE LABEN
FORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられていますFORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられています
記事一覧/Claude Code
Claude Code/2026-04-21中級

Claude Code の Bash が Windows で詰まるときに — CLAUDE_CODE_USE_POWERSHELL_TOOL=1 の実用メモ

Windows で Claude Code を使っていると、Bash 経由のコマンドがときどき不自然に失敗します。環境変数 CLAUDE_CODE_USE_POWERSHELL_TOOL=1 を立てて PowerShell を直接叩くようにするだけで、症状の多くが消えます。この記事は、その切り替えを実際に使ってみた上で見えてきた注意点をまとめたものです。

claude-code129windows2powershell2troubleshooting61shell2

Windows で Claude Code を使うと、たまに起きる不思議な失敗

Windows マシンで Claude Code を触っていて、こんな場面に遭遇したことはないでしょうか。

ファイルを開く・検索する・簡単なスクリプトを走らせるといった作業は普通に動くのに、あるタイミングでパスが壊れたり、Git コマンドがクオートの解釈で失敗したり、改行コードがらみで挙動が読めなくなります。それらを Claude Code 側から見ると、「Bash でこう書いた → エラー → 別の書き方を試す」を往復し始めて、出力がだんだん冗長になっていきます。

このタイプの不調の原因の多くは、Windows 上の Bash(Git Bash・MSYS2・WSL 風のラッパーなど)と、Claude Code が想定しているシェルの振る舞いが微妙にずれているところにあります。ここで役に立つのが CLAUDE_CODE_USE_POWERSHELL_TOOL=1 という環境変数です。これをセットした状態で Claude Code を起動すると、シェル経由のコマンドを PowerShell 側に直接渡すようになります。

この記事は、私がこの切り替えを業務で使ってみて得た、Windows ユーザーにとっての判断材料をまとめたものです。公式の機能説明を翻訳し直すのではなく、「いつ使うべきか」「使うと何が変わるか」「残る落とし穴は何か」という実務目線の話を中心に書きます。

そもそもこの環境変数は何をしているのか

Claude Code は内部で複数の「ツール」を切り替えながらコマンドを実行します。そのなかでシェル実行を担うのが Bash 系のツールです。既定では、POSIX シェル互換の挙動を前提にした実装になっていて、Linux や macOS ではそのまま素直に動きます。

Windows の場合、Claude Code を Git Bash などの POSIX エミュレーション上で動かすケースが多く、そこでは「パスのスラッシュが混ざる」「クオートの解釈が二重になる」「cmd と PowerShell のどちらが最終的に呼ばれるか環境で変わる」といったズレが発生しやすくなります。

CLAUDE_CODE_USE_POWERSHELL_TOOL=1 を立てると、シェル実行の経路を変更し、PowerShell を直接叩くようになります。PowerShell は Windows 11 にも標準で入っており、Windows 側のパスやユーザープロファイル、環境変数を最初から前提として動きます。結果として、Windows ならではの噛み合わなさがだいぶ減ります。

こういうときに効く

使って一番わかりやすく効くのは、以下のような場面です。

長いパスやスペースを含むパスを扱うとき

Windows は C:\Users\<名前>\OneDrive\Documents のような、スペースや日本語を含むパスが当たり前です。Git Bash 経由でここを渡すと、クオートを何重に書けばいいかで毎回つまずきます。PowerShell 直接実行だと、Windows 側のパス表記をそのまま渡せるので、このストレスがほとんど消えます。

ネットワーク関連・プロキシ越しのコマンド

企業 PC では HTTP プロキシや証明書周りの設定が Windows の資格情報マネージャーに寄っていることが多く、Bash 経由だと証明書の参照位置が合わずに SSL certificate problem のようなエラーが出ます。PowerShell 側だと Windows の証明書ストアをそのまま見にいくため、追加設定なしで通ることがあります。

PowerShell でしか使えない cmdlet を呼びたいとき

Get-ProcessGet-ServiceGet-AppxPackage のような cmdlet は PowerShell 固有のものです。Bash からは呼べませんが、PowerShell 経由なら自然に書けます。Windows 環境の診断を Claude Code 越しに行うときに便利です。

切り替えたときに注意すること

逆に、切り替えることで「従来の Bash 書きの慣習」がそのままでは使えなくなる部分もあります。

POSIX のパイプやリダイレクトの書き方

command1 | command2 のようなパイプは PowerShell でも動きますが、PowerShell のパイプはテキストではなく「オブジェクト」を流す設計です。grep の代わりに Select-Stringawk の代わりに ForEach-Object のように、置き換えが必要になります。Claude Code は多くの場合この変換を自動で調整してくれますが、既存のシェルスクリプトをそのまま貼り付けるような使い方は相性が悪くなります。

実行ポリシー(Execution Policy)

PowerShell にはスクリプト実行を制限するポリシー設定があります。業務 PC で Restricted が適用されていると、Claude Code から .ps1 ファイルを走らせようとしたときに拒否されます。この場合、管理者権限で Set-ExecutionPolicy RemoteSigned -Scope CurrentUser を一度実行して、ユーザー単位で緩める必要があります。

クオート挙動の差

POSIX シェルと PowerShell はクオートの扱いが微妙に違います。とくに二重引用符の中での $ の展開ルールや、シングルクオートの扱いが違います。Claude Code が生成したコマンドの挙動を「確認せずに流す」運用をしていた人ほど、この差にハマりやすくなります。まずは短いコマンドで動作を見てから、長い処理に入るのが安全です。

切り替え方と解除の仕方

設定はシンプルです。新しいシェルを起動する前に環境変数を立てるだけで、Claude Code の次回起動から有効になります。

# PowerShell の場合(現在のセッションだけ)
$env:CLAUDE_CODE_USE_POWERSHELL_TOOL = "1"
claude
 
# 永続化したい場合(ユーザー環境変数に保存)
[Environment]::SetEnvironmentVariable("CLAUDE_CODE_USE_POWERSHELL_TOOL", "1", "User")

Git Bash 側で起動している場合は、.bashrcexport 行を足しておくと、Bash から claude を起動したときにも伝播します。

# ~/.bashrc
export CLAUDE_CODE_USE_POWERSHELL_TOOL=1

止めたくなったら、値を空に戻すか、ユーザー環境変数を削除します。

# 現在のセッションだけ
Remove-Item Env:CLAUDE_CODE_USE_POWERSHELL_TOOL
 
# ユーザー環境変数から削除
[Environment]::SetEnvironmentVariable("CLAUDE_CODE_USE_POWERSHELL_TOOL", $null, "User")

切り替えるかどうかの判断基準

ここまでを踏まえて、切り替えるかどうかの判断を迷う場面もあるはずです。私の経験則としては、次の条件のどれかに当てはまるなら試す価値があります。

一つ目は、Windows でしか作業しない日が多いこと。Git Bash と PowerShell の二段構えの複雑さを避けられるだけでも十分に価値があります。二つ目は、企業 PC で証明書・プロキシ・資格情報周りの制約が厳しいこと。三つ目は、扱うコードベースの多くが Windows 前提(.NET、PowerShell スクリプト、Windows API 利用など)であること。

逆に、普段から WSL の中で作業していて Claude Code も WSL 側で動いている人は、切り替えの恩恵がほぼありません。WSL はすでに Linux そのものなので、POSIX シェル互換の振る舞いで問題が起きにくいからです。

残る Windows 固有の詰まりどころ

環境変数を切り替えても、Windows ならではのトラブルがすべて消えるわけではありません。覚えておきたい残りのポイントをいくつかメモしておきます。

パスの長さ制限

Windows には既定で 260 文字のパス長制限があります。npm や Yarn のプロジェクトで node_modules が深くネストすると、この制限に引っかかります。Group PolicyLongPathsEnabled レジストリで解除できますが、Claude Code が関わる問題というより Windows 全体の話です。

改行コード

Git を Windows で使うと、core.autocrlf の設定によってチェックアウト時に改行が勝手に変換されます。これは Claude Code が関与する前の問題ですが、.gitattributes を設定していない状態で、生成されたコマンドの挙動が予想外に見えることがあります。新しいリポジトリでは .gitattributes* text=auto eol=lf のような基本行を入れておくと、この手の混乱を未然に防げます。

管理者権限が必要なコマンド

netshsfcStop-Service のような管理者権限が必要な操作は、Claude Code からはそのままでは走りません。Claude Code 自体を管理者権限で起動している必要があります。権限昇格のプロンプトが常に必要な業務 PC だと、このあたりは手動操作の出番になります。

切り替え後のふるまいを確認する簡単な方法

CLAUDE_CODE_USE_POWERSHELL_TOOL=1 を立てたあと、実際に PowerShell が使われているかを確認したくなります。簡単な確認としては、以下のような Windows 固有コマンドを Claude Code に実行させてみることです。

$PSVersionTable
Get-Location
[System.Environment]::OSVersion

これらが素直に結果を返すようになっていれば、切り替えが効いています。Bash 経由のままだと「command not found」相当のエラーになることが多いので、違いが分かりやすいはずです。


Windows で Claude Code を使っていて「なんとなく噛み合わない」感覚がある人は、一度この環境変数を立ててみる価値があります。合わなければ戻せばいいだけなので、失う時間もわずかです。私自身、Windows と macOS を行き来する開発環境では、Windows マシンだけ常時この設定を有効にしています。環境ごとに最適な構成は違うものの、それを明示的に選べるようにしておくこと自体が、長期的にはコード生成の品質を一段階引き上げてくれます。

シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

Claude Code2026-06-09
前回の記事本文が別の記事に紛れ込む — 固定名の一時ファイルに残る残骸の罠
Claude Code の自動化で、固定名の一時ファイルに前回の中身が残り、まったく別の記事に古い本文が混入する。書き込みが無音で失敗する仕組みと、ユニーク名+挿入後の grep 照合で防ぐ方法を記録します。
Claude Code2026-04-26
CLAUDE_CODE_USE_POWERSHELL_TOOL=1 を有効にすべきか — Windows 開発で実際に試した判断基準
Windows 環境で Claude Code を動かすとき、CLAUDE_CODE_USE_POWERSHELL_TOOL=1 環境変数を有効にすべきか迷う場面があります。私が複数のプロジェクトで両方試して見えた判断基準を整理しました。
Claude Code2026-06-18
壊れた settings.json で Claude Code が起動しなくなったとき — セーフモードの挙動と設定の分け方
settings.json の構文ミスで Claude Code が起動しなくなったときに、どの階層が壊れているかを切り分けて数分で復旧する手順と、自動運用で壊れにくい設定の分割・検証パターンをまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →