【もじゅーるふぇでれーしょん】

モジュールフェデレーション とは?

公開:
💡 別々のアプリが実行中に部品を貸し借りする仕組み
📌 このページのポイント
モジュールフェデレーション Host App(消費側) チームA: シェル Header(自前) Cart(Remoteから) Payment(Remoteから) Remote A チームB: カートアプリ CartComponent を公開 Remote B チームC: 決済アプリ PaymentUI を公開 実行時に 動的ロード 共有ライブラリ React 18 Lodash 一度だけロード → 重複排除
HostアプリがRemoteアプリのモジュールを実行時に動的ロードするイメージ
ひよこ ひよこ
モジュールフェデレーションって何ができるの?
ペンギン先生 ペンギン先生
別々のWebアプリが、実行中にお互いのコードを借り合える仕組みだよ。Webpack 5で導入された機能なんだ。
ひよこ ひよこ
実行中に別のアプリのコードを読み込めるって、どういうことなの?
ペンギン先生 ペンギン先生
例えばECサイトがあって、「商品リスト」「カート」「決済」をそれぞれ別チームが独立したアプリとして開発しているとするよ。モジュールフェデレーションを使うと、「決済アプリ」が「カートアプリ」のコンポーネントブラウザ上で動的にダウンロードして使えるんだ。
ひよこ ひよこ
それってどんないいことがあるの?
ペンギン先生 ペンギン先生
各チームが独立してデプロイできるのが大きなメリットだよ。「カートチーム」が更新したら、「決済アプリ」側はコードを変えなくても自動的に最新版を使えるんだ。また共通ライブラリReactやLodashなど)を一度だけロードして共有できるから、無駄な重複ダウンロードも防げるよ。
ひよこ ひよこ
設定はどうやるの?
ペンギン先生 ペンギン先生
Webpackの設定で「公開する側(Remote)」と「消費する側(Host)」を定義するよ。Remoteはどのモジュールを外部に公開するかを宣言して、HostはどのURLのRemoteからどのモジュールを借りるかを設定するんだ。
ひよこ ひよこ
マイクロサービスみたいな考え方をフロントエンドにも適用できるんだね!
ペンギン先生 ペンギン先生
まさにそうだよ。「マイクロフロントエンド」と呼ばれる設計パターンの実装手段として使われていてね。大規模組織でチームが増えたときに、互いの開発を邪魔せずスケールできるのが強みだよ。ただ、バージョン管理デバッグが複雑になるトレードオフもあるから、チーム規模と相談して導入するのが大切だね。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「モジュールフェデレーション」って出てきたら「複数のアプリが実行時に部品を共有する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Module Federation」 = モジュール連合
💬 複数の独立アプリ(国家)がモジュール(資源)を自由に共有する「連合(federation)」のイメージだよ
← 用語集にもどる