マイクロフロントエンドは、モジュール化と分散開発を可能にするアーキテクチャで、特に大規模なアプリケーション開発において有効です。本章では、その基礎と利点、Reactを用いた実装方法、型を跨いだ連携のベストプラクティスについて解説します。
1. マイクロフロントエンドの基礎と利点
マイクロフロントエンドとは
- マイクロサービスのフロントエンド版。
- アプリケーションを小さな独立したモジュールに分割し、それぞれが独立してデプロイ可能。
利点
独立性:
- 各チームが特定のモジュールに集中して作業できる。
- 異なる技術スタックを同一アプリ内で併用可能。
スケーラビリティ:
- 大規模アプリケーションを分割し、スケール可能な開発体制を実現。
柔軟なデプロイ:
- モジュール単位での更新が可能。全体を再デプロイする必要がない。
故障の分離:
- 1つのモジュールが問題を起こしても他の部分には影響しない。
2. Reactでの実装方法 (Module Federationなど)
Module Federationとは
- 概要:
- Webpack 5で導入された仕組みで、複数のプロジェクト間でコードを共有可能。
- ランタイムで他のアプリケーションからモジュールを動的にインポート。
実装例
設定手順
Webpackの設定:
- 各プロジェクトでModule Federation Pluginを使用。
javascriptconst { ModuleFederationPlugin } = require("webpack").container; module.exports = { mode: "development", plugins: [ new ModuleFederationPlugin({ name: "app1", filename: "remoteEntry.js", exposes: { "./Button": "./src/Button", }, shared: { react: { singleton: true }, "react-dom": { singleton: true } }, }), ], };
ホストアプリケーションでの使用:
- 他のアプリからモジュールを動的に読み込む。
javascriptconst { ModuleFederationPlugin } = require("webpack").container; module.exports = { mode: "development", plugins: [ new ModuleFederationPlugin({ name: "host", remotes: { app1: "app1@http://localhost:3001/remoteEntry.js", }, }), ], };
使用例:
tsximport React from "react"; const Button = React.lazy(() => import("app1/Button")); const App = () => ( <React.Suspense fallback="Loading..."> <Button /> </React.Suspense> ); export default App;
3. 型を跨いだ連携のベストプラクティス
型安全性の確保
- 複数プロジェクト間で型を共有することが重要。
方法1: 型定義パッケージを共有
手順:
- 共通の型を別のNPMパッケージとして公開。
- 各プロジェクトでインストールして使用。
typescript// types/index.ts export interface ButtonProps { label: string; onClick: () => void; }
方法2: Module Federationと型の統合
手順:
- 型定義ファイルをModule Federationでエクスポート。
javascriptexposes: { "./types": "./src/types", },
- ホストアプリケーションでインポートして利用。
typescriptimport { ButtonProps } from "app1/types"; const props: ButtonProps = { label: "Click Me", onClick: () => {} };
ツールの活用
TypeScript Project References:
- プロジェクト間で型を効率的に参照。
json{ "compilerOptions": { "composite": true }, "references": [ { "path": "../shared-types" } ] }
マイクロフロントエンドは、モジュール化された柔軟なアプリケーション開発を可能にします。本章で紹介した手法を活用し、スケーラブルで型安全なマイクロフロントエンドアーキテクチャを構築しましょう。