Skip to content
Latchkey

Turborepo とは何か? 高速な JavaScript monorepo ツール

Turborepo は JavaScript および TypeScript の monorepo 向けの高性能な build ツールで、タスクの出力を cache し、依存関係に基づいてタスクを並列実行します。

Turborepo は「同じ作業を二度としない」というシンプルな約束で、monorepo の workflow を高速化します。build や test といったタスクの出力を cache し、次の実行では input が変わっていないものについて cache された結果を再生し、残りを並列化します。

Turborepo とは

Turborepo は JS/TS monorepo 向けの build オーケストレーションツールです。タスクの pipeline とその依存関係を turbo.json に定義すると、Turborepo が正しい順序で、可能な限り並列に実行し、再利用のために各タスクの出力を cache します。意図的に軽量で、段階的に導入しやすくなっています。

cache と pipeline

各タスクは自身の input と output を宣言します。Turborepo は input を hash 化し、output を cache に保存します。同じ input が再び現れると、コンソールログを含め、再実行する代わりに cache された出力を復元します。remote cache はこれらの結果をマシン間で共有し、そこから CI の最大の恩恵が生まれます。

config の例

pipeline はタスクの依存関係と output を宣言します。

A minimal turbo.json
{
  "tasks": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": ["dist/**"]
    }
  }
}

CI/CD での役割

CI では、Turborepo の remote cache により、input が変わっていない package の再 build と再テストを pipeline がスキップでき、しばしば monorepo のフル build をほぼ瞬時の cache 復元に変えます。まっさらな CI マシンは cold な状態で始まるため、共有された remote cache が恩恵を実現するのに不可欠です。warm な cache を保持するマネージド runner と、一時的な失敗に対する auto-retry が、これらの pipeline を高速かつ信頼できるものに保ちます。

代替ツール

Nx は同様の cache に加え、より豊富な plugin エコシステムとコード生成を提供します。Bazel は、より厳格に、より大規模な多言語リポジトリにスケールします。Lerna は versioning と publish に注力します。Turborepo は、JS/TS monorepo におけるシンプルさ、速度、最小限の設定ゆえに選ばれます。

重要なポイント

  • Turborepo は monorepo のタスク出力を cache し、実行を並列化する。
  • 変更のない input は、再実行する代わりに cache された結果を復元する。
  • CI では、共有された remote cache こそが大きな高速化をもたらす。

関連ガイド