Turborepoは、JavaScriptおよびTypeScript向けの高性能ビルドシステム。Vercel社が開発し、monorepo(モノリポジトリ)構成に対応している。
従来のmonorepo構成における課題:
- すべてのパッケージを毎回ビルドする必要があり、ビルド時間が増大
- CI環境での実行時間が長期化
- 同じ作業を繰り返すことによるリソースの無駄
Turborepoはこれらの課題に対処するために開発された。
- キャッシング: タスクの入力をハッシュ化し、同じ入力の場合は以前の出力を再利用
- 並列実行: 依存関係のないタスクを同時実行
- 増分ビルド: 変更されたパッケージとその依存関係のみを再ビルド
- リモートキャッシング: ビルド結果をチームメンバー間で共有
- CI環境の高速化: 過去のビルド結果を再利用
- パッケージ間の依存関係を自動解析し、適切な順序で実行
turbo.jsonでタスクの実行順序と依存関係を定義する。
{
"$schema": "https://turbo.build/schema.json",
"pipeline": {
"build": {
"dependsOn": ["^build"],
"outputs": ["dist/**"]
},
"test": {
"dependsOn": ["build"]
}
}
}タスクの実行結果を.turboディレクトリにキャッシュし、同じ入力の場合は結果を復元する。
Vercel Remote Cacheまたはカスタムサーバーを使用して、チーム全体でキャッシュを共有する。
依存関係のないタスクを自動的に並列実行する。
# 並列実行数を指定
turbo build --concurrency=4特定のパッケージのみを対象にタスクを実行する。
# webパッケージのみビルド
turbo build --filter=web
# webとその依存関係をビルド
turbo build --filter=web...パッケージ間の依存関係を視覚的に確認する。
turbo build --graph# 新規プロジェクト
npx create-turbo@latest
# 既存プロジェクトに追加
npm install turbo --save-dev# ビルド
turbo build
# テスト
turbo test
# 開発サーバー起動
turbo dev
# キャッシュを無視して実行
turbo build --force- 公式サイト: https://turbo.build
- ドキュメント: https://turbo.build/repo/docs
- GitHub: https://github.com/vercel/turbo
- キャッシング: https://turbo.build/repo/docs/crafting-your-repository/caching
- リポジトリ構造: https://turbo.build/repo/docs/crafting-your-repository/structuring-a-repository
注記: Turborepoは単一パッケージ構成でも動作するが、複数のアプリケーションや共通ライブラリを持つmonorepo構成で効果が高い。