先日、X(旧:Twitter)で知ったHonoを早速試してみました。
まだ2年経っていないにも関わらず、GitHubのスターが12kを超えていたりとかなり良さそうでした。
ちなみに、Honoとは炎のことだそうです(開発者は日本人らしい)。
名前の由来を知りたい方は、是非ドキュメントのコンセプトのところを読んでみてください。
感想
書き方は、ほぼExpressと同じ様に感じる。
将来的にはNestJSから乗り換えたいと思った。
主な理由としては、
- TypeScriptだけでAPIのI/F情報を共有可能 (tRPCなどが不要)
- Swaggerにも対応可能
- ルーターの設計が良いためファイル分割しやすい
- 謳い文句通り、高速に動作する
- 様々なプラットフォーム向けのテンプレート生成機能が用意されている
- ドキュメントが読みやすく、主流のライブラリでの実装方法が記載されている
デメリットを探す方が難しいくらい良くできている...
難癖レベルでいうなら、DartやJavaに型情報を提供してくれると助かる!!(OpenAPIでやれ)
T3Stackでの開発に差し込んだりもできると思うので、是非流行るといいなぁと思った日曜日の午後でした。
書き方
ここに書くより、ドキュメントを見てもらった方が圧倒的にわかりやすいので割愛。
FastAPIもですが、最近のWebFrameworkはドキュメントが読みやすくて本当に助かる...
少しハマったところ
ドキュメントに注意として書かれているけれど、実際にハマるまでよくわからなかった部分。
ルートを定義する際、以下のように分けて書きたくなるところですが...
const app = new Hono();
app.route("/users", usersAPI);
app.route("/posts", postsAPI);
export type AppType = typeof app;
このように書くと、Client側の静的解析時にエラーが表示されます。
そのため、以下のように書く必要があります。
const app = new Hono()
.route("/users", usersAPI)
.route("/posts", postsAPI);
export type AppType = typeof app;
TypeScriptの仕様で考えてみれば、そりゃそうですよね。
型レベルのコードなども見ましたが、超絶複雑だったため、開いた後にそっと閉じました。
是非流行ってほしい