Bunチームは最近Bun v1.2をリリースし、Bunの価値提案の重要な要素であるNode.jsとの互換性に関して大きな進歩を遂げた。Bun 1.2はまた、組み込みのS3オブジェクトストレージAPIと、既存の組み込みSQLiteクライアントに加えて組み込みのPostgresクライアントを備えている。
Bunは、Node.jsのドロップイン置き換えとして設計されており、Node.jsとの互換性をコアターゲット機能としている。Bun 1.2では、チームはコードに変更を加えるたびにNode.jsのテスト・スイートを実行して互換性を測定している。path、os、string_decoder、puny_code、query_string、url、events、stream、fsなどのコアNodeモジュールは、Node.jsテストスイートの90%をパスするようになった。
しかし、このリリースでは、Node.jsのテスト・スイートはNode.jsの特異性に特化しているため、そのままでは実行できないことが報告されている。例えば、テストスイートはエラーメッセージの正確なNode.js文字列をチェックするが、これはリリースごとに変わる可能性がある。また、いくつかのテストはNode.js内部の詳細に依存していた。その結果、BunチームはNodeテストスイートをBunに移植し、例えばエラー文字列をエラーコードに置き換えることで、Bunがエラーメッセージに役立つ詳細を自由に追加できるようにした。
Bun v1.2では、HTTP/2サーバーを作成するためのnode:http2モジュールのサポートも追加された。Bun v1.2ではさらに、node:dgram(UDPソケット管理)、node:cluster(新しいBunインスタンスの生成)、node:zlibのサポートも追加された。
重要なのは、Bun 1.2にS3の組み込みサポートが追加されたことだ。Bunの開発者は、BlobのようなWeb標準と互換性のあるAPIを使って、S3バケットからファイルを読み書きできるようになった。リリースノートにはこう説明されている:
ストレージをコンピュートから切り離すことで、ディスクスペースの不足、ビジーI/Oによる高いp95レスポンスタイム、共有ファイルストレージのセキュリティ問題など、信頼性の問題全体を防ぐことができます。
S3はクラウドにおけるオブジェクトストレージのデファクトスタンダードです。S3 APIは、Amazon S3、Google Cloud Storage、Cloudflare R2など、さまざまなクラウドサービスによって実装されています。
Bun S3のネイティブクライアントは、@aws-sdk/client-s3のようなNode.jsパッケージと比較して、ファイルのダウンロード速度が5倍向上している。
Bun 1.2はさらにSQLデータベースのサポートを拡張し、Postgresをサポートする組み込みSQLクライアントBun.sqlを提供する。この新しいクライアントは、既存の組み込みSQ_Lite_クライアントを補完するものである。
SQLiteは様々なユースケースに適合する。Wesley Aptekar-Cassels氏が自身のブログで論じている:
全体として、SQLiteを使うことは、潜在的に多数のユーザーを持つことを期待するウェブアプリケーションを含む多くのプロジェクトにとって、良いトレードオフだと思います。毎秒数万回の小さな書き込み、数千回の大きな書き込み、長時間の書き込みトランザクションを必要としない限り、SQLiteがあなたのユースケースをサポートする可能性は高いです。複雑さと運用の負担が大幅に軽減され、テストが容易にします。主な欠点は、そもそもほとんど誰も必要としないレベルの可用性と稼働時間を得るのがやや難しくなることです。
Postgresのサポートは、Bunの開発者が、SQLiteが適合しなくなった場合の重いユースケースのためのビルトインオプションも持っていることを意味する。クライアントはネイティブ・コードで書かれており、自動プリペアドステートメント、クエリパイプライニング、コネクションプーリング、構造キャッシュなどの最適化が施されている。リリースノートでは、Node.jsで最も一般的なPostgresクライアントを使用した場合と比較して、行の読み込み速度が最大50%向上すると主張している。
S3やPostgresのような一般的なデータストアのビルトインサポートを導入することで、Bunは、外部依存の少ないスケーラブルでクラウドネイティブなソリューションに対するプロダクション・アプリケーションの要求にさらに応えようとしている。
Bun v1.2は、多くの追加機能や重要な機能を備えた大規模なリリースである。開発者はリリースノートの全文を確認されたい。
BunはZigで書かれており、JavaScriptエンジンにWebKitのJavaScriptCoreを使用している。Bun 1.0は2023年9月にリリースされた。