ホームページ >ウェブフロントエンド >jsチュートリアル >Next.js を超えて: 代替 React Server コンポーネント フレームワークの探索
2020 年後半に React チームが「ゼロバンドルサイズの React サーバー コンポーネント」という概念を導入したとき、多くの人がこれまで、そして今でもそれを理解するのに苦労しています。既存のフレームワークはいずれも新しい概念をサポートしておらず、プロトタイプは現実世界のアプリケーションを構築するための使用可能なベースを提供しませんでした。
4 年以上経った現在、react の必要なバージョンはまだベータ版で実稼働環境にリリースされておらず、それをサポートする唯一の大きくて有名なフレームワークには元 React チームのメンバーがスタッフを配置しています。これは、RSC に基づく代替フレームワークを提供しようとしていた少数の開発者にとって、非常に悲しい状況です。
通常の React は、ブラウザーでアプリケーションを構築するための高速な宣言型ソリューションを提供することだけに重点を置いたライブラリです。ブラウザ内のアプリケーションには、状態を取得して保存するためのサーバーが常に必要です。この事実に基づいて、膨大な数のソリューションが開発され、React Client エコシステムに存在しています。 Typescript を使用してバックエンドを作成する人が増え始めると、次のトレンドは、バックグラウンドで API エンドポイントを作成する型付きインターフェイスを備えた RPC の復活です。
これらの要件を備えた RSC を見ると、以下の内容が規定されているため、これらすべてが RSC の範囲内であることがすぐにわかります。
これにより、アプリケーション開発者は、クライアントまたはサーバーでレンダリングされるものとは関係なく、react を使用してすべてのコンポーネントを定義できるようになります。この統合環境により、最新のアプリの複雑さが軽減され、バックエンドとフロントエンドで重複するビジネス ロジックの冗長性が排除されます。
反応ライブラリは公式のまだベータ版であるため、どれも本番環境に対応したものとみなされるべきではありません:
現在、本番環境である程度使用できるのは Next.js のみです。バージョン 15 は、2021 年末にバージョン 12 で開始された RSC の 4 回目の反復です。
リストされたフレームワーク以外にも、RSC フレームワークの構築に関するブループリントを含むリポジトリがいくつかあります。内部の詳細を知りたい場合は、これらを使用してください。
他のフレームワークを知っている場合は、コメントにリンクを提供してください。
React クライアント アプリの優れた既存のバンドラーに基づいた転記とバンドルは簡単です。これを行うには複数のオプションがありますが、最もよく使用されるオプションの 1 つは、ViteJs を開発サーバーおよびバンドラーとして使用することです。 JavaScript フロントエンドとバックエンド スタックを提供するフレームワークは、開発時および実稼動時にタイプスクリプトとバンドルを処理するための独自のソリューションを提供する必要がありました。
RSC を使用する場合、バンドラーは少なくとも 3 つの転写およびバンドル パイプラインを処理する必要があります。
Vite バージョン 6 がリリースされるまでは、実用的なソリューションを提供するには多くの特別なコードが必要でした。 Next.js はバージョン 15 で Turbopack に切り替え、複雑さと、この種の問題を処理するために構築されていない Webpack の使用に基づいて生じた遅延を修正するだけです。
Vite 6 の新機能は多くのターゲット フレームワーク作成者によって提供されており、新しい環境 API を使用して優れたソリューションを提供します。
コンポーネントがまったく異なる環境でレンダリングされるようになったという事実に基づいて、代替コンテンツを提供することで、これらの各環境の制限に対処するように各反応ライブラリを構築する必要があります。現在、ほとんどのライブラリはサーバー上でのレンダリングを処理して SSR コンテンツを作成できますが、多くのブラウザー固有の API が欠落しています。 RSC コンポーネントをレンダリングすると、別の反応サーバー ライブラリで追加の制限が生じます。たとえば、すべての子コンポーネントにテーマを提供するために必要な反応コンテキストとステートおよびブレーク ライブラリがサポートされていません。また、ライブラリには、ライブラリと関連するすべてのサブ ライブラリに対して、packages.json と ESM-Modules で適切なエクスポート オプションが必要です。
RSC の反応ライブラリによって提供されない 2 番目の部分はルーターです。クライアントとサーバーのルーティングを処理するルーターがないと、React サーバー コンポーネントはサーバー上でどの状態をレンダリングするかを認識できません。これが、各フレームワークに独自のルーター実装が付属しており、その API が標準化されるまで、あるフレームワーク用に開発されたサーバーおよびクライアント コンポーネントを別のフレームワークで動作するように変更する必要がある理由です。
React サーバー コンポーネントの詳細については、React の公式ドキュメントを参照してください。
メタフレームワークのオプション要件:
Next.js 15 が最もメジャーな RSC フレームワークであるという事実に基づいて、なぜ代替フレームワークを検討する必要があるのでしょうか?
これを行う理由は常に達成すべき目標に基づいていますが、他のオプションを検討することが合理的である理由をいくつか挙げてみたいと思います。
この記事では RSC を提供する代替案のみに焦点を当てていますが、RSC とほぼ同様の機能を提供するフレームワークは他にも数多くあり、この記事に記載されている RSC フレームワークよりもはるかに優れた代替案になる可能性があることに注意してください。
加藤大士氏による開発:
ワク (wah-ku) またはワクは日本語で「フレームワーク」を意味します。最小限の React フレームワークとして、小規模から中規模の React プロジェクトを構築するスタートアップや代理店の開発者の作業を加速するように設計されています。これらには、マーケティング Web サイト、簡易 e コマース、Web アプリケーションが含まれます。
重い e コマース アプリケーションやエンタープライズ アプリケーションには、他のフレームワークをお勧めします。 Waku は、サーバー コンポーネントの時代に楽しい開発者エクスペリエンスをもたらす軽量の代替手段です。はい、React 開発をまた楽しくしましょう!
Waku で新しいプロジェクトを開始するのは簡単で、tailwind でセットアップされたスターター テンプレートを取得します。
npm create waku@latest
変更サーバー アクションを使用する場合、単一のリクエストでクライアント側コンポーネントに更新を返すことを除くすべての基本要件がカバーされています。現在、サーバーの変更には、クライアント コンポーネントの router.reload() を使用してクライアント ルーターを更新する必要があり、これにより、更新されたデータを RSC ストリームとしてロードするサーバーへの 2 番目のリクエストが発生します。
次のオプションの要件はまだ開発中です:
多くのデプロイメントターゲットをサポート: Vercel、Netlify、Cloudflare、PartyKit、Deno、AWS Lambda、NodeJS
バンドルの複雑さに基づいて、多くのサードパーティ ライブラリで問題が発生することに備えてください。
https://github.com/dai-shi/waku/issues/423
Viktor Lázár によって開発されました:
Vite ❤️ を使用して React サーバー コンポーネントとサーバー アクションを使用したかったので、@lazarv/react-server を作成しました。ほとんどの小規模アプリにとって、Next.js は多すぎて、重すぎ、遅すぎました。私は、node.js を使用して単純な JavaScript ファイルを実行するのと同じエクスペリエンスを体験したかったのです。このフレームワークは、できる限り意見が入らないように努めています。あなたはおそらくあなたが望むものは何でも達成することができます。唯一の制限は、独自の React バージョンを使用することです。プロジェクトに React をインストールする必要さえありません。それはすべてフレームワークに含まれています。私がこのフレームワークを作成し、このドキュメントの作成に使用して楽しんだのと同じように、皆さんにもこのフレームワークの使用を楽しんでいただけることを願っています。 - ラザーブ
このフレームワークを使用すると、React サーバー コンポーネントを簡単に学習できます。必要なのは、有効な React サーバー コンポーネントを含む 1 つのファイルとコマンドの実行だけです:
./App.jsx
export default function App() { return <h1>Hello, World!</h1> }
npx @lazarv/react-server ./App.jsx
チュートリアルセクションには、開始方法に関する優れたドキュメントといくつかのサンプルプロジェクトがあります。
変更サーバー アクションを使用する場合、単一のリクエストでクライアント側コンポーネントに更新を返すを除き、すべての基本要件がカバーされています。
ランタイムは NodeJS API に依存するため、他のランタイム (例: (AWS Lambda@Edge、Cloudflare) は現在サポートされていません。
さらに次の機能が存在します:
デプロイメントターゲット: NodeJS、Vercel - 開発中のアダプター: Netlify、Cloudflare、sst
そのままの状態で Tailwind CSS、TanStack Query、Mantine UI、マテリアル UI をサポートします。
Tom Preston-Werner 提供:
Redwood は、フルスタックの JavaScript アプリケーション フレームワークです。
バッテリー、バックエンド、React、規約、意見が含まれます。
まだ開発中、Node v20 と Yarn 4 でのみ動作します:
export default function App() { return <h1>Hello, World!</h1> }
次に、いくつかの実験的な機能を有効にする必要があります:
npx @lazarv/react-server ./App.jsx
最後に、ビルドして提供します:
npx -y create-redwood-app@canary -y ~/rsc_app cd ~/rsc_app
setup-rsc コマンドの一部として、ベアボーン RSC アプリが作成され、サーバー コンポーネント内でクライアント コンポーネントがレンダリングされる様子が示されます
デプロイメントターゲット: Vercel、Netlify、Render、Coherence 経由の GCP または AWS、Flightcontrol 経由の AWS、NodeJS
Next.js | WAKU | React-server | RedwoodJS | |
---|---|---|---|---|
DEV-Environment / Bundling | Turbopack | Vite 5 | Vite 6 | Vite |
Rendering | SSR, ISR, SSG, CSR | SSR, SSG, CSR | SSR, SSG, CSR, Micro-Frontends | SSR, SSG, CSR |
Caching Layers | Yes | No | Yes | ?? |
Deployment Target | Vercel, NodeJS | Vercel, Netlify, Cloudflare, Deno, AWS Lambda, PartyKit, NodeJS | Vercel, NodeJS, sst (AWS Lambda) | Vercel, Netlify, AWS, NodeJS |
Community | Very Big | Tiny | Just Starting | Small |
Open Source Financing | Vercel | Donations | Donations | Privately Funded by a Rich Guy |
重要なポイントの要約:
フレームワークを試して、プロジェクトに最適なものを見つけてください。
以上がNext.js を超えて: 代替 React Server コンポーネント フレームワークの探索の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。