CIを改善しRuby 4.0とRails 8.1のテストを追加
tailwindcss-railsのCIマトリクスに Ruby 4.0 と Rails 8.1 のテストが追加され、統合テストの実行環境が改善されました。依存関係の更新と並行して、テスト実行時の書き込み権限の問題を解決する環境変数の設定が追加されています。
背景
将来のRuby 4.0リリースを見据え、CIのテストマトリクスを更新する必要がありました。また、統合テストの実行時に bundle remove/add コマンドが失敗する問題が発生していました。これは、デフォルトの GEM_HOME ディレクトリに書き込み権限がないことが原因でした。#606 がこれらの問題に対応しています。
加えて、minitest-mock への明示的な依存関係が欠けており、テスト実行時に問題が発生する可能性がありました。本PRはこの依存関係の明示と、upstreamワークフローの効率化も含んでいます。
技術的な変更
CIマトリクスへの Ruby 4.0 の追加と、統合テストの環境変数設定が行われました。
CIマトリクスの拡張:
.github/workflows/ci.yml のテストマトリクスに Ruby 4.0 が追加されました。
matrix:
ruby: ["3.1", "3.2", "3.3", "3.4", "4.0", "head"]
これにより、Ruby 3.1 から 4.0 までの全バージョンでテストが実行されます。
統合テストの環境変数設定:
user_install_test と user_upgrade_test ジョブに、GEM_HOME 環境変数の設定が追加されました。
env:
GEM_HOME: ${{ github.workspace }}/.gem # Needs to be a writable directory to bundle remove/add
この設定により、bundle remove/add コマンドが書き込み可能なディレクトリで実行されるようになります。統合テストで使用するRubyバージョンも3.4から4.0に更新されました。
依存関係の追加:
Gemfile に minitest-mock が test グループの依存関係として追加されました。
group :test do
gem "actionmailer", ">= 7.0.0"
gem "minitest-mock"
end
これにより、モックオブジェクトを使用するテストが確実に実行できるようになります。
upstreamワークフローの改善:
.github/workflows/upstream.yml では、Rails本体への依存を単純化する変更が行われました。
bundle remove actionmailer
git clone --depth 1 --branch main https://github.com/rails/rails
bundle add rails --path=rails --skip-install
bundle install
従来の actionmailer と railties を個別に追加する方式から、rails をまとめて追加する方式に変更されました。--skip-install フラグにより、依存関係の解決を後続の bundle install に委ねています。また、テスト対象に Rails 8.1 stable ブランチが追加されました。
依存パッケージのバージョン更新:
Gemfile.lock では、Rails 8.1.0 から 8.1.2 への更新と、その他の依存パッケージの最新版への更新が行われました。主な更新は以下の通りです。
- actionmailer: 8.1.0 → 8.1.2
- actionpack: 8.1.0 → 8.1.2
- activesupport: 8.1.0 → 8.1.2
- rails-dom-testing: 2.2.0 → 2.2.1
- rails-html-sanitizer: 1.6.2 → 1.6.3
設計判断
GEM_HOME の設定場所 に関する判断が重要です。
PRでは、統合テストを実行する各ジョブの env セクションに GEM_HOME を設定する方式が採用されました。ワークフロー全体のトップレベルにも同じ設定が追加されていますが、これは upstream.yml での一貫性を保つためです。
この設計により、bundle remove/add を使用するテストだけが影響を受け、通常のユニットテストは従来の動作を維持します。書き込み権限の問題を最小限の変更で解決しながら、環境の分離を保っています。
upstreamワークフローでの Rails依存関係の追加方法の変更 も注目すべき点です。actionmailer と railties を個別に追加していた従来の方式から、rails gemをまとめて追加する方式に変更されました。この判断により、Railsの依存関係管理がシンプルになり、将来的な依存関係の変更にも対応しやすくなっています。
まとめ
本PRは、Ruby 4.0とRails 8.1のテストを追加しながら、CI環境の実行可能性を向上させる変更です。GEM_HOME の明示的な設定により統合テストの信頼性が高まり、minitest-mock の依存関係追加でテスト環境の完全性が保証されました。upstreamワークフローの改善は、Rails本体の変更に追従しやすい構成を実現しています。