ここ最近、多くのプロジェクトでTypeScriptが使われていることもあり、JavaScriptとTypeScriptのパッケージ管理ツールやランタイム(実行)環境の進化が目覚ましい勢いです。
ランタイム環境であればNode.jsが代表的ですが、Denoというセキュアな環境も使われるようになっています。
さらに今回紹介するBunです。
かわいい肉まんロゴが特徴的な超高速な実行環境です。実際に触って確かめてみましょう。
Bunは、2024年4月現在バージョン1.1がリリースされたばかりのJavaScript/TypeScript実行環境です。
ただの実行環境というわけでなく、パッケージマネージャーやバンドラー、さらにはテストランナーまで含まれたJS/TSのオールインワン開発環境と言っていいでしょう。
fs
やpath
などAPI群の代替も実装されている--watch
がある(嬉しい)BunはNode.jsの代替として、「パフォーマンス向上」「シンプルさ」を目指したランタイムです。
JavaScript/TypeScript開発に必要な工程を管理するものがほとんど入っているため、Bunを入れておけば事足りるプロジェクトも多くなることでしょう。
まずはさっくりインストールしてみましょう。
macOS、Linuxで以下のコマンドを叩きます。
確認してみます。
Windowsでは以下のコマンドです。(Windows10、バージョン1809以上)
ついでにアップグレードとアンインストール方法も紹介します。
アップグレード方法
アンインストール方法(macOS / Linux)
アンインストール方法(Windows)
実際にBunを使っていきます。
まずはBunの初期化を行います。
このコマンドを実行すると以下のファイルが作成されます。
簡単にHTTPサーバーを立ててみます。
これでhttp://localhost:3000/helloを開くと"Hello World"と表示され、その他のルーティングでは"Not Found"と表示されます。
Node.jsと比べてみるためにNode.js v20.10.0でシンプルなHTTPサーバーを立ててcurlしてみましたが、最小限で実行するとNode.jsのほうが高速な結果となりました。
Node.jsも19.7.0からC++製のAdaの採用によって高速化されているため、スピード対決でまさかのNode.jsの勝利。
Bunの公式ドキュメントではNode.js v16との比較が掲載されていたため、少しズルいなぁという感想です。
npmやyarnなどと同じようにbun
もadd
でパッケージインストールが可能です。
こちらもnpmで比較してみます。
97msと2.22sでBunのほうが速い結果が出ました。余談ですが、bun install
だと3.9sだったため、Bunでパッケージ管理する場合はbun add
を使いましょう。
Bunに内包されているバンドラーを使ってビルドしてみます。
これを実行するとout/index.js
が以下のように生成されます。
この例では少々わかりづらいですが、HTTPリクエストを減らし、TS等のモダンなJS代替をプレーンJSへ書き換えてくれます。
minifyやwatchオプションもあるため、一般的なビルドオプションはカバーしているものの、まだベータ版であるとのことです。
機能的にはかなり網羅されており、これからもまだまだ伸びそうな印象ですが、速度の部分で比較対象がNode.js v16であったことが残念でした。
ただ、v1.1であることを考慮するとかなり高速な部類であることは間違いありません。さらにJS/TS環境のオールインワンなランタイムとして環境を提供してくれるのは非常にありがたいです。
まだプロダクションレベルの案件には使いづらい部分もありますが、これからの成長に注目していきたいツールであると言えます。