本文へスキップ

Claude Code Windowsネイティブのトラブル:Git Bash・PowerShell実行ポリシー・パス・改行

Windows 11でClaude Codeをネイティブ実行したときの詰まりどころ(Git Bashが見つからない、実行ポリシー、パス区切りと改行、ネイティブ版とnpm版の混在、WSLとの使い分け)を、公式ページと手元Windows 11 Proの実測で整理(2026-09-14確認)。

SHAYOUWORLD 更新 約8分

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 接続チェックリストにあるので、ここでは重複させません。

  1. Git for Windows は任意。 無ければ PowerShell ツール、あれば Git Bash の Bash ツールが使われます。見つからないときは CLAUDE_CODE_GIT_BASH_PATH を settings.json の env に書きます。
  2. PowerShell はプロセス限定の -ExecutionPolicy Bypass で起動される。 マシンのポリシーは変えなくて済みます。実行ポリシーで止まるのは npm 版の .ps1 シムです。
  3. パスは権限ルール内で POSIX 形式に正規化される。 C:\Users\alice は /c/Users/alice。statusLine や hooks のパスはスラッシュで書きます。
  4. 経路の混在は where.exe claude で洗い出し、ネイティブ1本に寄せる。 推奨は %USERPROFILE%\.local\bin\claude.exe。

まず手元の状態を出す

公式の推奨診断は claude doctor(シェルから、セッションを開かず読み取り専用)と where.exe claude です。手元の実行結果です。

$ claude doctor
Claude Code doctor
Running: native (2.1.261)
Commit: 1349cf9c224c
Platform: win32-x64
Path: C:\Users\<user>\.local\bin\claude.exe
Config install method: native
Search: OK (bundled)
Auto-updates: disabled (set by env: DISABLE_AUTOUPDATER)
Auto-update channel: latest
Last update attempt: success → 2.1.261 (2026-09-04)
Managed settings (remote): not fetched — requires an Enterprise or Team subscription
Organization policy: not applicable to Pro and Max accounts
No installation issues found.
Terminal window
PS> Get-Command claude -All | Select-Object Name, Source
Name Source
---- ------
claude.exe C:\Users\<user>\.local\bin\claude.exe

Path がネイティブインストーラーの標準位置で、Search: OK (bundled) は同梱の ripgrep が動いていることを示します。ここが崩れているケースを、以下で症状別に見ていきます。

Windows 10 1809+
対応 OS
Windows Server 2019+ も可。32-bit は非対応
任意
Git for Windows
無ければ PowerShell ツール、あれば Bash ツール
非対応
ネイティブでのサンドボックス
sandbox が要るなら WSL 2
Bypass
PowerShell 起動時の実行ポリシー
プロセススコープ限定。MachinePolicy/UserPolicy は上書きしない
code.claude.com/docs/en/setup および /docs/en/tools-reference より(2026-09-14 取得)

シェル: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 を探します。

  1. 既定のインストール先 C:\Program Files\Git と C:\Program Files (x86)\Git
  2. 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つです。

  1. ユーザー単位でローカルスクリプトを許可:Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
  2. .cmd ランチャーを呼ぶ:claude.cmd / npm.cmd はポリシーの対象外
  3. 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 の保護スクリプトには、そのための一行が入っています。

Terminal window
FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')
# Normalize Windows backslash separators so the patterns below match
FILE_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 ページの手順どおりに洗い出します。

Terminal window
where.exe claude
Test-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 に追加し、新しいターミナルを開くのが対処です。
Terminal window
$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 ページの比較表をそのまま判断基準にできます。

Windows ネイティブ
WSL 2
必要なもの
なし(Git for Windows は任意)
WSL 2 有効化
サンドボックス
非対応
対応
向く用途
Windows 向けプロジェクトとツール
Linux ツールチェーン、サンドボックス付きコマンド実行
検索性能
ネイティブファイルシステムで良好
/mnt/c を触ると遅く、結果も減る(公式 troubleshooting)。/home 配下に置く
ログイン
ブラウザが直接戻ってくる
コールバックが届かずコード貼り付けになることが多い
code.claude.com/docs/en/setup「Set up on Windows」と /docs/en/troubleshooting より(2026-09-14)

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 逆引きリファレンスにまとめています。

この記事の情報・検証メモ
Tags
公開日
情報確認
参考リンク
6件
更新性
定期更新
更新管理

仕様・料金・提供範囲が変わりやすいテーマは、公開日・更新日・情報確認日を分けて管理します。 導入前には必ず記事末尾の一次情報と公式ドキュメントで最新状況を確認してください。

検証メモ
Windows 11 Pro 10.0.26200 / PowerShell 7.6.5 / git 2.51.0.windows.1 Claude Code 2.1.261 (native, win32-x64) claude doctor / Get-ExecutionPolicy -List 実行日 2026-09-14
図解を保存・共有

記事の要点を1枚にまとめました。画像は新しいタブで開いて保存できます。

Claude Code Windowsネイティブのトラブル:Git Bash・PowerShell実行ポリシー・パス・改行 Windowsネイティブは「Git Bashの有無」と「どのインストール経路か」で挙動が分かれる。claude doctor と where.exe が入口 シェル:Git for Windows は任意。無ければ PowerShell ツールで動く。bash.exe の探索順は Program Files → PATH の git。PowerShell は -ExecutionPolicy Bypass(プロセス限定)で起動される。 パスと改行:権限ルールでは C:\ が /c/ に正規化される。statusLine や hooks のパスはスラッシュで書く。core.autocrlf は git 側の設定。Claude Code は関知しない。 経路の混在:ネイティブは %USERPROFILE%\.local\bin\claude.exe。npm 版の .ps1 シムは実行ポリシーで止まる。迷ったら where.exe claude で全経路を出す。
Claude Code Windowsネイティブのトラブル:Git Bash・PowerShell実行ポリシー・パス・改行 記事の要約 2026.09.14 運用Tips・トラブルシュート
Primary sources

一次情報・参考リンク

About the author
SHAYOUWORLD

日本の公共データAPIを使うMCPサーバーを作って公開し、ローカルLLMを自分のGPUで測った記録を、一次情報・検証ログ・失敗例とあわせて整理します。