DenoのWebアプリケーションフレームワークの比較
#Deno
はじめに
DenoにおけるWebアプリケーションフレームワークについてまとめています
Denoのnpmパッケージサポートにより、Node.js製のフレームワークもDenoで動かせる場合があります (Node.jsのWebアプリケーションフレームワーク)
フレームワーク
deno_std/http
@std/http/routeというルーティング用の軽量モジュールが提供されています
--serveを指定してdeno initを実行すると、このモジュールとdeno serveをベースにしたプロジェクトのテンプレートを生成してくれます
追記) v1.0.6で@std/http/unstable-routeにリネームされました (release-2024.09.12)
安定したら、再び@std/http/routeにリネームされると思います
また、Cookieやコンテントネゴシエーション, ETagなどに関する様々なユーティリティも提供してくれます
一時期、ミドルウェアAPIを提供することも検討されていました (feat(http): middleware #3785)
優先度は低いようですが、今後、再び検討される可能性もあるかもしれないです
oak
Node.jsのKoaに大きな影響を受けた非常にシンプルなフレームワークです
Deno Deployをサポートしています
Node.jsでも動作します (@oakserver/oak)
BunやCloudflare Workersのサポートも追加されました (v14.1.0)
Hono
様々なプラットフォームをサポートする高速なWebフレームワーク
Cloudflare Workersに加えて、Compute@EdgeやDeno (v1.6.0〜)、Bun、 Node.jsなどもサポート
Oakなどと同様のマイクロフレームワークとしての機能に加えて、ZodベースのバリデーションやタイプセーフなRPCの仕組み, クライアントコンポーネント (hono/jsx), SSGなどの様々な機能が提供されているのが特徴です
思想としては、Node.jsのフレームワークで例えるとExpressやKoaというよりは、Fastifyとかに近いのかなと推測しています
Honoxというメタフレームワークも提供されています
Ultraが採用しているので、そちらを使う場合は、Honoが利用できます
Elysia
Bunでの使用に最適化されたWebフレームワーク
WinterCGへの準拠が意識されていて、Denoでも利用が可能なようです
alosaur
デコレーターを使用してルーティングの定義などを行う
Stage 3 DecoratorsベースのDIコンテナが組み込まれています
Deno Deployで動かすための軽量版も提供されています
Danet
Nest.jsに影響を受けたフルスタックフレームワークで、公式で様々なモジュールが提供されています
MongoDB/Deno KVベースのデータベースモジュール ()
Deno Queuesベースのメッセージングモジュール
Deno Cronベースのスケジューリングモジュール
WebSocketのサポート
Nest.jsライクなモジュールシステムやDIコンテナなどを提供します
Freshとの統合もサポート
内部的にはOakが採用されています
Opine
Expressのポート
DenoのNode.js互換モードが成熟してExpressが安定して動作するようになったら、メンテナンスモードに移行する予定のようです
Nitro
Nuxt 3などの内部で採用されているフレームワーク
プリセットの仕組みにより、様々なランタイムで動作させることができる
v2.5.0以降、Denoプリセットが実装されている
Nitroに限らず、UnJSのプロジェクト全般でDenoのサポートを進めていくことも検討されているようです ()
メタフレームワーク
Fresh
Deno Deployで動作させることを想定したフレームワーク
PreactコンポーネントのSSRをサポート
カスタムハンドラを実装することで、APIエンドポイントなどを作成できます。
Aleph.js
Next.jsに影響を受けたフレームワーク
こちらもFreshと同様にAPIエンドポイントを作成することもできます。
ベンチマーク
関連ページ
Node.jsのWebアプリケーションフレームワーク
Denoのフロントエンドフレームワークの比較