モノレポとは?
モノレポとは、多くのプロジェクトやサービスをまとめて保持する単一のリポジトリで、1 つの履歴と変更を調整する 1 つの場所を共有します。
モノレポは、複数のプロジェクト、ライブラリ、サービスを多数に散らばせるのではなく、1 つのリポジトリに収めます。横断的な変更やコード共有が容易になりますが、一角の変更がすべてを再ビルドしないように、特に CI ではより賢いツールが求められます。
モノレポとは何か
モノレポでは、複数の異なるプロジェクトが 1 つのリポジトリ、多くの場合は別々のディレクトリに存在します。それらは 1 つのコミット履歴、1 セットのブランチ、そして課題やレビューのための 1 つの場所を共有します。企業は、コード共有とプロジェクト横断的なアトミックな変更を簡単にするためにモノレポを採用します。
利点と課題
利点は、統一されたバージョニング、境界をまたいだ容易なリファクタリング、そして共有ツールです。課題は規模です。リポジトリは大きくなり、素朴な CI はすべての変更ですべてをビルドしてテストしてしまいます。効果的なモノレポは、プロジェクトの境界を理解するツールに依存します。
変更された部分だけをビルドする
CI の鍵となる手法は、どのファイルが変更されたかを検出し、影響を受けたプロジェクトだけを実行することです。パスフィルターはワークフローをディレクトリに絞り込むため、無関係な変更ではトリガーされません。
on:
push:
paths:
- "services/api/**"CI/CD におけるモノレポ
注意を払わないと、すべてのコミットがすべてのプロジェクトにファンアウトするため、モノレポのパイプラインは遅く高価になります。パスフィルター、変更検出、ビルドキャッシュにより、実行を実際に変更された量に見合ったものに保てます。並行数をスケールできるマネージドランナーはここで役立ちます。モノレポは多くの独立したジョブを一度にファンアウトできるからです。
モノレポ CI のヒント
- パスフィルターを使い、影響を受けたプロジェクトに対してのみワークフローを実行します。
- ビルドと依存関係をキャッシュして冗長な作業を避けます。
- 独立したプロジェクトのジョブを並列化して、より速いフィードバックを得ます。
- 大規模なリポジトリのチェックアウトを速くするため、CI では履歴をシャローに保ちます。
重要なポイント
- モノレポは多くのプロジェクトを 1 つのリポジトリと履歴に保持します。
- 共有やリファクタリングが容易になる一方、賢い CI ツールが必要です。
- パスフィルターとキャッシュにより、パイプラインを変更量に見合ったものに保ちます。