リポジトリ
ドキュメント
API リファレンス
Codemods

Turborepo Codemods

Turborepo は、機能が非推奨になった場合に Turborepo コードベースのアップグレードを支援するための Codemod 変換と自動移行スクリプトを提供します。

Codemod は、コードベース上でプログラムで実行される変換です。これにより、すべてのファイルを個別に確認することなく、大量の変更を適用できます。

使用法

npx @turbo/codemod <transform> <path>
  • transform - 変換の名前。利用可能な変換は以下を参照してください。
  • path - 変換するファイルまたはディレクトリ
  • --dry - ドライランを実行します。コードは編集されません。
  • --print - 変更された出力を比較のために出力します。

Turborepo 1.x

  1. add-package-manager
  2. create-turbo-config
  3. migrate-env-var-dependencies
  4. set-default-outputs
  5. stabilize-env-mode
  6. transform-env-literals-to-wildcards

add-package-manager

v1.1.0 で導入

ルートのpackage.jsonを変換し、検出されたパッケージマネージャー(yarnnpmpnpm)とそのバージョン(例:yarn@1.22.17)をpackageManagerキーとして設定します。このキーは現在、Node.jsでサポートされており (新しいタブで開きます)、Turborepoでより高速なパッケージマネージャー検出に使用されます(ファイルシステムのみから推測するのではなく)。

例えば、Yarn v1の場合:

// Before
{
  "name": "turborepo-basic",
  "version": "0.0.0",
  "private": true,
  "workspaces": ["apps/*", "packages/*"]
  // ...
}
{
  "name": "turborepo-basic",
  "version": "0.0.0",
  "private": true,
+  "packageManager": "yarn@1.22.17",
  "workspaces": [
    "apps/*",
    "packages/*"
  ]
}

使い方

プロジェクトに移動します

cd path-to-your-turborepo/

コードモッドを実行します

npx @turbo/codemod add-package-manager

create-turbo-config

v1.1.0 で導入

package.json内の"turbo"キーに基づいて、プロジェクトのルートにturbo.jsonファイルを作成します。"turbo"キーはその後、package.jsonから削除されます。

例:

// Before, package.json
{
  "name": "Monorepo root",
  "private": true,
  "turbo": {
    "pipeline": {
      ...
    }
  },
  ...
}
// After, package.json
{
  "name": "Monorepo root",
  "private": true,
-  "turbo": {
-    "pipeline": {
-      ...
-    }
-  },
  ...
}
 
// After, turbo.json
+{
+  "$schema": "https://turbo.dokyumento.jp/schema.json",
+  "pipeline": {
+    ...
+  }
+}

使い方

プロジェクトに移動します

cd path-to-your-turborepo/

コードモッドを実行します

npx @turbo/codemod create-turbo-config

migrate-env-var-dependencies

v1.5.0で導入されました

turbo.json内のすべての環境変数依存関係を、dependsOnおよびglobalDependenciesからそれぞれenvおよびglobalEnvに移行します。

例:

// Before, turbo.json
{
  "$schema": "https://turbo.dokyumento.jp/schema.json",
  "globalDependencies": [".env", "$CI_ENV"],
  "pipeline": {
    "build": {
      "dependsOn": ["^build", "$API_BASE"],
      "outputs": [".next/**", "!.next/cache/**"]
    },
    "lint": {},
    "dev": {
      "cache": false,
      "persistent": true
    }
  }
}
// After, turbo.json
{
  "$schema": "https://turbo.dokyumento.jp/schema.json",
- "globalDependencies": [".env", "$CI_ENV"],
+ "globalDependencies": [".env"],
+ "globalEnv": ["CI_ENV"],
  "pipeline": {
    "build": {
-     "dependsOn": ["^build", "$API_BASE"],
+     "dependsOn": ["^build"],
+     "env": ["API_BASE"],
      "outputs": [".next/**", "!.next/cache/**"],
    },
    "lint": {},
    "dev": {
      "cache": false,
      "persistent": true
    }
  }
}

使い方

プロジェクトに移動します

cd path-to-your-turborepo/

コードモッドを実行します

npx @turbo/codemod migrate-env-var-dependencies

set-default-outputs

v1.7.0で導入されました

turbo.jsonの出力に、以前推測されていたdist/build/を含めるように移行します。

例:

// Before, turbo.json
{
  "$schema": "https://turbo.dokyumento.jp/schema.json",
  "globalDependencies": [".env"],
  "globalEnv": ["CI_ENV"],
  "pipeline": {
    "build": {
      "dependsOn": ["^build"],
      "env": ["API_BASE"],
      "outputs": [".next/**", "!.next/cache/**"]
    },
    "lint": {
      "outputs": []
    },
    "dev": {
      "cache": false,
      "persistent": true
    }
  }
}
// After, turbo.json
{
  "$schema": "https://turbo.dokyumento.jp/schema.json",
  "globalDependencies": [".env"],
  "globalEnv": ["CI_ENV"],
  "pipeline": {
    "build": {
      "dependsOn": ["^build"],
      "env": ["API_BASE"],
      "outputs": [".next/**", "!.next/cache/**"]
    },
-   "lint": {
-     "outputs": []
-    },
+   "lint": {},
    "dev": {
      "cache": false,
      "persistent": true,
+     "outputs": ["dist/**", "build/**"]
    }
  }
}
 

使い方

プロジェクトに移動します

cd path-to-your-turborepo/

コードモッドを実行します

npx @turbo/codemod set-default-outputs

stabilize-env-mode

v1.10.0で導入されました

turbo.jsonexperimentalGlobalPassThroughEnvglobalPassThroughEnvに、experimentalPassThroughEnvpassThroughEnvに移行します。

例:

// Before, turbo.json
{
  "$schema": "https://turbo.dokyumento.jp/schema.json",
  "experimentalGlobalPassThroughEnv": ["CC"],
  "pipeline": {
    "build": {
      "experimentalPassThroughEnv": ["GOROOT"],
    }
  }
}
// After, turbo.json
{
  "$schema": "https://turbo.dokyumento.jp/schema.json",
  "globalPassThroughEnv": ["CC"],
  "pipeline": {
    "build": {
      "passThroughEnv": ["GOROOT"],
    }
  }
}

使い方

プロジェクトに移動します

cd path-to-your-turborepo/

コードモッドを実行します

npx @turbo/codemod stabilize-env-mode

transform-env-literals-to-wildcards

v1.10.0で導入されました

既存の環境変数フィールドで、内容が新しいワイルドカード構文と曖昧になる可能性のあるものを更新します。

例:

// Before, turbo.json
{
  "$schema": "https://turbo.dokyumento.jp/schema.json",
  "globalEnv": ["THIS_*_IS_LITERAL"],
  "globalPassThroughEnv": ["!LITERAL_LEADING_EXCLAMATION"],
  "pipeline": {
    "build": {
      "env": ["50_PERCENT_OFF*_HAS_SMALL_PRINT"],
      "passThroughEnv": ["**BOLDED**"],
    }
  }
}
// After, turbo.json
{
  "$schema": "https://turbo.dokyumento.jp/schema.json",
  "globalEnv": ["THIS_\\*_IS_LITERAL"],
  "globalPassThroughEnv": ["\\!LITERAL_LEADING_EXCLAMATION"],
  "pipeline": {
    "build": {
      "env": ["50_PERCENT_OFF\\*_HAS_SMALL_PRINT"],
      "passThroughEnv": ["\\*\\*BOLDED\\*\\*"],
    }
  }
}

使い方

プロジェクトに移動します

cd path-to-your-turborepo/

コードモッドを実行します

npx @turbo/codemod transform-env-literals-to-wildcards