大規模Railsアプリで10分以上かかっていたテストを5分台にしたきゅう速な改善の全貌 by すてにゃん

YAPC::Fukuoka 2025
トーク(20分)

大規模Railsアプリで10分以上かかっていたテストを5分台にしたきゅう速な改善の全貌

stefafafan すてにゃん stefafafan
12

筆者の在籍する会社では大規模Railsアプリケーションの開発・保守を行っています(500以上のテーブル、1300以上のModelクラス、20000以上のテストケース数)。2025年5月時点でのテストの実行時間は9(きゅう)並列で約11分と、開発効率のボトルネックとなっていました。
CI高速化に取り組んだ結果、プロポーザル執筆時点で約5分半までテストの実行時間を短縮することに成功しました。

このセッションではテストの「きゅう」速な改善で得た知見を、上手くいったこともいかなかったことも赤裸々にお話します。どの言語でも応用可能な実践的ノウハウを提供します。

お話しする予定の内容

  • ボトルネックの計測・分析
    • GitHub Actionsの実行時間の継続的な計測
    • test-profを利用したRubyのテスト分析
  • 並列実行の最適化
    • 並列ジョブとparallel_testsの活用
    • ジョブ・プロセス毎のテスト実行時間均一化
  • GitHub Actionsワークフローの最適化
    • 不要ジョブの削減・実行タイミングの調整
  • テストコード中に作られるデータ量の削減
    • ネストされたFactoryの生成(Factory Cascade)との戦い
    • moznion/be-let-it-beを利用した改善
  • MySQLの最適化
    • tmpfsの活用
    • my.cnf最適化
    • MySQLダンプのキャッシュ
  • Flakyテストとの戦い
  • 利用するランナーの選定
    • サードパーティマネージドランナー
    • セルフホステッドランナー
      • 物理マシンを活用する試み
  • 今後の展望
    • 増えていくテストに対する対処
    • 組織横断的な改善活動