⛳
Souzoh Tech Talk #01: Monorepo
概要
2021/08/18に開催された下記勉強会のメモです
パネルディスカッション
技術スタックについて
monorepo
- 大量のマイクロサービスがある
- multi repoでは全量が把握しにくいい
- 今まではサービスごとに作ってた
- 言語でディレクトリを分けたのが特徴
- まだいいのかはわからない
- 言語ごとに役割が分担されてるのでいいのかも
- 満足度は高い
- メルカリでmonorepoの採用事例はそんなにないけど最近ちょっとずつ流行りつつある
monorepoと言語の相性
- Go
- monorepoだから困ったところはない
- toolchain
- Bazel/Gazelleがやってくれるので慣れればいける
- デプロイは依存関係意識しないといけない
- monorepoだけどプロジェクトで別々にデプロイするので
- BazelもGoもgoogleなので相性は良い
- Typescript
- パッケージマネージャーはyarn
- monorepoを管理するための機能が揃ってきているので相性はいい
- ビルドのtoolchain何使うか
- Bazelの相性良くない
- workspace対応してない
- やめるかみたいな話ある
- Lerna?
- Bazelの相性良くない
- Python
- 使い方次第ではあるが、そんなに良くないかも?悩み中
- 苦戦した
- パス問題でハマった
- gunicornでどう起動するなど?
- Pantsとかもある
- toolchain
- 揃えたいが、各言語のツールチェインを使うみたいな話もある
- Bazelにこだわっているわけでもない
- Typescriptは諦める方向でいきそう
- workspace使わなければいける
- Earthlyとかもあり?
monorepoと共通化
- 処理をどこまで共通化しているのか?
- 現状だとあまり共通化していない
- 認証、ログは共通のパッケージある
- 他には外部サービスと通信するところなど
- 共通化によるデメリットは?
- 個別の用件が挟まるものはそれぞれのサービスで
- 同じようなの書いてたら共通化する
monorepoの良いところ
- マイクロサービスとの相性
- リファクタリングやりやすい
- 一つのリポジトリなので変化がわかる
- 可視性
- 共通化が楽、やりやすい
- マイクロサービス増やしやすくなる
- またがるやつをまとめて修正できる
- デプロイ楽
monorepoの課題/懸念
- コードのOwnershipが明確でなくなる
- コードの保守性低下
- deploy時の依存関係
- 共通化をどこまでやるか
- マイクロサービスが増えていったら
- ローカル環境どうする?
- docker-composeで起動は辛くなる
- Bazel
- 躓く場所が多い
- 導入するなら覚悟が必要
- ちょっと入れてみるかで痛い目を見る
- 機能したときの素晴らしさはある
- 躓く場所が多い
質疑
- protoの生成ファイルはコミットしてる?
- なるべくコミットしない
- マイクロサービス全員で見てる?
- どちらかというと制限を設けていないという感じ
- ある程度自然に決まっている
Discussion