モノレポ
表示
モノレポ(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/
特徴
[編集]メリット
[編集]- 依存関係の管理が一元化
- 共通ライブラリを改修すると、同じコミットで全アプリに反映できる。
- 一括ビルド・テストが容易
- CIで全プロジェクトを同時にテスト可能。
- 履歴や変更が一元で追える
- どのコミットで何が壊れたかを全体で追跡しやすい。
- 開発ツールの共通化
- Linter、ビルドスクリプト、CI設定を全体で共有できる。
デメリット
[編集]- リポジトリが巨大化
- 無関係な変更もpullされるためクローンが重い。
- CIが遅くなりがち
- 全体テストに時間がかかる。
- 権限管理が難しい
- 部分的なアクセス制御がやりにくい。
モノレポとGoのgo.work
[編集]- Goのgo.workはモノレポ開発をかなりやりやすくする仕組みです。
- モノレポ構成で各ディレクトリに
go.modがある場合、go.workにuseとして列挙すれば、ローカルの最新版がそのまま依存解決に使われます。 - つまり、モノレポで共通ライブラリを変更→アプリ側で即テストが可能になります。