できない.dev

npm install が EINTEGRITY エラーでインストールできない

EINTEGRITY は取得した tarball のハッシュが package-lock.json の integrity と一致しないときのエラー。
キャッシュ破損よりも lockfile 側の古いハッシュやプロキシによる改変が原因のことが多い。

公開: 更新:

実行例あり(2026-09-16 に実環境で検証)

要約

npm error code EINTEGRITY は、ダウンロードした tarball の sha512 検証結果が package-lock.json の integrity と一致しなかったことを意味する。
npm のキャッシュは公式ドキュメント(新しいタブで開く)のとおり出し入れの両方で整合性検証されるため、キャッシュ破損が原因のことは実は少ない。
「lockfile の古いハッシュ → プロキシ・レジストリ → キャッシュ」の順に疑うのが効率的。

実行例

マージ解決のミスで package-lock.json の integrity だけが別のハッシュになった状態を作り、記事の順に切り分けてみる。npm cache verify が「Cache verified」と答えても npm ci は同じ wanted ... but got ... で落ち続け、lockfile を消して作り直し integrity の 1 行が入れ替わったところで通るようになる。

$ grep -n integrity package-lock.json
18:      "integrity": "sha512-MxeWDoTkcAoE/4ArStxfXBcI2DnXTvHj5X8EoRDZ1PaSqptdncnovjYqhF/zG1GlmrNocsPfHeL2IqrLYIpLoA==",
$ npm ci
npm warn tarball tarball data for is-number@https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz (sha512-MxeWDoTkcAoE/4ArStxfXBcI2DnXTvHj5X8EoRDZ1PaSqptdncnovjYqhF/zG1GlmrNocsPfHeL2IqrLYIpLoA==) seems to be corrupted. Trying again.
npm warn tarball tarball data for is-number@https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz (sha512-MxeWDoTkcAoE/4ArStxfXBcI2DnXTvHj5X8EoRDZ1PaSqptdncnovjYqhF/zG1GlmrNocsPfHeL2IqrLYIpLoA==) seems to be corrupted. Trying again.
npm error code EINTEGRITY
npm error sha512-MxeWDoTkcAoE/4ArStxfXBcI2DnXTvHj5X8EoRDZ1PaSqptdncnovjYqhF/zG1GlmrNocsPfHeL2IqrLYIpLoA== integrity checksum failed when using sha512: wanted sha512-MxeWDoTkcAoE/4ArStxfXBcI2DnXTvHj5X8EoRDZ1PaSqptdncnovjYqhF/zG1GlmrNocsPfHeL2IqrLYIpLoA== but got sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==. (3730 bytes)
npm error A complete log of this run can be found in: /root/.npm/_logs/2026-09-16T01_10_18_323Z-debug-0.log
$ echo $?
1
$ npm cache verify
Cache verified and compressed (~/.npm/_cacache)
Content verified: 2 (39913 bytes)
Index entries: 2
Finished in 0.015s
$ npm ci
npm warn tarball tarball data for is-number@https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz (sha512-MxeWDoTkcAoE/4ArStxfXBcI2DnXTvHj5X8EoRDZ1PaSqptdncnovjYqhF/zG1GlmrNocsPfHeL2IqrLYIpLoA==) seems to be corrupted. Trying again.
npm warn tarball tarball data for is-number@https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz (sha512-MxeWDoTkcAoE/4ArStxfXBcI2DnXTvHj5X8EoRDZ1PaSqptdncnovjYqhF/zG1GlmrNocsPfHeL2IqrLYIpLoA==) seems to be corrupted. Trying again.
npm error code EINTEGRITY
npm error sha512-MxeWDoTkcAoE/4ArStxfXBcI2DnXTvHj5X8EoRDZ1PaSqptdncnovjYqhF/zG1GlmrNocsPfHeL2IqrLYIpLoA== integrity checksum failed when using sha512: wanted sha512-MxeWDoTkcAoE/4ArStxfXBcI2DnXTvHj5X8EoRDZ1PaSqptdncnovjYqhF/zG1GlmrNocsPfHeL2IqrLYIpLoA== but got sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==. (3730 bytes)
npm error A complete log of this run can be found in: /root/.npm/_logs/2026-09-16T01_10_18_846Z-debug-0.log
$ echo $?
1
$ npm config get registry
https://registry.npmjs.org/
$ rm package-lock.json
$ npm install
added 1 package in 152ms
$ echo $?
0
$ git diff package-lock.json
diff --git a/package-lock.json b/package-lock.json
index 478ec2a..ae333ca 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,7 +15,7 @@
     "node_modules/is-number": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
-      "integrity": "sha512-MxeWDoTkcAoE/4ArStxfXBcI2DnXTvHj5X8EoRDZ1PaSqptdncnovjYqhF/zG1GlmrNocsPfHeL2IqrLYIpLoA==",
+      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
       "license": "MIT",
       "engines": {
         "node": ">=0.12.0"
$ npm ci
added 1 package in 139ms
$ echo $?
0

— 2026-09-16 時点の出力

検証環境

検証日
実行環境
node:20Debian GNU/Linux 12 (bookworm)
バージョン
  • Node.js 20.20.2
  • npm 10.8.2
  • Python 3.11.2
  • Git 2.39.5

この記事の「実行例」は、上記の環境で実際にコマンドを実行して得られた出力をそのまま掲載しています。 再現手順はリポジトリの検証スクリプトとして管理し、定期的に再実行して出力を更新しています。

よくある原因

  1. lockfile の integrity が古い: マージ解決のミスやレジストリ移行(公式 ↔ ミラー)の名残で、現在のレジストリが返す tarball と異なるハッシュが残っている。
  2. プロキシ・ミラーの改変: 経路上で再圧縮などにより本家と異なる tarball が返り、ハッシュが合わない。
  3. 不完全なダウンロード: 回線切断で途中まで落ちたファイルを検証して失敗する。
  4. キャッシュ破損: まれに発生するが、npm は自己修復的に再取得するため頻度は低い。

解決策

1. キャッシュを検査する

npm cache verify

キャッシュインデックスと全データの整合性を検証し、不要データを掃除する。
これで直ればキャッシュ起因と確定できる。

2. lockfile の integrity を取り直す

rm package-lock.json
npm install
git diff package-lock.json

エラーの wanted sha512-... but got sha512-... に出たパッケージのハッシュが更新される。
差分をレビューして commit する。

3. レジストリ設定を切り分ける

npm config get registry
npm install --registry=https://registry.npmjs.org/

ミラーやプロキシ経由で EINTEGRITY が出て、公式レジストリ直結では出ない場合、原因は経路側にある。.npmrc の registry / proxy 設定を見直す。

4. 最終手段としてキャッシュを全削除する

npm cache clean --force
npm install

公式ドキュメントは「キャッシュは自己修復的であり全削除は通常不要」としているため、1〜3 で直らないときの最終手段に留める。

この記事は役立ちましたか?