比較
この表は、@lazarv/react-serverを他の人気のあるReactフレームワークおよびルーティングソリューションと比較しています。フルスタック機能、アーキテクチャ、ルーティング、型安全性、検索パラメータ、スクロール復元、開発者体験を網羅しています。
この比較は、ドキュメントに記載されている機能セットを要約したものです。カスタムのユーザーランドソリューションではなく、ファーストクラスの組み込みサポートに焦点を当てています。一部の行はコアアーキテクチャを、その他の行は利便性やルーターのエルゴノミクスを説明しているため、この表は単一のスコアではなく、トレードオフのマップとしてお読みください。
この比較は
@lazarv/react-serverチームによって管理されています。不正確な点を見つけた場合は、issueを開いてください — 公平で正確な内容を目指しています。
凡例:
- ✅ — ドキュメント化され、フレームワークの意図されたモデルの一部であるファーストクラスの組み込みサポート
- 🟡 — 部分的なサポート、重要な制限事項、またはユースケースの限られたサブセットでのみ存在するサポート
- 🔶 — ユーザーランドの構成、コミュニティプラグイン、または手動セットアップで可能だが、ファーストクラスの組み込み機能ではない
- 🛑 — 意味のある組み込みサポートなし
| @lazarv/react-server | Next.js | TanStack Start | React Router | Waku | |
|---|---|---|---|---|---|
| React Server Components | ✅ | ✅ | 🟡 | 🟡 | ✅ |
| サーバー関数(アクション) | ✅ | ✅ | ✅ | 🟡 | ✅ |
| サーバー関数防御レイヤー | ✅ 暗号化ref + hardened decoder | 🟡 ID/origin/body上限 | 🟡 CSRF + validator | 🔶 route actionモデル | 🔶 auth/userland |
| SSR | ✅ | ✅ | ✅ | ✅ | ✅ |
| ストリーミングSSR | ✅ | ✅ | ✅ | ✅ | ✅ |
| APIルート | ✅ | ✅ | ✅ | ✅ | ✅ |
| API / ルートミドルウェア | ✅ | ✅ | ✅ | ✅ | 🟡 |
| サーバー関数ミドルウェア | 🔶 not first-class | 🛑 | ✅ client/server chain | 🔶 not first-class | 🛑 |
| 静的サイト生成 | ✅ | ✅ | 🟡 | 🟡 | ✅ |
| 部分的プリレンダリング(PPR) | ✅ | ✅ | 🛑 | 🛑 | 🛑 |
| レスポンスキャッシュ(TTL) | ✅ | ✅ | 🛑 | 🛑 | 🛑 |
| リダイレクト(サーバー) | ✅ | ✅ | ✅ | ✅ | 🟡 |
| リライト(サーバー) | ✅ | ✅ | 🛑 | 🛑 | 🛑 |
| リロード / 無効化 | ✅ | ✅ | ✅ | ✅ | 🛑 |
| @lazarv/react-server | Next.js | TanStack Start | React Router | Waku | |
|---|---|---|---|---|---|
| オープンランタイム(ベンダーロックインなし) | ✅ | 🟡 Vercel向けに最適化 | ✅ | ✅ | ✅ |
| Viteベース | ✅ | 🛑 | ✅ | ✅ | ✅ |
| 本番HTTPレイヤー | ✅ バックプレッシャー + セキュリティ | 🟡 プラットフォーム管理 | 🔶 ホスト/アダプター | 🔶 ホスト/アダプター | 🔶 ホスト/アダプター |
| オブザーバビリティ | ✅ OTelトレース + メトリクス | ✅ OTelスパン | 🟡 手動/実験的 | 🟡 計測API | 🔶 ユーザーランド |
| Hydration Islands | ✅ | 🛑 | 🟡 遅延Reactツリーのみ | 🛑 | 🛑 |
| 複数のデプロイターゲット | ✅ | 🟡 | ✅ | ✅ | ✅ |
| マイクロフロントエンド / リモートコンポーネント | ✅ | 🔶 | 🛑 | 🛑 | 🛑 |
| MCPサーバー統合 | ✅ | 🛑 | 🛑 | 🛑 | 🛑 |
| ワーカー / マルチスレッドレンダリング | ✅ | 🛑 | 🛑 | 🛑 | 🛑 |
| クラスターモード | ✅ | 🛑 | 🛑 | 🛑 | 🛑 |
| アダプターベースのデプロイ | ✅ | 🟡 | ✅ | ✅ | ✅ |
| @lazarv/react-server | Next.js | TanStack Router | React Router | Waku | |
|---|---|---|---|---|---|
| ネスト / レイアウトルート | ✅ | ✅ | ✅ | ✅ | ✅ |
| コードベースのルート | ✅ | 🛑 | ✅ | ✅ | 🛑 |
| ファイルベースのルート | ✅ | ✅ | ✅ | ✅ | ✅ |
| 仮想 / プログラムルート | ✅ | 🛑 | ✅ | ✅ | 🛑 |
| ランク付きルートマッチング | ✅ | ✅ | ✅ | ✅ | 🛑 |
| Suspenseルートトランジション | ✅ | ✅ | ✅ | ✅ | 🟡 |
| Suspenseルート要素 | ✅ | ✅ | ✅ | ✅ | 🟡 |
| エラーバウンダリ要素 | ✅ | ✅ | ✅ | ✅ | ✅ |
| ローディング / ペンディング要素 | ✅ | ✅ | ✅ | ✅ | 🟡 |
| クライアント専用ルート | ✅ | 🛑 | ✅ | ✅ | 🛑 |
| パラレルルート / アウトレット | ✅ | ✅ | 🛑 | 🛑 | 🟡 |
| ルートプリフェッチ | ✅ | ✅ | ✅ | ✅ | 🟡 |
| 自動プリフェッチ | ✅ | ✅ | ✅ | ✅ | 🛑 |
| アクティブリンクのカスタマイズ | ✅ | ✅ | ✅ | ✅ | 🛑 |
| ナビゲーションガード / ブロッカー | ✅ | 🛑 | ✅ | 🟡 | 🛑 |
<Form>コンポーネント | ✅ | ✅ | 🛑 | ✅ | 🛑 |
| 遅延 / ストリーミングプリミティブ | ✅ | ✅ | ✅ | ✅ | 🟡 |
| @lazarv/react-server | Next.js | TanStack Router | React Router | Waku | |
|---|---|---|---|---|---|
| 型安全なルートパス | ✅ | 🟡 | ✅ | 🟡 | 🛑 |
| 型安全なパスパラメータ | ✅ | 🛑 | ✅ | ✅ | 🟡 |
| 型安全なナビゲーション | ✅ | 🟡 | ✅ | 🟡 | 🛑 |
| 型安全な検索パラメータ | ✅ | 🛑 | ✅ | 🛑 | 🛑 |
| パスパラメータバリデーション | ✅ | 🛑 | ✅ | 🛑 | 🛑 |
| パスパラメータの変換 / パース | ✅ | 🛑 | ✅ | 🛑 | 🛑 |
| 型付きLinkコンポーネント | ✅ | 🛑 | ✅ | 🛑 | 🛑 |
| 型付きフック(useParams, useSearchParams) | ✅ | 🛑 | ✅ | 🟡 | 🛑 |
| ルート型の自動生成(ファイルルーター) | ✅ | 🟡 | ✅ | 🛑 | 🛑 |
| ブランド付きアウトレット型 | ✅ | 🛑 | 🛑 | 🛑 | 🛑 |
| マルチライブラリスキーマサポート(Zod, ArkType, Valibot) | ✅ | 🛑 | 🟡 | 🛑 | 🛑 |
| 軽量パース関数(スキーマライブラリ不要) | ✅ | 🛑 | 🛑 | 🛑 | 🛑 |
| @lazarv/react-server | Next.js | TanStack Router | React Router | Waku | |
|---|---|---|---|---|---|
| 基本的な検索パラメータ | ✅ | ✅ | ✅ | ✅ | 🟡 |
| 検索パラメータフック | ✅ | ✅ | ✅ | ✅ | 🛑 |
| 型付き検索パラメータ | ✅ | 🛑 | ✅ | 🛑 | 🛑 |
| 検索パラメータのスキーマバリデーション | ✅ | 🛑 | ✅ | 🛑 | 🛑 |
<Link> / useNavigateの検索API(文字列ではなくオブジェクト) | ✅ | 🟡 | ✅ | 🟡 | 🛑 |
関数型検索アップデーター(prev => next) | ✅ | 🛑 | ✅ | 🛑 | 🛑 |
| 検索パラメータ変換(エンコード/デコード境界) | ✅ | 🛑 | ✅ | 🛑 | 🛑 |
| ルートスコープの検索変換 | ✅ | 🛑 | 🛑 | 🛑 | 🛑 |
| カスタム検索パース/シリアライゼーション | ✅ | 🛑 | ✅ | 🔶 | 🛑 |
| @lazarv/react-server | Next.js | TanStack Router | React Router | Waku | |
|---|---|---|---|---|---|
| ウィンドウスクロール復元 | ✅ | 🟡 | ✅ | ✅ | 🟡 |
| 要素 / コンテナスクロール復元 | ✅ | 🛑 | ✅ | 🛑 | 🛑 |
| 非同期コンテンツのスクロール復元 | ✅ | 🛑 | ✅ | 🛑 | 🛑 |
| ルートごとのスクロールカスタマイズ | ✅ | 🛑 | 🟡 | 🛑 | 🛑 |
| フラッシュなし復元(ハイドレーション前スクリプト) | ✅ | 🛑 | 🛑 | 🛑 | 🛑 |
prefers-reduced-motion対応 | ✅ | 🛑 | 🛑 | 🛑 | 🛑 |
| ハッシュ / アンカースクロール | ✅ | ✅ | ✅ | ✅ | 🛑 |
| 設定レベルで有効化(コード不要) | ✅ | 🛑 | 🛑 | 🛑 | 🛑 |
| クエリのみの変更でスクロール維持 | ✅ | 🛑 | 🟡 | 🛑 | 🛑 |
| @lazarv/react-server | Next.js | TanStack Router | React Router | Waku | |
|---|---|---|---|---|---|
| 型付きリソースディスクリプタ | ✅ | 🛑 | 🛑 | 🛑 | 🛑 |
| スキーマバリデーション付きリソースキー | ✅ | 🛑 | 🟡 | 🛑 | 🛑 |
Suspense統合.use()フック | ✅ | 🛑 | ✅ | 🟡 | 🛑 |
| リソース無効化(キーごと) | ✅ | 🟡 | ✅ | 🛑 | 🛑 |
| リソースコレクション | ✅ | 🛑 | 🛑 | 🛑 | 🛑 |
| ルート-リソースバインディング(プリフェッチ) | ✅ | 🛑 | ✅ | ✅ | 🛑 |
| ルーターローダー(データ取得) | ✅ RSC + リソース | 🟡 | ✅ | ✅ | 🟡 |
| SWR / Stale-While-Revalidateキャッシュ | ✅ "use cache" | ✅ | ✅ | 🛑 | 🛑 |
| サーバー&クライアントローダー | ✅ | 🟡 | ✅ | ✅ | 🛑 |
| @lazarv/react-server | Next.js | TanStack Router | React Router | Waku | |
|---|---|---|---|---|---|
| ゼロコンフィグのファイルルーター | ✅ | ✅ | 🟡 | 🟡 | ✅ |
| MDXページ | ✅ | 🔶 | 🛑 | 🛑 | 🛑 |
| 仮想ルートモジュール | ✅ | 🛑 | 🟡 | 🟡 | 🛑 |
| ルートスコープのローディング / エラー / フォールバックファイル | ✅ | ✅ | 🛑 | 🛑 | 🛑 |
| ルートDevtools | 🛑 | 🛑 | ✅ | 🟡 | 🛑 |
| ルートマスキング | 🔶 URL IDモデル | 🛑 | ✅ | 🛑 | 🛑 |
| ルートレベルの型付き依存関係 | ✅ 型安全なリソース | 🛑 | ✅ 型安全なルートコンテキスト + ローダー | 🛑 | 🛑 |
| ルートライフサイクルフック | 🔶 ガード + Reactライフサイクル | 🛑 | ✅ | 🛑 | 🛑 |
@lazarv/react-serverは完全なReact Server Componentsランタイムであり、単なるルーターではありません。ルーティングシステムはRSCストリーミング、サーバー関数、Viteビルドパイプラインと深く統合されています。これにより、型付きルート、クライアント専用ルート、サーバーサイドバリデーションなどの機能が、グルーコードなしでエンドツーエンドで動作します。
RSCサポートを後付けするルーターとは異なり、@lazarv/react-serverはReact Server Componentsのために一から構築されています。すべてのルートでサーバーコンポーネントとクライアントコンポーネントを自由に混在させることができます。
@lazarv/react-serverは、keep-alive/timeout調整、アドミッション制御、ELUベースのアダプティブバックプレッシャー、request/bodyとmultipartの上限、action POST向けCSRF origin検証、health/readinessエンドポイント、graceful shutdownを備えた本番ランタイムを持ちます。他のReactスタックでは多くの場合、これらはファーストクラスのランタイム層ではなく、ホスティングプラットフォーム、カスタムサーバー、リバースプロキシ、アダプター側に委ねられます。
@lazarv/react-serverは、アプリケーションコードを実行する前にサーバー関数呼び出しを敵対的入力として扱います。サーバー関数参照はAES-256-GCMのcapability tokenで暗号化され、key rotationをサポートし、maxRows、maxDepth、maxBytes、string/BigInt/streamの上限などの設定可能なリソース制限と、prototype pollution、禁止されたpath walk、悪意あるthenable、偽造callableを防ぐ構造的防御を通してデコードされます。Next.jsにもsecure ID、origin check、closure encryption、body size capなどの意味のあるServer Action防御があります。TanStack StartにはCSRF middlewareとvalidatorがあります。react-serverで特徴的なのは、capability-tokenモデルとhardened RSC reply decoderを組み合わせたレイヤーが、ファーストクラスのランタイム境界になっている点です。
この比較では、TanStack Start が最も直接的なサーバー関数ミドルウェアモデルを持ちます。function middleware は、client側ロジック、server側ロジック、input validation、composition、global registration でサーバー関数を包めます。@lazarv/react-serverは現時点では TanStack 形式のファーストクラスな関数単位 middleware chain を公開していません。request middleware はサーバー関数ディスパッチの前に実行され、リクエストを短絡したり注釈付けしたりできます。一方で createFunction は、ハンドラ実行前にプロトコル層で引数ごとの parse/validate contract を提供します。関数横断のポリシーはユーザーランドの wrapper でも構成できますが、ファーストクラスのランタイムプリミティブは client/server function middleware pipeline ではなく、request middleware と contract/decoder 境界です。React Router の middleware は route action/loader リクエストを包むもので有用ですが、任意のRPCサーバー関数ではなく route action モデルに紐づくため、この行では同じくファーストクラスサポートではありません。
@lazarv/react-serverは組み込みOpenTelemetry統合を持ち、HTTPリクエスト、ミドルウェア、RSC/SSRレンダリング、サーバー関数、キャッシュ検索、サーバー起動、Vite開発フックを自動計測できます。request、render、server function、cacheの組み込みメトリクスも提供します。テレメトリ依存関係はオプションかつ遅延読み込みのため、無効時はno-op計測に解決されます。Next.jsにも公式のOpenTelemetry計測とフレームワークスパンがあります。React Routerはログやトレースに接続できるファーストクラスの計測ラッパーを提供します。TanStack Startはobservabilityパターンと手動/実験的なOpenTelemetryセットアップを文書化しており、Wakuは主にユーザーランドまたはホストプラットフォーム側に委ねるモデルです。
ファイルシステムルーターで"use client"を持つページは自動的にクライアント専用ルートになります — ナビゲーションはサーバーを完全にスキップします。設定は不要で、Reactの<Activity>コンポーネントによりコンポーネントの状態はナビゲーション間で保持されます。
ルートパラメータと検索パラメータは、任意のスキーマライブラリ(Zod、ArkType、Valibot)または軽量パース関数でバリデーションできます — ランタイムがバリデーション戦略を自動的に検出します。
@lazarv/react-serverは2つの補完的なデータ取得アプローチを提供します:async/awaitによるReact Server Components(RSCをローダーとして)と、型付きリソース — .use()(Suspense)、.query()(命令型)、.prefetch()、.invalidate()を備えたスキーマバリデーション済みの参照識別データディスクリプタです。リソースはキャッシュランタイムとして"use cache"を使用します — カスタムキャッシュレイヤーやSWRのボイラープレートは不要です。ルート-リソースバインディングにより、ナビゲーション時の並列プリフェッチが可能になります。
TanStack Routerはルートコンテキストを、依存関係(認証、DBクライアントなど)をルートツリーに渡すためのファーストクラスの型付きプリミティブとして公開しています。@lazarv/react-serverは同じ問題領域を型安全なリソース、リクエストコンテキスト、ネイティブモジュールでモデル化しています — リソースがすでにスキーマバリデーション済みのルートスコープデータを完全な型安全性で提供するため、別のルートコンテキストバッグは不要です。
@lazarv/react-serverは統合Devtools(--devtools)を提供します。ルート検査だけでなく、RSCペイロード、キャッシュエントリ、ルート、アウトレット、リモートコンポーネント、live components、workers、server logsを単一パネルで扱います。TanStack RouterのDevtoolsはルーターに特化した優れたものですが、@lazarv/react-serverのDevtoolsはサーバーコンポーネントランタイム全体を対象にします。
@lazarv/react-serverは名前付きアウトレット(@sidebar、@content)を使用し、レイアウトに型付きプロップとしてレンダリングします。これはNext.jsのパラレルルートと機能的に類似していますが、より強い型付けを備えています — 各アウトレットはブランド付きReact要素であり、誤ってアウトレットを入れ替えることを防ぎます。
@lazarv/react-serverは TanStack 形式のルートマスキングを意図的にサポートしていません。ブラウザに表示されるURL、サーバーリクエストURL、マッチしたルートツリー、RSCペイロード、ルートバリデーション、リソース、キャッシュキー、アウトレット、Devtoolsの状態は、同じナビゲーション状態を表すことを前提にしています。URLに別の見せ方が必要な場合は、隠れたクライアント専用のルートIDを作るのではなく、rewrite、redirect、ルートグループ、アウトレット、検索パラメータを使います。
@lazarv/react-serverは、クライアント側のページルートナビゲーション判断のために useNavigationGuard と registerNavigationGuard を提供します。back/forward と任意の beforeUnload 処理も含みます。内部では、ルートガード/登録コンポーネントがルート登録、アクティブ表示、ルートリソース、ローディングスケルトン、Activity による状態保持を管理します。ユーザー側の副作用は、ルーターオブジェクトの mount/unmount コールバックではなく、React effects、resources、middleware、server functions、cache invalidation に置くモデルです。
@lazarv/react-serverの Hydration Islands は初回レンダリングの境界です。サーバーHTMLをすぐに描画し、リクエストスコープの島専用ハイドレーションデータを保持し、後から独立したローカルアウトレットとしてハイドレートします。これは PAGE_ROOT をハイドレートしないページでも動作します。TanStack Start には Suspense されたReactサブツリーの deferred hydration 的な動作がありますが、そのサブツリーはページのReactツリー内に残り、独自のRSCペイロードを持つ別の島アウトレットにはなりません。Astro はこの React/RSC 比較の外では最も近いアーキテクチャです。コンポーネント単位のハイドレーションに対する本物の Islands アーキテクチャを持ちますが、RSC のローカルアウトレットモデルではありません。他のReactフレームワークでもユーザーランドでクライアントコンポーネントの遅延読み込みやJavaScriptの遅延は可能ですが、このローカルアウトレット型の島モデルをファーストクラス機能としては提供していません。
WakuはVite上に構築されたもう一つのRSCネイティブフレームワークですが、意図的にミニマルなアプローチを取っています。基本的なファイルベースのルーティングとレイアウト、RSCサポートを提供しますが、型付きルーティングシステム、検索パラメータ処理、スクロール復元、ミドルウェア、その他の高度なルーティング機能は備えていません。WakuのLinkコンポーネントは基本的なscrollとprefetchOnEnter/prefetchOnViewプロップをサポートしていますが、ルーターAPIのほとんどはまだunstable_マークが付いています。Wakuは高度なルーティングを必要としないシンプルなRSCアプリケーションに適しています。