npm ciで「Missing from lock file」エラーが出た時の対処法

公開日:
目次

CI/CDでのデプロイ中に、以下のようなエラーに遭遇したことはありませんか?

npm error `npm ci` can only install packages when your package.json and package-lock.json are in sync.
npm error Missing: @types/[email protected] from lock file
npm error Missing: @types/[email protected] from lock file
npm error Missing: @types/[email protected] from lock file

このエラーは、package.jsonに記載されている依存関係がpackage-lock.jsonに含まれていない時に発生します。この記事では、確実な解決方法を紹介します。

エラーの原因

npm ciは本番環境での高速なインストールを目的としており、package-lock.jsonの内容を厳密にチェックします。package.jsonに新しい依存関係を追加したが、package-lock.jsonが更新されていない場合にこのエラーが発生します。

解決手順

1. 不足している依存関係をインストール

エラーメッセージに表示されているパッケージを明示的にインストールします:

npm install @types/[email protected] @types/[email protected] @types/[email protected]

2. package-lock.jsonの更新を確認

インストール後、package-lock.jsonが更新されていることを確認:

git status

以下のような出力が表示されるはずです:

modified:   package.json
modified:   package-lock.json

3. 動作確認

ローカルでnpm ciが正常に動作することを確認:

npm ci

4. 変更をコミット

git add package.json package-lock.json
git commit -m "fix: add missing TypeScript type dependencies"
git push

実際の修正例

私のプロジェクトでの実際の解決手順:

エラーログ

18:52:21.132    npm error Missing: @types/[email protected] from lock file
18:52:21.133    npm error Missing: @types/[email protected] from lock file  
18:52:21.133    npm error Missing: @types/[email protected] from lock file

解決コマンド

# 不足している依存関係をインストール
npm install @types/[email protected] @types/[email protected] @types/[email protected]

# 変更をコミット
git add package.json package-lock.json
git commit -m "fix: add missing TypeScript type dependencies"
git push

よくある質問

Q: なぜこのエラーが発生するのか?

A: 通常、以下のような状況で発生します:

  • 他の開発者がpackage.jsonのみを変更してコミット
  • 手動でpackage.jsonを編集してpackage-lock.jsonを更新し忘れ
  • 異なるnpmバージョンでの依存関係解決の違い

Q: npm installとの違いは?

A:

  • npm install: package.jsonを基にpackage-lock.jsonを生成/更新
  • npm ci: package-lock.jsonを厳密に再現(本番環境向け)

Q: 予防方法は?

A: 以下の点に注意:

  1. 依存関係追加時は必ずnpm installを使用
  2. package.jsonとpackage-lock.jsonは常にセットでコミット
  3. npm ciをローカルでもテストしてからデプロイ

CI/CDでの対処法

Cloudflare Pages

ビルドコマンドでnpm ciの代わりにnpm installを使用する選択肢もありますが、package-lock.jsonを修正する方が推奨されます:

# 推奨: package-lock.jsonを修正
npm run build

# 代替案: npm installを使用(非推奨)
npm install && npm run build

GitHub Actions

- name: Install dependencies
  run: npm ci  # package-lock.jsonが正しければ高速

Vercel

Vercelは自動的に依存関係の不整合を検出し、適切なコマンドを選択してくれる場合が多いです。

まとめ

「Missing from lock file」エラーの解決手順:

  1. エラーメッセージで不足パッケージを特定
  2. npm install [パッケージ名]で依存関係を追加
  3. package-lock.jsonの更新を確認
  4. ローカルでnpm ciをテスト
  5. 変更をコミット&プッシュ

このエラーは依存関係の管理に関する重要なサインです。適切に対処することで、本番環境での予期しない動作を防げます。

package.jsonとpackage-lock.jsonは常にセットで管理し、CI/CDでの一貫した動作を保証しましょう。