くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

爆速とウワサのBunをちょっと調べてみた

最近、Bunについてよく目にするので、ちょっと調べてみたときの備忘録(*´ω`*)

bun.sh

Bun.shとは?

Develop, test, run, and bundle JavaScript & TypeScript projects—all with Bun.
Bun is an all-in-one JavaScript runtime & toolkit designed for speed, complete with a bundler, test runner, and Node.js-compatible package manager.

公式サイトだとこんな感じに書いてる。

  • Node.js互換の新しいJavaScriptのランタイム
    • Node.js / Denoの仲間
  • いろいろできるAll in One
    • Node.js+npm+jest+esbuildみたいな感じ
  • めちゃめちゃ爆速
    • Node.jsの数倍のパフォーマンス

ドキュメントのトップページを見てみると、こんな感じに書かれている。

At its core is the_Bun runtime_, a fast JavaScript runtime designed as a drop-in replacement for Node.js. It's written in Zig and powered by JavaScriptCore under the hood, dramatically reducing startup times and memory usage.

What is Bun? | Bun Docs

Node.jsを置き換えを目指しているっぽい。
コマンドもnpm -> bunにすればそのまま使える様になってるよう。

$ bun run start                 # run the `start` script
$ bun install <pkg>             # install a package
$ bun build ./index.tsx         # bundle a project for browsers
$ bun test                      # run tests
$ bunx cowsay "Hello, world!"   # execute a package

また、TypeScriptとかももそのまま実行でき、
.envなどもサポート。Workspace機能もあるのでもモノレポもOK。

Roadmap

Roadmapのページをみてみると、linterやformatterについては書かれていないが、

issueの方を見てみると、提案されているのでいずれはいるかもしれない。

ただ、fnmのようなNode.jsのversion managerは提案もなさそう。。?

なぜはやいのか?

なんでこんな速度の差があるのかを調べてみた。

主には、この4つっぽい。

  • Zigで実装+マルチスレッドで処理
  • エンジンがV8ではなくJavaScriptCore
  • lockfileがバイナリ
  • キャッシュをうまく活用

このあたりはかなりいろいろ盛り込まれているよう。

「Rustを試したけど借用チェッカーが難しい」など試行錯誤があり、Zigを採用いる感じっぽい。

Node.jsの互換性について

Node.jsのAPIを再実装している形のため、
APIごとに対応状況が異なっている感じ。

対応されているのも多いが、利用するパッケージによっては、
未対応のAPIを使っている場合もあるので、注意が必要。

ベンチマークについて

公式サイトのトップページにもベンチマークがあるが、
Native APIを使ったシンプルな例なので、実際のところが気になる。

いろんな人が試しているようで、多くの場合は高速なよう。

互換性と関連するかもしれないけど、
FW(フレームワーク)やパッケージによっては、
まだBunのフルパワーを活かせないかもしれない。

ほかにもいろんなフレームワーク+Runtimeで比較したリポジトリもあるので、
使っているフレームワークだとどうなのか見てみるといいかも。

なかでも、HonoはBunサポートを謳っているらしいので、
相性は一番いいかもしれない。

HonoはBunサポートを「謳った」初めてのWebフレームワークです。
引用: BunとHono


以上!! 手は動かさず、ざっとさらっただけだけど、
完全に理解したレベルにはなれた気がする(*´ω`*)

爆速は魅力なので、すこしずつ試していきたい。。(*´ω`*)

参考記事