Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
monorepoを知り、monorepoに苦しんだ話
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
nitaking
July 06, 2018
Technology
1.2k
1
Share
monorepoを知り、monorepoに苦しんだ話
WEB界隈LT会 2018-07-06
keyword: lerna, monorepo, yarn workspaces, react-native
nitaking
July 06, 2018
More Decks by nitaking
See All by nitaking
人は30分でLT資料を作って発表できるのか
nitaking
0
280
React Native ことはじめ
nitaking
0
270
2021-06-24 最近のビルドツール調べてみた
nitaking
0
150
Fishのススメ
nitaking
0
87
Blitz.jsの紹介
nitaking
1
1.1k
Expo WEB × Next.js は実用できるのか?
nitaking
3
1.1k
react-hooks-loggerつくった話
nitaking
0
530
あの震えるインタラクションを実装したい
nitaking
1
1.5k
アプリリリースまでのつらみあれこれ
nitaking
0
700
Other Decks in Technology
See All in Technology
AzureのIaC管理からログ調査まで、随所に役立つSkillsとCustom-Instructions / Boosting IaC and Log Analysis with Skills
aeonpeople
0
230
ハーネスエンジニアリングの概要と設計思想
sergicalsix
9
5k
[最強DB講義]推薦システム | 基礎編
recsyslab
PRO
1
170
「責任あるAIエージェント」こそ自社で開発しよう!
minorun365
9
2k
弁護士ドットコム株式会社 エンジニア職向け 会社紹介資料
bengo4com
1
150
扱える不確実性を増やしていく - スタートアップEMが考える「任せ方」
kadoppe
0
300
[OpsJAWS 40]リリースしたら終わり、じゃなかった。セキュリティ空白期間をAWS Security Agentで埋める
sh_fk2
3
240
ワールドカフェI /チューターを改良する / World Café I and Improving the Tutors
ks91
PRO
0
320
Eight Engineering Unit 紹介資料
sansan33
PRO
3
7.3k
#jawsugyokohama 100 LT11, "My AWS Journey 2011-2026 - kwntravel"
shinichirokawano
0
350
実践ハーネスエンジニアリング:TAKTで実現するAIエージェント制御 / Practical Harness Engineering: AI Agent Control Enabled by TAKT
nrslib
11
4.6k
AWS DevOps Agentはチームメイトになれるのか?/ Can AWS DevOps Agent become a teammate
kinunori
6
740
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
55
9.8k
A Modern Web Designer's Workflow
chriscoyier
698
190k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.5k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
270
Raft: Consensus for Rubyists
vanstee
141
7.4k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
180
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
130
How GitHub (no longer) Works
holman
316
150k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
380
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
490
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
130
Transcript
株式会社エアークローゼット bruno / @nitaking_ monorepoを知り monorepoに苦しんだ 話
今日話すこと monorepoって? monorepoのメリット/デメリット 通常のリポジトリとどう違うのか lerna / yarn workspaces
monorepoってなに?
1リポジトリで 複数projectを管理 monorepoってなに?
こんな感じ npm npm npm ・・・
仕組み A B C ・・・ お互いに symlink で参照 module └A↗
module └A↗ └B↗
通常のプロジェクト 1リポジトリ 1プロジェクト
こんな感じ npm npm npm
こんな感じ npm npm npm submodule でお互いに参照 など
monorepoのメリット
monorepoのメリット 依存関係がシンプル
通常のリポジトリ A B C Aの修正をしたい
通常のリポジトリ A B C Aの修正をしたい 依存
通常のリポジトリ A B C Aの修正をしたい 依存 依存
通常のリポジトリ A B C Aの修正をしたい BとCの修正が必要 依存 依存
通常のリポジトリ A 修正 & リリース
通常のリポジトリ A 修正 & リリース B 修正 & リリース
通常のリポジトリ A B C 修正 & リリース 修正 & リリース
修正 & リリース
通常のリポジトリ 簡単な修正なのに煩雑な作業 依存関係の確認が複雑 ロールバック時も手間 大量のプルリクエスト ?
A B 依存 依存 C monorepo Aの修正をしたい
A B C monorepo リリース1回で済む 修正 呼出元をリファクタ
monorepo 便利じゃん
独立性の高いパッケージ = monorepoのメリット少 パッケージ単位で権限設定したい monorepoに不向きなシーンも
monorepoの デメリット
monorepoの デメリット リポジトリが巨大に
1) cloneだけでも一苦労 2) 全部パッケージのインストール遅い 3) 大量のnpmの管理 デメリット facebookのgitは15GBオーバー(google調べ) 巨大リポジトリ
Lerna Yarn そこで
Lerna マルチパッケージ管理ツール パッケージの一括操作が可能 root A B `lerna bootstrap` で 全パッケージ
`npm install` module module
Yarn npmより速くイケてる jsパッケージマネージャー root A B lerna × yarn =
リポジトリの容量を減らせる module module module
Yarn workspaces hoist root A B module module module 共通するmoduleをrootにhoist(引き上げる)
パッケージはrootのmoduleを参照するようになる moduleの共通化 = スリムに = ビルド時間短縮
Yarn workspaces rootパッケージインストールを4秒待つ代わりに lerna bootstrapの時間が1/25に 出典:One vs. many — Why we moved
from multiple git repos to a monorepo and how we set it up https://hackernoon.com/one-vs-many-why-we-moved-from-multiple-git-repos-to-a-monorepo-and-how-we-set-it-up-f4abb0cfe469 なし あり
これがベスト・プラクティス? Yarn workspaces
しかし うまくいかないことも
トラブル React Native @0.55.4 - metro bundler がroot module参照できない -
RN => root ・・・ NG - RN => 他pkg => root ・・・ NG ReactNativeは workspaces に対応できなかったが、 WEBは快適に運用することが可能。 Yarn workspaces
まとめ
話したこと monorepoについて monorepoのメリット/デメリット 通常のリポジトリとの違い lerna / yarn workspaces
lerna × yarn workspaces は良いよ (ReactNativeはうまくいかなかったけども) 複数パッケージあるならば 早期から導入を検討しても良いのかも monorepoで煩雑さを解消できるかも まとめ
みんな使ってみてね!