モノレポとは
モノレポ(Monorepo)とは、複数のプロジェクトやパッケージを1つのリポジトリで管理する手法だ。フロントエンド、バックエンド、共有ライブラリ、インフラ設定などが、すべて同じGitリポジトリに格納される。
メリット
- コードの共有が容易:共有ライブラリの変更が即座にすべてのプロジェクトに反映される
- アトミックな変更:APIの変更とそのクライアント側の修正を1つのコミットで行える
- 統一された設定:ESLint、TypeScript設定、CI/CDパイプラインを一元管理
- 依存関係の可視化:プロジェクト間の依存関係が明示的に管理される
デメリット
- リポジトリの肥大化:Git操作が遅くなり、cloneに時間がかかる
- CI/CDの複雑化:変更の影響範囲を正確に把握し、必要なビルドだけを実行する仕組みが必要
- アクセス制御の難しさ:リポジトリ単位の権限管理ができないため、コード所有権の管理が複雑になる
- ツールへの依存:効率的に運用するために専用ツール(Nx、Turborepo等)が必要
マルチレポとは
マルチレポ(Multirepo / Polyrepo)とは、プロジェクトやサービスごとに独立したリポジトリを持つ手法だ。マイクロサービスアーキテクチャと相性が良く、各チームが独立してリポジトリを管理する。
メリット
- 独立性:チームごとに独自の開発サイクル、リリースタイミングを持てる
- シンプルなCI/CD:リポジトリ単位でパイプラインを構築でき、影響範囲が明確
- アクセス制御:リポジトリ単位で権限を設定できる
- 技術の多様性:各リポジトリで異なる言語・フレームワークを使える
デメリット
- コード共有の摩擦:共有ライブラリをnpmパッケージ等として公開・管理する手間が発生する
- 横断的変更の困難さ:複数リポジトリにまたがる変更は、PRが分散し調整コストが高い
- 設定の分散:ESLint、テスト設定等がリポジトリごとにバラバラになりやすい
- 依存関係の管理:サービス間の依存バージョンが乖離しやすい
2026年のモノレポツール事情
Nx
Nrwlが開発するNxは、最も機能が豊富なモノレポツールだ。依存グラフの可視化、影響を受けたプロジェクトのみのビルド、分散キャッシュ(Nx Cloud)など、大規模モノレポの運用に必要な機能が揃っている。
Turborepo
Vercelが買収・開発するTurborepoは、シンプルさと高速性を重視したモノレポビルドツールだ。既存のnpm/pnpm workspacesに最小限の設定で導入でき、学習コストが低い。リモートキャッシュによるビルド高速化が大きな売りだ。
pnpm workspaces
pnpmのワークスペース機能は、モノレポの依存関係管理において最も効率的だ。コンテンツアドレッサブルストレージにより、ディスク使用量を大幅に削減する。Turborepoやnx との併用がデファクトスタンダードとなっている。
Bazel
Googleが開発したBazelは、超大規模モノレポ向けのビルドシステムだ。言語に依存しない汎用的なビルドが可能で、Googleの数十億行のコードベースを支えている。ただし学習コストが非常に高く、中小規模チームには過剰なことが多い。
判断基準:どちらを選ぶべきか
モノレポが向いているケース:
- チーム間のコード共有が頻繁
- フロントエンドとバックエンドの密結合が高い
- 統一された品質基準・ツールチェーンを維持したい
- 少〜中規模チーム(50人以下)
マルチレポが向いているケース:
- マイクロサービスアーキテクチャで各チームが独立運用
- 外部への公開APIやSDKを提供している
- チーム間の技術スタックが大きく異なる
- 厳密なアクセス制御が必要
「正解」は文脈の中にある
モノレポかマルチレポかは、技術的な優劣の問題ではなく、組織の文脈に依存する設計判断だ。チームの規模、開発文化、プロダクトのアーキテクチャ、そして何を最も重視するかによって最適解が変わる。
重要なのは「みんなが使っているから」ではなく、自分たちの課題に対して最も効果的な選択をすることだ。あなたのチームには、どちらのアプローチがフィットするだろうか。