設定オプション (turbo.json)
モノレポのルートディレクトリに turbo.json ファイルを追加することで、turbo の動作を設定できます。
globalDependencies
タイプ: string[]
グローバルハッシュ依存関係のためのファイル glob のリスト。これらのファイルの内容は、グローバルハッシュアルゴリズムに含まれ、すべてのタスクのハッシュに影響を与えます。これは、Git にはない .env ファイルや、ワークスペースのタスクに影響を与える(ただし、従来の依存関係グラフには表示されない)ルートレベルのファイル(例えば、ルートの tsconfig.json、jest.config.js、.eslintrc など)に基づいてキャッシュを破棄するのに役立ちます。
これらは、turbo.json の場所からの相対パスであり、この設定が使用される可能性のある任意のマシンで有効である必要があります。例えば、あるユーザーのホームディレクトリ内のファイルを参照するのは良い考えではありません。
例
{
"$schema": "https://turbo.dokyumento.jp/schema.json",
"pipeline": {
// ... omitted for brevity
},
"globalDependencies": [
".env", // contents will impact hashes of all tasks
"tsconfig.json" // contents will impact hashes of all tasks
]
}globalEnv
タイプ: string[]
暗黙的なグローバルハッシュ依存関係のための環境変数のリスト。これらの環境変数の内容は、グローバルハッシュアルゴリズムに含まれ、すべてのタスクのハッシュに影響を与えます。
例
{
"$schema": "https://turbo.dokyumento.jp/schema.json",
"pipeline": {
// ... omitted for brevity
},
"globalEnv": ["GITHUB_TOKEN"] // value will impact the hashes of all tasks
}globalPassThroughEnv
これは、設定のルートに記述します。
タイプ: string[]
すべてのタスクで利用可能にする必要があり、タスクのキャッシュキーに影響を与えるべきではない環境変数の許可リスト。このキーを使用すると、すべてのタスクが strict 環境変数モードになります。
このリストを変更するとグローバルキャッシュキーに影響しますが、各変数の値は影響しません。
例
AWS_SECRET_KEY と GITHUB_TOKEN は、strict env モードですべてのタスクで利用可能です。
{
"$schema": "https://turbo.dokyumento.jp/schema.json",
"globalPassThroughEnv": ["AWS_SECRET_KEY", "GITHUB_TOKEN"],
"pipeline": {
// ...task definitions...
}
}globalDotEnv
type: null | string[] default: null
グローバルハッシュキーのファイルハッシュに含める .env ファイルの順序付きリスト。
注意: これはファイルを環境にロードするものではありません。
例
{
"$schema": "https://turbo.dokyumento.jp/schema.json",
"globalDotEnv": [".env.local", ".env"],
"pipeline": {
"build": {}
}
}extends
タイプ: string[]
extends キーは、ワークスペース構成でのみ有効です。ルートの turbo.json では無視されます。詳細は、ドキュメントを参照してください。
experimentalUI
type: bool
turbo の新しい UI の使用を有効にします。TURBO_EXPERIMENTAL_UI 環境変数でオーバーライドできます。
pipeline
プロジェクトのタスク依存関係グラフを表すオブジェクト。turbo は、これらの規則を解釈して、プロジェクト内のタスクの出力のスケジュール、実行、およびキャッシュを適切に行います。
pipeline オブジェクト内の各キーは、turbo run で実行できるタスクの名前です。turbo が一致するキーを持つ package.json の scripts オブジェクトを持つワークスペースを見つけた場合、実行中にその npm スクリプトにパイプラインタスク構成を適用します。これにより、pipeline を使用して、Turborepo 全体で規約を設定できます。
{
"$schema": "https://turbo.dokyumento.jp/schema.json",
"pipeline": {
"build": {
"dependsOn": ["^build"]
},
"test": {
"outputs": ["coverage/**"],
"dependsOn": ["build"],
"inputs": ["src/**/*.tsx", "src/**/*.ts", "test/**/*.ts"],
"outputMode": "full"
},
"dev": {
"cache": false,
"persistent": true
}
}
}dependsOn
タイプ: string[]
このタスクが依存するタスクのリスト。
dependsOn の項目に ^ を付加すると、turbo は、このパイプラインタスクが、ワークスペースのトポロジカルな依存関係が最初に ^ プレフィックス付きでタスクを完了することに依存すると認識します (例: "ワークスペースの build タスクは、その dependencies および devDependencies が独自の build コマンドを完了した場合にのみ実行する必要があります")。
^ プレフィックスなしの dependsOn の項目は、ワークスペースレベルでのタスク間の関係を表します (例: "ワークスペースの test および lint コマンドは、最初に build が完了していることに依存します")。
バージョン 1.5 以降では、dependsOn 構成で環境変数を宣言するために $ を使用することは非推奨となりました。
代わりに env キーを使用してください。
例
{
"$schema": "https://turbo.dokyumento.jp/schema.json",
"pipeline": {
"build": {
// "A workspace's `build` command depends on its dependencies'
// or devDependencies' `build` command being completed first"
"outputs": [".next/**", "!.next/cache/**", "dist/**"],
"dependsOn": ["^build"]
},
"test": {
// "A workspace's `test` command depends on its own `lint` and
// `build` commands first being completed"
"dependsOn": ["lint", "build"]
},
"deploy": {
// "A workspace's `deploy` command, depends on its own `build`
// and `test` commands first being completed"
"dependsOn": ["build", "test"]
},
// A workspace's `lint` command has no dependencies
"lint": {}
}
}dotEnv
type: null | string[] default: null
タスクのファイルハッシュに含める .env ファイルの順序付きリスト。これらのファイルは、git インデックスに含まれているかどうかに関係なく、ハッシュに含まれます。
注意: これはファイルを環境にロードするものではありません。
例
{
"$schema": "https://turbo.dokyumento.jp/schema.json",
"pipeline": {
"build": {
"dotEnv": [".env.local", ".env"]
}
}
}env
タイプ: string[]
タスクが依存する環境変数のリスト。
例
{
"$schema": "https://turbo.dokyumento.jp/schema.json",
"pipeline": {
"build": {
"dependsOn": ["^build"],
"env": ["SOMETHING_ELSE"], // value will impact the hashes of all build tasks
"outputs": ["dist/**", ".next/**", "!.next/cache/**"]
},
"web#build": {
"dependsOn": ["^build"],
"env": ["STRIPE_SECRET_KEY"], // value will impact hash of only web's build task
"outputs": [".next/**", "!.next/cache/**"]
}
},
"globalEnv": [
"GITHUB_TOKEN" // value will impact the hashes of all tasks
]
}Turborepo がワークスペースで一般的なフロントエンドフレームワークを検出すると、ビルドにインライン化される環境変数に自動的に依存します。たとえば、web ワークスペースに Next.js プロジェクトが含まれている場合、先頭が NEXT_PUBLIC_(新しいタブで開きます) で始まる環境変数を dependsOn 構成で指定する必要はありません。Turborepo は、これらの環境変数の値が変更されるとビルド出力が変更されることを既に認識しているため、それらに自動的に依存します。詳細については、キャッシュに関するドキュメントを参照してください。
passThroughEnv
タイプ: string[]
この構成は、pipeline の各タスク定義内に記述します。
このタスクで使用できるようにする必要があるが、タスクのキャッシュキーには寄与しない環境変数の許可リスト。このキーを使用すると、このタスクは strict 環境変数モードにオプトインします。
このリストを変更すると、タスクのキャッシュキーに寄与しますが、各変数の値は寄与しません。
例
AWS_SECRET_KEY および GITHUB_TOKEN は、build タスクで使用できますが、lint タスクでは strict 環境モードでは使用できません。
{
"$schema": "https://turbo.dokyumento.jp/schema.json",
"pipeline": {
"build": {
"passThroughEnv": ["AWS_SECRET_KEY", "GITHUB_TOKEN"]
},
"lint": {}
}
}outputs
タイプ: string[]
タスクのキャッシュ可能なファイルシステム出力の glob パターンのセット。
注:turbo は自動的にstderr/stdout を .turbo/run-<task>.log にログ出力します。このファイルは常にキャッシュ可能な成果物として扱われ、明示的に指定する必要はありません。
このキーを省略するか、空の配列を渡すことで、turbo にタスクが副作用であり、ファイルシステムの成果物を生成しない(例えば、リンターのように)ことを伝えることができます。ただし、ログはキャッシュしたい場合(そして成果物のように扱いたい場合)に使用できます。
outputs グロブは、ワークスペースディレクトリをルートとする相対パスとして指定する必要があります。
例
{
"$schema": "https://turbo.dokyumento.jp/schema.json",
"pipeline": {
"build": {
// "Cache all files emitted to workspace's dist/** or .next
// directories by a `build` task"
"outputs": ["dist/**", ".next/**", "!.next/cache/**"],
"dependsOn": ["^build"]
},
"test": {
// "Don't cache any artifacts of `test` tasks (aside from
// logs)"
"dependsOn": ["build"]
},
"test:ci": {
// "Cache the coverage report of a `test:ci` command"
"outputs": ["coverage/**"],
"dependsOn": ["build"]
},
"dev": {
// Never cache anything (including logs) emitted by a
// `dev` task
"cache": false,
"persistent": true
}
}
}cache
型:boolean
デフォルトはtrueです。タスクのoutputsをキャッシュするかどうかを設定します。cache を false に設定すると、キャッシュしたくないデーモンや長時間実行される「watch」や開発モードのタスクに便利です。
例
{
"$schema": "https://turbo.dokyumento.jp/schema.json",
"pipeline": {
"build": {
"outputs": [".svelte-kit/**", "dist/**"],
"dependsOn": ["^build"]
},
"test": {
"dependsOn": ["build"]
},
"dev": {
"cache": false,
"persistent": true
}
}
}inputs
タイプ: string[]
特定のタスクでパッケージが変更されたかどうかを判断する際に考慮するファイルのセットをturboに伝えます。これをグロブのリストに設定すると、それらのグロブに一致するファイルが変更された場合にのみタスクが実行されます。これは、例えば、ソースファイルが変更された場合にのみテストを実行したり、.gitignoreされたファイルに明示的に依存したい場合に役立ちます。
知っておくと良いこと:- inputs のデフォルトは、パッケージ内のファイルが変更されたときにタスクを実行するための[] です。- inputs グロブは、パッケージのディレクトリをルートとする相対パスとして指定する必要があります。- turbo.json は常に入力と見なされます。turbo.json を変更すると、すべてのキャッシュが無効になります。
例
{
"$schema": "https://turbo.dokyumento.jp/schema.json",
"pipeline": {
"test": {
// A package's `test` task should only be ran when
// either a `.tsx` or `.ts` file has changed.
"inputs": ["src/**/*.tsx", "src/**/*.ts", "test/**/*.ts"]
}
}
}inputsキーを指定すると、すぐにデフォルトの動作から外れるため、inputs配列内で特別な文字列$TURBO_DEFAULT$を指定して、デフォルトの入力から開始できます。これは、デフォルトのセットから追加の入力を追加または削除する場合に役立ちます。
$TURBO_DEFAULT$を使用した例
{
"$schema": "https://turbo.dokyumento.jp/schema.json",
"pipeline": {
"check-types": {
// Consider all default inputs except the README.md
"inputs": ["$TURBO_DEFAULT$", "!README.md"]
}
}
}outputMode
型:"full" | "hash-only" | "new-only" | "errors-only" | "none"
出力ログの種類を設定します。--output-logs CLIオプションで上書きできます。
| オプション | 説明 |
|---|---|
| full | すべての出力を表示(デフォルト) |
| hash-only | タスクのハッシュのみを表示 |
| new-only | キャッシュミスからの出力のみを表示 |
| errors-only | タスクの失敗からの出力のみを表示 |
| none | すべてのタスク出力を非表示 |
例
{
"$schema": "https://turbo.dokyumento.jp/schema.json",
"pipeline": {
"build": {
"dependsOn": ["^build"],
"outputs": [".svelte-kit/**", "dist/**"],
"outputMode": "new-only"
},
"test": {
"dependsOn": ["build"]
}
}
}persistent
型:boolean
タスクが開発サーバーや--watchモードなどの長時間実行されるプロセスである場合は、タスクをpersistentとしてラベル付けします。Turboは、他のタスクが永続的なタスクに依存することを防ぎます。この設定を行わないと、他のタスクがdevに依存している場合、devが終了しないため、実行されることはありません。このオプションを使用すると、turboは無効な設定について警告することができます。
例
{
"$schema": "https://turbo.dokyumento.jp/schema.json",
"pipeline": {
"dev": {
"persistent": true
}
}
}interactive
型:boolean
タスクをinteractiveとしてマークすると、stdinから入力を受け取ることができます。インタラクティブなタスクは、stdinから受け取る入力によってタスクの結果が変わる可能性があるため、"cache": falseでマークする必要があります。
turboは、TTYに接続され、実験的なUIが使用されている場合にのみ、インタラクティブなタスクを実行します。
パスのグロブ仕様
Turborepoのグロブ実装を使用すると、turboと対話させたいファイルを具体的に定義できます。以下に示す表には、最も役立つパターンが記載されています。
| パターン | 説明 |
|---|---|
* | ディレクトリ内のすべてのファイルをマッチング |
** | すべてのファイルとサブディレクトリを再帰的にマッチング |
some-dir/ | some-dirディレクトリをマッチングしますが、その内容はマッチングしません |
some-dir* | some-dirで始まるファイルとディレクトリをマッチング |
*.js | ディレクトリ内のすべての.jsファイルをマッチング |
*.{js,ts,tsx,jsx} | ディレクトリ内の、指定された拡張子で終わるすべてのファイルをマッチング |
*.{js?x} | ディレクトリ内の、jsとjsxの拡張子を持つすべてのファイルをマッチング |
! | グロブ全体を否定(定義されたグロブの最後に/**を自動的に適用) |
これらのパターンの使用方法の例をいくつか示します。
| パターン | 説明 |
|---|---|
dist/** | distディレクトリとそのすべてのサブディレクトリ内のすべてのファイルをマッチング |
dist/some-dir/** | 現在のディレクトリ内のdist/some-dirディレクトリとそのすべてのサブディレクトリ内のすべてのファイルをマッチング |
dist/ | distディレクトリをマッチングしますが、その内容はマッチングしません |
dist | distディレクトリをマッチングしますが、その内容はマッチングしません |
!dist | dist ディレクトリ **とそのすべての内容** を無視します。 |
dist* | dist で始まるファイルとディレクトリにマッチします。 |
dist/*.js | dist ディレクトリ内のすべての.js ファイルにマッチします。 |
!dist/*.js | dist ディレクトリ内のすべての.js ファイルを無視します。 |
dist/**/*.js | dist ディレクトリとそのサブディレクトリ内のすべての.jsファイルを再帰的にマッチします。 |
../scripts/** | 一つ上のディレクトリに移動し、 scripts ディレクトリ内のすべてのファイルとサブディレクトリにマッチします。 |