12
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NestJSをやめてHonoを採用した理由🔥

Posted at

そもそもNestJSを使っていたワケ

弊社では フロントエンドとバックエンドをTypeScriptで統一するというスタックを5年以上続けています。
その中でNestJSは

✅ TypeScriptサポート
✅ 公式ドキュメントが充実してて安心
✅ コーディングルールが明確でチーム開発がスムーズ

等の理由から採用しました。

そしてAPIに型を付けるために aspida を採用し、フロントエンドとバックエンド間での型の共通化を行っていました。

NestJS × aspidaの困りポイント

NestJSとaspidaの連携では、Swaggerを介した型生成に依存していました。
その過程で顕在化した課題は、「暗黙のルール遵守」 に神経を使う場面が多かったことです。

  • swagger用のデコレータの癖
    例えば配列を型定義する上で何パターンかのデコレータの付け方が存在します。
    しかしswaggerと正しく連携させるためには特定のパターンを必ず用いる必要があります。
  • 部分的に型が伝搬しない
    Controller層、Service層、DTOと1つのAPIを作成する中でも、同じ型定義を明示的に複数回書かないと型安全にならない事象がありました。それにより型定義を明示的に書き忘れた際に実際の値と型定義が異なる状況を引き起こしました。

これらは慣れれば解決するものの

⛔ 新人さんへの負担が大きい
⛔ 別プロジェクトをやってると作法を忘れがち
⛔ 気づかないバグの温床になる

と解決が望ましい状況でした。

HonoのRPCが全部解決してくれる

HonoではRPCが利用可能です。
https://hono.dev/docs/guides/rpc

RPCとはざっくり バックエンドのAPIをフロントから関数のように呼べる仕組み くらいに思っておけばOKです。
そして関数で呼べるだけではなく、型定義が自動で共有されるから

✨ バックエンドの実装がそのままフロントの型定義になる
✨ デコレータのメンテナンスが不要
✨ APIを変更したら即座に関連箇所でエラー検出

といったことが可能になります。

0130.gif

弊社ではもともとTurborepoを用いたモノレポ構成を取っていたので、非常にスムーズな導入が可能でした。

AI時代に勝つカギは型管理

CursorのAIアシスタントやRoo CodeのようなコーディングAIが発達する今、型の正確性はますます重要になっています。なぜなら型エラーが発生した場合に自律的にエラーを修正してくれるからです。
将来的にAIがコーディングの90%以上を担うのは間違いないと感じており、その精度や自律性の向上には型を適切に扱うことが非常に重要になるでしょうね。

もっとHonoは気軽に使って良い

「Hono=Cloudflare Workers」のイメージが強いかもしれませんが、実はどこでも動かせます。私たちはPrismaとの兼ね合いでCloudflare Workersは様子見中です。代わりに扱いやすく低コストから動かせるCloudRunへデプロイしています。

AI時代に取り残されない第一歩として、まずはHonoでRPCを試してみませんか?
きっと開発がもっとラクになるはずですよ👍

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?