Claude Code Windowsネイティブのトラブル:Git Bash・PowerShell実行ポリシー・パス・改行
Windows 11でClaude Codeをネイティブ実行したときの詰まりどころ(Git Bashが見つからない、実行ポリシー、パス区切りと改行、ネイティブ版とnpm版の混在、WSLとの使い分け)を、公式ページと手元Windows 11 Proの実測で整理(2026-09-14確認)。
Windows で Claude Code をネイティブに動かすときの詰まりどころは、「どのシェルが選ばれているか」と「どの経路でインストールされたか」の2点にほぼ集約されます。 Git Bash があるかどうかでシェルツールが変わり、ネイティブ版と npm 版が混在すると実行ポリシーやバージョン不一致が出ます。パスと改行は、Claude Code 側の正規化ルールを知っていれば迷いません。
この記事は公式 setup / troubleshoot-install / tools-reference の記載を根拠に、手元の Windows 11 Pro(PowerShell 7.6.5、git 2.51.0.windows.1、Claude Code 2.1.261 ネイティブ)で再現・確認できたものは実出力を貼っています。導入手順そのものは導入ガイド、MCP サーバーの Windows 固有の落とし穴(cmd /c npx など)はMCP 接続チェックリストにあるので、ここでは重複させません。
- Git for Windows は任意。 無ければ PowerShell ツール、あれば Git Bash の Bash ツールが使われます。見つからないときは
CLAUDE_CODE_GIT_BASH_PATHを settings.json のenvに書きます。 - PowerShell はプロセス限定の
-ExecutionPolicy Bypassで起動される。 マシンのポリシーは変えなくて済みます。実行ポリシーで止まるのは npm 版の.ps1シムです。 - パスは権限ルール内で POSIX 形式に正規化される。
C:\Users\aliceは/c/Users/alice。statusLine や hooks のパスはスラッシュで書きます。 - 経路の混在は
where.exe claudeで洗い出し、ネイティブ1本に寄せる。 推奨は%USERPROFILE%\.local\bin\claude.exe。
まず手元の状態を出す
公式の推奨診断は claude doctor(シェルから、セッションを開かず読み取り専用)と where.exe claude です。手元の実行結果です。
$ claude doctorClaude Code doctor
Running: native (2.1.261)Commit: 1349cf9c224cPlatform: win32-x64Path: C:\Users\<user>\.local\bin\claude.exeConfig install method: nativeSearch: OK (bundled)Auto-updates: disabled (set by env: DISABLE_AUTOUPDATER)Auto-update channel: latestLast update attempt: success → 2.1.261 (2026-09-04)Managed settings (remote): not fetched — requires an Enterprise or Team subscriptionOrganization policy: not applicable to Pro and Max accounts
No installation issues found.PS> Get-Command claude -All | Select-Object Name, SourceName Source---- ------claude.exe C:\Users\<user>\.local\bin\claude.exePath がネイティブインストーラーの標準位置で、Search: OK (bundled) は同梱の ripgrep が動いていることを示します。ここが崩れているケースを、以下で症状別に見ていきます。
シェル:Git Bash と PowerShell のどちらが使われるか
公式 setup ページの整理はこうです。
- Git for Windows なし:シェルコマンドは PowerShell ツール経由
- Git for Windows あり:Bash ツールに Git Bash を使う。PowerShell ツールも併用可能(claude.ai / Console アカウントでは既定 on。
CLAUDE_CODE_USE_POWERSHELL_TOOL=0で off)
Git Bash が見つからない場合、Claude Code は CLAUDE_CODE_GIT_BASH_PATH 未設定時に次の順で bash.exe を探します。
- 既定のインストール先
C:\Program Files\GitとC:\Program Files (x86)\Git - PATH 上の
gitから辿ったbin\bash.exe
2 では、起動ディレクトリ配下や node_modules・.venv などの下にある git は意図的にスキップされます(プロジェクトが置いた実行ファイルを走らせないため)。ポータブル版や独自パスに入れている場合は明示します。
{ "env": { "CLAUDE_CODE_GIT_BASH_PATH": "C:\\Program Files\\Git\\bin\\bash.exe" }}JSON 内なのでバックスラッシュは二重にします。手元では C:/Program Files/Git/bin/bash.exe が存在し、自動検出で拾われています。
両方見つからないときのエラーが Claude Code on Windows requires either Git for Windows (for bash) or PowerShell です。PowerShell が PATH から外れているケースで、既定の場所は C:\Windows\System32\WindowsPowerShell\v1.0\。PowerShell 7(pwsh)を入れるのも解になります。
PowerShell の実行ポリシー:何が止まり、何が止まらないか
「Windows で Claude Code が実行ポリシーに引っかかる」と一括りにされがちですが、実際は2つの別の話です。
Claude Code が起動する PowerShell は止まりません。 tools-reference によれば、PowerShell ツールは -ExecutionPolicy Bypass をプロセススコープ限定で付けて PowerShell を起動します。既定の Windows でも .ps1 スクリプトやモジュール読み込みが通り、マシンのポリシーは変更されません。グループポリシー由来の MachinePolicy / UserPolicy は上書きされません。手元でも、この記事を書いている Claude Code セッション内の PowerShell から Get-ExecutionPolicy -List を実行すると Process 行だけが Bypass でした。
Scope ExecutionPolicy ----- ---------------MachinePolicy Undefined UserPolicy Undefined Process Bypass CurrentUser RemoteSigned LocalMachine RemoteSignedマシンのポリシーを尊重させたい場合は CLAUDE_CODE_POWERSHELL_RESPECT_EXECUTION_POLICY=1 です。なお PowerShell ツールはプロファイル($PROFILE)を読み込みません。プロファイルで PATH やエイリアスを足している人は、Claude Code 内では効かない前提で考えてください。
止まるのは npm 版の .ps1 シムです。 npm install -g @anthropic-ai/claude-code で入れると npm が claude.ps1 を生成し、実行ポリシーが Restricted だと次のエラーになります。
npm : File C:\Program Files\nodejs\npm.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170. + CategoryInfo : SecurityError: (:) [], PSSecurityException公式の解決策は3つです。
- ユーザー単位でローカルスクリプトを許可:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser .cmdランチャーを呼ぶ:claude.cmd/npm.cmdはポリシーの対象外- npm をやめて PowerShell インストーラー(
irm https://claude.ai/install.ps1 | iex)に切り替える。バイナリを入れるので.ps1を経由しない
インストーラー自体は iex でダウンロードしたテキストを直接実行するため、ポリシーの影響を受けません。
パス区切りと改行コード
権限ルールとフックのパス
公式 permissions ページによると、Windows のパスはマッチング前に POSIX 形式へ正規化されます。C:\Users\alice は /c/Users/alice になるので、ドライブ全体の .env を deny するなら //c/**/.env、全ドライブなら //**/.env と書きます。Read(./.env) のような相対ルールはそのまま使えます。
hooks が受け取る tool_input.file_path はバックスラッシュ区切りで来ることがあります。公式 hooks-guide の保護スクリプトには、そのための一行が入っています。
FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')# Normalize Windows backslash separators so the patterns below matchFILE_PATH="${FILE_PATH//\\//}"statusLine のコマンド文字列
statusline ページの Windows 節に、見落としやすい罠が書かれています。Windows では Git Bash がある場合 statusLine コマンドは Git Bash 経由で実行され、引用符なしのバックスラッシュはエスケープ文字として扱われるため、C:\Users\username\script.mjs は区切りが消えた状態で渡り、エラー表示もなく失敗します。command 内のパスはスラッシュで書きます。~ も Windows のホームに展開されます。
{ "statusLine": { "type": "command", "command": "powershell -NoProfile -File C:/Users/username/.claude/statusline.ps1" }}改行コード
改行コードについて Claude Code 側に特別な設定はなく、git の core.autocrlf が支配します。 手元は git config --global core.autocrlf が true で、チェックアウト時に CRLF、コミット時に LF へ変換されます。Claude Code の Edit ツールがファイルを書き換えるとき既存の改行を保つかどうかはツールの実装依存なので、git diff で行末だけの差分が大量に出たら core.autocrlf と .gitattributes(* text=auto eol=lf など)を先に揃えてください。PowerShell ツールについては公式 tools-reference に、v2.1.214 以降 > / >> によるリダイレクトは PowerShell 5.1 でも UTF-8 で書き出し、ネイティブコマンドへのパイプも UTF-8 でエンコードされる、と明記されています。文字化けに悩んでいた人はバージョンを確認する価値があります。
ネイティブ版と npm 版の混在
Windows で「バージョンが古い」「claude を打つと別のものが起動する」の原因は、ほぼ複数インストールです。公式 troubleshoot ページの手順どおりに洗い出します。
where.exe claudeTest-Path "$env:USERPROFILE\.local\bin\claude.exe"$env:PATH -split ';' | Select-String '\.local\\bin'npm -g ls @anthropic-ai/claude-code手元の環境では where.exe claude はネイティブの1件だけでしたが、npm -g ls には別パッケージの依存として古い @anthropic-ai/[email protected] が残っていました。依存としてネストしているだけなので claude コマンドとしては競合していませんが、こういう残骸が npm install -g で bin にリンクされると PATH の順序次第で古い方が勝ちます。公式はネイティブ1本に寄せることを推奨しており、npm 版は npm uninstall -g @anthropic-ai/claude-code、旧ローカル版は Remove-Item -Recurse -Force "$env:USERPROFILE\.claude\local"、WinGet 版は winget uninstall Anthropic.ClaudeCode で消します。
Windows 固有の混在パターンも2つ載っています。
- Claude Desktop の古い版が
Claude.exeをWindowsAppsに登録し、PATH で CLI より優先される。claudeと打つと Desktop アプリが開く症状で、対処は Desktop の更新です。 - PowerShell インストーラーは成功したのに
claudeが見つからない、または古い版が出る。%USERPROFILE%\.local\binを User PATH に追加し、新しいターミナルを開くのが対処です。
$currentPath = [Environment]::GetEnvironmentVariable('PATH', 'User')[Environment]::SetEnvironmentVariable('PATH', "$currentPath;$env:USERPROFILE\.local\bin", 'User')インストールコマンドの取り違えもよくある入口です。The token '&&' is not a valid statement separator は PowerShell で CMD 用コマンドを打った合図、'irm' is not recognized は CMD で PowerShell 用を打った合図です。Failed to download binary: The process cannot access the file ... because it is being used by another process は %USERPROFILE%\.claude\downloads をアンチウイルスや前回のインストーラーが掴んでいる状態で、そのフォルダを消して再実行します。更新経路の詳細はアップデートが反映されない時の記事に分けました。
WSL との使い分け
公式 setup ページの比較表をそのまま判断基準にできます。
WSL 1 は「WSL 2 が使えない場合」の位置づけで、サンドボックスも非対応です。判断の軸は「リポジトリと言語ランタイムがどちら側にあるか」で、両側をまたぐ構成が一番トラブルを呼びます。
まとめ
- Git for Windows は任意。無ければ PowerShell ツール、あれば Git Bash。見つからなければ
env.CLAUDE_CODE_GIT_BASH_PATH(bash.exeを直接指す) - PowerShell ツールはプロセス限定
-ExecutionPolicy Bypassで起動し、プロファイルは読まない。実行ポリシーで止まるのは npm 版の.ps1シム - 権限ルールのパスは
/c/...に正規化される。statusLine や hooks のパスはスラッシュで書く - 改行は git の
core.autocrlfが支配。行末だけの差分が出たら git 側を揃える - 複数インストールは
where.exe claudeで洗い出し、ネイティブ1本に寄せる。claudeで Desktop が開くなら Desktop を更新
Claude Code の設定キー全般(env、permissions、statusLine)の書き方はsettings.json 逆引きリファレンスにまとめています。
この記事の情報・検証メモ
- claude-code
- windows
- troubleshooting
- 公開日
- 情報確認
- 参考リンク
- 6件
- 更新性
- 定期更新
仕様・料金・提供範囲が変わりやすいテーマは、公開日・更新日・情報確認日を分けて管理します。 導入前には必ず記事末尾の一次情報と公式ドキュメントで最新状況を確認してください。
一次情報・参考リンク
- Claude Code docs: Advanced setup (Set up on Windows) https://code.claude.com/docs/en/setup
- Claude Code docs: Troubleshoot installation and login https://code.claude.com/docs/en/troubleshoot-install
- Claude Code docs: Tools reference (PowerShell tool) https://code.claude.com/docs/en/tools-reference
- Claude Code docs: Configure permissions https://code.claude.com/docs/en/permissions
- Claude Code docs: Customize your status line (Windows configuration) https://code.claude.com/docs/en/statusline
- Claude Code docs: Troubleshooting https://code.claude.com/docs/en/troubleshooting