遅かったCircleCIを改善する時に見たところ

私が前職で所属してた会社ではバックエンドに Rails を使用してるプロジェクトだったのですが、PR を作成毎に起動する CircleCI がとても遅い問題を抱えておりました。 大体 1h~2h これでは、通常の開発どころか緊急対応の際にも大きく影響してしまいます。 それで、これをどうにか出来ないかと思い直した時の備忘録です。

パフォーマンス調査

CI のテスト部分のパフォーマンス解析にはtest-profを使用。 これを使うことによって spec 内で無駄にレコードが生成されていないかを確認する。 その他にも、便利メソッドが使えたり、aggregate_failures に関する調査をすることができる。

ちなみに実際にパフォーマンス調査をして数百レコード単位で無駄なレコードが生成されていることがわかった。

CircleCI の parallelism 化

config.yml 内に parallelism の項目を指定することでテスト並列実行することができる。 言語に依存しないのが良いところ。 自分の場合はさらにタイミングデータを用いて並列の最適化を行いました。

ビルドイメージの最適化

最後は細かい部分になるが、CI で使うビルドイメージを CircleCI 側で提供されているものに変更する。こちらはベストプラクティスとしても紹介されている。