目次
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バージョンでの依存関係解決の違い
npm install
との違いは?
Q: A:
- npm install: package.jsonを基にpackage-lock.jsonを生成/更新
- npm ci: package-lock.jsonを厳密に再現(本番環境向け)
Q: 予防方法は?
A: 以下の点に注意:
- 依存関係追加時は必ず
npm install
を使用 - package.jsonとpackage-lock.jsonは常にセットでコミット
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」エラーの解決手順:
- エラーメッセージで不足パッケージを特定
npm install [パッケージ名]
で依存関係を追加- package-lock.jsonの更新を確認
- ローカルで
npm ci
をテスト - 変更をコミット&プッシュ
このエラーは依存関係の管理に関する重要なサインです。適切に対処することで、本番環境での予期しない動作を防げます。
package.jsonとpackage-lock.jsonは常にセットで管理し、CI/CDでの一貫した動作を保証しましょう。