これは何?
💡 JSのツールキット・ランタイムであるBunを使ったCIの速度向上の実環境での検証
🥟 Bunとは
なに
2023/5 デビューJavaScript向けツールキット・ランタイム
何をしてくれる
- 例えば
bun install
(パッケージマネージャー) - 例えば
bun test
(テストツール) - 例えば
bun build
(ビルドツール)
何がすごい
圧倒的速さ(JavaScriptCoreというのを使ってるらしい)
▼ install
を行った際の速度比較(公式サイトより)
どれぐらい早い
公式のベンチマークでは npm i
の 25倍速いらしい
グローバルにキャッシュを持っていて、そこから依存を取ってきているから速い(pnpm
に近い)
- pnpm:node mobule はシンボリックリンク
- bun:node mobule はキャッシュから取った実体
なんで生まれた
webpack・esbuild・babel等のJS向けツールキットの乱立による依存問題・速度問題の解決
→ 思想としてはRome toolsに近い
✅ CIをBunに置き換えてみる
やったこと
インターン先のプロジェクトにて、簡単なCIを組んで速度比較をしてみた
環境
- node:v18.16.0
- Bun:v1.0.11
- act
actあんまり有名じゃない
GithubActionsをローカル(Docker上)でテストする環境
actのいいところ
- ローカルでテストできるので、GithubActionsがコケたメールにもう怯えなくていい✅
- Docker環境があれば簡単に使える
- コマンドがめちゃくちゃ簡単
使い方
引数無しで実行するとpush
の動作が実行される(別のジョブ・オプションがあるので調べてみてね)
act
CIの内容
内容 | npm | bun |
---|---|---|
チェックアウト | actions/checkout | actions/checkout |
bunのインストール | npm i -g bun | |
依存関係のインストール | npm i | bun i |
Lintの実行 | npx eslint | bunx eslint |
※ bun が単体のJS・TSファイルのビルドしかサポートしてないためbuild
は無し
結果
npm | bun | |
---|---|---|
1回目 | 29.07s | 19.22s |
2回目 | 29.92s | 19.52s |
3回目 | 29.60s | 19.50s |
→ 平均して34%高速になった(およそ10秒程度)
install・lint だけ置き換えてみた
プロジェクトのbuild-and-test
のまま npm i・npx eslint
を bun i・bunx eslint
に置き換えてみた
npm | bun | |
---|---|---|
build-and-test | 42.25s | 37.37 |
→ 11%高速になった(およそ5秒程度)
💁まとめ
まだ完全に既存のツールを置き換えられるものではないが、性能は良いので部分的に使いつつアップデートを楽しみにする。
現状ではpnpm
が使いやすく、かつ高速な感じ。
📚参考資料置き場
▼Bun公式サイト
▼Bun Bunlderに関する公式ブログ
▼actのリポジトリ
▼bun install はなぜ速いのか