8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MatsuribaTech(祭り場Tech)Advent Calendar 2023

Day 1

【お試しBun🥟】インターン先のCIを肉まんに置き換える検証

Last updated at Posted at 2023-11-30

これは何?

💡 JSのツールキット・ランタイムであるBunを使ったCIの速度向上の実環境での検証

🥟 Bunとは

なに

2023/5 デビューJavaScript向けツールキット・ランタイム

何をしてくれる

  • 例えば bun install(パッケージマネージャー)
  • 例えば bun test (テストツール)
  • 例えば bun build (ビルドツール)

何がすごい

圧倒的速さ(JavaScriptCoreというのを使ってるらしい)

install を行った際の速度比較(公式サイトより)

image.png

どれぐらい早い

公式のベンチマークでは 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 eslintbun i・bunx eslint に置き換えてみた

npm bun
build-and-test 42.25s 37.37

→ 11%高速になった(およそ5秒程度)

💁まとめ

まだ完全に既存のツールを置き換えられるものではないが、性能は良いので部分的に使いつつアップデートを楽しみにする。
現状ではpnpmが使いやすく、かつ高速な感じ。

📚参考資料置き場

▼Bun公式サイト

▼Bun Bunlderに関する公式ブログ

▼actのリポジトリ

▼bun install はなぜ速いのか

8
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?