[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以上を要求するため、後方互換性の問題はありません。