mcpField
T
turborepo

turborepo

github.com/antfu開発6.0k13.3k 回インストール6 日前に更新
リポジトリ

turborepo について

JavaScript/TypeScript のモノレポ開発向け Turborepo スキルです。タスク設定、キャッシュ、並列実行を案内し、パッケージ単位のスクリプトと依存グラフによる実行を重視します。

主な機能

  1. 01パッケージごとのスクリプト設定
  2. 02タスク依存グラフと並列実行
  3. 03キャッシュ設定と問題の調査
  4. 04変更に基づくパッケージの絞り込み
  5. 05環境変数と CI の設定
  6. 06モノレポ構成と境界のガイド

活用シーン

  1. 01パッケージのビルド、テスト、lint タスクの設定
  2. 02キャッシュミスや出力未復元の調査
  3. 03CI で変更の影響を受けるパッケージだけを実行
  4. 04パッケージ依存関係とアーキテクチャ境界の計画

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/antfu/skills --skill turborepo

インストール後、Claude Code で/turborepoを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE.md
SYNC.md
command/
turborepo.md
references/best-practices/
dependencies.md
packages.md
RULE.md
structure.md
references/boundaries/
RULE.md
references/caching/
gotchas.md
remote-cache.md
RULE.md
references/ci/
github-actions.md
patterns.md
RULE.md
vercel.md
references/cli/
commands.md
RULE.md
references/configuration/
global-options.md
gotchas.md
RULE.md
tasks.md
references/environment/
gotchas.md
modes.md
RULE.md
references/filtering/
patterns.md
RULE.md
references/watch/
RULE.md

詳細

Turborepo スキル

JavaScript/TypeScript モノレポ向けのビルドシステムです。Turborepo はタスクの出力をキャッシュし、依存関係グラフに基づいてタスクを並列実行します。

重要:ルートタスクではなくパッケージタスクを使用する

ルートタスクよりもパッケージタスクを優先してください。

タスク/スクリプト/パイプラインを作成する場合は、必ずパッケージタスクをデフォルトとして使用してください。

  1. 関連する各パッケージの package.json にスクリプトを追加する
  2. ルートの turbo.json にタスクを登録する
  3. ルートの package.json では turbo run <task> を呼び出すだけにする

パッケージ内に配置できるタスクのロジックを、ルートの package.json に記述しないでください。そうすると、Turborepo の並列化が損なわれます。

// DO THIS: Scripts in each package
// apps/web/package.json
{ "scripts": { "build": "next build", "lint": "eslint .", "test": "vitest" } }

// apps/api/package.json
{ "scripts": { "build": "tsc", "lint": "eslint .", "test": "vitest" } }

// packages/ui/package.json
{ "scripts": { "build": "tsc", "lint": "eslint .", "test": "vitest" } }
// turbo.json - register tasks
{
  "tasks": {
    "build": { "dependsOn": ["^build"], "outputs": ["dist/**"] },
    "lint": {},
    "test": { "dependsOn": ["build"] }
  }
}
// Root package.json - ONLY delegates, no task logic
{
  "scripts": {
    "build": "turbo run build",
    "lint": "turbo run lint",
    "test": "turbo run test"
  }
}
// DO NOT DO THIS - defeats parallelization
// Root package.json
{
  "scripts": {
    "build": "cd apps/web && next build && cd ../api && tsc",
    "lint": "eslint apps/ packages/",
    "test": "vitest"
  }
}

ルートタスク(//#taskname)は、Vitest Projects の //#test、リポジトリ全体のリリーススクリプト、turbo 自体を呼び出さないツールなど、パッケージ内に配置できないタスクにのみ使用します。

補足ルール:turbo run と turbo

コマンドをコードに記述する場合は、常に turbo run を使用してください。

// package.json - ALWAYS "turbo run"
{
  "scripts": {
    "build": "turbo run build"
  }
}
# CI workflows - ALWAYS "turbo run"
- run: turbo run build --affected

短縮形の turbo <tasks> は、人間またはエージェントがターミナルに直接入力して実行する、一度限りのコマンドにのみ使用します。package.json、CI、スクリプトに turbo build を記述しないでください。

クイック判断ツリー

「タスクを設定したい」
Configure a task?
├─ Define task dependencies → references/configuration/tasks.md
├─ Lint/check-types (parallel + caching) → Use Transit Nodes pattern (see below)
├─ Specify build outputs → references/configuration/tasks.md#outputs
├─ Handle environment variables → references/environment/RULE.md
├─ Set up dev/watch tasks → references/configuration/tasks.md#persistent
├─ Package-specific config → references/configuration/RULE.md#package-configurations
└─ Global settings (cacheDir, daemon) → references/configuration/global-options.md
「キャッシュが機能しない」
Cache problems?
├─ Tasks run but outputs not restored → Missing `outputs` key
├─ Cache misses unexpectedly → references/caching/gotchas.md
├─ Need to debug hash inputs → Use --summarize or --dry
├─ Want to skip cache entirely → Use --force or cache: false
├─ Remote cache not working → references/caching/remote-cache.md
└─ Environment causing misses → references/environment/gotchas.md
「変更されたパッケージだけを実行したい」
Run only what changed?
├─ Changed packages + dependents (RECOMMENDED) → turbo run build --affected
├─ Custom base branch → --affected --affected-base=origin/develop
├─ Manual git comparison → --filter=...[origin/main]
└─ See all filter options → references/filtering/RULE.md

変更されたパッケージだけを実行する主な方法は --affected です。 デフォルトブランチと自動的に比較し、依存パッケージも含めます。

「パッケージをフィルタリングしたい」
Filter packages?
├─ Only changed packages → --affected (see above)
├─ By package name → --filter=web
├─ By directory → --filter=./apps/*
├─ Package + dependencies → --filter=web...
├─ Package + dependents → --filter=...web
└─ Complex combinations → references/filtering/patterns.md
「環境変数が機能しない」
Environment issues?
├─ Vars not available at runtime → Strict mode filtering (default)
├─ Cache hits with wrong env → Var not in `env` key
├─ .env changes not causing rebuilds → .env not in `inputs`
├─ CI variables missing → references/environment/gotchas.md
└─ Framework vars (NEXT_PUBLIC_*) → Auto-included via inference
「CI を設定したい」
CI setup?
├─ GitHub Actions → references/ci/github-actions.md
├─ Vercel deployment → references/ci/vercel.md
├─ Remote cache in CI → references/caching/remote-cache.md
├─ Only build changed packages → --affected flag
├─ Skip unnecessary builds → turbo-ignore (references/cli/commands.md)
└─ Skip container setup when no changes → turbo-ignore
「開発中に変更を監視したい」
Watch mode?
├─ Re-run tasks on change → turbo watch (references/watch/RULE.md)
├─ Dev servers with dependencies → Use `with` key (references/configuration/tasks.md#with)
├─ Restart dev server on dep change → Use `interruptible: true`
└─ Persistent dev tasks → Use `persistent: true`
「パッケージを作成/構成したい」
Package creation/structure?
├─ Create an internal package → references/best-practices/packages.md
├─ Repository structure → references/best-practices/structure.md
├─ Dependency management → references/best-practices/dependencies.md
├─ Best practices overview → references/best-practices/RULE.md
├─ JIT vs Compiled packages → references/best-practices/packages.md#compilation-strategies
└─ Sharing code between apps → references/best-practices/RULE.md#package-types
「モノレポはどのように構成すればよいですか?」
Monorepo structure?
├─ Standard layout (apps/, packages/) → references/best-practices/RULE.md
├─ Package types (apps vs libraries) → references/best-practices/RULE.md#package-types
├─ Creating internal packages → references/best-practices/packages.md
├─ TypeScript configuration → references/best-practices/structure.md#typescript-configuration
├─ ESLint configuration → references/best-practices/structure.md#eslint-configuration
├─ Dependency management → references/best-practices/dependencies.md
└─ Enforce package boundaries → references/boundaries/RULE.md
「アーキテクチャ上の境界を適用したい」
Enforce boundaries?
├─ Check for violations → turbo boundaries
├─ Tag packages → references/boundaries/RULE.md#tags
├─ Restrict which packages can import others → references/boundaries/RULE.md#rule-types
└─ Prevent cross-package file imports → references/boundaries/RULE.md

重大なアンチパターン

コード内で turbo の短縮形を使用する

package.json のスクリプトや CI パイプラインでは、turbo run の使用を推奨します。 短縮形の turbo <task> は、対話的にターミナルで使用するためのものです。

// WRONG - using shorthand in package.json
{
  "scripts": {
    "build": "turbo build",
    "dev": "turbo dev"
  }
}

// CORRECT
{
  "scripts": {
    "build": "turbo run build",
    "dev": "turbo run dev"
  }
}
# WRONG - using shorthand in CI
- run: turbo build --affected

# CORRECT
- run: turbo run build --affected
Turbo を経由しないルートスクリプト

ルートの package.json のスクリプトは、タスクを直接実行せず、必ず turbo run を呼び出してください。

// WRONG - bypasses turbo entirely
{
  "scripts": {
    "build": "bun build",
    "dev": "bun dev"
  }
}

// CORRECT - delegates to turbo
{
  "scripts": {
    "build": "turbo run build",
    "dev": "turbo run dev"
  }
}
&& を使って Turbo のタスクを連結する

&& で Turbo のタスクを連結しないでください。オーケストレーションは Turbo に任せてください。

// WRONG - turbo task not using turbo run
{
  "scripts": {
    "changeset:publish": "bun build && changeset publish"
  }
}

// CORRECT
{
  "scripts": {
    "changeset:publish": "turbo run build && changeset publish"
  }
}
依存関係を手動でビルドする prebuild スクリプト

他のパッケージを手動でビルドする prebuild のようなスクリプトは、Turborepo の依存関係グラフを迂回します。

// WRONG - manually building dependencies
{
  "scripts": {
    "prebuild": "cd ../../packages/types && bun run build && cd ../utils && bun run build",
    "build": "next build"
  }
}

ただし、修正方法はワークスペース依存関係が宣言されているかどうかによって異なります。

  1. 依存関係が宣言されている場合(例:package.json に "@repo/types": "workspace:*" がある場合)、prebuild スクリプトを削除します。Turbo の dependsOn: ["^build"] が自動的に処理します。

  2. 依存関係が宣言されていない場合、^build が依存関係なしでは起動しないため、prebuild が存在しています。次の手順で修正します。

    • package.json に依存関係を追加します:"@repo/types": "workspace:*"
    • その後、prebuild スクリプトを削除します
// CORRECT - declare dependency, let turbo handle build order
// package.json
{
  "dependencies": {
    "@repo/types": "workspace:*",
    "@repo/utils": "workspace:*"
  },
  "scripts": {
    "build": "next build"
  }
}

// turbo.json
{
  "tasks": {
    "build": {
      "dependsOn": ["^build"]
    }
  }
}

重要なポイント: ^build は、依存関係として一覧に記載されているパッケージに対してのみビルドを実行します。依存関係が宣言されていなければ、自動的なビルド順序は設定されません。

範囲が広すぎる globalDependencies

globalDependencies はグローバルハッシュを介して、すべてのパッケージのすべてのタスクに影響します。inputs に否定グロブを指定しても、タスクごとに特定のファイルを除外することはできません。対象を絞ってください。

// WRONG - heavy hammer, affects all hashes
{
  "globalDependencies": ["**/.env.*local"]
}

// BETTER - move to task-level inputs
{
  "globalDependencies": [".env"],
  "tasks": {
    "build": {
      "inputs": ["$TURBO_DEFAULT$", ".env*"],
      "outputs": ["dist/**"]
    }
  }
}

futureFlags.globalConfiguration を使用すると、global.inputs のファイルがグローバルハッシュではなく各タスクの入力に組み込まれるため、この問題が軽減されます。タスクごとに特定のファイルを除外できます。

// BEST - global.inputs with per-task exclusion
{
  "futureFlags": { "globalConfiguration": true },
  "global": {
    "inputs": [".env"]
  },
  "tasks": {
    "build": { "outputs": ["dist/**"] },
    "lint": {
      "inputs": ["$TURBO_DEFAULT$", "!$TURBO_ROOT$/.env"]
    }
  }
}
繰り返しの多いタスク設定

共通化できる、タスク間で繰り返されている設定がないか確認してください。Turborepo は、設定を共有するパターンに対応しています。

// WRONG - repetitive env and inputs across tasks
{
  "tasks": {
    "build": {
      "env": ["API_URL", "DATABASE_URL"],
      "inputs": ["$TURBO_DEFAULT$", ".env*"]
    },
    "test": {
      "env": ["API_URL", "DATABASE_URL"],
      "inputs": ["$TURBO_DEFAULT$", ".env*"]
    },
    "dev": {
      "env": ["API_URL", "DATABASE_URL"],
      "inputs": ["$TURBO_DEFAULT$", ".env*"],
      "cache": false,
      "persistent": true
    }
  }
}

// BETTER - use globalEnv and globalDependencies for shared config
{
  "globalEnv": ["API_URL", "DATABASE_URL"],
  "globalDependencies": [".env*"],
  "tasks": {
    "build": {},
    "test": {},
    "dev": {
      "cache": false,
      "persistent": true
    }
  }
}

グローバル設定とタスクレベル設定の使い分け:

  • globalEnv/globalDependencies - すべてのタスクに影響するため、本当に共通の設定に使用します
  • タスクレベルの env/inputs - 特定のタスクだけで必要な場合に使用します
アンチパターンではありません:大きな env 配列

大きな env 配列(50 個以上の変数であっても)は問題ではありません。通常は、ユーザーがビルドの環境依存関係を漏れなく宣言していることを意味します。これを問題として指摘しないでください。

--parallel フラグの使用

--parallel フラグは Turborepo の依存関係グラフを迂回します。タスクを並列実行する必要がある場合は、代わりに dependsOn を適切に設定してください。

# WRONG - bypasses dependency graph
turbo run lint --parallel

# CORRECT - configure tasks to allow parallel execution
# In turbo.json, set dependsOn appropriately (or use transit nodes)
turbo run lint
ルートの turbo.json でのパッケージ固有のタスクオーバーライド

複数のパッケージで異なるタスク設定が必要な場合は、ルートの turbo.json に package#task のオーバーライドを詰め込むのではなく、パッケージ設定(各パッケージの turbo.json)を使用してください。

// WRONG - root turbo.json with many package-specific overrides
{
  "tasks": {
    "test": { "dependsOn": ["build"] },
    "@repo/web#test": { "outputs": ["coverage/**"] },
    "@repo/api#test": { "outputs": ["coverage/**"] },
    "@repo/utils#test": { "outputs": [] },
    "@repo/cli#test": { "outputs": [] },
    "@repo/core#test": { "outputs": [] }
  }
}

// CORRECT - use Package Configurations
// Root turbo.json - base config only
{
  "tasks": {
    "test": { "dependsOn": ["build"] }
  }
}

// packages/web/turbo.json - package-specific override
{
  "extends": ["//"],
  "tasks": {
    "test": { "outputs": ["coverage/**"] }
  }
}

// packages/api/turbo.json
{
  "extends": ["//"],
  "tasks": {
    "test": { "outputs": ["coverage/**"] }
  }
}

パッケージ設定のメリット:

  • 設定を、影響を受けるコードの近くに置けます
  • ルートの turbo.json が整理され、基本パターンに集中できます
  • 各パッケージで何が特別なのかを把握しやすくなります
  • $TURBO_EXTENDS$ を使って配列を継承・拡張できます

ルートで package#task を使用する場合:

  • 1 つのパッケージに固有の依存関係が必要な場合(例:"deploy": { "dependsOn": ["web#build"] })
  • 移行中の一時的なオーバーライド

詳細については、references/configuration/RULE.md#package-configurations を参照してください。

inputs で ../ を使ってパッケージ外を参照する

パッケージ外のファイルを参照するために、../ のような相対パスを使わないでください。代わりに $TURBO_ROOT$ を使用してください。

// WRONG - traversing out of package
{
  "tasks": {
    "build": {
      "inputs": ["$TURBO_DEFAULT$", "../shared-config.json"]
    }
  }
}

// CORRECT - use $TURBO_ROOT$ for repo root
{
  "tasks": {
    "build": {
      "inputs": ["$TURBO_DEFAULT$", "$TURBO_ROOT$/shared-config.json"]
    }
  }
}
ファイルを生成するタスクでの outputs の不足

outputs の不足を指摘する前に、タスクが実際に何を生成するかを確認してください:

  1. パッケージのスクリプトを読みます(例:"build": "tsc"、"test": "vitest")
  2. ディスクにファイルを書き込むのか、標準出力に出力するだけなのかを判断します
  3. キャッシュすべきファイルをタスクが生成する場合にのみ指摘します
// WRONG: build produces files but they're not cached
{
  "tasks": {
    "build": {
      "dependsOn": ["^build"]
    }
  }
}

// CORRECT: build outputs are cached
{
  "tasks": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": ["dist/**"]
    }
  }
}

フレームワークごとの一般的な出力:

  • Next.js:[".next/**", "!.next/cache/**", "!.next/dev/**"]
  • Vite/Rollup:["dist/**"]
  • tsc:["dist/**"] またはカスタムの outDir

TypeScript の --noEmit でもキャッシュファイルが生成されることがあります:

tsconfig.json で incremental: true が設定されている場合、tsc --noEmit は JS を出力しなくても .tsbuildinfo ファイルを書き込みます。出力がないと決めつける前に、tsconfig を確認してください:

// If tsconfig has incremental: true, tsc --noEmit produces cache files
{
  "tasks": {
    "typecheck": {
      "outputs": ["node_modules/.cache/tsbuildinfo.json"] // or wherever tsBuildInfoFile points
    }
  }
}

TypeScript タスクに適切な出力を判断するには:

  1. tsconfig で incremental または composite が有効かどうかを確認します
  2. カスタムのキャッシュ場所が tsBuildInfoFile で指定されているか確認します(デフォルト:outDir の隣、またはプロジェクトルート)
  3. インクリメンタルモードでない場合、tsc --noEmit はファイルを生成しません
^build と build の混同
{
  "tasks": {
    // ^build = run build in DEPENDENCIES first (other packages this one imports)
    "build": {
      "dependsOn": ["^build"]
    },
    // build (no ^) = run build in SAME PACKAGE first
    "test": {
      "dependsOn": ["build"]
    },
    // pkg#task = specific package's task
    "deploy": {
      "dependsOn": ["web#build"]
    }
  }
}
ハッシュ化されない環境変数
// WRONG: API_URL changes won't cause rebuilds
{
  "tasks": {
    "build": {
      "outputs": ["dist/**"]
    }
  }
}

// CORRECT: API_URL changes invalidate cache
{
  "tasks": {
    "build": {
      "outputs": ["dist/**"],
      "env": ["API_URL", "API_KEY"]
    }
  }
}
inputs に含まれていない .env ファイル

Turbo は .env ファイルを読み込みません。読み込むのはフレームワークです。ただし、Turbo が変更を認識できるようにする必要があります:

// WRONG: .env changes don't invalidate cache
{
  "tasks": {
    "build": {
      "env": ["API_URL"]
    }
  }
}

// CORRECT: .env file changes invalidate cache
{
  "tasks": {
    "build": {
      "env": ["API_URL"],
      "inputs": ["$TURBO_DEFAULT$", ".env", ".env.*"]
    }
  }
}
モノレポのルートにある .env ファイル

リポジトリルートの .env ファイルはアンチパターンです。小規模なモノレポやスターターテンプレートであっても同様です。パッケージ間に暗黙の結合が生じ、どのパッケージがどの変数に依存するのかが不明瞭になります。

// WRONG - root .env affects all packages implicitly
my-monorepo/
├── .env              # Which packages use this?
├── apps/
│   ├── web/
│   └── api/
└── packages/

// CORRECT - .env files in packages that need them
my-monorepo/
├── apps/
│   ├── web/
│   │   └── .env      # Clear: web needs DATABASE_URL
│   └── api/
│       └── .env      # Clear: api needs API_KEY
└── packages/

ルートの .env による問題:

  • どのパッケージがどの変数を使用するのかが不明瞭です
  • すべてのパッケージにすべての変数が渡されます(必要のないものも含みます)
  • キャッシュの無効化が大まかになります(ルートの .env が変わるとすべてが無効になります)
  • セキュリティリスクがあります。他のパッケージ向けの機密変数に、パッケージが誤ってアクセスするおそれがあります
  • 悪い習慣は小さなところから始まります。スターターテンプレートでは正しいパターンを示すべきです

変数を共有する必要がある場合は、globalEnv を使って共有対象を明示し、その理由を記載してください。

Strict モードでの CI 変数のフィルタリング

デフォルトでは、Turborepo は環境変数を env/globalEnv に含まれるものだけに絞り込みます。CI 変数が不足することがあります:

// If CI scripts need GITHUB_TOKEN but it's not in env:
{
  "globalPassThroughEnv": ["GITHUB_TOKEN", "CI"],
  "tasks": { ... }
}

または、--env-mode=loose を使用してください(本番環境では推奨されません)。

アプリ内の共有コード(パッケージにすべきです)
// WRONG: Shared code inside an app
apps/
  web/
    shared/          # This breaks monorepo principles!
      utils.ts

// CORRECT: Extract to a package
packages/
  utils/
    src/utils.ts
パッケージの境界を越えたファイルへのアクセス
// WRONG: Reaching into another package's internals
import { Button } from "../../packages/ui/src/button";

// CORRECT: Install and import properly
import { Button } from "@repo/ui/button";
ルートの依存関係が多すぎる
// WRONG: App dependencies in root
{
  "dependencies": {
    "react": "^18",
    "next": "^14"
  }
}

// CORRECT: Only repo tools in root
{
  "devDependencies": {
    "turbo": "latest"
  }
}

一般的なタスク設定

標準的なビルドパイプライン
{
  "$schema": "https://v2-9-19-canary-9.turborepo.dev/schema.json",
  "tasks": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": ["dist/**", ".next/**", "!.next/cache/**", "!.next/dev/**"]
    },
    "dev": {
      "cache": false,
      "persistent": true
    }
  }
}

キャッシュ無効化と並列実行が必要なタスクがある場合は、transit タスクを追加してください(以下を参照)。

^dev パターンを使った Dev タスク(turbo watch 用)

ルートの turbo.json にある dependsOn: ["^dev"] と persistent: false を設定した dev タスクは、通常とは異なるように見えるかもしれませんが、turbo watch のワークフローでは正しい設定です。

// Root turbo.json
{
  "tasks": {
    "dev": {
      "dependsOn": ["^dev"],
      "cache": false,
      "persistent": false  // Packages have one-shot dev scripts
    }
  }
}

// Package turbo.json (apps/web/turbo.json)
{
  "extends": ["//"],
  "tasks": {
    "dev": {
      "persistent": true  // Apps run long-running dev servers
    }
  }
}

これが機能する理由:

  • パッケージ(例:@acme/db、@acme/validators)の "dev": "tsc" は、すぐに完了する一回限りの型生成処理です。
  • アプリは、実際の開発サーバー(Next.js など)に対して persistent: true で上書きします。
  • turbo watch は、ソースファイルの変更時に一回限りのパッケージの dev スクリプトを再実行し、型を同期した状態に保ちます。

想定される使い方: turbo run dev ではなく、turbo watch dev を実行します。ウォッチモードでは、永続タスクを実行したまま、ファイルの変更時に一回限りのタスクを再実行します。

代替パターン: 意図を明確にするため、一回限りの依存関係のビルドには prepare や generate のような別のタスク名を使用します。

{
  "tasks": {
    "prepare": {
      "dependsOn": ["^prepare"],
      "outputs": ["dist/**"]
    },
    "dev": {
      "dependsOn": ["prepare"],
      "cache": false,
      "persistent": true
    }
  }
}
キャッシュ無効化を伴う並列タスク向けのトランジットノード

一部のタスクは並列実行できます(依存関係のビルド出力を必要としません)が、依存関係のソースコードが変更されたときにキャッシュを無効化する必要があります。

dependsOn: ["^taskname"] の問題点:

  • 順次実行を強制します(低速です)。

dependsOn: [](依存関係なし)の問題点:

  • 並列実行が可能です(高速です)。
  • ただし、キャッシュは不正確です。依存関係のソースを変更しても、キャッシュが無効化されません。

トランジットノードなら両方を解決できます:

{
  "tasks": {
    "transit": { "dependsOn": ["^transit"] },
    "my-task": { "dependsOn": ["transit"] }
  }
}

transit タスクは、実際のスクリプトとは一致しない依存関係を作成するため、タスクは正しいキャッシュ無効化を保ちながら並列実行されます。

このパターンが必要なタスクの見分け方: 依存関係のソースファイルを読み取るものの、そのビルド出力は必要としないタスクを探します。

環境変数を使用する場合
{
  "globalEnv": ["NODE_ENV"],
  "globalDependencies": [".env"],
  "tasks": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": ["dist/**"],
      "env": ["API_URL", "DATABASE_URL"]
    }
  }
}

futureFlags.globalConfiguration を使用すると、同じ設定のグローバル設定が global の下に移動し、.env はグローバルなハッシュ入力ではなく、タスクごとの入力になります。

{
  "futureFlags": { "globalConfiguration": true },
  "global": {
    "env": ["NODE_ENV"],
    "inputs": [".env"]
  },
  "tasks": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": ["dist/**"],
      "env": ["API_URL", "DATABASE_URL"]
    }
  }
}

リファレンス一覧

設定
ファイル目的
configuration/RULE.mdturbo.json の概要、パッケージ設定
configuration/tasks.mddependsOn、outputs、inputs、env、cache、persistent
configuration/global-options.mdglobalEnv、globalDependencies、global キー、futureFlags、cacheDir、envMode
configuration/gotchas.mdよくある設定ミス
キャッシュ
ファイル目的
caching/RULE.mdキャッシュの仕組み、ハッシュ入力
caching/remote-cache.mdVercel リモートキャッシュ、セルフホスト可能、ログイン/リンク
caching/gotchas.mdキャッシュミスのデバッグ、--summarize、--dry
環境変数
ファイル目的
environment/RULE.mdenv、globalEnv、passThroughEnv
environment/modes.mdStrict モードと Loose モード、フレームワーク推論
environment/gotchas.md.env ファイル、CI の問題
フィルタリング
ファイル目的
filtering/RULE.md--filter 構文の概要
filtering/patterns.md一般的なフィルターパターン
CI/CD
ファイル目的
ci/RULE.mdCI の一般的な原則
ci/github-actions.mdGitHub Actions の完全なセットアップ
ci/vercel.mdVercel へのデプロイ、turbo-ignore
ci/patterns.md--affected、キャッシュ戦略
CLI
ファイル目的
cli/RULE.mdturbo run の基本
cli/commands.mdturbo run のフラグ、turbo-ignore、その他のコマンド
ベストプラクティス
ファイル目的
best-practices/RULE.mdモノレポのベストプラクティスの概要
best-practices/structure.mdリポジトリ構造、ワークスペース設定、TypeScript/ESLint のセットアップ
best-practices/packages.md内部パッケージの作成、JIT と Compiled、exports
best-practices/dependencies.md依存関係の管理、インストール、バージョンの同期
Watch モード
ファイル目的
watch/RULE.mdturbo watch、中断可能なタスク、開発ワークフロー
境界(実験的)
ファイル目的
boundaries/RULE.mdパッケージの分離の強制、タグベースの依存関係ルール

ソースドキュメント

このスキルは、以下の公式 Turborepo ドキュメントに基づいています。

コメント