JavaScript/TypeScriptアプリ用オールインワンツールキット「Bun 1.0」が公開高速JavaScriptランタイム、パッケージマネジャーなどを提供

JavaScriptおよびTypeScriptアプリケーション用オールインワンツールキット「Bun 1.0」が公開された。

» 2023年09月15日 08時00分 公開
[@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

 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ランタイム、パッケージマネジャー、テストランナー、バンドラの特徴を次のように説明している。

Bunランタイム

Node.jsとの互換性

 ほとんどのNode.jsアプリケーションやnpmパッケージがBunで動作する。

スピード

 BunはNode.jsより最大4倍高速に起動する。。この差は、TypeScriptファイル(Node.jsで実行する前にトランスパイルが必要)を実行する際に、より大きくなる。

Bunは、Node.jsとesbuildの組み合わせと比べて、「hello world」を表示するTypeScriptファイルを5倍速く実行する(提供:Bun開発チーム)

TypeScriptとJSXのサポート

 Bunランタイムには、JavaScriptトランスパイラが組み込まれている。これにより、JavaScript、TypeScript、さらにはJSX/TSXファイルを、依存関係なしで実行できる。

ESMとCommonJSの互換性

 Node.jsはESMのサポートに時間がかかったが、エコシステムではまだCommonJSも広く使われている。Bunは、CommonJSとESMのモジュールシステムを常にサポートしている。

Web API

 Bunは、fetch、Request、Response、WebSocket、ReadableStreamなど、ブラウザで利用可能なWeb標準APIをビルトインでサポートしている。

ホットリロード

 Bunを--hot付きで実行すると、ファイルの変更時にアプリケーションをリロードするホットリロードを有効にできる。Bunは古いプロセスを終了させずにコードをリロードするので、HTTPやWebSocketの接続が切断されたり、状態が失われたりすることはない。

プラグイン

 Bunは高度にカスタマイズできるように設計されている。

パッケージマネジャー

 Bunのビルトインパッケージマネジャーは、開発ワークフローをスピードアップする。

 例えば、npm、yarn、pnpmよりもインストールが格段に高速だ。グローバルモジュールキャッシュや、各OSで最速のシステムコールを使用するからだ。

スターターRemixプロジェクトの依存関係をキャッシュからインストール(提供:Bun開発チーム)

 スクリプトの実行に関しても、「npm run」「yarn run」「pnpm run」を「bun run」に置き換えると、コマンドを実行するたびに120〜250ミリ秒節約できる。この差は体感では大きい。

スクリプトの実行速度の違い(提供:開発チーム)

テストランナー

 BunのテストランナーはJestと完全な互換性があり、スナップショットテスト、モッキング、コードカバレッジをサポートしている。TypeScriptやJSXのサポートなど、Bunランタイムの全ての利点も得られる。JestやVitestからの移行も簡単だ。

 zodのテストスイートに対するベンチマークでは、BunはJestより13倍速く、Vitestより8倍速かった。

Zodテストスイートの実行(提供:Bun開発チーム)

バンドラ

 Bunは、JavaScriptとTypeScriptのバンドルツールであり、ブラウザやNode.js、他のプラットフォーム用のコードをバンドルするのに使用できる。

 esbuildに大きなヒントを得ており、互換性のあるプラグインAPIを提供している。BunのプラグインAPIはユニバーサルであり、バンドラとランタイムの両方で動作する。

 esbuildのベンチマークを使うと、Bunはesbuildより1.75倍速く、Parcel 2より150倍速く、Rollup + Terserより180倍速く、Webpackより220倍速い。

three.jsの10コピーを、ソースマップと軽量化を用いて一からバンドル(提供:開発チーム)

WindowsネイティブビルドではJavaScriptラインタイムのみ利用可能

 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.

スポンサーからのお知らせPR

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。