#author("2023-04-14T04:09:56+00:00","default:admin","admin") #author("2023-04-14T04:59:37+00:00","default:admin","admin") -[[Why Google Stores Billions of Lines of Code in a Single Repository:https://www.youtube.com/watch?v=W71BTkUbdqE]] -[[Monorepo開発のメリット vs デメリット:https://circleci.com/ja/blog/monorepo-dev-practices/]] -[[Monorepoって何なのか?と関連アーキテクチャとの関係をまとめてみた:https://zenn.dev/burizae/articles/c811cae767965a]] -[[システムリニューアルに伴う monorepo 構成を考える:https://blog.giftee.dev/2021-07-30-monorepo-setup-for-gift-wallet-renewal/]] -[[SCOUTERのリポジトリ戦略 Monolith→MultiRepo→MonoRepoへと移行した理由:https://logmi.jp/tech/articles/321292]] *基本事項 [#e1348963] **monorepoとは [#v9cac638] -1つのリポジトリで複数のモジュールリポジトリを管理すること -マイクロサービス単位に分割された各資源をその分割状態を維持したまま単一のリポジトリで管理する方法 --管理する対象が一つになったことで、施さなければいけない対応やプロダクト全体の見通しが良くなる --他にもプロダクトコードにまつわる周辺ツールの管理もしやすいなどと、プロダクト全体で共通するものの管理に関する問題が解消される -Monorepoの目指すべき姿は、ソース管理は単一で、デプロイラインは複数 --例えば、何も考えずにリポジトリ単位でパイプラインを構築すると、全サービスに対する各種処理(テスト。ビルド等)が走ってしまって単一の重いパイプラインになってしまうので注意 --コード管理のみを一点に集約し、実際にテスト、ビルド、デプロイされるものは従来通りサービスごとに独立して行える状態である必要があるということ --これを実現するために、パイプライン側でテスト、ビルド、デプロイに関するステップをリポジトリで管理されている各サービス単位で行えるように設定する必要がある -Modular Monolithとの違いはデプロイラインの状態で区別ができるが、そもそもの目指すべきものは同じでただ段階が違うだけ **Pros [#j4887ad1] -単一のlint、ビルド、テスト、リリースのプロセス -モジュールをまたいだ変更がしやすい i-ssueを報告する場所が一つ -開発環境のセットアップが容易 -モジュールをまたいだテストが一緒に実行されるため、複数のモジュールにまたがるバグがより簡単に見つかる -ライブラリ等のバージョンアップ対応に関しても、単一リポジトリとなる事で、そのリポジトリ内で一元管理している依存関係をアップデートしてあげれば一瞬で、使用している全サービスへの反映ができる *事例 [#re523eba] -[[言語が違う複数のリポジトリをmonorepoへ移行した話:https://zenn.dev/moneyforward/articles/migrating-to-a-monorepo]] -[[メルカリShops の技術スタックと、その選定理由:https://engineering.mercari.com/blog/entry/20210810-mercari-shops-tech-stack/]] -[[メルカリShops での monorepo 開発体験記:https://engineering.mercari.com/blog/entry/20210817-8f561697cc/]] -[[Yarn Workspacesを利用したMonorepo環境の構築:https://developers.prtimes.jp/2022/08/22/build_monorepo_using_yarn-workspaces/]] -[[git の sparse-checkout を使ってモノリポでも快適にいこう!:https://tech.asoview.co.jp/entry/2023/03/14/095235]] *関連ツール [#i3ca0dfb] -[[Nx と Turborepo の比較:https://zenn.dev/okmttdhr/articles/a919bb29d9d5c9]] -[[NXとTurborepoを使用した最新のMonorepoの設計:https://morioh.com/p/c735d1be3d70]] **[[Bazel:https://bazel.build/?hl=ja]] [#r2c2e41c] **[[Lerna:https://github.com/lerna/lerna]] [#zccff43f] **[[Turborepo:https://turbo.build/]] [#qe683899] -[[Turborepo でモノレポ構成のプロジェクトを爆速でビルドする:https://dev.classmethod.jp/articles/turborepo-superfast-monorepo-ci/]] **Nx [#efb0ee4d] *Git [#k6d09ddf] -[[Gitのリポジトリ構成、Monolith、Multi-repo、Monorepo、Polyrepo、どれが実現できるの?:https://ts0818.hatenablog.com/entry/2022/06/12/143824]] *GitHub [#j8244e89] -[[マルチレポからモノレポへの移行を経験して感じたこと:https://zenn.dev/matken/articles/monorepo-and-multirepo]] -[[Mono Repo のための GitHub Actions の Tips 集:https://gist.github.com/yuya-takeyama/47fb261625e67c8efabadcf8c6f237ef]] -[[GitHub モノレポを AWS CodePipeline と統合して、プロジェクト固有の CI/CD パイプラインを実行する:https://aws.amazon.com/jp/blogs/news/integrate-github-monorepo-with-aws-codepipeline-to-run-project-specific-ci-cd-pipelines/]] -[[LernaとGithub Actionsでmonorepoライブラリのリリースを楽にする:https://link-and-motivation.hatenablog.com/entry/2022/11/16/190305]] **GitHub Actions [#mde03d41] -[[モノレポでの無駄な GitHub Actions の実行を避ける:https://zenn.dev/matken/articles/avoid-redundant-github-actions-monorepo]] -[[モノレポでGitHub Actionsをいい感じにやるチップス:https://qiita.com/watta10/items/e9b3e03f304f6ba5ff9b]] *言語 [#we7f2cde] **Typescript [#ibcf4235] **Go [#u5bd6727] -[[Goのmonorepoとworkspace mode:https://qiita.com/takashabe/items/c0c8dd8bfdc13fc743aa]]