設定オプション (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 ディレクトリ内のすべてのファイルとサブディレクトリにマッチします。 |