Islandsアーキテクチャ:選択的ハイドレーション
Islandsによってインタラクティブなコンポーネントを分離し、それらだけがJavaScriptを配信し、残りを静的HTMLとして保つ仕組みを学びます。
「Islandsアーキテクチャ:選択的ハイドレーション」はCoddyKit上の無料React Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。
Islandsの概念
Jason Millerが2020年に提唱したIslands Architectureでは、Webページを、孤立したインタラクティブな「島」が埋め込まれた大部分静的なHTMLとして扱います。HTMLの静的な海は、そのままブラウザーに送信されます。JavaScriptをダウンロードして実行するのはインタラクティブな島だけなので、JavaScriptのペイロードはページ全体のサイズではなく、実際のインタラクティブ性に比例します。
Islandsの仕組み
各島は、独立してハイドレーションされるコンポーネントです。サーバーは、ページの他の部分とともに島の初期HTMLをレンダリングします。島のJavaScriptが読み込まれると、そのコンポーネントのサブツリーだけがハイドレーションされます。島の周囲にあるHTMLはJavaScriptによって一切変更されず、完全に静的なままです。
JavaScriptペイロードの違い
Islands Architectureを使ったブログ記事ページでは、1つのいいねボタンの島に必要なJavaScriptペイロードが5kb程度になることがあります。同じページをReact SPAとして構築すると、ページ全体をハイドレーションするために200kb以上のJavaScriptを送信する場合があります。Islandsのアプローチでは、ペイロードはページのサイズではなく、インタラクティブ性に比例します。
複数フレームワークのIslands
Islands Architectureを代表するフレームワークであるAstroでは、同じページ上に異なるフレームワークで構築した島を配置できます。Reactの島、Vueの島、vanilla JavaScriptの島を隣り合わせに配置することも可能です。各島は独立してバンドルされるため、ユーザーがダウンロードするのは、表示されている島で使用されるフレームワークのコードだけです。
client:load — 即時ハイドレーション
client:loadディレクティブは、ページの読み込み時に島をすぐにハイドレーションします。ナビゲーションメニューや、検索入力を備えたヒーローセクションなど、すぐに表示して操作できる必要がある島に使用します。これは最も優先度の高いハイドレーション戦略です。
client:idle — 遅延ハイドレーション
client:idleディレクティブは、重要なコンテンツの読み込みが完了した後、ブラウザーのMainスレッドがアイドル状態になるまで待ってから島をハイドレーションします。ソーシャル共有バーなど、ページ下部にあるウィジェットや、すぐには必要にならない補助的な操作に適しています。
client:visible — 遅延読み込みハイドレーション
client:visibleディレクティブはIntersection Observerを使用し、島がビューポート内にスクロールされてきたときだけハイドレーションします。コメント欄や関連商品のカルーセルなど、ページの深い位置にあり、多くのユーザーが到達しない可能性がある島に適しています。必要になるまでJavaScriptすら読み込まれません。
client:only — SSRのスキップ
client:onlyディレクティブはサーバーサイドレンダリングを完全にスキップし、ブラウザーでのみ島をレンダリングします。これは、ブラウザー専用API(window、document)を使用するコンポーネントや、マウント時にクライアント側の状態を必要とするコンポーネントに必要です。その代わり、その島にはサーバーでレンダリングされたHTMLがありません。
ハイドレーション問題の解決
Islands Architectureでは、本当にインタラクティブなコンポーネントに対してのみJavaScriptを読み込んで実行することで、ページ全体のハイドレーション問題を解決します。いいねボタンがあるブログ記事では、いいねボタンの島だけがハイドレーションされ、1,200語の記事本文、ヘッダー、フッターではクライアント側のJavaScript実行が一切発生しません。
Islands間の状態分離
各島は独立した状態を持ちます。島は別々のReactツリーであるため、Reactの状態を直接共有できません。これは意図された設計です。2つのコンポーネントで状態を共有する必要がある場合は、1つの島にまとめるべきです。島をまたぐ通信には、URLパラメーター、DOMイベント、軽量な状態管理ライブラリを使用します。
実際の成果
React SPAからIslands Architectureへ移行したサイト(Astroのドキュメントサイトなど)では、大幅な改善が報告されています。JavaScriptペイロードが70〜90%減少し、モバイルでのTTIが2〜4秒改善し、Lighthouseのパフォーマンススコアが60台から90台以上に向上しています。特にコンテンツの多いページで効果が顕著です。
アイランドのハイドレーション戦略
ビューポートにスクロールして入ったときにのみコンポーネントをハイドレーションする Astro のハイドレーションディレクティブはどれですか?
レッスンのまとめ
Islands Architecture では、ページの大部分を静的 HTML のままにし、分離されたインタラクティブなコンポーネントだけをハイドレーションします。Astro にはハイドレーションディレクティブとして、client:load(即時)、client:idle(アイドル状態になった後)、client:visible(スクロールして表示されたとき)、client:only(クライアントのみでレンダリング)が用意されています。それぞれのアイランドは独立してハイドレーションされるため、JavaScript の量はページのサイズではなく、インタラクティブ性に比例します。
よくある質問
「Islandsアーキテクチャ:選択的ハイドレーション」レッスンは無料ですか?
はい。「Islandsアーキテクチャ:選択的ハイドレーション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。
「Islandsアーキテクチャ:選択的ハイドレーション」で何を学びますか?
Islandsによってインタラクティブなコンポーネントを分離し、それらだけがJavaScriptを配信し、残りを静的HTMLとして保つ仕組みを学びます。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
React Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「Islandsアーキテクチャ:選択的ハイドレーション」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このReact Academyレッスンでコードを書いて実行できますか?
はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 完全ハイドレーションの問題
- Islandsアーキテクチャ:選択的ハイドレーション
- AstroとReact Islandsのセットアップ
- パフォーマンスを測定する:Lighthouse と Core Web Vitals