見出し画像

Bunを使ってCIの実行時間を大幅削減した

こんにちは。
株式会社OPTEMOでエンジニアをしている田代です。
久しぶりのnote投稿です。
頑張って書いています。


CIの時間はゼロにしたい

CIの回る時間は、極力ゼロにしたいです。

PRを捌くことに直接的な影響はあまりないかもしれませんが、サクッとPRレビューしてマージしたくてもCIで待つ必要があったり、あとはコスト面でもないにこしたことはありません。

最近ありがたいことに開発に携わる人数が増加していていたり細かな修正もどんどん対応していくことでPRの本数が増えていて、この地味なストレスも増加傾向にあります。

全てのコード変更はPRを介すようにしているので、細々したものでもCIは回ります。
キャッシュが効くケースだといいですが、そうではない場合は無駄な気を遣います。

そういうわけで、CIの時間はゼロに近ければ近いほど嬉しいです。

「どうにかしたいね」というなんとなくの雰囲気はありつつもなかなか取り組めていなかったのですが、ようやくどうにかしました。

Tech Topics

弊社では、原則毎週金曜の4時間ほどを使って Tech Topics という時間を設けています。

好き放題なテーマで取り組むのは目的と外れてしまうので、「間接的でも良いし、直近すぐ取り込める内容でなくてもいいから、プロダクトを良くすることに繋げること」を条件とした技術投資の時間のようなイメージです。

最近では Valibot や drizzle 、Cloudflare 等をテーマに技術的な調査をしたりしています。
実際にプロダクトの改善に繋がっている取り組みもあるほか、ここでの調査から既存のプロダクトの課題が出てくるなど、非常に有意義な時間となっています。

この時間を使い、CIの改善、ひいては開発体験の向上ができないかをテーマとして今回の「CIの実行時間の短縮」取り組むことにしました。

Bunを使う

Bun はリリース時にもだいぶ話題になったので、ご存知の方も多いかと思います。
https://bun.sh/

Bun is an all-in-one JavaScript runtime & toolkit designed for speed, complete with a bundler, test runner, and Node.js-compatible package manager.

Bun公式サイトより

詳細までは追えていませんでしたが、リリース当時から「Bunは爆速だぞ」「Bunはいいぞ」という話は耳にしていました。

リリースから少し時を経まして、最近ではBunを本番では使わずとも、CI領域だけでも恩恵に預かれるという話も聞くようになりました。

冒頭でも挙げた問題などもあったため、Tech Topicsのテーマとして「CIの時間短縮」をあげて調査することとしました。

こうした少しチャレンジ的な動きもしやすいので、Tech Topicsの取り組みはとてもいいです。ひいては弊社はとても良いです。(PR)


Honoの @yusukebe さんもBunについてこんなツイートを。


Yarn → Bun でパッケージのインストール時間を 1/8 に削減

今回はフロントエンドので使用しているCIのみをターゲットとして比較します。
現在弊社はパッケージマネージャに Yarn を使用していますので、Yarn を使用した場合とBunを使用した場合の速度比較を行います。

前提

  • Yarn v1系

  • Bun v1系

ライブラリのアップデート対応時に回ったCIをそれぞれ10件ピックアップして、最短最長を除外した8回の平均を出しています。

あくまで参考も参考、「ざっくりこのくらいになりました」という前提です。

[Yarn]
01. 2m8s
02. 1m58s
03. 2m37s
04. 2m10s
05. 2m37s
06. 1m57s
07. 2m22s
08. 2m35s
09. 1m59s
10. 2m48s

平均: 約138秒(最短・最長を除いた8回平均)
[Bun]
01. 52s
02. 12s
03. 11s
04. 18s
05. 18s
06. 15s
07. 17s
08. 22s
09. 18s
10. 15s

平均: 約17秒(最短・最長を除いた8回平均)

Yarnを使っていた場合には平均138秒かかっていますが、Bunを使用した場合には平均17秒ほどと約1/8まで大幅に削減されています。
そもそもかかりすぎでは感はありますが。

対応工数としては、CIのワークフローをBun前提のものに置き換えるだけで、調査から変更対応まで含めても半日かからない程度でした。

おわりに

CIの速度改善の施策はキャッシュ化であったり変更箇所のみ実行させたりさまざまあるかと思います。

その中でもBunの導入は工数も非常に少なく対応でき、投資対効果の高い施策だと思います。

今後はそもそも Yarn v1系を使っているものをバージョンアップするか `pnpm` 等へ移行するなど、引き続きこの辺りの改善にも継続して取り組んでいきたい所存です。

採用情報


この記事が気に入ったらサポートをしてみませんか?