Module Federationの基礎
Module Federationでマイクロフロントエンドを共有できる仕組みを理解します
「Module Federationの基礎」はCoddyKit上の無料HTML Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはHTML Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 HTML Academyコースには全4レッスンが含まれています。
Module Federationとは
Module Federationを使うと、JavaScriptアプリケーションは、別の独立してデプロイされたアプリケーションから実行時にコードを読み込み、実行できます。Webpack 5で始まったこのパターンは、現在ではネイティブのImport mapと動的importでも実現できます。
ユースケース
大規模な組織では、モノリスを複数の「マイクロフロントエンド」に分割し、それぞれを独立してデプロイします。シェルホストと複数の機能アプリケーションで構成されます。Module Federationを使うと、シェルはビルド時にまとめてバンドルすることなく、各機能を必要なときに読み込めます。
Webpack Federation
Webpack 5では、ホストが利用する他のアプリをremotesとして宣言し、リモート側は提供するものをexposesとして宣言します。ランタイムは起動時に各リモートから小さなマニフェストを取得し、ホストがimportした時点でチャンクをダウンロードします。
ネイティブな代替手段
Webpackを使わなくても、リモートのESMバンドルを指すImport mapと、読み込みに使う動的importで同じ考え方を実現できます。ホストのImport mapで"feature-cart": "https://cart-team.example.com/entry.js"と指定すると、import("feature-cart")で最新のデプロイ済みバージョンが読み込まれます。
<script type="importmap">
{
"imports": {
"feature-cart": "https://cart.example.com/v1/entry.js",
"feature-checkout": "https://checkout.example.com/v2/entry.js"
}
}
</script>共有依存関係
調整せずに実装すると、各リモートがReactのコピーを独自に配布することになります。Federationツールでは共有依存関係を宣言でき、最初にReactを読み込んだリモートが、それを他のすべてのリモートで利用できるようにします。ネイティブなアプローチでは、すべてのリモートが同じReact URLを指すようにImport mapを使用します。
独立したデプロイ
各チームが自分のリモートを所有し、任意のタイミングでデプロイします。ホストを再ビルドする必要はなく、次回のページ読み込み時(またはキャッシュバスティングによって)新しいバージョンを取得します。これにより、リリースサイクルを完全に分離できます。
バージョン管理戦略
リモートをバージョン付きURL(/v1/entry.js、/v2/entry.js)に固定すると、ホストのアップグレードを暗黙的ではなく意図的に実行できます。JSPMなどのツールを使い、Import mapレベルでsemverの照合を行うチームもあります。
トレードオフ
Federationには、実行時の複雑さが加わります。ネットワークリクエストの増加、オリジンをまたぐデバッグの難しさ、共有依存関係に互換性がないリスクなどです。本当に独立したデプロイが必要な場合に使用してください。小規模なプロジェクトでは、単一のビルドのほうがシンプルで高速です。
エラーの分離
1つのリモートがクラッシュしても、ホスト全体が停止してはいけません。動的インポートをエラーバウンダリ(React)またはtry/catch(vanilla)でラップし、リモートが失敗したときはフォールバックUIを表示します。機能が一時的に壊れていても、シェルは機能し続けます。
型安全性
リモートのエクスポートには、ホスト側から利用できるコンパイル時の型情報がありません。両方の側から利用する共有TypeScript型を別パッケージで生成するか、フェデレーションの境界で実行時検証(Zod、io-ts)を使用します。
ネイティブとツール
ネイティブフェデレーション(import maps + ESM)はシンプルで標準ベースですが、Webpackの共有依存関係の調整機能はありません。共有依存関係が多い複雑なアプリにはWebpack/Module Federationを、よりシンプルなマイクロフロントエンド構成にはネイティブフェデレーションを選択します。
今後の方向性
W3Cでは、ネイティブフェデレーションの機能を高める、より高度なモジュール読み込みプリミティブが検討されています。これには、共有依存関係のネゴシエーションの改善も含まれます。現時点では、import mapsを基盤として扱い、その上にフェデレーションのツールを構築してください。
理解度チェック
大規模なアプリケーションでModule Federationを使用する主な動機は何ですか。
まとめ
Module Federationを使うと、ホストは独立してデプロイされたリモートから実行時にコードを読み込めます。Webpack 5のツールは共有依存関係のネゴシエーションを追加し、ネイティブフェデレーションはimport mapsと動的インポートを使用します。複数のチームで構成するマイクロフロントエンドアーキテクチャで利用し、独立してデプロイできる自由と引き換えに、複雑さが増すことを受け入れてください。
よくある質問
「Module Federationの基礎」レッスンは無料ですか?
はい。「Module Federationの基礎」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、HTML Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 HTML Academyコースには全4レッスンが含まれています。
「Module Federationの基礎」で何を学びますか?
Module Federationでマイクロフロントエンドを共有できる仕組みを理解します ブラウザで直接実行するハンズオンコードでHTML Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
HTML Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのHTML Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「Module Federationの基礎」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このHTML Academyレッスンでコードを書いて実行できますか?
はい。すべてのHTML Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ESモジュールスクリプト type=module
- Import Maps importmap
- モジュール内の動的import()
- Module Federationの基礎