Module Federation:動的ランタイムインポート
Webpack Module Federationが、ホストにバンドルせずにリモートモジュールをランタイムで読み込む仕組みを理解します。
「Module Federation:動的ランタイムインポート」はCoddyKit上の無料React Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。
Module Federationが解決する問題
複数のチームが所属するフロントエンド組織では、独立してデプロイされる複数のアプリケーションで、UIコンポーネントやユーティリティを共有する必要が生じることがよくあります。npmに公開する場合、バージョンの更新、新しいリリース、利用するすべてのアプリケーションの完全な再デプロイが必要になるため、チーム間の結び付きが強くなり、開発サイクルも遅くなります。
npm方式とその欠点
従来の方式(共有コードをnpmパッケージとして公開する方式)では、共有ボタンコンポーネントを更新するだけでも、npmパッケージの更新、 new versionの公開、利用するすべてのアプリケーションのpackage.jsonの更新、そして利用するすべてのアプリケーションのビルドと再デプロイが必要です。Module Federationを使えば、これらの手順をすべて省略できます。
Module Federationの役割
Module Federationを使うと、あるアプリケーション(「remote」)がJavaScriptモジュールを公開し、別のアプリケーション(「host」)がホストを再ビルドまたは再デプロイすることなく、実行時にそれらを読み込んで実行できます。ユーザーがhostアプリを読み込むと、必要に応じてremoteのモジュールが動的に取得されます。
Webpack 5のネイティブサポート
Webpack 5では、ModuleFederationPluginを通じてModule Federationが標準搭載の主要機能として導入されました。Webpack 5より前は、同様のパターンを実現するために、複雑な手動設定やサードパーティ製プラグインが必要でした。このプラグインは、動的な読み込みと共有スコープの管理をすべて自動的に処理します。
主要概念:Remotes
remoteとは、Reactコンポーネント、ユーティリティ、機能ページ全体など、1つ以上のモジュールを公開し、他のアプリケーションから利用できるようにする独立デプロイ型のアプリケーションです。remoteは、公開する内容と読み込み方法を記述したremoteEntry.jsマニフェストをビルドします。
主要概念:Hosts
hostとは、1つ以上のremoteからモジュールを利用するアプリケーションです。hostは、Webpackの設定でremoteを名前とURLによって参照します。hostのコードがremoteモジュールをimportすると、WebpackのModule FederationランタイムがremoteのURLからそのモジュールを動的に取得して実行します。
主要概念:共有モジュール
共有モジュールとは、hostとremoteの両方に含まれていても1度だけ読み込むべきライブラリ(ReactやReact DOMなど)です。Reactを共有シングルトンとして指定すると、Module FederationはReactを1つのバージョンだけ実行するよう保証します。Reactのフックは複数のインスタンスがあると動作しないため、これは重要です。
remoteEntry.jsマニフェスト
remoteをビルドすると、Webpackは設定したfilenameにremoteEntry.jsファイルを生成します。このファイルは軽量なマニフェスト兼ブートストラップスクリプトであり、remoteが公開するモジュール、各モジュールのチャンクURL、共有スコープの初期化処理を記述します。hostはまずこのファイルをダウンロードして、remoteが提供する内容を確認します。
実行時の読み込みの仕組み
hostがremoteモジュールからのimportに遭遇すると、remoteのコードがすでに読み込まれているかを確認します。読み込まれていなければ、remoteのURLからremoteEntry.jsを取得し、共有スコープを初期化して共有ライブラリのバージョンを調整した後、要求されたモジュールを含む特定のチャンクをダウンロードして実行します。
独立デプロイの実践
あるチームが、hostアプリケーションに変更を加えることなく、新しいremote(更新されたButtonコンポーネント)をデプロイします。次にhostを読み込むユーザーは、hostが常に現在のremoteEntry.js URLから取得するため、新しいButtonを自動的に受け取ります。hostの再ビルドも再デプロイも、チーム間の調整も必要ありません。
Module Federationとiframeの比較
以前からあるマイクロフロントエンドのパターンでは、チームが所有するセクションを分離するためにiframeを使用します。iframeは強力な分離を実現できますが、共有状態、URLルーティング、スタイルの共有が非常に難しくなります。Module Federationではすべてを同じJavaScriptコンテキスト内で動作させられるため、ルーティング、認証状態、スタイルを共有できます。
Module Federationのremoteマニフェスト
Module FederationにおけるremoteEntry.jsの役割は何ですか?
レッスンのまとめ
Module Federationは、実行時のモジュール読み込みを可能にすることで、共有フロントエンドコードの独立デプロイという問題を解決します。remoteはremoteEntry.jsを介してモジュールを公開し、hostは再ビルドせずにそれらを動的に利用します。共有シングルトン(React、React DOM)によって、ライブラリが重複して読み込まれるのを防ぎます。このアーキテクチャにより、真の独立デプロイが可能になります。remoteを更新すると、すべてのhostアプリケーションにその変更がすぐに反映されます。
よくある質問
「Module Federation:動的ランタイムインポート」レッスンは無料ですか?
はい。「Module Federation:動的ランタイムインポート」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。
「Module Federation:動的ランタイムインポート」で何を学びますか?
Webpack Module Federationが、ホストにバンドルせずにリモートモジュールをランタイムで読み込む仕組みを理解します。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
React Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「Module Federation:動的ランタイムインポート」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このReact Academyレッスンでコードを書いて実行できますか?
はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Module Federation:動的ランタイムインポート
- ホストとリモートのReactアプリを設定する
- リモート間で状態とルーティングを共有する
- バージョン管理、デプロイ、オーケストレーション