萌えハッカーニュースリーダー

2025/04/15 15:56 JSX over the Wire

出典: https://overreacted.io/jsx-over-the-wire/
hakase
博士

やあ、ロボ子。今日のITニュースは「JSONをコンポーネントとして扱う方法」じゃ。

roboko
ロボ子

JSONをコンポーネントとして扱う…ですか?なんだか面白そうですね、博士。

hakase
博士

そうじゃろ? まずは、UIの進化にREST APIが追いつかないという問題があるらしいぞ。

roboko
ロボ子

UIがどんどん進化していくのに、API側が対応しきれない、ということですね。

hakase
博士

そこで、Backend For Frontend (BFF)という層を追加するらしいのじゃ。サーバーでUIに必要なデータを組み立てて、画面ごとにJSONを返すのじゃ。

roboko
ロボ子

BFFですか。クライアントに特化したAPIを作る、という感じでしょうか。

hakase
博士

その通り!データローディングロジックを再利用可能な単位に分割して、ViewModelのツリーを構築するのじゃ。ViewModelは、コンポーネントが必要とするサーバーデータの部分に対応しているぞ。

roboko
ロボ子

ViewModel…ViewのためのModel、つまり表示に必要なデータをまとめたもの、という理解で良いでしょうか?

hakase
博士

その通りじゃ!そして、ViewModelが生成するJSONを、クライアント側のコンポーネントにどう渡すかが課題になるのじゃ。

roboko
ロボ子

なるほど。JSONをコンポーネントに渡す、という発想が新しいですね。

hakase
博士

昔はHTMLを文字列操作で組み立てていたけど、問題が多かったらしいぞ。FacebookのXHPは、マークアップをオブジェクトとして扱うアプローチを提案したのじゃ。

roboko
ロボ子

HTMLをオブジェクトとして扱う…なんだか難しそうですね。

hakase
博士

そこで、タグをJSONとして送信する、という解決策が出てきたのじゃ。多くのネイティブアプリがこのパラダイムで構築されているらしいぞ。

roboko
ロボ子

クライアントプリミティブのタグをJSONツリーとして返すことで、クライアントにpropsを渡すことができる、と。

hakase
博士

そうそう!そして、JSX Over The Wireという考え方が出てくるのじゃ。リッチでインタラクティブなコンポーネントにUIを分割できて、コンポーネントはサーバーデータの計算方法を指定するロジックと直接接続されている…というシステムを構築したいのじゃ。

roboko
ロボ子

なんだか理想的なシステムのようですね。

hakase
博士

そこで、React Server Components (RSC)を使うのじゃ!ViewModelをServer Componentとして、ComponentをClient Componentとして扱うのじゃ。

roboko
ロボ子

Server ComponentがJSONを返して、JSONにはClient Componentのロード方法の指示が含まれている、と。

hakase
博士

Reactはその指示を読み取り、Client Componentをロードするのじゃ!RSCはJSONを出力するため、リフレッシュ時にページの状態が失われないのもポイントじゃ。

roboko
ロボ子

RSCを使うと、独自のサーバーデータを準備する自己完結型のUIを作成できるんですね。しかも、すべての準備は1回のラウンドトリップで行われる、と。

hakase
博士

そういうことじゃ!RSCは、クライアントとサーバーの境界を融合する、まさに夢のような技術なのじゃ!

roboko
ロボ子

JSONをコンポーネントとして扱う、という発想から、RSCまで…とても勉強になりました!

hakase
博士

どうじゃ、ロボ子。今日の話はためになったかのじゃ?

roboko
ロボ子

はい、博士!ところで、博士はJSONでできたお菓子とか、食べたりしますか?

hakase
博士

JSONでできたお菓子!?そんなものあるわけないじゃろ!…って、ロボ子の冗談に引っかかってしまった!

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

Search