Ruby 3.2.x EOL対応:最低サポートバージョンを3.3.0へ引き上げ
Ruby 3.2.x がEOLを迎えたことを受け、MIN_RUBY_VERSION を "3.3.0" に更新し、バージョントラッキングリストから3.2系の全エントリを削除しました。
背景
Ruby 3.2.x がEOLに達したため、このリポジトリが追跡・サポートする最低バージョンの引き上げが必要になりました。rails/devcontainer は開発コンテナ向けのRubyバージョン管理ツールを提供しており、EOL済みバージョンをトラッキングリストに残し続けることは、保守上の意味をなさなくなっていました。
技術的な変更
変更は lib/ruby_version_checker.rb、.github/ruby-versions.json、およびテストファイル群の3箇所に集中しており、いずれも3.2.x の参照を3.3.x へ置き換える一貫した修正です。
lib/ruby_version_checker.rb では、バージョンフィルタリングの下限を定義する定数 MIN_RUBY_VERSION が "3.2.0" から "3.3.0" へ変更されました。
変更前:
# Minimum Ruby version to consider (non-EOL versions only)
MIN_RUBY_VERSION = "3.2.0"
変更後:
# Minimum Ruby version to consider (non-EOL versions only)
MIN_RUBY_VERSION = "3.3.0"
.github/ruby-versions.json からは 3.2.0 ~ 3.2.11 の12エントリが削除されました。コメントにも「non-EOL versions only」と明示されているとおり、このリストはEOL済みバージョンを含まない設計であり、今回の削除はその方針に沿ったものです。
テストファイルでは、「古いバージョン」を想定したシナリオのフィクスチャが一斉に置き換えられています。test/commands/add_ruby_version_test.rb では、setup_valid_environment のデフォルト引数から "3.2.0" が除かれ、「現在のデフォルトより古いバージョン」を検証するシナリオが 3.2.5 対 3.3.0 から 3.3.5 対 3.4.0 へ更新されました。test/ruby_version_checker_test.rb でも同様に、フィルタリング・ソート・重複検出の各テストが3.3.x ベースに書き換えられています。
設計判断
MIN_RUBY_VERSION を単一の定数として管理する設計が、今回の変更を1行で完結させています。バージョンフィルタリングのロジックはこの定数を参照しており、EOL対応の際に変更箇所が最小限になるよう設計されていることが、今回のdiffからも確認できます。
テストのフィクスチャを「古いバージョン」と「新しいバージョン」の相対的な関係として構成している点も注目に値します。3.2.5 と 3.3.0 のペアを 3.3.5 と 3.4.0 のペアへそのまま置き換えることで、テストのセマンティクスを変えることなく最低バージョンの引き上げに追従できています。この設計により、次のEOL対応でも同様の機械的な置き換えが可能です。
まとめ
本PRはRuby 3.2.x のEOLに対する定型的な対応ですが、MIN_RUBY_VERSION の単一定数管理と相対的なテストフィクスチャ設計という2つの構造が、変更を最小限のdiffに収めています。EOLサイクルへの追従コストを設計レベルで抑制している好例といえます。