Ruby 4.0.4のdevcontainerサポートとインストール時のワークアラウンド追加
Ruby 4.0.4がdevcontainerのRubyフィーチャーのデフォルトバージョンに昇格し、あわせてRuby 4.0.4固有のインストール問題を回避するための --disable-install-doc オプションが自動適用されるようになりました。
背景
バージョン管理ツール(mise / rbenv)を介してRubyをビルドする際、特定バージョンで追加のビルドオプションが必要になることがあります。Ruby 4.0.4では、インストール時に RUBY_CONFIGURE_OPTS='--disable-install-doc' を渡さなければ正常にビルドできない問題が確認されており、この対応がインストールスクリプトに組み込まれました。
これまで install.sh はバージョンを問わず同一のコマンドでRubyをビルドしていたため、バージョン固有のビルドオプションを注入する仕組みがありませんでした。本PRはバージョン追加の自動化フローの中でこの制約を解消しています。
技術的な変更
最も注目すべき変更は、features/src/ruby/install.sh への run_ruby_install_command 関数の追加です。バージョンに応じたビルドオプションを動的に組み立て、インストールコマンドを実行する責務を集約しています。
変更前:
# install_ruby_rbenv 内
su "$_user" -c "/usr/local/share/rbenv/bin/rbenv install $_version"
# install_ruby_mise 内
su "$_user" -c "$_home_dir/.local/bin/mise install ruby@$_version"
変更後:
run_ruby_install_command() {
_user="$1"
_version="$2"
_command="$3"
_configure_opts=""
if [ "$_version" = "4.0.4" ]; then
_configure_opts="RUBY_CONFIGURE_OPTS='--disable-install-doc' "
fi
su "$_user" -c "${_configure_opts}${_command}"
}
# install_ruby_rbenv 内
run_ruby_install_command "$_user" "$_version" "/usr/local/share/rbenv/bin/rbenv install \"$_version\""
# install_ruby_mise 内
run_ruby_install_command "$_user" "$_version" "$_home_dir/.local/bin/mise install \"ruby@$_version\""
この関数は rbenv と mise の両方のインストールパスから呼び出されるため、バージョン固有のオプションを一か所で管理できます。なお、rbenv global と mise use -g(グローバル設定)のコマンドはインストール後の操作であるため run_ruby_install_command を経由せず、従来どおり su で直接実行されています。
その他の変更はバージョン番号の更新です。
-
.github/ruby-versions.json:"4.0.4"をバージョンマトリクスの先頭に追加 -
features/src/ruby/devcontainer-feature.json:versionを"2.2.1"→"2.2.2"にバンプし、デフォルトRubyバージョンを4.0.3→4.0.4に更新 -
features/src/ruby/README.md: デフォルトバージョンの記載を4.0.3→4.0.4に更新 -
テストファイル群:
test.sh/with_rbenv.sh/with_precompiled_rubies.shの各バージョンアサーションを4.0.3→4.0.4に更新
設計判断
バージョン固有の条件分岐を run_ruby_install_command に集約する設計が採用されました。
バージョン固有のオプションをインストール関数(install_ruby_rbenv / install_ruby_mise)のそれぞれに直接記述する方法もありましたが、共通のヘルパー関数を介す構造にすることで、将来新たなバージョン固有のオプションが必要になった際に修正箇所を一か所に集められます。現時点では 4.0.4 のみのハードコードされた条件分岐ですが、この関数が拡張ポイントとして機能します。
また、--disable-install-doc の適用対象をビルド(install)コマンドのみに限定し、グローバル設定コマンドには適用していない点も合理的な判断です。ドキュメント生成の抑制はビルドフェーズにのみ意味があるためです。
まとめ
Ruby 4.0.4の追加は単純なバージョン番号の更新にとどまらず、バージョン固有のビルドオプションを注入するための run_ruby_install_command という抽象化レイヤーを install.sh に導入した変更でもあります。今後のRubyバージョンでも同様のビルド要件が生じた場合、この関数を拡張するだけで対応できる土台が整いました。