Node.jsのWebアプリケーションフレームワーク
#Node.js
はじめに
Node.jsのWebアプリケーションフレームワークについてまとめます
フレームワーク
Express
Node.jsのフレームワークでは最も使用率や使用実績が高いです (npm trends (2024/07時点))
枯れていて情報量も多く、エコシステム的にも最も充実していると思われるため、特にこだわりがなければExpressは選択肢として良さそうに思います
後述するNest.jsであったり、Remixなどでも公式サポートが提供されています
Koa
Expressの開発チームによって開発されているシンプルなミドルウェアフレームワーク
async/await (Promise)の使用が想定して開発されています
とにかくシンプルで、好きな人は気に入るのではないかと思います
Fastify
高速なフレームワーク
プラグインシステムにより柔軟に拡張できる
ExpressやKoaと比較すると、全体的にBatteries Includedな作りになっており、AjvによるバリデーションやPinoによるロギングの仕組みなどがあらかじめ組み込まれている
また、こういった周辺ライブラリの採用についてもパフォーマンスが強く意識してされています (AjvやPinoといった高速なライブラリが採用されている)
Hono
BunやDeno, Cloudflare Workersなどでも動く高速なフレームワーク
ZodベースのバリデーションやタイプセーフなRPCの仕組み, クライアントコンポーネント (hono/jsx), SSGなどの様々な機能が提供されているのが特徴です (Batteries Included)
HonoXというメタフレームワークも開発されています
Nest.js
TypeScript向けのフレームワーク
デコレーターを使って宣言的にコントローラなどを記述できるという特徴がありますが、Nest.jsの最大のメリットはDIコンテナが組み込みで提供されている点だと思います (TypeScriptを使ってDIについて説明する)
ExpressとFastify向けのアダプターが提供されている
Wasp
Node.js/React/Prismaベースのフルスタックフレームワーク
Marble.js
Marble.js - functional reactive Node.js framework for building server-side applications, based on TypeScript and RxJS.
それぞれのフレームワークの比較について
使用率や使用実績で判断すると、Expressは最も無難な選択肢ではないかと思います
情報量なども多く学習においても困る場面は少ないと考えられ、選択肢としては悪くないと思っています
HonoはNode.js以外にもCloudflare WorkersやLambdaなどの様々な環境で動作することもあり、一度使い方などを把握しておけば、潰しが効きやすいというメリットもありそうです
複数のプロダクトやマイクロサービスなどを開発している場合は、このメリットが活かしやすいかもしれません
また、Cloudflare Workers向けのフレームワークとしては現状ではHonoが最も適していると思います
FastifyはPinoをベースとしたロギングの仕組みを提供しており、標準で提供しているロギングの仕組みという面ではHonoよりやや有利ではないかと思っています
ExpressやKoaはHonoやFastifyと比較してよりunopinionatedなので、そういったものが必要なケースでは使いやすいかもしれません
Nest.jsはフレームワークが公式でDIコンテナを提供してくれるという点が最大のメリットだと思います
DIコンテナを活用したい場合は、選択肢の一つとして有用ではないかと思っています
デコレーターを使って宣言的にコントローラーなどを記述ができるという点に関してはNest.js以外にも提供しているライブラリはありますが、個人的には、その特徴はそこまで重要ではないと認識しています
ただし、2024年時点ではまだv1がリリースされていないというのと、Decorator metadataというTypeScriptの実験的機能に依存している点はややネックではないかと思います
関連ページ
Node.jsのORMについて
DenoのWebアプリケーションフレームワークの比較