DiffDaily

Deep & Concise - OSS変更の定点観測

[rails/buildkite-config] Dockerfileから不要なBundlerインストール処理を削除

rails/buildkite-config

背景

Rails CIのDockerイメージビルド時に、gem install bundlerを実行することでBundlerの重複インストールが発生し、定数の再定義警告が大量に出力される問題がありました。この問題は、Bundlerが既にRubyのデフォルトgemとして含まれているにもかかわらず、追加で明示的にインストールしていたことが原因でした。

技術的な変更内容

Dockerfileから以下の1行を削除しました:

-    && (gem install bundler -v "${BUNDLER:->= 0}" || gem install bundler -v "< 2") \

変更の根拠

Bundlerはデフォルトgemとして提供されている

Ruby 2.6.0以降、Bundlerはデフォルトgemとして標準搭載されています。Rails 7.0が要求する最小Rubyバージョンは2.7以上であるため、Rails CIで使用される全てのRubyバージョンには既にBundlerがインストールされています。

重複インストールによる警告の発生

gem install bundlerを実行すると、以下のように2箇所にBundlerがインストールされます:

  • デフォルトgem: /usr/local/lib/ruby/4.0.0+0/bundler/
  • 追加インストール: /usr/local/lib/ruby/gems/4.0.0+0/gems/bundler-4.0.0/

この重複により、以下のような警告が出力されていました:

warning: already initialized constant Gem::VALIDATES_FOR_RESOLUTION

gem update --systemで十分

gem update --systemコマンドは、RubyGemsだけでなくBundlerも同時に更新します。以下の実行例が示すように、このコマンド単体で最新のBundlerが利用可能になります:

$ bundler -v
Bundler version 2.4.19

$ gem update --system
# ... 更新処理 ...
Bundler 4.0.0 installed
RubyGems 4.0.0 installed

$ bundler -v
4.0.0

影響範囲

この変更により:

  • Rails Nightly CIでの定数再定義警告が解消されます
  • Bundlerの重複インストールがなくなり、より明確なgemパス構造になります
  • ビルド時間がわずかに短縮されます(Bundlerのインストール処理が不要になるため)

Rails CIは既に6.1系のテストを終了しており(2025年10月27日以降実行なし)、現在サポートしているRails 7.0以降は全てRuby 2.7以上を要求するため、後方互換性の問題はありません。