JavaScriptおよびTypeScriptアプリケーション用オールインワンツールキット「Bun 1.0」が公開された。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
JavaScriptおよびTypeScriptアプリケーション用オールインワンツールキットの正式版「Bun 1.0」が公開された。開発チームが2023年9月8日(米国時間)に公式ブログで発表した。
Bun 1.0は、単一の実行ファイルとして提供されており、単一ファイルからフルスタックアプリケーションまで、JavaScriptとTypeScriptの実行、ビルド、テスト、デバッグに使用できる。開発ワークフローをスピードアップしたり、リソースに制約がある環境でサーバレス関数のようなシンプルな本番コードを実行したりする目的での利用が想定されている。
Bunは、JavaScriptのツール群が遅く、複雑になってしまっているという認識から、JavaScriptの長所を全て維持しつつ、この問題を解消することを目指して開発された。
Bunの中核を担うBunランタイムは、サーバサイドJavaScript環境である「Node.js」の代替として設計された高速JavaScriptランタイムだ。プログラミング言語の「Zig」で作成されており、「V8」JavaScriptエンジンで動作するNode.jsとは異なり、WebKitのJavaScriptエンジンである「JavaScriptCore」で動作し、起動時間とメモリ使用量を大幅に削減する。
またBunは、パッケージマネジャー、テストランナー、バンドラも実装している。開発チームは、これらのビルトインツールは、既存のオプションよりもかなり高速で、既存のNode.jsプロジェクトでも、ほとんど変更を加えることなく使用できるとしている。
さらにBunでは、開発者が必要とする機能を満たす高度に最適化された標準ライブラリAPIが用意されている。開発チームは、「下位互換性維持のために存在するNode.js APIとは異なり、これらのBunネイティブAPIは、高速で使いやすいように設計されている」と述べている。
開発チームはBunランタイム、パッケージマネジャー、テストランナー、バンドラの特徴を次のように説明している。
ほとんどのNode.jsアプリケーションやnpmパッケージがBunで動作する。
BunはNode.jsより最大4倍高速に起動する。。この差は、TypeScriptファイル(Node.jsで実行する前にトランスパイルが必要)を実行する際に、より大きくなる。
Bunランタイムには、JavaScriptトランスパイラが組み込まれている。これにより、JavaScript、TypeScript、さらにはJSX/TSXファイルを、依存関係なしで実行できる。
Node.jsはESMのサポートに時間がかかったが、エコシステムではまだCommonJSも広く使われている。Bunは、CommonJSとESMのモジュールシステムを常にサポートしている。
Bunは、fetch、Request、Response、WebSocket、ReadableStreamなど、ブラウザで利用可能なWeb標準APIをビルトインでサポートしている。
Bunを--hot付きで実行すると、ファイルの変更時にアプリケーションをリロードするホットリロードを有効にできる。Bunは古いプロセスを終了させずにコードをリロードするので、HTTPやWebSocketの接続が切断されたり、状態が失われたりすることはない。
Bunは高度にカスタマイズできるように設計されている。
Bunのビルトインパッケージマネジャーは、開発ワークフローをスピードアップする。
例えば、npm、yarn、pnpmよりもインストールが格段に高速だ。グローバルモジュールキャッシュや、各OSで最速のシステムコールを使用するからだ。
スクリプトの実行に関しても、「npm run」「yarn run」「pnpm run」を「bun run」に置き換えると、コマンドを実行するたびに120〜250ミリ秒節約できる。この差は体感では大きい。
BunのテストランナーはJestと完全な互換性があり、スナップショットテスト、モッキング、コードカバレッジをサポートしている。TypeScriptやJSXのサポートなど、Bunランタイムの全ての利点も得られる。JestやVitestからの移行も簡単だ。
zodのテストスイートに対するベンチマークでは、BunはJestより13倍速く、Vitestより8倍速かった。
Bunは、JavaScriptとTypeScriptのバンドルツールであり、ブラウザやNode.js、他のプラットフォーム用のコードをバンドルするのに使用できる。
esbuildに大きなヒントを得ており、互換性のあるプラグインAPIを提供している。BunのプラグインAPIはユニバーサルであり、バンドラとランタイムの両方で動作する。
esbuildのベンチマークを使うと、Bunはesbuildより1.75倍速く、Parcel 2より150倍速く、Rollup + Terserより180倍速く、Webpackより220倍速い。
Bun 1.0は、macOSとLinux用のネイティブビルドが提供されている。Windows用のネイティブビルドはまだ実験的なものであり、JavaScriptランタイムのみがサポートされている。パッケージマネジャー、テストランナー、バンドラは、現時点では無効化されている。
従来は、BunをWindowsで使用するには、Windows Subsystem for Linux(WSL)をインストールする必要があった。Windows用のBunの実験的なネイティブビルドは、Bun 1.0で初めて提供された。
開発チームは、今後数週間でWindows対応を急ピッチで改善していると述べている。
Copyright © ITmedia, Inc. All Rights Reserved.