お好きな金額でサポートしていただけると嬉しいです!
(50円〜10,000円[税込]まで)
作成日時:2025年9月28日 14:42
更新日時:2025年9月28日 14:42
React
まだunstableではありますが、React Router v7.9.2で、Framework ModeにReact Server Components(RSC)が追加されました。
unstable_reactRouterRSC
+ @vitejs/plugin-rsc
)を有効化するだけbuild/server
, build/client
)を維持。server/index.js
はRequest→Responseのハンドラをエクスポートし、単一サーバとしてデプロイできます。
これまでもData ModeでRSCは使えたのですが、今回の対応により、「技術的には可能」といった状態から「実用的な選択肢」へ一歩近づきました。
秘密鍵の保護、CORS回避、SEO/初期表示改善、サーバキャッシュ最適化など、Next.jsでの開発体験をReact Routerでも簡単に実現できるようになります。
まずは前提から。React Routerには3つの主要なモードがあります。
■モード選択 | React Router
https://reactrouter.com/start/modes#framework
<BrowserRouter>
を使用し、URLとコンポーネントのマッチング、ナビゲーション、API(<Link>
、useNavigate
、useLocation
など)によるアクティブ状態の提供を実現します。loader
、action
、useFetcher
などの低レベルAPIを提供しますが、ビルド/HMR/SSRにおける配線は開発者が自前で実装する必要があります。上に書いた通りこれまでも、Data ModeでRSC対応させる、ということは技術的には可能でしたが自前での実装領域がありました。
これは、RSCとSSRの複雑な多重構成を自分で管理しなくてはならず、色々と難易度が高かった、まあ面倒だったわけです。
unstable_reactRouterRSC
+ @vitejs/plugin-rsc
)を有効化するだけでRSC環境を構築できる
まとめるとこんな感じです。
項目 | Data Mode RSC(従来) | Framework Mode RSC(今回) |
---|---|---|
設定の複雑さ | バンドラー設定、HMR、SSR配線を手動実装 | プラグイン差し替えのみ |
サーバ構成 | RSC+SSRの複雑な多重構成 | 単一ランタイム |
技術的難易度 | メタフレームワーク自作レベル | Next.js程度の学習コスト |
プロダクション準備 | 高い工数と専門知識が必要 | すぐに投入可能 |
デプロイ | 複雑な構成管理 | 従来のReact Routerと同様 |
// サーバコンポーネントで安全にAPIキーを使用
async function DataComponent() {
const data = await fetch('https://api.example.com/data', {
headers: {
'Authorization': `Bearer ${process.env.SECRET_API_KEY}` // クライアントに露出しない
}
});
return <div>{/* データ表示 */}</div>;
}
※CORSはブラウザ固有の制約です。サーバ側fetch(RSC/SSR/loader/action)では適用されません。
※CLS・・・Cumulative layout shift。一度読み込んだコンテンツがどれだけ移動するかを示す指標。
"use server"
でmutationやformの処理を安全に実装。サーバ側で実行されるため、クライアントサイドでの不正操作を防ぎ、センシティブなロジックを保護できます。
npm install @vitejs/plugin-rsc
// vite.config.ts
import { defineConfig } from "vite";
import { unstable_reactRouterRSC } from "@react-router/dev/vite";
import rsc from "@vitejs/plugin-rsc";
export default defineConfig({
plugins: [
unstable_reactRouterRSC(),
rsc(),
],
});
これによって、以下の機能が使えるようになります。
default
コンポーネントのエクスポートの代わりに ServerComponent
をエクスポートすることで、RSC-first "Server Component Routes" を実現"use client"
ディレクティブを持つクライアントコンポーネント。"use server"
ディレクティブを使ったサーバ関数。※SPA モード、プリレンダリング、カスタムビルドエントリーは2025/9/28時点でまだサポートされていません。安定板リリースまでにサポート予定とのこと。
各機能の詳細はこちら。
https://remix.run/blog/rsc-preview
Next.jsは個人的には好きなのでまた一つ、Next.jsを使う理由が減るんだなあ・・・と思いながらも笑、純粋に選択肢が増えるのは嬉しいですね。
今後の安定板のリリースを楽しみに待ちたいと思います。
それでは、また。
HTNCode