npmパッケージインストール時の「npm ERR! code EINTEGRITY」を修正する方法

beginner💚 Node.js2026-04-28| Node.js / npm — 全バージョン、Windows / macOS / Linux

Error Message

npm ERR! code EINTEGRITY npm ERR! Verification failed while extracting...
#npm#整合性#チェックサム

何が起きているのか

npm install を実行すると、こんなエラーが出る:

npm ERR! code EINTEGRITY
npm ERR! Verification failed while extracting lodash@4.17.21:
npm ERR! sha512-... integrity checksum failed when using sha512: wanted sha512-ABC... but got sha512-XYZ...

npm はパッケージをダウンロードした後、そのチェックサムを package-lock.json に保存されている値と照合する。値が一致しない場合、npm は即座に停止する——ファイルが転送中に破損したのか、改ざんされたのか、それともキャッシュの古いデータが当たったのかを判断できないからだ。そのため、処理を中断する。

根本原因

  • npm キャッシュの破損——ほとんどの場合、これが原因だ。ディスクエラー、中断されたダウンロード、または書き込み中にウイルス対策ソフトがスキャンしたことで、キャッシュされた tarball が壊れてしまう。
  • 古い package-lock.json——ロックファイルに古いパッケージバージョンのハッシュが残っており、現在レジストリが配信しているものと一致しない。
  • 不完全なダウンロード——ダウンロード中にネットワークが切断された。npm が壊れたファイルをキャッシュしてしまい、その後のインストールごとに使い回してしまう。
  • レジストリの不一致——公開の npmjs.org レジストリとプライベートの Nexus や Artifactory ミラーを切り替えた。レジストリが異なると、ハッシュは単純に一致しない。
  • 残留した node_modules——以前のパッケージマネージャー実行による古いインストール成果物が、現在の解決と競合している。

手順ごとの修正方法

ステップ 1 — npm キャッシュをクリアする

まずここから始めよう。約 90% のケースでこれだけで解決する。

npm は Linux/macOS では ~/.npm 以下に、Windows では %APPDATA%\npm-cache にダウンロードした tarball をキャッシュする。破損したエントリが 1 つあるだけで、削除するまですべてのインストールに悪影響を及ぼす。

npm cache clean --force

次に、キャッシュが実際に空になったことを確認する:

npm cache verify

正常にクリアされると、次のように表示される:

Cache verified and compressed (~/.npm/_cacache):
Content verified: 0 (0 bytes)
Index entries: 0
Finished in 0.234s

もう一度 npm install を試してみよう。うまくいけば完了だ。

ステップ 2 — node_modules とロックファイルを削除する

キャッシュをクリアしてもエラーが続く場合は、ローカルのインストール状態を完全に消去しよう。

# Linux / macOS
rm -rf node_modules package-lock.json

# Windows (PowerShell)
Remove-Item -Recurse -Force node_modules
Remove-Item package-lock.json

その後、新たにインストールし直す:

npm install

npm がレジストリから直接すべてを取得し、正しいハッシュを持つ新しい package-lock.json を書き出す。古いデータも不一致もない。

ステップ 3 — --prefer-online でインストールする

チームがロックファイルをコミットしているなど、ロックファイルを保持する必要がある場合は、何も削除せずにキャッシュをスキップしよう:

npm install --prefer-online

これにより、npm はローカルキャッシュではなく常にレジストリから取得するようになる。古い npm バージョンへのフォールバックとしては:

npm install --cache /tmp/empty-cache

ステップ 4 — レジストリを確認する

最近、社内レジストリと公開レジストリを切り替えた場合、ハッシュの不一致は想定内だ——レジストリごとにパッケージの署名方法が異なる。

npm config get registry

意図しない場所を指している場合は、リセットしよう:

npm config set registry https://registry.npmjs.org/

社内レジストリが必要な場合は、インフラチームに相談しよう。そのミラーに正しいインテグリティハッシュを公開してもらう必要がある。

ステップ 5 — 問題のあるパッケージだけを対象にする

エラーメッセージには問題のあるパッケージ名が表示される。1 つだけなら、すべてを削除する必要はない——そのパッケージだけを再インストールしよう:

npm install lodash@4.17.21 --prefer-online

またはアンインストールしてクリーンに追加し直す:

npm uninstall lodash
npm install lodash

ステップ 6 — npm 自体をアップデートする

npm のバージョン 8 未満にはインテグリティチェックに既知のバグがあった。まずバージョンを確認しよう:

npm --version

8 未満の場合はアップデートしよう:

npm install -g npm@latest

修正の確認

クリーンインストールを実行する:

npm install

エラーなしに added 847 packages(実際の数は環境による)と表示されれば問題ない。依存関係ツリーがきれいかどうかも確認しよう:

npm ls --depth=0

警告もなく、不足しているパッケージもなければ完了だ。

手動ハッシュ検証(オプション)

npm が実際に確認しているハッシュを確かめたい場合は、package-lock.json を開いて該当パッケージのエントリを探そう:

"lodash": {
  "version": "4.17.21",
  "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
  "integrity": "sha512-v2kDE..."
}

この integrity フィールドは base64 エンコードされた SHA-512 ハッシュだ。tarball を手動で検証したい場合、ToolCraft の Hash Generator はブラウザ上で MD5、SHA-256、SHA-512 ハッシュを計算できる——データが外部に送信されることはない。社内アーティファクトミラーをデバッグしていて、CLI ツールを使わずにハッシュを比較したいときに重宝する。

予防策

  • 常に package-lock.json をコミットする——すべての開発者と CI の実行で、検証済みハッシュを使って全く同じバージョンがインストールされる。
  • CI では npm install の代わりに npm ci を使う。より厳格で、ロックファイルが存在しないか同期が取れていない場合はエラーになり、常にゼロからインストールする。予期しない動作が起きない。
  • パッケージマネージャーを混在させない——同じプロジェクトで yarnnpm を交互に実行すると、ロックファイルがすぐに壊れる。
  • CI のプリフライトに npm cache verify を追加する——パイプラインがビルド間で npm キャッシュをキャッシュしている場合、簡単な検証ステップを追加することで、インストールが壊れる前に破損を検出できる。

クイックリファレンス

# 修正 1: キャッシュをクリアする(まずこれを試す——90% のケースで解決)
npm cache clean --force && npm install

# 修正 2: 完全クリーン再インストール
rm -rf node_modules package-lock.json && npm install

# 修正 3: キャッシュをスキップし、レジストリから直接取得する
npm install --prefer-online

# 修正 4: 公開レジストリにリセットする
npm config set registry https://registry.npmjs.org/ && npm install

# 修正 5: npm をアップデートする
npm install -g npm@latest

Related Error Notes