Turborepo vs Lerna: CIにはどちらのmonorepoツールか?
両者はmonorepoの問題の異なる半分を解決する: Turborepoはtaskをcacheしオーケストレーションし、Lernaはパッケージをバージョニングし公開する。
TurborepoはJS/TS monorepo向けの、計算のcacheと影響を受けた分のみの実行を備えた高速なtask runnerである。Lernaはmonorepoパッケージのバージョニングと公開を管理する。現代のLernaはtaskの実行をNxに委譲し、多くのチームはLerna (公開) とTurborepo (taskのcache) を組み合わせる。
| Turborepo | Lerna | |
|---|---|---|
| 主な役割 | taskのcache + オーケストレーション | バージョニング + 公開 |
| task/計算のcache | あり (ローカル + リモート) | Nx経由 (現代のLerna) |
| 影響を受けた/変更分のみの実行 | あり | あり (Nx経由) |
| 公開workflow | なし (外部) | あり (中核機能) |
| 最適な用途 | cacheされた高速なパイプライン | 協調的なrelease |
CIにおいて
ビルド/テストの速度には、Turborepoが適したツールだ: taskの出力をcacheし、影響を受けたパッケージのみを実行するので、変更されていないコードは再ビルドされない。Lernaの不変の価値は、多数のパッケージの協調的なバージョニングと公開にある。両者はほとんど重ならないため、一般的な構成はcache/オーケストレーションにTurborepo、releaseにLernaである。高速なCI taskだけが必要なら、Turborepo単体で十分だ。
高速化する
TurborepoのリモートcacheをCI jobをまたいで有効化し、taskを影響を受けたパッケージに絞る - 単独で最大の高速化だ。cache missで依然として実行されるtaskはCI runnerで動く。高速なマネージドrunnerがそれらを短縮する。
結論
cacheされた高速なビルドと影響を受けた分のみの実行が必要: Turborepo。協調的なバージョニングと公開が必要: Lerna。両者は補完的 - 多くのmonorepoはtaskにTurborepo、releaseにLernaを使う。
関連ガイド
Nx vs Turborepo for CI: Which Monorepo Tool Is Faster?Nx vs Turborepo for CI: task caching, affected builds, remote cache, and config. Which monorepo build orchest…
Nx vs Lerna: Which Monorepo Tool for CI?Nx vs Lerna for CI: full build platform with caching vs versioning and publishing. How the two monorepo tools…
How to Cache Dependencies in GitHub Actions (Every Ecosystem)Cache dependencies in GitHub Actions with actions/cache - correct keys and paths for npm, yarn, pnpm, pip, Ma…