モノレポ
複数のプロジェクトやパッケージを 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
npm workspaces の例を示す。
{
"name": "my-monorepo",
"workspaces": ["packages/*"],
"scripts": {
"build": "turbo build",
"test": "turbo test",
"lint": "turbo lint"
}
}
Turborepo
Turborepo の例を示す。
{
"tasks": {
"build": {
"dependsOn": ["^build"],
"outputs": ["dist/**"]
},
"test": {
"dependsOn": ["build"]
}
}
}
Turborepo はタスクの依存関係を解析し、キャッシュと並列実行で高速化する。
モノレポのツール
モノレポのツールを以下に示す。
| ツール | 特徴 |
|---|---|
| Turborepo | 高速ビルド、キャッシュ |
| Nx | プラグインエコシステム |
| Lerna | npm パッケージ公開 |
| pnpm workspaces | 高速なパッケージマネージャ |
CI/CD での影響範囲の検出
CI/CD での影響範囲の検出の例を示す。
# GitHub Actions: 変更されたパッケージのみビルド
- run: npx turbo build --filter=...[HEAD~1]
全パッケージをビルドするのではなく、変更されたパッケージとその依存先のみをビルドする。
いつモノレポを使うか
選択の軸は、変更が複数パッケージにまたがる頻度と、リポジトリを大きくした代償を引き受けられるかどうかである。
| 場面 | 判断 | 理由 |
|---|---|---|
| フロントエンド・バックエンド・共通の型定義を一緒に育てる | モノレポ | 型を変えた影響を 1 つの PR で全利用側まで直せ、パッケージを公開してからバージョンを上げる往復が消える |
| 小規模チーム (1〜5 人) で全員が全領域を触る | モノレポ | 一元管理された依存とルートの turbo test で全体を一度に検証でき、リポジトリを行き来する切り替えコストが減る |
| 各サービスが独立してリリースされ、共有コードもほぼない | ポリレポ | 一緒に置く利点が薄い一方、モノレポでは影響範囲の検出を CI に組み込まないと無関係なビルドまで走る |
| 大規模組織 (100 人以上) で同じ場所に集約したい | 段階的に判断 | リポジトリの履歴とビルド対象が膨らみ、影響範囲の検出とキャッシュを整えないと CI 時間が伸び続けるため、まず数チームで試してから広げる |
体系的に学ぶなら関連書籍を参照してほしい。
この記事は役に立ちましたか?
関連用語
コードベースとは - リポジトリ構成とモノレポ/ポリレポの選び方
コードベースはプロジェクトのソースコード全体を指す用語。モノレポ vs ポリレポの判断基準 / コードベースの健全性を保つリファクタリング戦略を解説
CI/CD
コードの変更を自動的にビルド / テスト / デプロイするパイプライン
依存管理
プロジェクトが使用する外部パッケージのバージョン管理と更新を行う仕組み
リポジトリパターン
データアクセスロジックをカプセル化し、ビジネスロジックからデータストアの詳細を隠蔽するパターン
GitHub
Git を基盤としたソースコードのホスティング / 共同開発プラットフォーム
Git
分散型バージョン管理システムで、ソースコードの変更履歴を管理する
関連する記事
DevOps 本ガイド - CI/CD とインフラ自動化を学ぶ技術書の選び方
DevOps の文化と原則から CI/CD、IaC、オブザーバビリティまで学べる技術書の選び方と学習順序を紹介します。
技術書 1 冊分の知識で年収が 50 万円変わる計算
技術書への投資リターンを具体的な数字で試算します。1 冊 3000 円の本が、スキルアップを通じてどれだけの年収増につながりうるのか。投資対効果の観点から技術書の価値を考えます。
技術書がエンジニアのキャリアを変える - 読書習慣と年収の関係
技術書の読書習慣がエンジニアのキャリアアップに影響する 3 つの経路と、ジュニア / ミドル / シニア各段階に応じた読書戦略を具体的に解説します。