はじめに
下記の記事を読んでいて、Monorepoについてより深く理解するために色々な記事を読みあさってみたのでまとめる。
Monorepoとは
npmで管理する複数のpackageを、まとめて一つのgitリポジトリで管理すること。
Monorepoとは一言でいうと、そのプロダクトに関するコードをすべて単一のリポジトリで管理する方法です。
まとめると、「プロジェクトを一つの管理下に集約させて管理する開発手法」のこと。
Monorepoのメリット
・統一された lint, build, test, release プロセス。
・モジュールを横断した変更が容易。
・issueを上げる場所がひとつ(のため見落としがすくない)
・開発環境を立ち上げるのが簡単。(100のリポジトリで、個別に100個の開発環境を整備するために100回 npm ・install と考えるだけで・・Oops)
・モジュールを横断するテストを走らせるのが容易で、それはつまり複数モジュール環境で起きるバグを見つけやすくなる。
やはり、プロジェクトを効率よく管理できる!
Monorepoのデメリット
・コードが必要以上に威圧的になっちゃう
・gitリポジトリが肥大化
・npmの検索結果で低く表示される。(npmはテストのコードカバレッジを計測しているが、monorepoは個別パッケージでテストしてないのでカバレッジが低くなるため)
また
何も考えずにリポジトリ単位でパイプラインを構築すると、全サービスに対する各種処理(テスト。ビルド等)が走ってしまって単一の重いパイプラインになってしまいます。
プロジェクトを一つの管理下に集約させて管理しているが故に、デメリットもある。
Monorepoを導入する目的
下記の記事がめちゃくちゃわかりやすい。ぜひ目を通してみてほしい。
さいごに
複数の記事をこうしてまとめてみると、「はじめに」で引用したLineのエンジニアブログの記事がより理解しやすくなった。