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

gem のバージョンを指定しないと、Docker のビルド時に含まれるパッケージが変わる可能性があります。

説明

gem install で Ruby パッケージのバージョンを指定しないと、リポジトリの状態によって別のバージョンが選ばれる場合があります。同じ Dockerfile を再ビルドしても結果が変わる可能性があります。

デプロイ用イメージの依存関係が変わると、アプリケーションの動作や互換性に影響します。gem のバージョンを明示すると、この変更を管理しやすくなります。

想定される影響

  • リポジトリの更新によってイメージの内容が変わる場合があります。
  • 予期しないアップグレードで実行時エラーが発生する可能性があります。
  • テスト環境と本番環境でパッケージ構成が異なる場合があります。

対処方法

  • gem install bundler:2.0.2 のように gem のバージョンを指定してください。
  • 複数の gem をインストールするときも、それぞれのバージョンを指定してください。
  • 固定値を更新する前にテストしてください。

例

Ruby と RubyGems が利用できるイメージでのインストール命令の抜粋です。以下のバージョンは過去の構文例であり、本番向けの推奨値ではありません。確認済みでサポートされるバージョンを選び、間接的な依存関係もロックファイルで管理してください。

変更前

dockerfile
RUN gem install bundler
RUN ["gem", "install", "blunder"]

変更後

dockerfile
RUN gem install bundler:2.0.2
ENV GRPC_VERSION 1.0.0
RUN gem install grpc:${GRPC_VERSION} grpc-tools:${GRPC_VERSION}

説明:

  • 変更前: パッケージ名だけを指定しているため、ビルドのたびに選択されるバージョンが変わる可能性があります。
  • 変更後: 対象のバージョンを明示し、依存関係の変更を管理します。

参考資料