🥟
BunをCI(GitHub Actions)で使ってみた
はじめに
Bun 1.0がリリースされましたね。
とはいえNode.jsやnpmなどから移行するのはまだまだ非現実的だし現状使い道がなさそうだなぁと思っていたところ、Xで以下のような投稿を見かけました。
確かにCIでdevDependenciesにしか依存していないLintやテストなどであれば使えそうだなぁと思ったので、使ってみることにしました。
Bunについて
BunはJavaScriptとTypeScriptのアプリケーション向けのオールインワンのツールキットです。
その核となるのがBunランタイムで、Node.jsのドロップインの代替品として設計された高速なJavaScritランタイムです。Zigで書かれていて、JavaScriptCoreで動き、起動時間とメモリ使用量を劇的に削減します。
さらにランタイム以外にも以下の機能が実装されており、いずれも既存のツールより大幅に高速で、既存のNode.jsプロジェクトでほとんど変更する必要なく使用できます。
- スクリプトランナー
- パッケージマネージャー
- バンドラー
- テストランナー
- パッケージランナー
BunをGitHub Actionsで使用する
BunをGitHub Actionsで使用する場合、oven-sh/setup-bun
というactionが公式から提供されています。
以下はワークフローの一例です。
.github/workflows/example.yml
name: Example
on: pull_request
jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Bun
uses: oven-sh/setup-bun@v1
- name: Install dependencies
run: bun install
- name: Run lint
run: bun run lint
CIの速度改善について
条件
共通
- dependencies + devDependencies: 約30
Before
- ランタイム:Node.js 18系
- パッケージマネージャー:pnpm 8系
After
- ランタイム:Bun 1系
- パッケージマネージャー:Bun 1系
結果
Before
- パッケージインストールにかかった時間:11.6s
- ジョブ全体にかかった時間:28s
After
- パッケージインストールにかかった時間:4.18s(約64%減)
- ジョブ全体にかかった時間:22s(約21.5%減)
おわりに
BunをCI(GitHub Actions)で使ってみましたが、思っていたよりも簡単に導入することができました。
試したリポジトリが小規模だったので、CIの速度改善の影響は軽微でしたが、特にパッケージインストールにかかった時間は大幅に削減されており、中・大規模のリポジトリでは大きな影響があるのではないでしょうか。
Discussion