対象読者
- WindowsでVS Codeを使って開発しているエンジニア
-
~/.bash_profileでcygpathを使ってパスを変換している方 - Windows TerminalのGit Bashでは使えるのに、VS CodeのGit Bashではコマンドが見つからないことがある方
- 本記事の検証内容は執筆時点(2026年4月)のものです。VS Codeはアップデートが活発なため、最新バージョンでは挙動が異なる場合があります
- 本記事の執筆には生成AIを使用しています
TL;DR
-
~/.bash_profileにexport PATH=$(cygpath -up $PATH)と書くと、VS CodeのGit Bashでだけコマンドが見つからないという現象が起きることがある -
本当の解決策はこの行を削除すること。現代のGit for Windowsでは
cygpathによるパス変換は不要です - 諸事情で削除できない場合は、
export PATH=$(cygpath -up "$PATH")とダブルクォートで囲むことで症状を抑えられる(次善策)
背景:Windows TerminalとVS Codeで使えるコマンドが違う!
先日、Windows TerminalのGit Bashでは問題なく使えているコマンドが、VS CodeのターミナルのGit Bashでだけ「コマンドが見つからない」とエラーになることに気が付きました。
同じ~/.bash_profileが読み込まれているはずなのに、なぜ環境によって結果が変わるのか、しばらく原因がわかりませんでした。
環境
- OS: Windows 11 Pro
- VS Code: 1.117.0
- Git for Windows: 2.54.0
- Windows Terminal: 1.22.3232.0
原因:不要になった対症療法の名残
問題が起きていた~/.bash_profileには、次のような記述がありました。
# export PATH=$PATH:/C/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2022/BuildTools/MSBuild/Current/Bin/
# exec winpty bash
export PATH=$(cygpath -up $PATH) # ← これだけ残存
最初の2行はコメントアウトされており、cygpathの行だけが生き残っていました。
この設定が生まれた歴史的経緯
- スペースを含むPATHを追加 +
exec winpty bashを記述(MSYS時代の設定) - PATH内のスペースが問題を起こすようになった
- 対症療法として
cygpath -up $PATHを追加 - 1, 2の設定はコメントアウトされたが、3だけ残存
- VS Codeで単語分割による問題が顕在化
つまり本記事で取り上げる不具合は、「不要になった対症療法の名残に、さらにパッチを当てる」という構造の問題でした。
exec winpty bash とは
exec winpty bashは、MSYS/Cygwin時代に擬似端末(PTY)を提供するために使われていたツールの呼び出しです。当時のターミナルは真のPTYをサポートしていないものが多く、winptyがその橋渡しをしていました。
現代のGit for Windows(MinTTYベース)ではこの仕組みは不要です。むしろこれが残っていると、ターミナルエミュレーターによってwinptyの動作が変わるため、Windows TerminalとVS Codeで挙動が異なる原因になります。
cygpathによるパス変換も不要
現代のGit for Windowsは、MSYS2ランタイムがプロセス起動時(Bashより下のレイヤー)でPATHのセミコロン→コロン変換を自動的に行っています。bash --noprofile --norcで起動してもPATHが変換済みなのはこのためです。
つまり、.bash_profileや.bashrcにcygpath -up "$PATH"と書くこと自体が、現代のGit for Windowsではバッドノウハウです。公式リリースノートに「ユーザーが手動で書くべき」という記述は存在しません。
なぜこの設定が広まったのか
cygpath -up $PATHをbash設定ファイルに書く習慣は、MSYS時代(2010年代前半ごろ)の設定が検索エンジンで今も上位に残り、コピーペーストで受け継がれてきた側面があります。かく言う私もその一人なのですが。
当時は確かに必要な設定でしたが、Git for Windowsのランタイムが進化した現在では意味が変わりました。「検索して出てきた設定を動作確認なしでコピペする」という行為が、こうした古い設定の延命につながっています。
「ネットで見かけた.bash_profileの設定をそのままコピペした」という覚えがある場合は、設定ファイルの内容を改めて確認することをオススメします。古い設定が残っていると、今回のように特定の環境でだけ動かないという問題が起きやすくなります。
解決策
解決策1:cygpathの行を削除する(推奨)
本記事が推奨する対処はこの行を削除することです。
# 削除する行
export PATH=$(cygpath -up $PATH)
現代のGit for Windowsでは上述のとおり自動変換されているため、削除後も動作に問題はありません。
削除前後で動作確認したい場合は、次のコマンドで現在のPATH変換状態を確認できます。
# 変換前後の比較(変化がなければcygpathは不要)
echo $PATH
bash --noprofile --norc -c 'echo $PATH'
両者が同じであれば、すでにMSYS2ランタイムによって変換済みです。
解決策2:ダブルクォートで囲む(次善策)
cygpathの行が他の処理と連動していて削除が難しい場合は、ダブルクォートで囲むことで単語分割を防げます。
# 修正前(問題あり)
export PATH=$(cygpath -up $PATH)
# 修正後(次善策)
export PATH=$(cygpath -up "$PATH")
根本的な解決にはなりませんが、VS Codeでの単語分割による症状は抑えられます。
なぜダブルクォートで違いが出るのか
$PATHをダブルクォートで囲まないと、シェルの単語分割(word splitting) が発生します。
単語分割とは、シェルが変数を展開したあとにスペース・タブ・改行で文字列をバラバラにする処理のことです。WindowsのパスにはC:\Program Files\のようにスペースが含まれるものが多く、とくにVS CodeがPATHに追加するパス(C:\Program Files\Microsoft VS Code\binなど)はこれに該当します。
$PATHをクォートせずに展開すると、スペースで区切られたパスが複数の引数としてcygpathに渡ってしまい、変換結果が壊れます。結果として、そのパス以下にあるコマンドが見つからない状態になります。
Windows TerminalのGit BashではPATHにスペースを含むパスが少ないため問題が出にくいのですが、VS CodeはインストールディレクトリをPATHに追加するため、スペースを含むパスが混入しやすく、影響が出やすい環境です。
ハマりポイント
1. Windows TerminalとVS Codeで挙動が変わる
両者とも同じ~/.bash_profileを読み込んでいるにもかかわらず、使えるコマンドが異なります。VS Codeは起動時に独自のパスをPATHに追加するため、スペースを含むパスが混入しやすく、クォートなしの変数展開の影響を受けやすい環境です。
2. echo $PATHで確認しても気づきにくい
echo $PATHの出力は一見正しそうなパスが並んでいるように見えますが、よく確認するとスペースを含むパスが途中で切れていたり、余計なパスが増えていることがあります。意図した変換結果かどうかは、既知のパスと照らし合わせて確認する必要があります。
3. .bash_profileを修正してもすぐに反映されない
ターミナルを開き直すだけでは既存のVS Codeプロセスが保持している環境変数は更新されません。.bash_profileを修正したあとはVS Codeを完全に再起動してから、新しいターミナルで動作確認する必要があります。
まとめ
~/.bash_profileにcygpath -up $PATHが書いてある場合、まずはその行を削除することを検討してください。現代のGit for Windowsではこの設定は不要であり、残っているとVS Codeのような特定の環境でだけ問題が起きる原因になります。
どうしても削除できない場合は"$PATH"とダブルクォートで囲むことで症状を抑えられますが、それはあくまで次善策です。
古い設定をコピペして使い続けることへの警鐘として、この記事が少しでも参考になれば幸いです。
参考資料
- Word Splitting - GNU Bash Reference Manual(シェルにおける単語分割の仕様)
- Bash Startup Files - GNU Bash Reference Manual(ログインシェルで読み込まれるファイルの説明)
- cygpath - Cygwin User's Guide(cygpathコマンドのオプション一覧)
- Git for Windows(Git BashとGit for Windowsの配布元)