
pnpm/action-setup@v6で「Cannot use 'in' operator」エラーが出たときの対処法
はじめに
GitHub ActionsのCIワークフローで pnpm/action-setup@v6 を使っていたところ、ある日突然すべてのジョブが以下のエラーで失敗するようになりました。
[ERROR] Cannot use 'in' operator to search for 'integrity' in undefined
pnpm: Cannot use 'in' operator to search for 'integrity' in undefined
at createFullPkgId (file:///home/runner/setup-pnpm/node_modules/pnpm/dist/pnpm.mjs:154891:19)
at lockfileToDepGraph (file:///home/runner/setup-pnpm/node_modules/pnpm/dist/pnpm.mjs:154840:20)
...
##[error]Something went wrong, self-installer exits with code 1
コードに一切変更を加えていないのにCIが壊れるという状況で、原因は pnpm/action-setup@v6 の version: latest 指定にありました。
原因
ワークフローで以下のように設定していました。
- uses: pnpm/action-setup@v6
with:
version: latest
version: latest は実行時点の最新版pnpmをインストールします。pnpm/action-setup@v6 はrunner環境にプリインストールされたpnpmを最新版へアップグレードする仕組みになっており、このアップグレード処理(self-installer)で内部lockfileを処理する際にクラッシュが発生しました。
Switching pnpm from v11.7.0 to v11.12.0...
[ERROR] Cannot use 'in' operator to search for 'integrity' in undefined
スタックトレースの createFullPkgId → lockfileToDepGraph は、lockfileのパッケージスナップショットから resolution フィールドを読もうとして undefined にアクセスしているエラーです。pnpm v11.12.0 で導入されたリグレッションで、pnpm/action-setup#276 として報告されています(2026年7月12日時点でopen)。
action-setupがrunner上の古いpnpmをv11.12.0へself-updateする際に、lockfile解析コードの新しいバグを踏むことでクラッシュします。
対処法: packageManagerフィールドでバージョンを固定する
version: latest を削除し、代わりに package.json の packageManager フィールドでpnpmのバージョンを明示的に指定します。
package.json:
{
"packageManager": "pnpm@11.3.0"
}
CI workflow:
- uses: pnpm/action-setup@v6
# version指定なし — package.jsonのpackageManagerフィールドを自動的に参照する
pnpm/action-setup@v6 は version パラメータを省略すると、package.json の packageManager フィールドから自動的にバージョンを読み取ります。
なぜこの方法がベストか
| 方法 | メリット | デメリット |
|---|---|---|
version: latest |
常に最新 | 予期せぬ破壊的変更でCIが壊れる |
version: "11.3.0" (CI内で固定) |
安定 | ローカルとCIで別バージョンになりがち |
packageManager フィールド |
ローカル・CI・チームメンバー全員が同一バージョン | バージョンアップ時にpackage.jsonの更新が必要 |
packageManager フィールドを使う方法は:
- Single Source of Truth: バージョン定義が
package.jsonの1箇所に集約される - ローカルとCIの一致: Corepack有効時やpnpm自身がこのフィールドを参照するため、開発者間でバージョンが揃う
- Dependabotとの相性: pnpmバージョン更新もDependabotで自動PRが可能
注意点
packageManagerフィールドには完全なバージョンを指定する必要があります(^11.0.0のようなrangeは不可)- pnpm/action-setup@v6 は
versionパラメータとpackageManagerフィールドの両方が存在する場合、versionパラメータを優先します - Node.js 16以降であれば Corepack がこのフィールドを認識し、
corepack enable後はローカルでもバージョンが強制されます
まとめ
pnpm/action-setup@v6でversion: latestを使うと、pnpmの新バージョンのバグでCIが突然壊れるリスクがあるpackage.jsonのpackageManagerフィールドでバージョンを固定し、CI側のversionパラメータは削除するのがベストプラクティス- pnpm v11.12.0 の self-installer にバグがあり、GitHub Actions環境で
Cannot use 'in' operatorエラーが発生する(2026年7月時点)






