monorepo
複数のRepositoryを、1つのRepositoryとみなして管理する
#wip
メリット
(各パッケージに対して)単一のビルド/テスト/リリースのプロセスを適用できる
CIが高速になる
packageを跨いだ変更を連動させることが容易
コードの共有ができる
Issue の受付場所を 1 つに絞ることができる
開発環境のセットアップ簡単になる
全てのパッケージを同時にテストできるため、パッケージをまたいで発生するバグの発見が容易になる
デメリット
リポジトリのサイズが肥大化する
GitHub のスターが集中しやすくなる
Issue が集中するのでかえって管理の手間が発生する
何でもかんでもmonorepoにすればいいわけじゃないmrsekut.icon
monorepo
Aを修正したからと言って、同時に(Aに依存する)Bを修正する必要はない
なので、別に同時にdeployしないといけなくなるわけではない
トランクベース開発が重要になる
monorepにせず、複数repoにしたらどういう手間が増えるか
AとBの2つのnpm packageを自作しており、これが連動する場合に以下のような流れになる
Aの中で、Bを使いたい
この要求を満たすためにBを修正しないといけない
Bを修正
Bをnpmにpublish
Aの中で、Bをupdate
これでやっとBの新しい機能をAの中で使える
hoistってなに?
package間で重複している依存ライブラリを個別にinstallするのではなく、親の1箇所にのみinstallして共有すること
ライブラリ例
packageのmonorepo向き?
Lerna
Bolt
https://github.com/boltpkg/bolt
Yarn Workspaces
yarn
npm Scoped Packages
npm workspaces
BunのWorkspaces
applicationのmonorepo向き?
Nx
Rush
Turborepo
ライブラリを使わずにmonorepoっぽいことをする
VSCodeなら
Monorepo Workspaceを使うと切り替えが楽
pros/cons
https://rushjs.io/pages/intro/why_mono/
https://blog.nrwl.io/misconceptions-about-monorepos-monorepo-monolith-df1250d4b03c
参考
モノレポについての誤解 - Misconceptions about Monorepos: Monorepo != Monolith を翻訳しました - Graat(グラーツ)
monorepoに関するよくある誤解
https://blog.spacemarket.com/code/web-frontend-repository-composition-monorepo-or-manyrepo/
上の記事の「誤解」をデメリットとして扱っている
実際どうなんだろう
https://github.blog/jp/2021-03-19-improving-large-monorepo-performance-on-github/
github