https://circleci.com/ja/blog/monorepo-dev-practices/
Monorepo(モノレポ)とは、アプリケーションやマイクロサービスの全コードを単一のモノリシックなリポジトリ (普通は Git) に保存するパターンを指します。 一般的には、さまざまなアプリ コンポーネントのコードをサブフォルダーに分割し、新機能やバグ修正には Git ワークフローを使用します。 モノリシック アーキテクチャでアプリケーションやシステムを開発するのであれば、たいていは、こうしたアプローチを自然と採用することになります。
通常、このようなMonorepoでは、コードから実行可能なアプリケーションを生成するビルド パイプラインも 1 つだけです。この手法は、メンテナンスはしやすいのですが、全体的な開発速度は落ちます。修正に手間のかかるバグが少しあるだけで、リリース候補版を本番環境にデプロイできなくなってしまうからです。
この記事では、MonorepoとPolyrepo (ポリレポ) の違いを説明し、モノレポのメリットとデメリットを比較してから、モノレポがみなさんの開発チームにとって適切な手法かを判断する際のポイントをお伝えします。
マイクロサービス アーキテクチャの普及につれて、コードを多数のリポジトリに分割する (いわゆるポリレポです) チームが増えてきました。 各マイクロサービスの開発チームはそれぞれ独立しており、それぞれの課題に合ったツールとプログラミング言語を使用します。 たとえば、人工知能 (AI) を開発する開発者は Python を使用する一方で、API の実装を担当する開発者は Java や .NET を使用しているという具合です。
ポリレポのメリットは明白です。 チームが 1 つだけでありその規模が小さければ、マイクロサービスを迅速に実装し、担当者が別々にデプロイを行なうことで、ソフトウェア開発のスピードを大きく高められます。
しかし、リポジトリの分割にはリスクもあります。複数のリポジトリを各担当チームがバラバラにメンテナンスするので、システムに関する知識が分散してしまうのです。 その結果、システム全体をビルドしデプロイする方法を知っている人がだれもいないという事態になりかねません。
マイクロサービスの開発では、ポリレポが当然の選択肢に思えます。しかし、モノレポの問題点は、ビルドとデプロイのパイプラインを統一し自動化することでほぼ解決できるものです。 モノレポならではのメリットやよくある誤解を詳しく見て、みなさんのチームに適しているかどうかを考えてみましょう。
モノレポには次のようなメリットがあります。