モノレポ

複数のプロジェクトやパッケージを 1 つのリポジトリで管理する手法

開発ツールアーキテクチャ

モノレポとは

モノレポ (Monorepo) は、複数のプロジェクトやパッケージを 1 つの Git リポジトリで管理する手法である。Google、Meta、Microsoft が採用。対義語はポリレポ (Polyrepo)。

モノレポ vs ポリレポ

観点 モノレポ ポリレポ
コード共有 容易 (同一リポジトリ) パッケージ公開が必要
依存管理 一元管理 リポジトリごとに管理
CI/CD 変更影響の検出が必要 リポジトリ単位で独立
コードレビュー 横断的な変更を 1 PR で 複数リポジトリに PR
スケール 大規模で遅くなる リポジトリが増える

ディレクトリ構成

my-monorepo/
├── packages/
│   ├── frontend/     # React アプリ
│   ├── backend/      # Lambda 関数
│   ├── shared/       # 共通の型定義・ユーティリティ
│   └── infra/        # CDK / SAM テンプレート
├── package.json      # ルートの設定
└── turbo.json        # Turborepo の設定

npm workspaces

{
  "name": "my-monorepo",
  "workspaces": ["packages/*"],
  "scripts": {
    "build": "turbo build",
    "test": "turbo test",
    "lint": "turbo lint"
  }
}

Turborepo

{
  "tasks": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": ["dist/**"]
    },
    "test": {
      "dependsOn": ["build"]
    }
  }
}

Turborepo はタスクの依存関係を解析し、キャッシュと並列実行で高速化する。

モノレポのツール

ツール 特徴
Turborepo 高速ビルド、キャッシュ
Nx プラグインエコシステム
Lerna npm パッケージ公開
pnpm workspaces 高速なパッケージマネージャ

CI/CD での影響範囲の検出

# GitHub Actions: 変更されたパッケージのみビルド
- run: npx turbo build --filter=...[HEAD~1]

全パッケージをビルドするのではなく、変更されたパッケージとその依存先のみをビルドする。

いつモノレポを使うか

ケース 推奨
フロントエンド + バックエンド + 共通型 モノレポ
独立したマイクロサービス ポリレポ
小規模チーム (1〜5 人) モノレポ
大規模組織 (100 人以上) 要検討

体系的に学ぶなら関連書籍を参照してほしい。

関連用語