pnpm/action-setup@v6で「Cannot use 'in' operator」エラーが出たときの対処法

pnpm/action-setup@v6で「Cannot use 'in' operator」エラーが出たときの対処法

GitHub Actionsでpnpm/action-setup@v6を使用中に「Cannot use 'in' operator」エラーが発生。version: latestのリスクと、packageManagerフィールドでバージョンを固定する対処法を解説します。
2026.07.14

はじめに

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@v6version: latest 指定にありました。

原因

ワークフローで以下のように設定していました。

.github/workflows/ci.yml
- 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

スタックトレースの createFullPkgIdlockfileToDepGraph は、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.jsonpackageManager フィールドでpnpmのバージョンを明示的に指定します。

package.json:

package.json
{
  "packageManager": "pnpm@11.3.0"
}

CI workflow:

.github/workflows/ci.yml
- uses: pnpm/action-setup@v6
# version指定なし — package.jsonのpackageManagerフィールドを自動的に参照する

pnpm/action-setup@v6version パラメータを省略すると、package.jsonpackageManager フィールドから自動的にバージョンを読み取ります。

なぜこの方法がベストか

方法 メリット デメリット
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@v6version: latest を使うと、pnpmの新バージョンのバグでCIが突然壊れるリスクがある
  • package.jsonpackageManager フィールドでバージョンを固定し、CI側の version パラメータは削除するのがベストプラクティス
  • pnpm v11.12.0 の self-installer にバグがあり、GitHub Actions環境で Cannot use 'in' operator エラーが発生する(2026年7月時点)

この記事をシェアする

関連記事