Bun1.0がもうすぐリリースされるぞ!
リリース予定時刻は 2023-09-09 00:00 JST (太平洋時間では 2023-09-08 07:00 PST) です。
リリースに向けて早速 YouTube に Bun のこれまでの機能や追加される機能についての紹介動画が公開されています。 https://www.youtube.com/watch?v=BsnCpESUEqM
🌱 これまでのおさらい
組み込みで TypeScript のサポートがされており特に設定を何もせず TypeScript を実行できる環境が手に入ります Node.js との高い互換性があり Node.js アプリケーションの多くはそのまま Bun 上動作します
Webpack や Vite のような複数のスクリプトを単一のスクリプトにをまとめるバンドラーとしても使用できます 💫 追加機能などの紹介
公開されている動画から引用する形で紹介していきます
🧩 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 で更に向上したようでした。 https://gyazo.com/7ac2e5ef7e52e0adda6ec00fcd45fe98
📦パッケージマネージャとしての圧倒的なパフォーマンス
Bun は Node.js 向けのパッケージマネージャとして使用でき node_modules の構築を行えます
YouTube の動画では、Remix のサンプルアプリケーションをそれぞれのパッケージマネージャで構築する場合のパフォーマンス比較が行われていました。
https://gyazo.com/0f97611e573b16a50b0aaf730b73626d
Node.js ベースで動作するもののうちで最も早い pnpm でも 6.5秒 必要なところが 0.36 秒で完了するようです。
別途手元のコードをもとにどのパッケージマネージャが最も早いかを計測したことがありますが同様の傾向でした。
一方で Node.js 組み込みの Corepack でサポートされているわけではないため、別途バージョン管理をする必要はありますが、それをおいても驚異的なパフォーマンスを発揮してくれます。もし手を入れず動いてくれるなら実行も含めて Bun に寄せてしまっても良いかもしれません。 💨 テストランナーとしても超高速
Bun には組み込みのテストランナーがあります。
このテストランナーもランタイムの高いパフォーマンスを活かして圧倒的に最速に動作します。
動画の中では、Zod に用意されているテストを Bun、Vitest、Jest をそれぞれの組み合わせて実行した場合の比較が行われていました。 https://gyazo.com/bb3f0312db3c7aa5e2cf4ffd0cf575fd
テストランナーの用意している API は記法に Jest や Vitest にある程度互換性があるようで、以降の際にも書き換えコストを抑えられそうです。 また Bun のテストランナーを使用せずとも、 Vitest や Jest を Bun 上で動作させることもできるので、ある程度実行速度の高速化は見込めるかもしれません。 🚚 各種インストール手順のサポート
ここまで紹介してきた Bun ですが、様々な用途ごとにセットアップをサポートする仕組みが公式に用意されています。
安定版がリリースされたことで Node.js に近い安心感を持って Bun を使用できるようになったのではないでしょうか。
参考までに以下に用意されている主要な利用方法に対応するインストール方法を列挙します。
コマンドラインでの利用
curl -fsSL https://bun.sh/install | bash
💬 公式Discord
近年の開発ツールのコミュニケーション手段として Discord が多く使われますが Bun にも用意されています。
📚 まとめ
初期リリースから Node.js との高い互換性を維持しつつ高いパフォーマンスをもつ JavaScript と TypeScript のランタイムとして開発が続けられてきた Bun ですが、ついに安定版 1.0 に到達しました。
個人的にはこれまでなんとなく「まだ開発中だし様子見かな」なんて思っていた時期もありましたが、多くのNode.jsアプリは手をかけず動作しそうで、それでいて超早い というところが改めてとても魅力的に感じました。
パッケージマネージャに用意されている npx 相当の動作もサポートされており、個人開発レベルではしばらく Bun で生活してみても良いかもなと考えていて 1.0 を実際にさわれるようになる時間が楽しみです!