これは何?
💡 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 はなぜ速いのか
