高速なオールインワンJavaScriptランタイム「Bun」はバージョン1.3を公開した。フルスタック開発機能の追加、データベースAPIの統合、ランタイム全体にわたる性能向上を盛り込んだ、これまでで最大規模のリリースとなった。
Bun 1.3では、設定不要のフロントエンド開発機能を導入し、組み込みのホットモジュールリプレースメントとReact Fast Refreshをサポートした。開発者はHTMLファイルをBunで直接実行でき、JavaScriptやCSS、Reactのトランスパイルとバンドルは自動的に処理される。 開発サーバーには、macOSのkqueueやLinuxのinotifyといったプラットフォーム固有のAPIを用いたファイルシステム監視機能を搭載した。追加の設定を行わなくても、ホットリロードが有効になるという。製品版のビルドでは、bunをbuild --productionオプションで実行すると、最適化された出力でアプリケーションをバンドルする。
Bun 1.3の目玉機能の一つが「Bun.SQL」である。外部依存関係を持たず、MySQL、MariaDB、PostgreSQL、SQLiteをサポートする統合APIだ。各データベースアダプターで共通の構文を提供しつつ、ネイティブ実装により高い性能を維持しているという。統一構文の例は次の通りである。
const postgres = new SQL("postgres://[localhost/mydb](<http://localhost/mydb>)"); const mysql = new SQL("mysql://[localhost/mydb](<http://localhost/mydb>)"); const sqlite = new SQL("sqlite://data.db"); const username = "test_user"; const findUser = await sql`SELECT name, role, username FROM users WHERE username = ${username}`; 今回のリリースでは、組み込みのRedisクライアントも導入した。人気パッケージのioredisと比べ、7.9倍を超える性能を実現したとしている。標準的なRedis操作はすべてサポートする。クラスタやストリーム、Luaスクリプトへの対応は今後のリリースで予定している。
コミュニティーの受け止めは賛否が分かれており、開発者からは期待と懸念の双方が示されている。Hacker Newsでの議論は56ポイントを獲得し、次のような前向きなコメントが寄せられた。
「Bunは非常に優れています。SQLやS3、そして今回新たにRedisも組み込まれており、追加のパッケージをインストールする必要はほとんどありません」との声があった。
一方、Lobstersのコメント欄では、パフォーマンスベンチマーク、特にコンパイルされたBunアプリケーションがnginxよりも高速にファイルを配信するという主張について疑問が呈された。
また、Redditの投稿者は、本番環境では依然として問題に直面していると共有した:
「開発用途では、Bun は完全に使える状態です。 本番環境では、今でも時々バグに遭遇しています。」
Bun 1.3 では、pnpm のカタログ機能に着想を得たモノレポ向けの依存関係カタログが追加され、パッケージ管理が強化されました。 ワークスペースでは、分離インストールがデフォルトとなり、パッケージが宣言されていない依存関係にアクセスできないようになっています。 また、新しいbun update --interactiveコマンドにより、開発者は依存関係を選択的に更新でき、bun whyでは依存関係の構造(依存チェーン)を確認できます。 セキュリティ面では、脆弱性検出のための Scanner API が導入され、Socket が公式のセキュリティスキャナー統合を提供しています。
旧バージョンからの移行に関して、Bun 1.3 にはいくつかの破壊的変更が含まれています。 中でも最も大きな変更点は、Bun.serve()の TypeScript 型定義が見直されたことで、特に WebSocket のデータ処理に関する部分が影響を受けています。 また、SQL クライアントは、タグ付きテンプレートリテラルではなく関数として呼び出した場合にエラーを投げるようになりました。 さらに、Bun は TypeScript 設定において、これまでの自動判定ではなく、デフォルトで"module": "Preserve"を使用するようになっています。 詳細な移行手順については、Bun 1.3 のリリースノートに記載されています。
性能改善は広範囲に及び、Next.jsやElysiaといったフレームワークでは、JavaScriptのメモリー使用量が10~30%削減された。AbortSignal.timeoutの実装は従来比で40倍高速化された。macOSでは、I/Oスレッドプールの最適化により、bun buildの性能が60%向上した。ベンチマークでは、Expressが9%高速化し、node:httpの改善によりFastifyは5.4%の性能向上を示した。
Bunは、Node.jsやDenoといった競合と比べ、必要とされる機能をランタイムに直接組み込む点で差別化を続けている。Node.jsではデータベースクライアントやバンドリング、テストに別途パッケージが必要となるのに対し、Bunはこれらの機能を標準で備えている。
Bunは、JavaScriptCoreを基盤とするオープンソースのJavaScriptランタイムで、Oven社が開発し、Jarred Sumner氏とそのチームが保守している。Node.jsの代替としてそのまま置き換え可能でありながら、大幅に高速な性能と、必要な機能を標準で備えた開発者体験を提供することを目指している。Bunは「bun upgrade」を実行して更新できるほか、公式サイトのbun.shに記載された手順に従って新規にインストールできる。