GitHub Actions:「Unable to locate executable file: pnpm」
actions/setup-node は、pnpm のダウンロードをキャッシュするために、pnpm にストアの場所を聞きます(pnpm store path --silent)。そのジョブにはまだ pnpm が入っておらず、何もインストールしないうちにステップが失敗しました。直し方はほとんどの場合、ステップの順番か、頼んでいないキャッシュを切ることです。
見え方
Error: Unable to locate executable file: pnpm. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.
setup-node のステップが始まって数秒、node・npm・yarn のバージョンを表示した直後に出ます。Windows のランナーでは、最後の文が実行ファイルの拡張子についての文になります。
1. setup-node v5 と packageManager の欄
setup-node v5.0.0(2025年9月)は、package.json に packageManager の欄があると、cache を書かなくてもキャッシュを入れました。"packageManager": "pnpm@…" なら pnpm を走らせます。v6.0.0(2025年10月)で、自動のキャッシュは npm だけになりました。
- tafsila では、v5 に上げたら Node しか要らないジョブが壊れ、先に
pnpm/action-setupを走らせるワークフローは動き続けました(tafsila #42)。 - pinsel のワークフローは、次のステップの
corepack enableで pnpm を使えるようにしていて、間に合いませんでした(pinsel #24)。 - 何もインストールしない共有のプルリクエストのチェックが、
"packageManager": "pnpm@11.20.0"のリポジトリで失敗しました(repo-canon #55)。
v6 以降に上げるか、v5 のまま自動のキャッシュを切ります:
- uses: actions/setup-node@v5
with:
node-version: 24
package-manager-cache: false
2. cache: pnpm が、pnpm を入れる前にある
cache: pnpm を書くと、setup-node はどの版でも、その時点で PATH に pnpm がある必要があります。blog-upiscium-dev のデプロイは pnpm/action-setup より前に cache: pnpm つきの actions/setup-node を走らせていて(blog-upiscium-dev #24)、shipping-container-sims でも全部のジョブが同じように失敗しました(shipping-container-sims #83)。アクションの詳しい使い方のガイドはこの順番です:
steps:
- uses: actions/checkout@v7
- uses: pnpm/action-setup@v6
- uses: actions/setup-node@v7
with:
node-version: 24
cache: pnpm
- run: pnpm install --frozen-lockfile
version を書かなければ、pnpm/action-setup は packageManager の欄から読みます。チェックアウトを先にするのはそのためです。バージョンは1か所にだけ書きます。両方にあって食い違うと「Multiple versions of pnpm specified」で止まります。
3. pnpm を Corepack で入れている
- setup-node のあとの
corepack enableは、setup-node 自身のキャッシュのステップには間に合いません。Corepack を使うならキャッシュを切るか(cache: pnpmを書かず、v5 ではpackage-manager-cache: false)、pnpm/action-setupに替えます。 - Node.js 25 以降には、有効にする
corepackのコマンドがありません。Node.js 25.0.0 で Corepack の同梱をやめました(nodejs/node #57617)。node-versionが 25 や 26 なら、pnpm/action-setupかほかの方法で pnpm を入れます。
4. pnpm を別のジョブで入れた
ジョブはそれぞれ別のランナーで始まり、あるジョブで入れたものは次のジョブの PATH にはありません。tafsila で失敗したジョブには、pnpm のステップがそもそもありませんでした(上の #42)。pnpm のキャッシュつきで setup-node を走らせるジョブや pnpm を使うジョブには、それぞれ pnpm/action-setup が要ります。
見分け方
runのステップの「pnpm: command not found」(終了コード 127):同じく pnpm が無いのを、アクションでなくシェルが知らせています。- 「Dependencies lock file is not found ... Supported file patterns: pnpm-lock.yaml」:pnpm は見つかったが、ワークスペースの一番上に
pnpm-lock.yamlがありません。 - 「Multiple versions of pnpm specified」:
pnpm/action-setupにversionと、それと違うpackageManagerの欄の両方がありました(2)。
失敗したジョブを IntelliJ IDEA から見るなら
Pipeline Inbox for GitHub Actions Workflows は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。すべてのリポジトリの実行を、ジョブ・ステップと一緒に IDE のツールウィンドウに並べ、いまのブランチの実行はステータスバーに出ます。読むのは無料、失敗したジョブの再実行・キャンセル・ワークフローの実行・デプロイのレビューは Pro(月 US$1.50・30日の無料試用つき)です。
GitHub と GitHub Actions は GitHub, Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:「Dependencies lock file is not found」 · 「Cache not found for input keys」 · 「Node.js 20 is deprecated」の警告 · IntelliJ IDEA で使える GitHub Actions のプラグインの比較 · English