Railtiesテストの実行時間を再調整

rails/rails

RailsのCI環境におけるrailtiesテストの並列実行を最適化するため、各テストファイルの推定実行時間が再調整されました。この変更により、テストの分散配置が改善され、CI全体の実行時間短縮が期待できます。

背景

RailsのCI環境では、テストを複数のワーカーに分散して並列実行していますが、各テストの実行時間を事前に推定し、負荷を均等に分散する仕組みを採用しています。railties/Rakefileestimated_duration Hashが、この推定時間を管理しています。

従来の推定値と実際の実行時間に乖離が生じていたため、特定のワーカーに処理が集中し、全体の実行時間が伸びる問題が発生していました。#56822 は、実際の実行時間に基づいて推定値を更新しています。

技術的な変更

railties/Rakefileestimated_duration Hashの値が、実測値に基づいて大幅に調整されました。

データベース関連テストの推定時間短縮

データベース関連のテストファイルの推定時間が大幅に短縮されています:

# 変更前
"test/application/rake/dbs_test.rb" => 300,
"test/application/rake/dbs_schema_test.rb" => 500,
"test/application/rake/dbs_setup_test.rb" => 350,
"test/application/rake/dbs_postgresql_test.rb" => 150,

# 変更後
"test/application/rake/dbs_test.rb" => 20,
"test/application/rake/dbs_schema_test.rb" => 45,
"test/application/rake/dbs_setup_test.rb" => 45,
"test/application/rake/dbs_postgresql_test.rb" => 15,

PR本文によると、CI環境で約5分(300秒)かかるケースはほとんど観測されておらず、過去に単一テストがハングアップして実行時間が異常に長くなった事例があった可能性が指摘されています。実際の実行時間に合わせて、より現実的な値に修正されました。

設定・コンソール関連テストの推定時間延長

configuration_test.rbconsole_test.rb の推定時間が大幅に延長されました:

# 変更前
"test/application/configuration_test.rb" => 106,
"test/application/console_test.rb" => 20,

# 変更後
"test/application/configuration_test.rb" => 200,
"test/application/console_test.rb" => 150,

これらのテストが過小評価されていたため、他の多数のテストと同じワーカーに詰め込まれ、そのワーカーの実行時間が突出して長くなっていました。推定時間を引き上げることで、これらのテストが独立したワーカーに配置されやすくなります。

新規テストの推定時間追加

実行時間が30秒を超える2つのテストファイルが、デフォルト値(1秒)から適切な推定値に更新されました:

"test/application/query_logs_test.rb" => 45,
"test/application/sprockets_assets_test.rb" => 30,

これらのテストはこれまでデフォルト値で扱われていたため、実際の実行時間との差が45倍・30倍に達していました。

設計判断

実測値ベースの継続的な調整 というアプローチが採用されています。

estimated_duration の値は固定された理論値ではなく、CI環境での実測値に基づいて定期的に更新される運用値として扱われています。PR本文では特定のテストについて「consistently take > 30s」(一貫して30秒を超える)という表現が使われており、複数回の実行結果から安定した傾向を確認した上で値を決定していることがわかります。

データベーステストの推定時間を1/10以下に短縮する一方で、設定・コンソールテストを2〜7倍に延長するという大胆な調整は、過去のハングアップ事例に引きずられていた過大評価を是正し、実態に即した分散を実現するための判断です。

まとめ

本PRは、railtiesテストの並列実行における負荷分散を改善した変更です。実測値に基づいて推定時間を大幅に再調整することで、特定のワーカーへの処理集中を解消し、CI全体の実行時間短縮につなげています。特に、過小評価されていた重量級テストと過大評価されていた軽量級テストの両方を是正した点が特徴的です。

記事メタデータ

Generated by:
Claude Sonnet 4.5 for DiffDaily

この記事はAIによって自動生成されています。内容の正確性については、必ずソースコードやPRを確認してください。

品質レビュー結果

Review Status:
リトライ後承認
Review Count:
2回 (改善を経て承認)
Reviewed by:
Gemini 2.5 Pro for DiffDaily

Review Criteria:

記事構成 ✓ PASS

Title, Context, Technical Detailの存在と明確さ

「総論→各論→結論」の3部構成が明確です。リード文、背景、技術的な変更、設計判断、まとめの全要素が過不足なく含まれており、理想的な構成です。

カスタムMarkdown構文 ✓ PASS

シンタックスハイライト・GitHubリンク記法の正確性

ファイル名付きシンタックスハイライト(```ruby:railties/Rakefile)とGitHubのPRリンク記法([#56822](URL))が正しく使用されています。

対象読者への適合性 ✓ PASS

エンジニア向けの適切な技術レベルと表現

RailsのCI環境に関する専門的な内容を、前提知識を持つエンジニア向けに適切な粒度で解説しており、対象読者に完全に適合しています。

パラグラフ・ライティング ✓ PASS

トピックセンテンス・1段落1トピック・段落長

各段落がトピックセンテンスで始まり、1段落1トピックが遵守されています。セクション内の構成も論理的で、非常に可読性が高いです。

Diff内容との照合 ✓ PASS

コードブロックとDiff内容の一致

記事で引用されているコードの変更箇所(推定時間の数値)は、提供されたDiff情報と完全に一致しています。主要な変更点を的確に抽出できています。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

`railties`, `Rakefile`, `estimated_duration`, `ワーカー`など、関連する技術用語を正確かつ適切に使用しています。

説明の技術的正確性 ✓ PASS

技術的主張の正確性と論理性

テストの並列実行における負荷分散の仕組みや、推定時間変更がもたらす影響についての技術的な説明は、論理的で正確です。

事実の突合 ✓ PASS

PR情報による主張の裏付け(ハルシネーション検出)

記事内の主張はすべてPRのDescriptionに基づいており、ハルシネーション(捏造)は見られません。「consistently take > 30s」などの引用も正確です。

数値・固有名詞の確認 ✓ PASS

PR番号・コミットID・バージョン等の正確性

PR番号(#56822)、テストファイルの実行時間、ファイルパスといった数値や固有名詞はすべて正確です。

タイトル・説明との一致 ✓ PASS

記事タイトル・説明とPR内容の一致

記事タイトル「Railtiesテストの実行時間を再調整」は、PRの主題「More railties test balancing」を的確に表現しています。

外部知識の正確性 ✓ PASS

PRに記載のない外部知識(LTS、サポート状況など)の不使用

PR情報に記載のないバージョン情報やリリース予定などの外部知識は含まれておらず、提供された情報源に忠実です。

時間表現の正確性 ✓ PASS

時間表現がPR情報と一致しているか

PR内の時間表現(例: `before`, `currently`)が、「従来」「これまで」といった形で記事に正確に反映されています。