モノリポジトリとマルチリポジトリ:コードリポジトリ戦略に光を当てる
公開: 2021-12-22モノレポジトリとマルチレポジトリは、Gitを介してコードをホストおよび管理するための2つの主要な戦略です。 戦略とその長所と短所の両方について詳しく説明します。
序章
最新のプロジェクトのほとんどは、Gitで管理およびホストされています。 Gitは、世界中のどこからでも、分散ソースコード管理、バージョン管理、およびコラボレーションのための標準プラットフォームになりました。 Gitは高速で効率的です。 Gitコードをホストおよび管理するには、主に2つのアプローチがあります。
- モノレポ
- マルチリポジトリ
これらのアプローチを掘り下げる前に、レポがどのように機能するかを理解しましょう。
リポジトリとは何ですか?
リポジトリ(リポジトリ)には、プロジェクトのすべてのフォルダとファイルが含まれています。 また、ユーザー、人、およびコンピューターに関する情報も含まれています。
リポジトリデータはバージョン管理されています。 リポジトリは、個人またはチームメンバーのグループが所有できます。
Gitはリポジトリです。 パブリック、プライベート、または内部にすることができます。 GitHubはGitリポジトリのホスティングサービスであり、ユーザーインターフェイスを備えています。
Gitはバージョン管理とコード共有機能を提供しますが、Gitの違いは、開発者がファイルに変更を加えたい場合は、リポジトリ全体をローカルシステムにコピーできることです。 したがって、開発者が特定のプロジェクトへの書き込みアクセス権を持っていない場合でも、コンテンツをローカルにコピーして変更することができます(フォークと呼ばれます)。
さらに、開発者がローカルで行われた変更を共有したい場合は、プロジェクトの所有者に「プルリクエスト」を送信できます。
プロジェクトは単一のサービスを持つことができます。 プロジェクトに複数のワークフローがある場合は、ワークフローごとに複数のサービスを作成できます。 ほとんどの開発者は、1つ以上の機能を備えた、より大きなプロジェクトをより小さな独立したサービスに分割することを好みます。 各サービスは、さまざまなビジネス上の問題を解決できます。 サーバーレスフレームワークの人気により、ユーザーはサービスとして機能にアクセスできます。
これらのfunctions-as-servicesを作成してデプロイしたら、次のステップはそれらを構造化してバージョン管理することです。つまり、すべてのサービスを1つのリポジトリ(mono-repo)に含めるか、サービスごとに個別のリポジトリを作成します(マルチレポジトリ)!
モノレポとは何ですか?
モノリポジトリアプローチでは、すべてのサービスを単一の(モノ)リポジトリに保持できます。 各サービスを個別に展開および管理することもできます。 サービスは、共通のライブラリとコードを共有できます。
Facebook、Google、Dropboxなどの企業はモノリポジトリを使用しています。
モノレポの利点
モノリポジトリアプローチには多くの利点があります。
- すべてのプロジェクトコードを保存する単一の場所であり、チームの全員がアクセスできます
- コードの再利用と共有が簡単で、チームと協力できます
- プロジェクト全体に対する変更の影響を簡単に理解できます
- コードのリファクタリングとコードの大幅な変更に最適なオプション
- チームメンバーは、プロジェクト全体の全体像を把握できます
- 依存関係の管理が簡単
モノレポジトリのデメリット
もちろん、モノレポジトリにはいくつかの欠点があります。主な欠点はパフォーマンスです。 プロジェクトが大きくなり、1日おきにファイルが追加されると、チェックアウト、プル、およびその他の操作が遅くなり、ファイル検索に時間がかかる場合があります。
また、プロジェクトに多くの独立した請負業者を雇う場合、コードベース全体へのアクセスを許可することはそれほど安全ではない可能性があります。
さらに、多くの人が変更をチェックインでき、継続的インテグレーション(CI)システムで複数の再構築が必要になる可能性があるため、継続的デプロイメント(CD)を実装することは困難です。
モノリポジトリを使用する大企業は、スケールアップの問題を処理するためにカスタマイズされたツールを持っています。 たとえば、Facebookはカスタムファイルシステムとソース管理を使用します。

マルチリポジトリとは何ですか?
マルチリポジトリアプローチでは、プロジェクトの複数のライブラリとサービスをホストする複数のリポジトリがあります。 サービスが変更された場合、開発者はプロジェクト全体ではなく、そのサービスのみを再構築する必要があります。 個人およびチームは特定のサービスに取り組むことができ、必要なサービスのみにアクセスできます。
NetflixやAmazonなどの企業はマルチリポジトリを使用しています。
マルチリポジトリの利点
マルチレポジトリを採用している企業の数は、以下の理由により、モノレポジトリを採用している企業よりもはるかに多くなっています。
- 各サービスとライブラリには独自のバージョン管理があります
- コードのチェックアウトとプルは小さく、別々であるため、プロジェクトのサイズが大きくなってもパフォーマンスの問題はありません。
- チームは独立して作業でき、コードベース全体にアクセスする必要はありません
- より迅速な開発と柔軟性
- 各サービスは個別にリリースでき、独自の展開サイクルを持つため、CIとCDの実装が容易になります
- より優れたアクセス制御–すべてのチームがすべてのライブラリに完全にアクセスできる必要はありませんが、必要に応じて読み取りアクセスを取得できます
マルチリポジトリのデメリット
- 最新バージョンを取得するには、サービスとプロジェクト間で使用される依存関係とライブラリを定期的に同期する必要があります
- ある時点でサイロ化された文化を奨励し、重複したコードと同じ問題を解決しようとする個々のチームにつながります
- 各チームは、コードのさまざまなベストプラクティスに従う可能性があり、一般的なベストプラクティスに従うことが困難になります。
モノリポジトリとマルチリポジトリの違い
モノレポジトリとマルチレポジトリの違いを要約してみましょう。
モノレポ | マルチリポジトリ |
組織のすべてのプロジェクトのすべてのコードは、中央リポジトリにあります | 各サービスとプロジェクトには個別のリポジトリがあります |
チームは協力して協力することができます。 彼らはお互いの変化を見ることができます | チームは自律的に作業できます。 個々の変更は、他のチームやプロジェクトによる変更には影響しません |
各人がプロジェクト構造全体にアクセスできます | 管理者は、開発者がアクセスする必要のあるプロジェクトまたはサービスへのアクセス制御を制限できます |
プロジェクトのサイズが大きくなり続けると、スケールアップの問題が発生する可能性があります | コードが制限され、サービス単位が小さいため、パフォーマンスは良好です。 |
継続的展開(CD)と継続的インテグレーション(CI)の実装が難しい | 開発者は、サービスを独立して構築できるため、CDとCIを簡単に実現できます。 |
開発者は、中央リポジトリで更新されるライブラリ、API、およびその他の一般的なコードを簡単に共有できます | ライブラリやその他の一般的なコードへの変更は、後で問題が発生しないように定期的に同期する必要があります |
結論
モノレポジトリとマルチレポジトリはどちらも同じように人気があり、どちらが優れているかは、プロジェクトサイズ、プロジェクト要件、および必要なバージョン管理とアクセス制御のレベルによって異なります。
モノレポジトリは一貫性を優先しますが、マルチレポジトリはデカップリングに焦点を合わせます。 モノレポジトリでは、チーム全体が1人のユーザーによる変更を確認できますが、マルチレポジトリは、必要なサービスのみにアクセスできるチームごとに個別のレポジトリを作成します。 プロジェクトにモノレポジトリとマルチレポジトリを組み合わせて使用する場合は、複数のプロジェクトとライブラリを管理するためのツールであるメタを使用できます。
また、Gitを学ぶための無料のリソースに興味があるかもしれません。