バージョン管理、デプロイ、オーケストレーション
セマンティックバージョニングでリモートを個別にデプロイし、共有ライブラリの競合を管理してリリースを調整します。
「バージョン管理、デプロイ、オーケストレーション」はCoddyKit上の無料React Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。
独立デプロイ:中核となる価値
Module Federationの主な価値は独立デプロイです。あるチームは、hostチームとの調整やhostの再デプロイを発生させることなく、remoteを更新、テスト、デプロイできます。hostは次回remoteのURLからremoteEntry.jsを読み込む際に、変更を自動的に取得します。
remote URLのバージョニング
デプロイのたびに変わるremoteEntry.jsを固定URLで配信するのではなく、URLにコンテンツハッシュを含めます:remoteEntry.[hash].js。これにより各デプロイが不変になり、古いURLは引き続き機能します。また、hostを新しいデプロイに更新すると、新しいハッシュを持つURLを参照するようになります。不変URLによって、CDNで積極的にキャッシュできるようになります。
インフラレベルのフィーチャーフラグ
hostはURLを介してremoteを検出するため、インフラレベルでA/Bテストを実装できます。異なるユーザーに、異なるバージョンのremoteを指す別々のremoteEntry.js URLを配信する方法です。これにより、アプリケーションコードにフィーチャーフラグのロジックを追加せずに、マイクロフロントエンドで真のカナリアデプロイを実現できます。
柔軟な検出のためのマニフェスト方式
Webpack設定にremote URLをハードコードする代わりに、hostが起動時にJSONマニフェストを取得します:GET /federation-manifest.json returns { buttonApp: 'https://cdn.example.com/button/remoteEntry.abc123.js' }。hostが使用するバージョンを更新するには、マニフェストを更新するだけで済み、hostの再ビルドは必要ありません。
マニフェスト更新によるロールバック
remoteのデプロイによってリグレッションが発生した場合、ロールバックは即座に行えます。federation-manifest.jsonを更新して、以前のremoteEntry.js URLを指すようにします。hostは次のリクエストサイクルから、すぐに古いバージョンを使用し始めます。hostの再ビルドもロールバックも、チーム間の調整も必要ありません。
Webpack Module Federation 2.0
Module Federation 2.0(@module-federation/enhanced パッケージ)では、大幅な改善が加えられています。リモートマニフェストからの型の自動生成による TypeScript サポートの強化、独自の読み込みロジックに対応するランタイムプラグイン API、複雑なバージョン交渉にも対応する共有スコープ管理の強化などです。
Vite 用 vite-plugin-federation
vite-plugin-federation パッケージを使うと、Module Federation を Vite ベースのプロジェクトで利用できます。Webpack の ModuleFederationPlugin と同様の設定 API を使用し、Vite のリモートと Webpack のホスト、またはその逆の組み合わせにも対応しています。これにより、Module Federation を手放すことなく、チームは段階的に Vite へ移行できます。
実行時の動的なリモート
高度に動的なアーキテクチャでは、リモート URL を完全に実行時に設定できます。たとえば、remoteRegistry[featureName] が API 呼び出しによって設定されている場合に import(remoteRegistry[featureName]) とします。これにより、シェルアプリケーションを一度も再ビルドせずに新しいマイクロフロントエンドを追加できる、プラグインのようなアーキテクチャを実現できます。
オーケストレーターとしてのシェルアプリケーション
シェルアプリケーションの主な役割はオーケストレーションです。リモートマニフェストを読み込み、Module Federation のランタイムを初期化し、名前付きルートにリモートモジュールを登録して、現在の URL に応じたリモートを描画します。シェルは意図的に薄く設計されており、何を読み込むかは把握しますが、どのように描画するかは関知しません。
本番環境での Module Federation の監視
リモートの読み込みにパフォーマンス監視を追加します。リモートの import を try/catch で囲んで読み込み失敗を適切に処理し、リモートが利用できない場合はフォールバック UI を描画します。また、remoteEntry.js とコンポーネントチャンクのダウンロード時間を測定し、リモートの読み込み時間がしきい値を超えた場合は通知します。これは CDN の問題を示している可能性があります。
完全な CI/CD パイプライン
成熟した Module Federation の CI/CD パイプラインは、次のようになります。リモートチームがコミット → CI がリモートをビルド → 不変の remoteEntry.[hash].js を CDN にアップロード → federation-manifest.json を更新 → ホストが次回のユーザーリクエスト時に新しいリモートを取得します。各ステップが自動化されているため、ホストチームがリモートのデプロイに関与する必要はありません。
Module Federation のロールバック戦略
問題のある Module Federation リモートのデプロイをロールバックする最も速い方法は何でしょうか?
レッスンのまとめ
Module Federation によって、真に独立したデプロイが可能になります。リモートはホストを再ビルドせずにデプロイでき、ホストは新しいバージョンを自動的に検出します。不変の CDN キャッシュを利用するにはコンテンツハッシュ付きのリモート URL を使用し、柔軟なバージョンルーティングと即時ロールバックには動的マニフェストを使用します。vite-plugin-federation によってこれらの機能を Vite でも利用でき、動的なリモート import によってプラグインのようなアーキテクチャを実現できます。シェルがリモートの読み込みをオーケストレーションすることで、自身は意図的に薄く保たれます。
AI チューターと学ぶ React — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 88
- レッスン
- 324
よくある質問
「バージョン管理、デプロイ、オーケストレーション」レッスンは無料ですか?
はい。「バージョン管理、デプロイ、オーケストレーション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。
「バージョン管理、デプロイ、オーケストレーション」で何を学びますか?
セマンティックバージョニングでリモートを個別にデプロイし、共有ライブラリの競合を管理してリリースを調整します。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
React Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「バージョン管理、デプロイ、オーケストレーション」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このReact Academyレッスンでコードを書いて実行できますか?
はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Module Federation:動的ランタイムインポート
- ホストとリモートのReactアプリを設定する
- リモート間で状態とルーティングを共有する
- バージョン管理、デプロイ、オーケストレーション