Isolated Testの実行を廃止し、CIパイプラインをシンプル化
RailsのCIパイプライン設定から isolated_test の実行ステップが削除されました。megatestへの移行検討を経て、isolated testの有用性自体が疑問視されたことによる判断です。
背景
isolated testの廃止は、#57326 で進められているRails本体の megatest 移行作業がきっかけです。megatestへの移行作業の中で rake test:*:isolated の対応が必要かどうかが検討されましたが、議論の結果、「isolated testはそれほど有用ではない」という結論に至りました。
megatestへの移植が技術的に不可能だったわけではなく、移植するだけの価値があるかどうかを問い直した結果、廃止という判断が下されています。
技術的な変更
pipelines/rails-ci/pipeline.rb から、isolated testに関する21行がすべて削除されました。
削除されたステップは以下のコンポーネントを対象としていました:
-
Active Record:
mysql2・postgresql・sqlite3・trilogyの各アダプター(いずれもparallelism: 5) - Action Mailer / Action Pack / Action View
- Active Job / Active Model / Active Support
削除前:
# Isolated tests
ruby_group build_context.default_ruby do
label "isolated"
rake "activerecord", task: "mysql2:isolated_test", service: "mysqldb", parallelism: 5
rake "activerecord", task: "postgresql:isolated_test", service: "postgresdb", parallelism: 5
rake "activerecord", task: "sqlite3:isolated_test", parallelism: 5
if build_context.supports_trilogy?
rake "activerecord", task: "trilogy:isolated_test",
service: "mysqldb", parallelism: 5
end
rake "actionmailer", task: "test:isolated"
rake "actionpack", task: "test:isolated"
rake "actionview", task: "test:isolated"
rake "activejob", task: "test:isolated"
rake "activemodel", task: "test:isolated"
rake "activesupport", task: "test:isolated", service: "activesupport"
end
削除後:
# (isolated testsブロックなし)
end
isolated testブロック全体の削除のみであり、他のパイプライン定義への影響はありません。
設計判断
「移植コストに見合う価値があるか」という問いを優先した判断です。
#57326 のブロッカー整理の中で rake test:*:isolated のmegatest対応が必要かどうかが問い直された結果、廃止が選ばれています。megatestへの対応を追加するよりも、実行しないことを選択するという、シンプルさを優先した設計判断といえます。
まとめ
isolated testの廃止は、megatest移行という文脈を契機に、テスト戦略そのものを見直した結果の決断です。移植の可否ではなく有用性を問い直すことで、CIパイプラインの複雑さを削減しつつ、テスト基盤の刷新に向けた判断が下されました。