turborepo について
JavaScript/TypeScript のモノレポで Turborepo を設定するためのスキルです。パッケージ単位のタスク定義、依存グラフによる実行、キャッシュを扱い、実行中のバージョンに合ったインストール済みドキュメントの参照を促します。
主な機能
- 01パッケージ単位のタスク設定
- 02タスク依存関係とキャッシュの案内
- 03変更対象パッケージの絞り込み
- 04環境と CI の設定
- 05モノレポ構成と境界の設計
活用シーン
- 01ビルド、Lint、テストタスクの追加
- 02キャッシュミスの調査
- 03変更パッケージだけのタスク実行
- 04CI や監視ワークフローの設定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ langfuse/ langfuse --skill turborepoインストール後、Claude Code で/turborepoを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
command/turborepo.mdreferences/best-practices/dependencies.mdpackages.mdRULE.mdstructure.mdreferences/boundaries/RULE.mdreferences/caching/gotchas.mdremote-cache.mdRULE.mdreferences/ci/github-actions.mdpatterns.mdRULE.mdvercel.mdreferences/cli/commands.mdRULE.mdreferences/configuration/global-options.mdgotchas.mdRULE.mdtasks.mdreferences/environment/gotchas.mdmodes.mdRULE.mdreferences/filtering/patterns.mdRULE.mdreferences/watch/RULE.md詳細
Turborepo スキル
JavaScript/TypeScript のモノレポ向けビルドシステムです。Turborepo はタスクの出力をキャッシュし、依存関係グラフに基づいてタスクを並列実行します。
Turbo の設定やコマンドを変更する前に、リポジトリのルートにある
node_modules/turbo/docs/README.md を読み、該当するページに従ってください。インストール済みのドキュメントは実行中のバージョンに対応しているため、サポートされているオプションやデフォルトについては、このスキルに同梱されているリファレンスより優先してください。
重要:ルートタスクではなく、パッケージタスクを作成する
ルートタスクは作成しないでください。必ずパッケージタスクを作成してください。
タスク/スクリプト/パイプラインを作成する場合、必ず次の手順に従ってください。
- 関連する各パッケージの
package.jsonにスクリプトを追加する - ルートの
turbo.jsonにタスクを登録する - ルートの
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)は、パッケージ内に作成できないタスクに限って使用します(まれなケースです)。
副次的なルール: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"
}
}
ただし、修正方法はワークスペースの依存関係が宣言されているかどうかによって異なります。
-
依存関係が宣言されている場合(たとえば、
package.jsonに"@repo/types": "workspace:*"と記述されている場合)は、prebuildスクリプトを削除します。Turbo のdependsOn: ["^build"]が自動的に処理します。 -
依存関係が宣言されていない場合、依存関係がないと
^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 の不足を指摘する前に、タスクが実際に何を生成するかを確認してください:
- パッケージのスクリプトを読みます(例:
"build": "tsc"、"test": "vitest") - ファイルをディスクに書き込むのか、標準出力に出力するだけなのかを確認します
- キャッシュすべきファイルをタスクが生成する場合に限り、指摘します
// 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/**"] - Vite/Rollup:
["dist/**"] - tsc:
["dist/**"]またはカスタムのoutDir
TypeScript の --noEmit でもキャッシュファイルが生成されることがあります:
tsconfig.json で incremental: true が設定されている場合、JavaScript を出力しなくても tsc --noEmit は .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 タスクに適切な出力先を判断するには:
- tsconfig で
incrementalまたはcompositeが有効になっているか確認します - カスタムキャッシュ場所を指定する
tsBuildInfoFileを確認します(デフォルト:outDirの隣、またはプロジェクトのルート) - インクリメンタルモードでない場合、
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 を使用し、その理由をドキュメントに記載してください。
厳密モードでの 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-8-21-canary-9.turborepo.dev/schema.json",
"tasks": {
"build": {
"dependsOn": ["^build"],
"outputs": ["dist/**", ".next/**", "!.next/cache/**"]
},
"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
}
}
}
キャッシュ無効化を伴う並列タスク用の Transit ノード
一部のタスクは並列実行できます(依存関係のビルド済み出力を必要としません)が、依存関係のソースコードが変更されたときにキャッシュを無効化する必要があります。
dependsOn: ["^taskname"] の問題点:
- 逐次実行を強制します(低速です)
dependsOn: [](依存関係なし)の問題点:
- 並列実行を可能にします(高速です)
- ただし、キャッシュが正しく機能しません。依存関係のソースを変更してもキャッシュが無効化されません
Transit ノードなら両方の問題を解決できます。
{
"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.md | turbo.json の概要、パッケージの設定 |
| configuration/tasks.md | dependsOn、outputs、inputs、env、cache、persistent |
| configuration/global-options.md | globalEnv、globalDependencies、global キー、futureFlags、cacheDir、envMode |
| configuration/gotchas.md | よくある設定ミス |
キャッシュ
| ファイル | 目的 |
|---|---|
| caching/RULE.md | キャッシュの仕組み、ハッシュ入力 |
| caching/remote-cache.md | Vercel リモートキャッシュ、セルフホスト可能、ログイン/リンク |
| caching/gotchas.md | キャッシュミスのデバッグ、--summarize、--dry |
環境変数
| ファイル | 目的 |
|---|---|
| environment/RULE.md | env、globalEnv、passThroughEnv |
| environment/modes.md | Strict モードと Loose モード、フレームワーク推論 |
| environment/gotchas.md | .env ファイル、CI の問題 |
フィルタリング
| ファイル | 目的 |
|---|---|
| filtering/RULE.md | --filter 構文の概要 |
| filtering/patterns.md | 一般的なフィルターパターン |
CI/CD
| ファイル | 目的 |
|---|---|
| ci/RULE.md | CI の一般的な原則 |
| ci/github-actions.md | GitHub Actions の完全なセットアップ |
| ci/vercel.md | Vercel へのデプロイ、turbo-ignore |
| ci/patterns.md | --affected、キャッシュ戦略 |
CLI
| ファイル | 目的 |
|---|---|
| cli/RULE.md | turbo run の基本 |
| cli/commands.md | turbo 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.md | turbo watch、中断可能なタスク、開発ワークフロー |
境界(実験的)
| ファイル | 目的 |
|---|---|
| boundaries/RULE.md | パッケージの分離の強制、タグベースの依存関係ルール |
ソースドキュメント
このスキルは、以下の公式 Turborepo ドキュメントに基づいています。
- ソース: Turborepo リポジトリ内の
apps/docs/content/docs/ - 公開ページ: https://turborepo.dev/docs