Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found
Windows専用。Git Bash が入っていないか、WSLのbashに隠れて見つけられていない。
エラー文字列
Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found
何が起きているか
Windows でのみ起きるエラーです。
スキルの frontmatter に shell: bash が指定されていると、そのスキルは bash で実行されます。Windows には bash が標準で入っていないため、Claude Code は Git for Windows に同梱される Git Bash を探します。それが見つからないときにこのメッセージが出ます。
原因は3つあり、2番目と3番目が厄介です。
| # | 原因 | 見分け方 |
|---|---|---|
| 1 | Git for Windows が入っていない | git コマンド自体が使えない |
| 2 | 既定以外の場所に入っている | git は使えるが C:\Program Files\Git に無い |
| 3 | WSL の bash.exe に隠れている |
git も bash も使えるのに、このエラーが出る |
⚠️ 3番が最も分かりにくい
Windows には C:\Windows\System32\bash.exe という WSL 用のスタブが最初から存在します。そして System32 は PATH のかなり前方にあります。
そのため、Git Bash を PATH に通していても、WSL のスタブが先に見つかってしまうことがあります。
実際に検証した端末では、PATH 上に bash が3つ存在していました。
C:\Windows\system32\bash.exe ← WSL のスタブ(先に見つかる)
C:\Users\<user>\AppData\Local\Microsoft\WindowsApps\bash.exe ← ストア版のスタブ
D:\Programs\Git\Git\bin\bash.exe ← 本命の Git Bash
この状態で bash --version を実行すると、WSL が反応して次のようなエラーになります。
<3>WSL (66477 - Relay) ERROR: CreateProcessCommon:800: execvpe(/bin/bash) failed: No such file or directory
⭐ このメッセージが出たら、原因は3番で確定です。 Git Bash は入っているのに、WSL のスタブに先を越されています。
直し方
1. まず PATH 上の bash を全部出す
⚠️ Get-Command bash だけでは判断できません。 最初の1件しか返さないため、WSL のスタブが見つかった時点で「bash はある」と誤解します。
必ず -All を付けてください。
Get-Command bash -All -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Source
出力を見て判断します。
| 出力 | 原因 | 進む先 |
|---|---|---|
| 何も返らない | Git Bash が無い | 手順 3 |
System32 や WindowsApps のものだけ |
Git Bash が無い | 手順 3 |
| Git のパスも含まれている | 順序の問題 | 手順 4 |
2. Git Bash の実体を確実に探す
インストール先が分からない場合、git.exe の場所から辿るのが確実です。 既定パスを決め打ちで探すより速く、別ドライブに入れていても見つかります。
$git = Get-Command git -ErrorAction SilentlyContinue
if ($git) {
$root = Split-Path (Split-Path $git.Source -Parent) -Parent
"Git ルート: $root"
"bash.exe : " + (Test-Path "$root\bin\bash.exe")
}
Git ルート に表示されたパスの \bin が、PATH に通すべき場所です。
3. Git for Windows を入れる(原因 1)
winget install --id Git.Git -e --source winget
インストーラーで進める場合は、PATH の設定で「Git from the command line and also from 3rd-party software」を選んでください。最小構成を選ぶと bash.exe が PATH に載りません。
⚠️ インストール後は PowerShell を開き直してください。 既に開いているセッションには PATH の変更が反映されません。
入れ終わったら手順 4 も確認してください。入れただけでは 3番の問題は解決しません。
4. Git Bash を PATH の先頭に置く(原因 2・3)
⚠️ 末尾に追加しても直りません。 System32 より前に置く必要があります。
現在のセッションだけで試す
$env:Path = "D:\Programs\Git\Git\bin;" + $env:Path
Get-Command bash -All | Select-Object -ExpandProperty Source
先頭に Git のパスが来ていれば成功です。
恒久的に設定する
$gitBin = "D:\Programs\Git\Git\bin" # 手順 2 で調べた実際のパスに置き換える
$old = [Environment]::GetEnvironmentVariable("Path", "User")
[Environment]::SetEnvironmentVariable("Path", "$gitBin;$old", "User")
⚠️ C:\Program Files\Git\usr\bin ではなく \bin を指定してください。 どちらにも実行ファイルがありますが、通すべきは bin の方です。
⚠️ ユーザー環境変数はシステム環境変数の後ろに連結されます。 System32 はシステム側にあるため、ユーザー側の先頭に置いても順序が逆転しないことがあります。その場合は次のどちらかを取ってください。
- WSL を使っていないなら、Windows の「アプリ実行エイリアス」設定で
bash.exeのエイリアスをオフにする - システム環境変数の
Pathの先頭に Git のbinを追加する(管理者権限が必要)
5. 確認する
bash --version
| 出力 | 判定 |
|---|---|
GNU bash, version 5.x.x(1)-release (x86_64-pc-msys) |
✅ Git Bash。これが正解 |
GNU bash, version 5.x.x(1)-release (x86_64-pc-linux-gnu) |
❌ WSL の bash。Git Bash は別に必要 |
<3>WSL ... execvpe(/bin/bash) failed |
❌ WSL のスタブ。手順 4 へ |
⭐ msys を含むかどうかが決め手です。
設定を変えたら、PowerShell とエディタの両方を再起動してください。 VS Code の統合ターミナルから Claude Code を起動している場合、VS Code 自体を再起動しないと古い PATH が引き継がれます。これを忘れて「直っていない」と誤認する例が多くあります。
6. スキル側を直す(自作スキルの場合)
自分で書いたスキルなら、bash 固有の記法をやめて /bin/sh 互換にすることで、この依存自体を無くせます。
frontmatter から shell: bash を外し、次のような bash 固有の書き方を避けてください。
| bash 固有 | sh 互換の書き方 |
|---|---|
[[ ... ]] |
[ ... ] |
arr=(a b c) |
配列を使わず、スペース区切りの文字列と for で回す |
${var,,} |
printf '%s' "$var" | tr 'A-Z' 'a-z' |
source file |
. file |
function f() {} |
f() {} |
配布するスキルなら、sh 互換にしておくと Windows 利用者の環境依存を1つ減らせます。
再発防止
- Windows で Claude Code を使うなら Git for Windows を入れ、PATH の先頭に置く。 このエラー以外にも、bash 前提のツールで詰まる場面が減ります
Get-Command bashを単体で使わない。 必ず-Allを付ける。付けないと WSL のスタブに騙されます- Git を既定以外の場所(別ドライブなど)へ入れた場合は、インストール直後に PATH の順序を確認しておく
- チームに Windows 利用者がいるなら、環境構築手順に「Git for Windows を入れ、
\binを PATH の先頭へ」まで書いておく - PATH を変えたら、ターミナルとエディタの両方を再起動する