リポジトリ
ドキュメント
コアコンセプト
ファイル入力

ファイル入力

デフォルトでは、ワークスペース内のファイルが変更されると、ワークスペースが更新されたと見なされます。しかし、リポジトリ全体のすべてのファイルの変更がタスクの再実行につながるべきではありません。Turborepoは、重要なファイルを定義できるツールを提供します。

グローバルファイル

ほとんどのリポジトリには、リポジトリのルートに表示されるいくつかの設定があります。これらのファイルは、子ワークスペースの動作に影響を与える可能性があります。

package.jsonturbo.json

デフォルトで、Turborepoはルートのpackage.jsonとルートのturbo.jsonファイルをグローバルハッシュに含めます。個別に指定する必要はありません。

追加の入力の指定

ルートのtsconfig.jsonなど、すべてのワークスペースで考慮する必要がある追加ファイルがある場合は、globalDependenciesで指定する必要があります。

{
  "$schema": "https://turbo.dokyumento.jp/schema.json",
  "globalDependencies": ["tsconfig.json"],
  "pipeline": {
    "type-check": {}
  }
}

このカスタマイズは、package.jsonturbo.jsonに対するTurborepoのデフォルトの動作に追加的です。

この例では、ルートのtsconfig.jsonファイルが変更されると、turborepoのすべてのタスクが再実行されます。

ワークスペースファイル

ワークスペースの外側に表示されるグローバルファイルに加えて、ワークスペースごとに含めるファイルを指定することもできます。

package.jsonturbo.json

各ワークスペースのpackage.jsonturbo.json(存在する場合)の内容は、ワークスペースのハッシュに自動的に考慮されます。この動作は設定できません。

Turborepoのデフォルト動作

Turborepoのデフォルト動作は、リポジトリを検査し、ハッシュ計算に含めるべきファイルを特定することです。Turborepoは通常、考慮すべきファイルを特定するためにGitを使用します。

  • ワークスペースディレクトリの子供であるGitインデックスに表示されるすべてのファイル。
  • ワークスペースディレクトリの子供であり、.gitignoreで無視されていないすべての追跡されていないファイル。

Gitが利用できない場合、またはリポジトリが設定されていない場合、次の戦略を使用して、Gitインデックスに表示される内容を推定しようとします。

  • ワークスペースディレクトリの子供であるすべてのファイルを含めます。
  • ルートの.gitignoreとワークスペースディレクトリの.gitignoreに表示されるすべてのファイルを除外します。

これらの2つのアプローチは、常に同一の結果を生むとは限りません!同一の結果を生み出さないシナリオ

  • .gitignoreファイルがディレクトリ階層の他の場所に存在する場合。
  • Gitインデックスに追加されたファイルで、.gitignoreにも指定されているファイル。

最大限の正確性のために、GitとリポジトリのGitインデックスの両方が利用できることを目指すべきです。

動作のカスタマイズ

inputsをカスタマイズすると、デフォルトの動作からすぐにオプトアウトされます。pipeline.<task>.inputsを使用して、考慮すべきすべてのファイルをマニュアルで指定する必要があります。

便宜上、特別な文字列$TURBO_DEFAULT$をinputs配列内で使用して、デフォルトの動作で考慮されるすべてのファイルを自動的に含めることができます。これにより、デフォルトで考慮されたすべてのファイルをマニュアルで指定する必要なく、入力をカスタマイズできます。

一部のタスクでは、タスクハッシュの考慮事項へのファイル入力の数を減らすことが有益です。README.mdの内容に依存するタスクはほとんどありません。重要なファイルのみを指定すると、キャッシュヒットの頻度を高めることができます。

たとえば、多くのbuildタスクでは、重要なファイルはsrcディレクトリに表示される可能性があります。あるいは、testタスクは、srcおよびtestディレクトリのファイルのみに依存する可能性があります。pipeline.<task>.inputsに渡されたglobパターンを使用して指定できます。

{
  "$schema": "https://turbo.dokyumento.jp/schema.json",
  "pipeline": {
    "build": {
      "inputs": ["src/**"]
    },
    "test": {
      "inputs": ["src/**", "test/**"]
    }
  }
}

これらのglobパターンはワークスペースのパスを基準としているため、websiteアプリ内のbuildでは、/apps/website/src/**をファイル入力として扱い、utilsワークスペース内のbuildでは、/packages/utils/src/**をファイル入力として扱います。

あるタスクがファイル依存関係を指定する別のタスクに依存する場合、再度リストする必要はありません。タスク間の依存関係を使用して、すべてのファイル依存関係が満たされるようにすることができます。

{
  "$schema": "https://turbo.dokyumento.jp/schema.json",
  "pipeline": {
    "build": {
      "dependsOn": ["^build"],
      "inputs": ["src/**"]
    },
    "test": {
      // This task dependsOn build...
      "dependsOn": ["build"],
      // ...which means that it does not need to specify "src/**" here:
      "inputs": ["test/**"]
    }
  }
}

このパターンを使用すると、すべてのタスクに対してファイルグロブのリストを繰り返し列挙する必要がなくなります。

デフォルトの動作を維持したいが、いくつかのファイルのみを含めたり除外したりすることもできます。特別な文字列$TURBO_DEFAULT$を使用して、デフォルトで考慮されたすべてのファイルを含めることができます。

{
  "$schema": "https://turbo.dokyumento.jp/schema.json",
  "pipeline": {
    "build": {
      "inputs": ["$TURBO_DEFAULT$", "!README.md", "a-git-ignored-file.txt"]
    }
  }
}