基本事項 †
monorepoとは †
- 1つのリポジトリで複数のモジュールリポジトリを管理すること
- マイクロサービス単位に分割された各資源をその分割状態を維持したまま単一のリポジトリで管理する方法
- 管理する対象が一つになったことで、施さなければいけない対応やプロダクト全体の見通しが良くなる
- 他にもプロダクトコードにまつわる周辺ツールの管理もしやすいなどと、プロダクト全体で共通するものの管理に関する問題が解消される
- Monorepoの目指すべき姿は、ソース管理は単一で、デプロイラインは複数
- 例えば、何も考えずにリポジトリ単位でパイプラインを構築すると、全サービスに対する各種処理(テスト。ビルド等)が走ってしまって単一の重いパイプラインになってしまうので注意
- コード管理のみを一点に集約し、実際にテスト、ビルド、デプロイされるものは従来通りサービスごとに独立して行える状態である必要があるということ
- これを実現するために、パイプライン側でテスト、ビルド、デプロイに関するステップをリポジトリで管理されている各サービス単位で行えるように設定する必要がある
- Modular Monolithとの違いはデプロイラインの状態で区別ができるが、そもそもの目指すべきものは同じでただ段階が違うだけ
Pros †
- 単一のlint、ビルド、テスト、リリースのプロセス
- モジュールをまたいだ変更がしやすい
i-ssueを報告する場所が一つ
- 開発環境のセットアップが容易
- モジュールをまたいだテストが一緒に実行されるため、複数のモジュールにまたがるバグがより簡単に見つかる
- ライブラリ等のバージョンアップ対応に関しても、単一リポジトリとなる事で、そのリポジトリ内で一元管理している依存関係をアップデートしてあげれば一瞬で、使用している全サービスへの反映ができる
事例 †
関連ツール †
Nx †
Git †