[importmap-rails] Ruby 4.0とRails 8.1のサポートを追加
Context
importmap-railsは、Railsアプリケーションで JavaScript モジュールを ES6 の import 構文で管理できるようにするライブラリです。本変更では、最新のRuby 4.0とRails 8.1に対応するため、CIマトリクスと依存関係の設定が更新されました。これにより、最新のRubyとRailsバージョンでの動作保証が強化されています。
Technical Detail
CI マトリクスの拡張
GitHub Actions のワークフローに Ruby 4.0 と Rails 8.1 が追加されました。同時に、サポート終了したバージョンの組み合わせを除外するためのマトリクス設定も更新されています。
変更後の対応バージョン:
ruby-version:
- "3.2"
- "3.3"
- "3.4"
- "4.0" # 追加
rails-version:
- "6.1"
- "7.0"
- "7.1"
- "7.2"
- "8.0"
- "8.1" # 追加
- "main"
除外される組み合わせも明示的に定義されています:
exclude:
# Ruby 3.1 は Rails 8.1/main では非対応
- ruby-version: "3.1"
rails-version: "8.1"
- ruby-version: "3.1"
rails-version: "main"
# Ruby 3.2 も Rails main では非対応
- ruby-version: "3.2"
rails-version: "main"
# Ruby 4.0 は Rails 6.1 では非対応
- ruby-version: "4.0"
rails-version: "6.1"
# Rails 8.1/main では Sprockets サポートなし
- rails-version: "8.1"
assets-pipeline: "sprockets"
- rails-version: "main"
assets-pipeline: "sprockets"
Appraisals の整理
Rails 8.0以降では Sprockets サポートが廃止され、Propshaft のみがサポートされるようになりました。これに伴い、Appraisals ファイルから Sprockets 関連の設定が削除されています。
削除された設定:
# Rails 8.0 以降の Sprockets サポートを削除
appraise "rails_8.0_sprockets" do
gem "rails", "~> 8.0.0"
remove_gem "propshaft"
gem "sprockets-rails"
end
appraise "rails_main_sprockets" do
gem "rails", github: "rails/rails", branch: "main"
remove_gem "propshaft"
gem "sprockets-rails"
end
追加された設定:
appraise "rails_8.1_propshaft" do
gem "rails", "~> 8.1.0"
end
テスト依存関係の追加
全ての Gemfile に minitest-mock が追加されました。これは Ruby 4.0 でテストを実行する際に必要となる依存関係です。
group :test do
gem "minitest-mock" # 追加
gem "turbo-rails"
gem "stimulus-rails"
# ...
end
開発環境コンテナの更新
Devcontainer の設定も Ruby 4.0 に更新されています:
{
"name": "importmaps-rails",
"image": "ghcr.io/rails/devcontainer/images/ruby:4.0.0",
// ...
}
その他の変更
Rakefile から不要な統計タスクのロードが削除されました:
# 削除された行
load "rails/tasks/statistics.rake"
まとめ
この変更により、importmap-rails は Ruby 4.0 と Rails 8.1 の最新環境での動作が保証されるようになりました。特に重要なのは、Rails 8.0 以降では Propshaft がデフォルトのアセットパイプラインとなり、Sprockets サポートが完全に削除されたことです。既存プロジェクトで Sprockets を使用している場合は、Rails 7.2 以前のバージョンを使用する必要があります。