マイクロフロントエンド

フロントエンドをチームごとに独立した小さなアプリケーションに分割し、個別にデプロイ可能にするアーキテクチャ

フロントエンドアーキテクチャ

マイクロフロントエンドとは

マイクロフロントエンド (Micro Frontends) は、マイクロサービスの考え方をフロントエンドに適用し、1 つの Web アプリケーションを複数の独立したフロントエンドアプリに分割するアーキテクチャである。各チームが独立して開発・デプロイできる。

モノリシック vs マイクロフロントエンド

モノリシックとマイクロフロントエンドの違いを以下にまとめる。

観点モノリシック SPAマイクロフロントエンド
デプロイ全体を一括デプロイチームごとに個別デプロイ
技術スタック統一 (React のみ等)チームごとに選択可能
チーム独立性低い (コンフリクト多発)高い
初期コスト低い高い
適するチーム規模小〜中大規模 (3 チーム以上)

統合パターン

統合パターンを以下にまとめる。

パターン説明
ビルド時統合npm パッケージとして統合Module Federation
ランタイム統合iframe や Web Components で統合single-spa
サーバーサイド統合サーバーで HTML を合成Tailor, Podium
エッジサイド統合CDN で HTML を合成CloudFront Functions

Module Federation (webpack 5)

Module Federation (webpack 5) のコード例を示す。

// チーム A: ヘッダーを公開
new ModuleFederationPlugin({
  name: 'header',
  filename: 'remoteEntry.js',
  exposes: { './Header': './src/Header' },
});

// チーム B: ヘッダーを利用
new ModuleFederationPlugin({
  name: 'main',
  remotes: { header: 'header@https://header.example.com/remoteEntry.js' },
});
// チーム B のコード
const Header = React.lazy(() => import('header/Header'));

function App() {
  return (
    <Suspense fallback={<div>Loading...</div>}>
      <Header />
      <MainContent />
    </Suspense>
  );
}

AWS でのホスティング

AWS でのホスティングを図で示す。

CloudFront
  ├── /header/*  → S3 (チーム A)
  ├── /product/* → S3 (チーム B)
  └── /cart/*    → S3 (チーム C)

各チームが独立した S3 バケットにデプロイし、CloudFront のパスベースルーティングで統合する。

使うべきケース / 使うべきでないケース

使うべきケース / 使うべきでないケースを以下に示す。

✅ 使うべき❌ 使うべきでない
3 チーム以上が 1 つの Web アプリを開発小規模チーム (1〜2 人)
チームごとに独立したデプロイが必要シンプルな SPA
レガシーの段階的な移行新規プロジェクト (初期コストが高い)

実務での活用方法は関連書籍にも詳しい。

この記事は役に立ちましたか?

関連用語

関連する記事