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

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

最終更新:
💡 別々のアプリが実行中に部品を貸し借りする仕組み

別々にビルドしたアプリケーション間で、モジュールを実行時に読み込み、組み合わせる仕組み。Webpack 5の機能として知られ、マイクロフロントエンドの実装にも使われる。

📌 このページのポイント
実行時に別ビルドの部品を組み込むHost:EC画面自前のヘッダーカート部品決済部品Remote Aカートを公開Remote B決済を公開shared:共通の依存関係共有する版や数は、設定と版の条件による
矢印はRemoteからHostへ読み込む部品を表す。独立して公開できるが、更新の反映には参照URL・配信・互換性などの条件がある。
ひよこ ひよこ
モジュールフェデレーションって何ができるの?
ペンギン先生 ペンギン先生
別々にビルドしたアプリのコードを、実行時に読み込んで組み合わせられるよ。Webpack 5で導入された機能として知られるけれど、それだけに限定された考え方ではなく、ほかのビルドツール向けの実装もある。ここではWebpackの仕組みを例に考えよう。
ひよこ ひよこ
ECサイトなら、どんな使い方になるの?
ペンギン先生 ペンギン先生
たとえば画面全体をまとめるHostが、カート用Remoteと決済用Remoteから画面部品を取得するんだ。別チームが作った部品を、一つの画面へ組み込める。HostとRemoteは役割の呼び方で、一つのアプリが公開と利用の両方を担うこともあるよ。
ひよこ ひよこ
Remoteを更新すれば、必ず最新版が使われる?
ペンギン先生 ペンギン先生
独立して公開できるのは利点だけれど、Hostが参照するURLや配信・キャッシュ、版の扱いによるよ。新しい部品がHostの想定と互換かも確認する必要がある。無条件に最新版へ切り替わって安全に動く、と保証する仕組みではないんだ。
ひよこ ひよこ
共通ライブラリは一度しか読み込まれないの?
ペンギン先生 ペンギン先生
sharedで依存関係を共有できるけれど、設定とバージョンの条件によるよ。要求する版が違えば、複数の版を使う場合もある。singletonは一つのインスタンスを使うための指定だが、それで互換性まで保証されるわけではない。共有しただけで必ず通信量が最小になるとは限らないんだ。
ひよこ ひよこ
設定や運用では何を考えるの?
ペンギン先生 ペンギン先生
Webpackではexposesで公開する部品、remotesで参照先、sharedで共有する依存関係を設定するよ。その上で、取得失敗や互換性の崩れをどう扱うかを決める。マイクロフロントエンドを実現する手段の一つなので、独立公開の利点と、接続先や版を管理する手間を合わせて考えよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「モジュールフェデレーション」って出てきたら「複数のアプリが実行時に部品を共有する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Module Federation」 = モジュール連合
💬 複数の独立アプリ(国家)がモジュール(資源)を自由に共有する「連合(federation)」のイメージだよ

参考資料

← 用語集にもどる