コラボレーションしやすいGit構造、モノレポ vs マルチレポどちらが正しいのか?

最近チームプロジェクトをやってると、こういう悩み、本当に多く聞きます
。「サービスも増えて、アプリもいくつもできるのに…リポジトリを一つでずっと続けても大丈夫かな?」
最初は一つのGitHubリポジトリでみんなで作業するから楽だったんですが、
ファイルが増えてCI/CD設定も複雑になってくると、だんだん『モノレポ vs マルチレポ』の悩みが始まるんですよね。

私もそうでした。一人で開発している時は気にしていなかったのに、チームが3~5人くらいになるとすぐに問題が噴出しました。
ブランチの衝突、テスト速度、PRマージの順序…一つ一つが協業の生産性に直結する要素だったんです。

そこでこの記事では、私のように「どこまで一つにまとめるべきか?」と悩む方々のために、
モノレポとマルチレポの違い、長所・短所、移行タイミング、実践的な構造例までまとめました。

開発経験が少なくても理解できるよう、スーパーマーケットの例えからgitコマンドの実践まで段階的に解説しています
。今すぐ構造に悩んでいるなら、この記事で整理してみてください!

📌 モノレポ vs マルチレポの概念定義

  • モノレポ(Monorepo):
    複数のプロジェクト(サービス)のコードを1つのリポジトリで共同管理する方式です。
  • マルチレポ(Multirepo):
    プロジェクトやサービスごとにそれぞれ別のリポジトリを使用する方式です。

🪄 モノレポ vs マルチレポ 比喩(簡単に考えてみましょう!)

  • モノレポは大型スーパー1つに全ての商品があるようなものです。
    一か所に行けば必要なものを全て購入できます。効率的で迅速です。
  • マルチレポは、果物屋、パン屋、精肉店のようにそれぞれ別々に運営されている市場です。
    専門性は高いですが、複数の場所を回らなければなりません。

💡 使用例(実際のフォルダ構造)

モノレポ構造の例

project-root/
├─ core/ # 핵심 기능 모듈
│ ├─ module1/
│ ├─ module2/
│ └─ ...
├─ apps/ # 사용자-facing 앱들
│ ├─ app1/
│ ├─ app2/
│ └─ ...
├─ shared/ # 공통 코드
│ ├─ security/
│ └─ quality/
├─ infra/ # 배포, 도커 등 인프라 설정
├─ .github/
│ └─ workflows/ # GitHub Action 자동화 설정
└─ tasks.json # 작업 관리용 설정 파일

Gitブランチ戦略例

ブランチ説明
main安定版、実際のデプロイに使用
dev複数の機能を統合してテストするブランチ
feat/新機能作業用個人ブランチ → devにマージ (PR)

🔄 マルチリポジトリへの自然な移行段階

  1. 特定のアプリが別チームで管理される場合、そのアプリフォルダのみを新規リポジトリに分離bashコピー編集git filter-repo --subdirectory-filter apps/app1 --force
  2. 共通コードは shared/ ディレクトリを内部パッケージやサブモジュールに分離して再利用
  3. 各アプリごとに独自のCI/CD自動化を構成(互いに独立してデプロイ可能に)

🧠 どこで使うのか?(各方式の長所・短所)

✅ モノレポが有利なケース

  • プロジェクト開始段階
  • チーム規模が小さい場合(2~5名)
  • 機能が頻繁に影響し合う場合
  • テストや修正作業を迅速に行いたい場合

✅ マルチリポジトリが有利な場合

  • プロジェクトが大きくなり、サービス同士が完全に独立している場合
  • 複数のチームが分担して並行開発する場合
  • サービスごとにデプロイやセキュリティ権限を個別に管理する必要がある場合

✅ 覚えておきたいコツを一行でまとめ!

初期は単体で(モノリシック)、規模拡大時は分割して(マルチレポジトリ)!

🚀 今すぐ使える実行手順(実習用例)

(1) GitHubリポジトリ作成 + 初期化

gh repo create my-monorepo --private
cd my-monorepo && git init

(2) フォルダ構造のスキャフォールド生成 & 初回コミット

git add .
git commit -m "chore: initial scaffold with core & apps"
git push -u origin main

(3) GitHub Actionsによる自動テスト設定 (.github/workflows/ci.yml)

name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: pip install -r requirements.txt
- run: pytest

(4) VSCodeワークスペース設定

  • .code-workspacecore/, apps/ フォルダを含めて検索とテストを同時に行えるように設定

(5) リリースタグの付与

git tag -a v0.1.0 -m "MVP scaffold"
git push origin v0.1.0

モノレポで始めて楽に管理し
規模が大きくなったらマルチレポへ自然に切り替えます!😄

コメントする

목차