# 比較

この表は、`@lazarv/react-server`を他の人気のあるReactフレームワークおよびルーティングソリューションと比較しています。フルスタック機能、アーキテクチャ、ルーティング、型安全性、検索パラメータ、スクロール復元、開発者体験を網羅しています。

この比較は、ドキュメントに記載されている機能セットを要約したものです。カスタムのユーザーランドソリューションではなく、ファーストクラスの組み込みサポートに焦点を当てています。一部の行はコアアーキテクチャを、その他の行は利便性やルーターのエルゴノミクスを説明しているため、この表は単一のスコアではなく、トレードオフのマップとしてお読みください。

> この比較は`@lazarv/react-server`チームによって管理されています。不正確な点を見つけた場合は、[issueを開いてください](https://github.com/lazarv/react-server/issues) — 公平で正確な内容を目指しています。

**凡例：**

- ✅ — ドキュメント化され、フレームワークの意図されたモデルの一部であるファーストクラスの組み込みサポート
- 🟡 — 部分的なサポート、重要な制限事項、またはユースケースの限られたサブセットでのみ存在するサポート
- 🔶 — ユーザーランドの構成、コミュニティプラグイン、または手動セットアップで可能だが、ファーストクラスの組み込み機能ではない
- 🛑 — 意味のある組み込みサポートなし

## フルスタック機能

|  | @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ルート要素 | ✅ | ✅ | ✅ | ✅ | 🟡 |
| エラーバウンダリ要素 | ✅ | ✅ | ✅ | ✅ | ✅ |
| ローディング / ペンディング要素 | ✅ | ✅ | ✅ | ✅ | 🟡 |
| クライアント専用ルート | ✅ | 🛑 | ✅ | ✅ | 🛑 |
| パラレルルート / アウトレット | ✅ | ✅ | 🛑 | 🛑 | 🟡 |
| ルートプリフェッチ | ✅ | ✅ | ✅ | ✅ | 🟡 |
| 自動プリフェッチ | ✅ | ✅ | ✅ | ✅ | 🛑 |
| アクティブリンクのカスタマイズ | ✅ | ✅ | ✅ | ✅ | 🛑 |
| ナビゲーションガード / ブロッカー | ✅ | 🛑 | ✅ | 🟡 | 🛑 |
| ``コンポーネント | ✅ | ✅ | 🛑 | ✅ | 🛑 |
| 遅延 / ストリーミングプリミティブ | ✅ | ✅ | ✅ | ✅ | 🟡 |

## 型安全性

|  | @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 |
|--|:---:|:---:|:---:|:---:|:---:|
| 基本的な検索パラメータ | ✅ | ✅ | ✅ | ✅ | 🟡 |
| 検索パラメータフック | ✅ | ✅ | ✅ | ✅ | 🛑 |
| 型付き検索パラメータ | ✅ | 🛑 | ✅ | 🛑 | 🛑 |
| 検索パラメータのスキーマバリデーション | ✅ | 🛑 | ✅ | 🛑 | 🛑 |
| `` / `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ネイティブランタイム

RSCサポートを後付けするルーターとは異なり、`@lazarv/react-server`はReact Server Componentsのために一から構築されています。すべてのルートでサーバーコンポーネントとクライアントコンポーネントを自由に混在させることができます。

#### 本番HTTPランタイム

`@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の``コンポーネントによりコンポーネントの状態はナビゲーション間で保持されます。

#### スキーマ非依存のバリデーション

ルートパラメータと検索パラメータは、任意のスキーマライブラリ（Zod、ArkType、Valibot）または軽量パース関数でバリデーションできます — ランタイムがバリデーション戦略を自動的に検出します。

#### RSC + 型付きリソース

`@lazarv/react-server`は2つの補完的なデータ取得アプローチを提供します：`async/await`によるReact Server Components（RSCをローダーとして）と、**型付きリソース** — `.use()`（Suspense）、`.query()`（命令型）、`.prefetch()`、`.invalidate()`を備えたスキーマバリデーション済みの参照識別データディスクリプタです。リソースはキャッシュランタイムとして`"use cache"`を使用します — カスタムキャッシュレイヤーやSWRのボイラープレートは不要です。ルート-リソースバインディングにより、ナビゲーション時の並列プリフェッチが可能になります。

#### ルートレベルの依存関係

TanStack Routerはルートコンテキストを、依存関係（認証、DBクライアントなど）をルートツリーに渡すためのファーストクラスの型付きプリミティブとして公開しています。`@lazarv/react-server`は同じ問題領域を型安全なリソース、リクエストコンテキスト、ネイティブモジュールでモデル化しています — リソースがすでにスキーマバリデーション済みのルートスコープデータを完全な型安全性で提供するため、別のルートコンテキストバッグは不要です。

#### 組み込みDevtools

`@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要素であり、誤ってアウトレットを入れ替えることを防ぎます。

#### ルートマスキングよりもルートIDの一貫性

`@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 に置くモデルです。

#### Hydration Islands と deferred hydration の違い

`@lazarv/react-server`の Hydration Islands は初回レンダリングの境界です。サーバーHTMLをすぐに描画し、リクエストスコープの島専用ハイドレーションデータを保持し、後から独立したローカルアウトレットとしてハイドレートします。これは `PAGE_ROOT` をハイドレートしないページでも動作します。TanStack Start には Suspense されたReactサブツリーの deferred hydration 的な動作がありますが、そのサブツリーはページのReactツリー内に残り、独自のRSCペイロードを持つ別の島アウトレットにはなりません。Astro はこの React/RSC 比較の外では最も近いアーキテクチャです。コンポーネント単位のハイドレーションに対する本物の Islands アーキテクチャを持ちますが、RSC のローカルアウトレットモデルではありません。他のReactフレームワークでもユーザーランドでクライアントコンポーネントの遅延読み込みやJavaScriptの遅延は可能ですが、このローカルアウトレット型の島モデルをファーストクラス機能としては提供していません。

#### Waku

WakuはVite上に構築されたもう一つのRSCネイティブフレームワークですが、意図的にミニマルなアプローチを取っています。基本的なファイルベースのルーティングとレイアウト、RSCサポートを提供しますが、型付きルーティングシステム、検索パラメータ処理、スクロール復元、ミドルウェア、その他の高度なルーティング機能は備えていません。Wakuの`Link`コンポーネントは基本的な`scroll`と`prefetchOnEnter`/`prefetchOnView`プロップをサポートしていますが、ルーターAPIのほとんどはまだ`unstable_`マークが付いています。Wakuは高度なルーティングを必要としないシンプルなRSCアプリケーションに適しています。