モノレポとは?メリット・デメリットと適切な使い方

モノレポのメリット・デメリット・適切な使い場面を解説。マルチリポジトリとの比較や、導入時に考慮すべきポイントをまとめます。

Read in: en
モノレポとは?メリット・デメリットと適切な使い方

概要

モノレポについてまとめる。

モノレポとは

モノレポとは複数プロジェクトのコードを単一のレポジトリで管理したもの。対して複数のレポジトリで管理するものをポリレポ、またはマルチレポと呼ぶ。 マイクロサービスの管理方針の1つではあるものの、マイクロサービスを前提としたものではない。 モノリスとは同義ではない。

モノレポの観点

モノレポの運用における観点を整理してみた。

コードの自治

複数チームで運用する場合、チーム管轄外のコードも変更できてしまう。

GitHubであれば、CODEOWNERSによる管理で管轄範囲を整備できる。何かしらのツールに頼ったレギュレーションを敷く必要がありそう。

大きな泥団子

コード間の依存関係が複雑化することによる泥団子化。

これも何かしらのツールに頼った解決が必要そう。例えば、Nxではpublic APIを持つライブラリを作ることができたり、依存関係をグラフで可視化することができる。

スケーラビリティ

コード量が増加していくあたり、ビルドやテスト、デプロイが遅くなる、Gitの管理上の問題が発生する。

前者については、個々に実行可能なCIパイプラインやデプロイフロー等の整備により解決できる。ツールによる解決が可能な範囲である。

後者については、少し悩み所かもしれない。cloneやpullが辛くなる状態を迎える時は何か対応を検討する必要がありそう。

Microsoftが開発しているGVFSというスケーラブルなGitを使う、Git LFSを活用する、諦めてリポジトリを分割するなど。

技術選択の自由度

特定の技術(プログラミング言語など)に縛られるという制約は基本的にはない。

コード管理が単一であるだけで、CI・CD等は複数のパイプライン管理を想定しているので特に懸念にはならなそう。

ビルドツールが対応していない言語や環境があると技術選択の幅が制限されるという可能性があるかもしれない。

ブランチ戦略

featureブランチとの相性があまり良くないので、トランクベースの戦略を導入するのが望ましそう。フィーチャートグルも合わせて導入したいところ。

その他運用上の懸念

GitHubであれば、IssueやPullRequestの運用方針を整備することに気を配る必要があるかもしれない。

モノレポのメリット・デメリット

メリット

デメリット

モノレポのためのツール

monorepo.tools - Many solutions, for different goalsに詳しく整理されている。

Bazel、Nx、Pants辺りが有力候補なのかなといった印象。

所感

参考

Tags: モノレポ
Share: 𝕏 Post Facebook Hatena
✏️ View source / Discuss on GitHub
☕ サポート

このブログを応援していただける方は、以下からサポートをお願いします。いただいたサポートはブログ運営・技術研鑽に活用します。


関連記事