Turborepo は『JS Monorepo の標準』に近い
Vercel が開発する Turborepo は、JS Monorepo の代表的なビルドツールとして広く採用されています。本記事では編集部の視点で、深掘りした使い方を公開情報をもとに整理します。Monorepo 設計 もご参考に。
主要な機能
(1) タスクパイプライン:依存解決+並列実行。(2) Local Cache:差分実行。(3) Remote Cache:チーム/CI で共有。(4) turbo run:CLI コマンド。(5) turbo prune:Docker 用最小依存。
turbo.json の設計
(1) tasks:build/test/lint 等。(2) dependsOn:タスク依存。(3) outputs:成果物パス。(4) cache: true/false。(5) persistent: true:dev server。
Remote Cache
(1) Vercel Remote Cache:標準。(2) セルフホスト:オープンソース実装あり。(3) CI で共有:大幅短縮。(4) セキュリティ:team token 管理。(5) 料金:Vercel Pro+ で利用可(公開情報をもとに)。
差分実行 (affected)
(1) turbo run build --filter:変更影響範囲のみ。(2) ...^...HEAD:Git ベース。(3) package 依存グラフ。(4) CI で時間半減(公開情報をもとに)。(5) monorepo の生命線。CI/CD 実践 もご参考に。
Nx との比較
(1) Nx:機能豊富・大規模向け。(2) Turborepo:シンプル・Vercel エコシステム。(3) 選び方:規模と要件で。(4) Turborepo の方が学習低い。(5) Nx の方が成熟。
Docker との統合
(1) turbo prune:最小依存抽出。(2) Multi-stage Dockerfile。(3) イメージサイズ大幅削減。(4) ビルド時間短縮。(5) 本番デプロイ最適化。Docker イメージ最適化 もご参考に。
運用のコツ
(1) outputs 厳密化:cache 正確に。(2) 環境変数の依存明示。(3) Remote Cache 認証ローテ。(4) キャッシュサイズ管理。(5) monorepo 構造の定期見直し。Monorepo 設計 もご参考に。
失敗しがちなパターン
(1) cache 効かず CI 遅延。(2) outputs 漏れで cache miss。(3) Remote Cache token 漏洩。(4) 依存性 グラフ循環。(5) monorepo 肥大化。対策は、(1)task 設定見直し、(2)outputs 厳密化、(3)Secrets 管理、(4)循環検知、(5)定期構造整理、です。