Ruby 4.0対応とテスト環境の整備
rails-html-sanitizerがRuby 4.0のサポートを追加し、テスト環境の構成を改善しました。#213 では、CIマトリクスへのRuby 4.0の追加とともに、テストヘルパーの導入による環境情報の一元管理を実現しています。
背景
将来のRuby 4.0をサポートするため、rails-html-sanitizerでもこの新バージョンへの対応準備が必要になりました。また、既存のテストファイルでは require 文が test/sanitizer_test.rb、test/scrubbers_test.rb、test/rails_api_test.rb の3つのテストファイルすべてに分散しており、保守性に課題がありました。また、test/sanitizer_test.rb では環境情報の出力も行われていました。
技術的な変更
CIマトリクスとテスト環境の構成が以下のように変更されました。
CIマトリクスの更新
.github/workflows/ci.yml のテストマトリクスにRuby 4.0が追加され、RuboCopとNokogiriビルドの実行環境もRuby 4.0に更新されました:
matrix:
ruby: ["2.7", "3.0", "3.1", "3.2", "3.3", "3.4", "4.0", "ruby-head", "truffleruby-head", "jruby-9.4", "jruby-10.0", "jruby-head"]
Ruby 2.7から4.0まで、さらに各処理系のheadバージョンを含む幅広いバージョンでテストが実行されます。
テストヘルパーの導入
新規作成された test/test_helper.rb に、すべてのテストファイルで共通する初期化処理を集約しました:
require "minitest/autorun"
require "rails-html-sanitizer"
puts "nokogiri version info: #{Nokogiri::VERSION_INFO}"
puts "html5 support: #{Rails::HTML::Sanitizer.html5_support?}"
各テストファイルでは、個別の require 文を削除し、test_helperの読み込みに統一されました:
require_relative "test_helper"
Minitestバージョン制約
Gemfile にMinitestのバージョン制約 < 6 が追加されました。これにより、Ruby 4.0環境でもテストフレームワークの互換性が保証されます。
設計判断
test_helper.rbの導入 により、テスト環境の初期化ロジックを一元管理する方針が採用されました。
この変更により、Nokogiriのバージョン情報やHTML5サポート状況の確認が test/sanitizer_test.rb から削除され、test_helper.rbでの一度の出力に集約されています。テスト実行時の環境情報が重複して表示されることがなくなり、デバッグ時の可読性も向上しました。
また、Ruby 4.0を標準のテストマトリクスに含めることで、将来的なRubyバージョンアップへの対応を早期に検証できる体制が整いました。RuboCopとNokogiriビルドの実行環境も最新バージョンに更新することで、開発ツールチェーン全体でRuby 4.0との互換性を確認しています。
まとめ
本PRは、Ruby 4.0サポートの追加とテスト環境の構成改善を同時に実現した変更です。CIマトリクスの拡張により新バージョンでの動作保証を得ると同時に、test_helperの導入によってテストコードの保守性を向上させています。