コンテンツにスキップ

モノレポ

出典: フリー教科書『ウィキブックス(Wikibooks)』

モノレポ(monorepo)は "monolithic repository"(単一リポジトリ) の略で、複数のプロジェクトやモジュールを 1つのリポジトリ にまとめて管理する方式です。

基本イメージ

[編集]

従来のマルチレポ(multi-repo)

[編集]

プロジェクトごとに別々のGitリポジトリ

例:
  git.example.com/app1
  git.example.com/app2
  git.example.com/common-lib

モノレポ(monorepo)

[編集]

全部まとめて1つのGitリポジトリ

例:
  monorepo/
  ├── app1/
  ├── app2/
  └── common-lib/

特徴

[編集]

メリット

[編集]
  1. 依存関係の管理が一元化
    • 共通ライブラリを改修すると、同じコミットで全アプリに反映できる。
  2. 一括ビルド・テストが容易
    • CIで全プロジェクトを同時にテスト可能。
  3. 履歴や変更が一元で追える
    • どのコミットで何が壊れたかを全体で追跡しやすい。
  4. 開発ツールの共通化
    • Linter、ビルドスクリプト、CI設定を全体で共有できる。

デメリット

[編集]
  1. リポジトリが巨大化
    • 無関係な変更もpullされるためクローンが重い。
  2. CIが遅くなりがち
    • 全体テストに時間がかかる。
  3. 権限管理が難しい
    • 部分的なアクセス制御がやりにくい。

モノレポとGoのgo.work

[編集]
  • Goのgo.workモノレポ開発をかなりやりやすくする仕組みです。
  • モノレポ構成で各ディレクトリにgo.modがある場合、go.workuseとして列挙すれば、ローカルの最新版がそのまま依存解決に使われます。
  • つまり、モノレポで共通ライブラリを変更→アプリ側で即テストが可能になります。