なっく日報

技術やら生活やらのメモ

単一リポジトリで複数package|projectを管理することをmonorepoというそう

きっかけ

qiita.com

で知りました。

BabelやReactのGithubリポジトリは単一のリポジトリ内に複数のpackageを入れているとのこと

https://github.com/babel/babel/tree/master/packages

とか

https://github.com/facebook/react/tree/master/packages

みたいに。

このように単一リポジトリで複数のpackage|projectを管理するやり方を"monorepo"というらしい。

メリット?

上記QiitaのBabelドキュメントの日本語訳を引用させていただくと、メリットの方が多そうに見えます。

lint, build, test, release のプロセスを共通化できる
package をまたがった修正が容易になる
issue 管理を一元化できる
開発環境の構築が簡単になる
テストも package をまたいで実行でき、複数 package が絡む不具合の検知が容易になる

自分も上記メリットはあるなと以前から思っていたので、local moduleとlinklocalを組み合わせて1つのリポジトリ内で複数packageの管理をしようと試行錯誤したりしました。

yukidarake.hateblo.jp

デメリット?

Babelのドキュメント曰く

  • 見た目ごっつくなる
  • サイズがでかくなる

くらいしか問題はないという感じでしたが、

↓の記事を読むに、リポジトリがでかくなり過ぎると、Githubとかで問題起きそうですね。

japan.blogs.atlassian.com

monorepo構成でのNode.jsの開発を回すツール

github.com

BabelはLernaというツールを使って管理しているそう。

Lernaはシンボリックリンクを張るのではなく、node_modules配下をゴニョゴニョして依存解決をしているよう。

が、自分はnpmのlocal module + linklocal管理の方がよいのではと思ってます。

理由は

という感じ。

まとめ + 補足

と、monorepo推しでまとめるかと思いきや、自分は何でもかんでも全部一つのリポジトリに突っ込むのに賛成はしないかも。

例えば、クライアントはフロントエンドエンジニアがUnityで作っていて、サーバはバックエンドエンジニアがNode.jsで作っているとか、専門分野によってチームが分かれている場合はリポジトリもチーム毎に存在していた方がやりやすいんじゃないかと思います。

ケースバイケースで最適な感じにリポジトリも分割するべきという、まとめにならないまとめで終わりにしたいと思います😜