Featured image of post Turborepoによるモノレポ管理:開発のスケーリング Featured image of post Turborepoによるモノレポ管理:開発のスケーリング

Turborepoによるモノレポ管理:開発のスケーリング

Turborepoを使ったモノレポ管理の包括的ガイド。キャッシュシステム、タスクオーケストレーション、依存関係グラフ、リモートキャッシュ、移行戦略まで解説。

はじめに

JavaScript/TypeScriptのモノレポが成長するにつれて、ビルド時間の増大、CIパイプラインの飽和、開発者生産性の低下が課題となります。Vercelが作成したTurborepoは、インテリジェントなキャッシングと並列タスク実行でこれらの課題に対処します。LernaやNxとは異なり、Turborepoはビルドツールではなくタスクランナーに特化し、実際のコンパイルはesbuild、webpack、tscに任せます。

コアアーキテクチャ — キャッシュシステム

Turborepoの最大の特徴はキャッシュです。キャッシュキーはファイル内容、環境変数、依存関係グラフから計算されます。キャッシュはnode_modules/.cache/turboにtar.gz形式で保存され、ヒットまたはミスのライフサイクルがタスクの実行要否を決定します。

{
  "pipeline": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": ["dist/**", ".next/**"],
      "inputs": ["src/**/*.ts", "src/**/*.tsx"]
    }
  }
}

inputs設定でキャッシュの粒度を調整できます。--dry-runを使用してキャッシュ動作を検証し、--graphで依存関係グラフを可視化できます。


パイプライン設定によるタスクオーケストレーション

turbo.jsonpipeline設定がタスクオーケストレーションの中心です。タスク依存関係、出力ディレクトリ、環境変数、永続モードを定義します。

{
  "pipeline": {
    "build": { "dependsOn": ["^build"], "outputs": ["dist/**"] },
    "test": { "dependsOn": ["build"] },
    "lint": { "dependsOn": [], "outputs": [] },
    "typecheck": { "dependsOn": ["^build"] }
  }
}

トポロジカル順序戦略により、依存関係が先にビルドされ、linttypecheckのような独立タスクは並列実行されます。修正モードのlintなどキャッシュ不可タスクにはcache: falseを使用します。


リモートキャッシュ

リモートキャッシュにより、チームメンバーやCI間でビルドアーティファクトを共有できます。Vercelリモートキャッシュ、セルフホストのTurbo Server、S3互換バックエンドがサポートされています。

機能VercelセルフホストNx Cloud
セットアップ簡単中程度簡単
コスト無料枠ありインフラ費用有料
データ管理Vercel管理完全制御Nx管理
認証チームトークンカスタム統合トークン

認証にはTURBO_TOKENTURBO_TEAM環境変数を使用します。環境ベースのキャッシュ名前空間により、環境間のキャッシュ汚染を防止します。


依存関係グラフの最適化

Turborepoはpackage.jsonの依存関係からDAGを構築し、タスクスケジューリングに使用します。--filter構文で特定パッケージにスコープを絞り、--graphで可視化できます。

turbo run build --filter=@acme/web...
turbo run build --graph --output=graph.html

パッケージ間依存関係の削減とワークスペースプロトコルの一貫した使用がビルド高速化に貢献します。


移行戦略

Lernaからの移行はlerna runturbo runに置換し、turbo.jsonを追加するだけです。Nxからの移行ではエグゼキュータをシェルコマンドに変換します。カスタムスクリプトからの移行では並列化機会を特定し、パイプライン化します。50パッケージ以上のモノレポでは、移行後にCI時間が60〜80%削減されるケースが一般的です。


まとめ

Turborepoは高速で正確なモノレポタスクランニングを提供します。npm、pnpm、yarnワークスペースを使用し、本格的なビルドシステムを導入せずにCIを高速化したいチームに最適です。活発なオープンソースコミュニティと、今後のデーモンベースのファイル監視により、長期的な投資価値のあるツールです。