Skip to content
Latchkey

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) を組み合わせる。

TurborepoLerna
主な役割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を使う。

関連ガイド