Koriを作って、Hono Confに参加して、Koriのパフォーマンスを見て、へーってなった

2025-11-09 追記

この記事の後半で触れているパフォーマンスチェックの結果に違和感があったので、もういちどチェックしました。2025-10-25の本記事よりも、2025-11-09の下記の記事の方が正しい結果になったと考えていますので、パフォーマンスチェックについては下記の記事の方を参考にしてください。

追記ここまで


Kori(氷)というTSのウェブアプリケーションフレームワークを趣味で作っている話を以前に書いた。

どっかでいったんブログに書いて休憩しようと思ったので、書くことにした。

というつもりだったけど、公表してしまうと「ちゃんとしなきゃ」という気持ちになってしまって、結局そこからの方がもっと真面目に開発をしてしまっている。

Songmuさんに声をかけてもらってお話できたりもしたので、開発して良かったなって気持ち。

ゆーすけさんにも拾ってもらって、うぉーってなったりしてた。

実装してるときは、わりといい感じだなーって思ってた部分も、テストを書いたりTSDocを書いたり、利用側のコードを書いてみたりしていると、これではダメだーってなったりして、根本的な設計から見直すことにして終わりが見えないなーってなりながら楽しんでた。

ブログを見てくれたKanonさんからStandard Schemaってものを教えてもらって、なるほどなーって対応を入れたりしてみた。発信すると自分が知らないことを教えてもらったりして広がっていくよね。ありがたい。

Hono Conf

そんなときに会社で「Hono Confでスポンサーセッションをやらせてもらえることになりました!」って話があって、Honoまわりで何か話せたらいいなーって思って「会社は全然関係ないですけどKoriの話をしてもいいですか?内部でHonoを使ってるので!」って言ったら、941さんから「いいですね!」って言ってもらったので喋ることにした。

Hono Conf参加者のみなさんにとって無駄な時間にならないような内容にしなきゃというのと、会社の名前で発表するのと、そういうことを考えると、さすがにある程度動く状態にもっていかなきゃなーってことで、そこからもがんばって、カンファレンスの1週間前くらいになんとかなってホッとした。

当日はKoriの開発を通して見たHonoの好きなところのお話をして、みなさんにも楽しんでもらえたみたいで良かった。ライブコーディングでCursorが先に答えを全部書いちゃうのは自分でも笑った。

Hono Confは熱気に溢れてていい場だったなぁ。キーノートスピーカーが高校生コミッターなのもすごい。TSのコミュニティは若いかたが多くて、そういうエネルギーにあふれてるのもいいなぁと思いながら過ごしてた。

Koriのパフォーマンス

カンファレンスが終わってホッとして、Koriの機能についてはいったん最低限の部分はできたから、このあたりでパフォーマンスをちょっと見てみたいなって思って、考えてみることにした。

Koriはその作り的に、Honoのルーターに色々かぶせているので、Honoよりパフォーマンスは出ないと思っているのだけど、あまり低いのも良くないよなと思って、10%のオーバーヘッドぐらいにおさまるといいなって気持ちで、ちょっとベンチマークを見てみた。

Hono Confで見かけたこのベンチマークでKoriの速さを見てみることにした。

GitHub - SaltyAom/bun-http-framework-benchmark: Compare throughput benchmark from various Bun HTTP framework

ら、Pingはまぁいいかなってくらいだったんだけど、クエリパラメータを扱うととても遅いので、あれー?って思ってHonoを見てみたら、URLSearchParamsを使わずにパースしてて「なるほどなぁ」ってなって改善した。あと、new ResponseをするときにHeadersじゃなくて文字列の配列を渡す方が速いなって気づいて、そういう対応も入れたりした。まぁ見られるくらいのパフォーマンスになってよかった。

ベンチマークの結果を見ながら、Hiって返すだけのエンドポイントのスピードも重要だけど、それよりリクエストのバリデーションを入れたときのベンチマークの方が僕は興味があるなぁって思ったので、↑のリポジトリをフォークして、ごにょごにょして、「Honoより遅いけど、遅すぎないよ」みたいなことを確認できたらいいなという気持ちで、作ってみた。

GitHub - bufferings/bun-http-framework-benchmark: Compare throughput benchmark from various Bun HTTP framework

ベンチマークはGitHub Actionsで実行して、その結果を自動的にREADMEに貼るようにしてみた。こういう感じになっている。結果を眺めてみるとわりと面白い。

まず、GitHub Actionsで実行するとDenoの方がBunより速いのが、へーって感じだった。僕のMac上でベンチマークを実行するとBunの方が速い。CPUとかメモリに余裕がある方がBunは速いのかな?よく分かってない。

んで、なんかKoriがHonoにくらいついている感じがあって、へーってなった。もっと遅いはずなんだけどな・・・と思いつつ。KoriがJITの恩恵を受けやすかったりするんだろうか?よく分かってない。

Elysiaはさすがに速いなぁって感じなんだけど、↓Validationの方を見てみるとHonoの方が速いのも面白い。

Koriはバリデーションライブラリによってそんなに変わらないけど、HonoはValibotがすごく速い。HonoはValibotによるバリデーションと相性がいいのかな?

という感じで、Koriが思ってたよりいい動きをしていることに驚きつつ、10%以内のオーバーヘッドという目標は達成できていたりできていなかったりだけど、わりと満足した。

ベンチマークの取り方を間違えていて実は全然違った、とかじゃないといいなと思いつつ。

そんな感じ。Hono Confを優先して、後回しにしてたやらなきゃいけないことがあるので、こんどこそしばらくKoriの開発は休憩しようと思っている。