Slide 1

Slide 1 text

 テストを並列実行して よかった話 2023/12/03 平尾一斗

Slide 2

Slide 2 text

【名前】 平尾一斗 【所属】 株式会社ラクーンホールディングス 【主に触っている技術】 【担当サービス】 【趣味】 旅行、お酒、特産品を食べること 自己紹介 at サッポロビール博物館

Slide 3

Slide 3 text

【名前】 平尾一斗 【所属】 株式会社ラクーンホールディングス 【主に触っている技術】 【担当サービス】 【趣味】 旅行、お酒、特産品を食べること 自己紹介 at サッポロビール博物館 このあたりを話します

Slide 4

Slide 4 text

もくじ ● なぜ並列化したか ● なにをしたか ● 今、どうなっているか ● 残る課題 ● Techブログ書いた

Slide 5

Slide 5 text

なぜ並列化したか 技術戦略部には「おかしくない」というアイデンティティがあります。 働いていると「それ、おかしくない?」と思うこと、ありますよね? ラクーンのエンジニアは日々「おかしくない?」をフラットに議論し 「おかしくない」 に変えています。 テストが終わるまでの待ち時間が長いの、「おかしくない?」

Slide 6

Slide 6 text

なにをしたか PJもあるし、サクッと時間短縮できる術はないだろうか… Circle CIとかJenkinsで並列実行する基盤作るのは大変だしなぁ おや?Gemfileにtest-queueで並列化しようとした痕跡があるな おや?parallel_testsって良さげなGemがあるではないか!

Slide 7

Slide 7 text

parallel_tests is 何 parallel_tests 通常は1プロセスで実行するRSpecをマルチプロセスで動かしてくれます。 ➔ 複数のプロセッサーに最小で1ファイルのテストを割り振る ➔ プロセス数を指定できる ➔ 各プロセスにDBが割り当てられる

Slide 8

Slide 8 text

今、どうなっているか ➔ デプロイ時間を短縮 ➔ 開発体験の向上 ➔ 小さい工数で大きな時間節約 ➔ ユニットメンバーから良い反応をもらえてモチベアップ(うおおぉぉ!)

Slide 9

Slide 9 text

残る課題 ● カバレッジ計測がおかしい ○ →最後のRSpec実行でカバレッジが上書きされ、マージされない

Slide 10

Slide 10 text

残る課題 ● 単純にプロセッサーを増やしても早くならなくなった ○ →別のボトルネックがある ○ →重いテストファイル、プロセス起動のオーバーヘッド、I/O、… ○ →数十秒~数百秒(最大で257秒)かかるspecがある(他は数秒~十数秒) ○ →地道に直す

Slide 11

Slide 11 text

Techブログ書いた 並列処理でRails5アプリURIHOのRSpecの時間を短縮する

Slide 12

Slide 12 text

所感 開発環境のパフォーマンス改善楽しいなぁ