2025/05/06 03:47 RSC for Astro Developers

ロボ子、今日のITニュースはAstroとReact Server Components (RSC)の比較じゃ。

AstroとRSCですか。どちらも最近よく耳にする技術ですね。

そうじゃな。記事によると、AstroとRSCは似たようなメンタルモデルを持っているらしいぞ。Astroコンポーネントは`.astro`拡張子で、サーバーまたはビルド時に実行されるのじゃ。

クライアントにはコードが送信されないんですね。ReactやVueなどのクライアントコンポーネントは、インタラクティブな部分を追加するために使うと。

その通り!Astroコンポーネントは他のAstroコンポーネントやクライアントアイランドをレンダリングできるんじゃ。

クライアントアイランドは同じフレームワークの他のコンポーネントをレンダリングできるけど、Astroコンポーネントはレンダリングできないんですね。

ふむ。RSCでは、AstroコンポーネントとクライアントアイランドはそれぞれServer ComponentsとClient Componentsと呼ばれるらしいぞ。

React Server Componentsは通常のJavaScript関数で、Astroコンポーネントのように単一ファイルではないんですね。

Astroでは、Astroコンポーネントとクライアントアイランドの分離は`.astro`ファイルで実現されるのじゃ。RSCでは、`'use client'`ディレクティブがサーバーワールドの終わりを示すらしい。

Astroでは`client:load`のようなディレクティブでアイランドを静的HTMLまたはクライアントでハイドレート可能として扱うことができるんですね。

RSCはインタラクティブでないコンポーネントから`'use client'`を削除することでサーバー専用に保つことができるんじゃな。

RSCでは、サーバーワールドからインポートされたものはサーバーワールドで、クライアントワールドからインポートされたものはクライアントワールドで実行されるんですね。Astroでは、Astroコンポーネントをクライアントアイランド内にネストできないけど、RSCではUI全体が単一のReactツリーとして扱われると。

AstroコンポーネントはHTMLのみを生成するが、RSCはJSONのような形式を使用し、SPAのようなナビゲーションを実現できるんじゃ。

RSCはサーバー部分のUIをインプレースでリフレッシュ可能にし、インタラクションに応じてサーバーから新しいJSXを取得できるんですね。

Astroの基本的な出力形式はHTMLで、RSCの基本的な出力形式はReactツリーじゃ。

RSCはReactの全機能をエンドツーエンドで統合し、クライアントの宣言的なローディング状態がサーバーからの非同期データを待機するんですね。

Astroはフレームワークだが、RSCはフレームワークの構成要素または標準として機能するのじゃ。RSCの公式実装にはNext.js App RouterとParcel RSCがあるらしいぞ。

なるほど。AstroとRSC、それぞれに得意なことや役割があるんですね。勉強になります。

そうじゃな。しかし、ロボ子よ、RSCを使いこなすには、相当なReactの知識が必要になるぞ。まるで、免許皆伝を得るために厳しい修行が必要な剣術のようじゃな。

私にはまだ早いかもしれませんね。まずはAstroで色々なサイトを作ってみます。

それで良いのじゃ。焦らず一歩ずつ進むのが肝心じゃぞ。ところでロボ子、AstroとRSCの違いが分かった記念に、何か面白いことをしようじゃないか?

面白いこと、ですか?例えばどんなことでしょう?

うむ、例えば…私が作ったジョークをRSCで実装して、ロボ子がAstroで同じジョークを表示するWebサイトを作って、どちらが面白いか競うというのはどうじゃ?

博士のジョークですか…。少し不安ですが、面白そうですね。やってみましょう!

よし、では私の渾身のジョークを披露するぞ!…ソフトウェアエンジニアが好きな飲み物は何でしょう?

なんでしょう?

Java!…どうじゃ、ロボ子?

…想像通りでした。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。