🥟

Bun1.0がもうすぐリリースされるぞ!

2023/09/08に公開

超高速でNode.jsと互換性の高い JavaScriptTypeScript ランタイムである Bun 初の安定版が 1.0 としてついにリリースされます!
リリース予定時刻は 2023-09-09 00:00 JST (太平洋時間では 2023-09-08 07:00 PST) です。
リリースに向けて早速 YouTube に Bun のこれまでの機能や追加される機能についての紹介動画が公開されています。

追記: 公式のリリース記事が公開されました! Bun 1.0 | Bun Blog

https://www.youtube.com/watch?v=BsnCpESUEqM

🌱 これまでのおさらい

  • Bun 超高速な JavaScript ランタイムです
  • 組み込みで TypeScript のサポートがされており特に設定を何もせず TypeScript を実行できる環境が手に入ります
  • Node.js との高い互換性があり Node.js アプリケーションの多くはそのまま Bun 上動作します
  • npmyarnpnpm とほぼ同等の機能を備える パッケージマネージャーとしても使用できます
  • WebpackVite のような複数のスクリプトを単一のスクリプトにをまとめるバンドラーとしても使用できます
  • Bun 本体は Zig で構築されています

💫 追加機能などの紹介

公開されている動画から引用する形で紹介していきます

🧩 Plugin API

Bun にはモジュール解決に独自の機能を追加する Plugin API が存在します

Webpack の Loader のように任意のファイルをモジュールとしてロードするようなプラグインを実装できます。
実用例としては、例えば Rust のコードを import すると オンザフライで Rust をコンパイルして FFI 経由で Rust の関数を JavaScript / TypeScript からそのまま使用できるような仕組みも作れるとのことでうまく使うと、JavaScript 実装であることがボトルネックになっている場合に、ネイティブ実装に移しやすいというメリットが有りそう。

🚀 IO性能の向上

Node.js に比較して Read が 10倍、Write が 3倍 早くなった様子。
コマンドラインベースでコードを実行したり、HTTP や WebSocket のパフォーマンスも向上しているようでした。

🎪 Node.js のエコシステム互換性の向上

Node.js エコシステムとの強力な互換性を有していますが 1.0 で更に向上したようでした。
特によく使われるパッケージやライブラリのうち、Next.jsRemixViteNuxt.jsAstroSvelteSolidJSNest.js などは動作が Bun 開発チームによっても確認されているようです。
確認したところ ViteVitestStorybook で構築されたコードがほぼそのまま動作してくれました。
Image

📦 パッケージマネージャとしての圧倒的なパフォーマンス

Bun は Node.js 向けのパッケージマネージャとして使用でき node_modules の構築を行えます
https://bun.sh/docs/cli/install

YouTube の動画では、Remix のサンプルアプリケーションをそれぞれのパッケージマネージャで構築する場合のパフォーマンス比較が行われていました。
Image
Node.js ベースで動作するもののうちで最も早い pnpm でも 6.5秒 必要なところが 0.36 秒で完了するようです。
別途手元のコードをもとにどのパッケージマネージャが最も早いかを計測したことがありますが同様の傾向でした。

ref: npmとyarnとpnpmどれが一番早い?

一方で Node.js 組み込みの Corepack でサポートされているわけではないため、別途バージョン管理をする必要はありますが、それをおいても驚異的なパフォーマンスを発揮してくれます。もし手を入れず動いてくれるなら実行も含めて Bun に寄せてしまっても良いかもしれません。

💨 テストランナーとしても超高速

Bun には組み込みのテストランナーがあります。
JavaScriptTypeScript の他 JSX/TSX のサポートも行われています。
https://bun.sh/docs/cli/test

このテストランナーもランタイムの高いパフォーマンスを活かして圧倒的に最速に動作します。
動画の中では、Zod に用意されているテストを Bun、Vitest、Jest をそれぞれの組み合わせて実行した場合の比較が行われていました。
Image

テストランナーの用意している API は記法に JestVitest にある程度互換性があるようで、以降の際にも書き換えコストを抑えられそうです。
また、よく使用される Testing LibraryHappyDOM を使用して DOMベースのテストを実行することもできます。

また Bun のテストランナーを使用せずとも VitestJest を Bun 上で動作させることもできるので、ある程度実行速度の高速化は見込めるかもしれません。

🚚 各種インストール手順のサポート

ここまで紹介してきた Bun ですが、様々な用途ごとにセットアップをサポートする仕組みが公式に用意されています。
安定版がリリースされたことで Node.js に近い安心感を持って Bun を使用できるようになったのではないでしょうか。
参考までに以下に用意されている主要な利用方法に対応するインストール方法を列挙します。

💬 公式Discord

近年の開発ツールのコミュニケーション手段として Discord が多く使われますが Bun にも用意されています。
https://bun.sh/discord からアクセスするか、bun discord を実行すると 公式 Discordに参加できます。

📎 まとめ

  • 初期リリースから Node.js との高い互換性を維持しつつ高いパフォーマンスをもつ JavaScript と TypeScript のランタイムとして開発が続けられてきた Bun ですが、ついに安定版 1.0 に到達しました。
  • 個人的にはこれまでなんとなく「まだ開発中だし様子見かな」なんて思っていた時期もありましたが、多くのNode.jsアプリは手をかけず動作しそうで、それでいて超早い というところが改めてとても魅力的に感じました。
  • パッケージマネージャに用意されている npx 相当の動作もサポートされており、個人開発レベルではしばらく Bun で生活してみても良いかもなと考えていて 1.0 を実際にさわれるようになる時間が楽しみです!

📚 関連

Discussion