Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GitHub Actions による RSpec の時間を半分以上短縮した話

GitHub Actions による RSpec の時間を半分以上短縮した話

Wantedly x Qiita Meetup #2 Rubyを用いたプロダクト開発
(https://increments.connpass.com/event/310090/) での発表資料です。

Tomoya Chiba

March 01, 2024
Tweet

More Decks by Tomoya Chiba

Other Decks in Technology

Transcript

  1. 千葉 知也 (@tomoasleep) Qiita: https://qiita.com/tomoasleep Twitter: https://twitter.com/nemunemu3desu Qiita 株式会社 共通基盤グループ

    シニアエンジニア Qiita の開発、運用、技術全般をいい感じにする仕事を しています 自己紹介 2
  2. CI の速度 ≒ Try & Error の速度 CI が遅いと開発のボトルネック、ペースダウンになる 不安定なテストがあると更に足を引っ張る

    これを改善していきたい → サイドタスクとして進める Why?: CI の速さは開発の速さ 5
  3. より高機能なものとして、 Datadog 公式の CI/CD の可視化機能もある https://www.datadoghq.com/ja/product/ci-cd-monitoring/ Flaky Test の検出、テストのデバッグ、などは魅力的だが… まずは必要な計測を小さく始めて、定着させるために、一旦見送り

    int128/datadog-actions-metrics も各種費用は掛かる 送信用 GitHub Actions の実行料金 各 Workflow の課金時間が +1 分 されるイメージ Datadog Custom Metrics の量に応じた料金 計測方法の選定 ( 詳細) 10
  4. 開発の活発さを表す指標 ( デプロイ回数, etc) 改善するしばらく前から取っていたほうが良い 費用関連の情報 ( 全体的な料金、課金時間、実行回数, etc) マシンスペック、マシン台数は金銭コストとのトレードオフ

    無駄なコストを削減 → 費用掛けたい部分に回す 継続的に取るのがやや面倒 「GitHub API で GitHub Actions の課金時間、平均課金時間を計算する」 https://qiita.com/tomoasleep/items/91159263a0c11dffbf7c 他に計測したほうが良いもの 11
  5. 小さい工数で大きく改善したい → 並列の質と量を上げる 量 GitHub Actions の並列数 (Matrix) の調整 parallel_tests

    の導入 質 テスト配分のバラツキを抑える 今回の改善方法: 並列の質と量を上げる 12
  6. https://github.com/grosser/parallel_tests 適切な並列数で RSpec, minitest, ...etc を並列実行 RSpec コマンドを同時に複数実行している $ parallel_rspec

    --verbose -- spec/hoge_spec.rb spec/fuga_spec.rb 2 processes for 2 specs, ~ 1 specs per process TEST_ENV_NUMBER= PARALLEL_TEST_GROUPS=2 rspec spec/hoge_spec.rb TEST_ENV_NUMBER=2 PARALLEL_TEST_GROUPS=2 rspec spec/fuga_spec.rb 量の改善その2: parallel_tests を導入する 17
  7. matrix のメリットに加えて… 、 遊んでいる CPU を有効活用するので早くなるし、安くなる (GitHub Actions のデフォルトは 2core

    なので CPU が余りがち) コア数分の並列なので、 Matrix よりは並列数の自由度は小さい 複数の RSpec 間のデータが干渉しないように設定する必要がある parallel_tests のメリット、デメリット 18
  8. スコープを絞る ( 逼迫してない System Spec, Feature Spec では見送り) 事前に変なの見つけたら教えてとお願いしておく RSpec

    の tag で、並列実行出来ないものは除外出来るように備えた it ' 並列実行したくないやつ', :no_parallel do end Qiita での parallel_tests 導入 (Matrix 変更と併用) 20