🥟

BunとHono

2023/09/11に公開

JavaScriptのランタイム、Bunのv1.0がリリースされましたね 🎉

https://bun.sh/blog/bun-v1.0

さて、僕がメインとなって開発しているHonoはBunと関係があるので、その話をします。

hono Express or KOA

Bunのリリース時に使われた動画がかっこいいです。まるでApple。

https://www.youtube.com/watch?v=BsnCpESUEqM&t=359s

この中で作者のJarredから肉まんのパスを受けるのがBunのDeveloper AdvocateでZodの作者のColinです。彼は「Web APIを作るためのフレームワーク」として以下のように言いました。

SC

hono Express or KOA

おおー。Express、Koaより前に来てていい感じですね。上記で貼ったリリースノートには順番が変わってますが、しっかりと名前が出てます。

Bun is tested against test suites of the most popular Node.js packages on npm. Server frameworks like Express, Koa, and Hono just work. As do applications built using the most popular full-stack frameworks.

嬉しいですね。

Bunサポートを謳った初めてのフレームワーク

HonoはBunサポートを「謳った」初めてのWebフレームワークです。「謳った」というのは、Cloudflare Workersなどで動くWeb Standard APIを使ったItty-Routerなどは、当然なにもしなくても動くで、その中でも一番最初に「サポートしてるよ」と言ったという意味です。

以下のIssueはBunがプロジェクトをプライベートから公開にしたばかりの去年の7月に立てられたものです。

https://github.com/honojs/hono/issues/344

Is there any plan for Bunjs support

に対して、僕が

Yes, or most are already done!

と言っています。これはBunはHonoがサポートしていたCloudflare Workersなどで使われているWeb Standard APIを使っていたからです。エントリーポイントもCloudflare Workersと全く同じなので、おなじみのコードがそのまま動きます。

import { Hono } from 'hono'

const app = new Hono()
app.get('/', (c) => c.text('Hello Bun!'))

export default app

これには布石があって、以前の5月に、Honoについて、当時CloudflareでWranglerをメインで開発していたSunilがHonoのことをツイッターで取り上げてくれて、それに対して「同じAPIだからBunでも動くよね」と反応していたのがBunの作者のJarredでした。

https://twitter.com/jarredsumner/status/1527241324960763904

SunilのこのツイートはHonoが周知されるひとつのきっかけになったものです。Sunilはもうやめてしまいましたが、僕がその後、Cloudflareに入るという。感慨深いです。

Expressの代わりに

みんなExpress大好きなんですね。Bunが出た直後、BunのDiscordでは「BunでExpressは動かないのか?」という発言がいっぱいありました。

Discord

Discord

今でこそExpressは動きますが、当時はNode.jsのAPIも一部しかサポートしてなかったので、動きません。そこでHonoに注目が集まります。「Expressは動かないけど、Honoがあるよ」という返しができたのです。

Bun効果

こうしたBun効果は凄まじいです。今回のv1.0リリースも効果があって、下のようなスターヒストリーになっています。矢印Bun効果です。

Star

Express is the new JQuery

「Expressの代わりに」というのがわりと本気になってきています。

「President of Whiteboards」でAstroのBenは以下のようなツイートをしました。

https://twitter.com/BHolmesDev/status/1679907011918430221?s=20

この考えに至ったのは、Honoがきっかけだったとのこと。

https://twitter.com/BHolmesDev/status/1679927706912268288?s=20

するとredditに「Anything wrong with Express? What's so good about hono.js?」というスレッドが立てられます。

https://www.reddit.com/r/node/comments/1502t43/anything_wrong_with_express_whats_so_good_about/

怖いですね。

しかし、Benは伝家の宝刀ホワイトボードでHonoやAstroを含むWeb StandardのフレームワークについてExpressとの比較をしていきます。

https://twitter.com/BHolmesDev/status/1680947540433203201?s=20

いい話です。

実際問題、Expressの代わりになるかというとHonoはNode.jsアダプターもstableに動くので、なるのですが、エッジやBunのように新興のランタイムを前提としているので、そもそもExpressとはメンタルモデルが違います。Expressで動いていたものが動かないことがあるし、移植するにしても、例えばファイルシステムを扱うようなものはNode.js依存になるので採用しないでしょう。ただ、「新しいスタンダードのスタンダードを目指す」という意味ではExpressのようになったらいいなとも思います。

Bun v1.0

話を戻してBunについて。

作者のJarredっていうのはすごい人で、ほとんど一人で作ってます。他のプロジェクトのIsssueなりツイッター/XなりにBunに関わることがあるとどこでも現れるし、すごいエネルギー。

SS

Bunはとにかく速くて、既存のフレームワークがまだ動かなかったりするらしいのですが、例えば速いからbun installだけ使うという使い方があったりと少しずつ導入されていくのではないかと思います。「Bun Deploy」みたいなのがでたらもっと面白くなりますね。

おめでとう

最後に。Bunチームの皆様、v1.0リリースおめでとうございます!

今後のHono

Honoは、Bunに限らず、またCloudflareに限らず「Web Standardのスタンダード」を目指します!

Discussion