npm パッケージのバージョンが未固定

npm パッケージのバージョンを固定しないと、Docker のビルド結果が変わる可能性があります。

説明

npm install sax のようにバージョンを指定しないと、レジストリの変更によって別のバージョンがインストールされる場合があります。同じ Dockerfile の再ビルドでも結果が変わる可能性があります。

Node.js の依存関係は、小さな更新でも動作が変わる場合があります。デプロイ用イメージではバージョンを明示し、予期しない更新を管理してください。

想定される影響

  • ビルド時期によって異なる npm パッケージがインストールされる場合があります。
  • 予期しない更新でアプリケーションエラーが発生する可能性があります。
  • テストと本番で依存関係の構成が異なる場合があります。

対処方法

  • npm install sax@0.1.1 のようにパッケージのバージョンを指定してください。
  • グローバルインストールでもバージョンを固定してください。
  • プロジェクトの依存関係は確認済みのロックファイルと npm ci でインストールし、直接依存だけでなく間接依存の変更も管理してください。

例

ANGULAR_CLI_VERSION には Node.js 環境と互換性がある確認済みの正確なバージョンを指定してください。タグやバージョン範囲は厳密な固定ではありません。sax@0.1.1 は過去の構文例で、本番向けの推奨値ではありません。Git 依存関係も #semver:^5.0 などの範囲ではなく、確認済みのコミットに固定してください。

変更前

dockerfile
FROM node:22
RUN npm install sax
RUN npm i -g @angular/cli

変更後

dockerfile
FROM node:22
ARG ANGULAR_CLI_VERSION
RUN npm install sax@0.1.1
RUN test -n "$ANGULAR_CLI_VERSION" && npm i -g "@angular/cli@${ANGULAR_CLI_VERSION}"

説明:

  • 変更前: バージョンが指定されず、ビルド結果が変わる可能性があります。
  • 変更後: バージョンを明示して対象の依存関係の変更を管理します。

参考資料