turborepo について
Turborepo を使った JavaScript と TypeScript のモノレポ開発向けスキルです。ワークスペース構成、タスクパイプライン、キャッシュ、CI/CD の設定を扱います。
主な機能
- 01モノレポのワークスペース構成
- 02タスク依存関係の設定
- 03ローカル・リモートキャッシュ
- 04ワークスペース別のコマンド実行
- 05CI/CD と環境変数の設定
活用シーン
- 01Turborepo モノレポの構築
- 02ビルドと lint の実行順設定
- 03キャッシュによる CI ビルド改善
- 04指定ワークスペースでのコマンド実行
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mindrally/ skills --skill turborepoインストール後、Claude Code で/turborepoを入力して読み込まれたか確認します。
詳細
Turborepo の開発
JavaScript と TypeScript のモノレポ向け高性能ビルドシステムである Turborepo のエキスパートです。
プロジェクト構成
- 標準的な Turborepo の構成に従ってワークスペースを整理します。
apps/- アプリケーションのワークスペース(ウェブアプリ、API、モバイルアプリ)packages/- 共有パッケージ(UI コンポーネント、ユーティリティ、設定)tooling/- ビルドツールと設定(任意)
- ルートの
package.jsonはワークスペース設定のみを含む最小限のものにします。 - すべてのワークスペースで一貫した命名規則を使用します。
ワークスペースの設定
- ルートの
package.jsonでワークスペースを定義します。{ "workspaces": ["apps/*", "packages/*"] } - 各ワークスペースに、適切な依存関係を含む独自の
package.jsonを用意します。 - ワークスペースプロトコルを使用して、内部パッケージを参照します。例:
"@repo/ui": "workspace:*"
turbo.json の設定
{
"$schema": "https://turbo.build/schema.json",
"tasks": {
"build": {
"dependsOn": ["^build"],
"outputs": ["dist/**", ".next/**", "!.next/cache/**"]
},
"dev": {
"cache": false,
"persistent": true
},
"lint": {},
"test": {
"dependsOn": ["build"]
}
}
}
- トポロジカルな依存関係(最初に依存先をビルド)には、
^プレフィックスを使用します。 - キャッシュ用に適切な
outputsを定義します。 - 開発タスクには
cache: falseとpersistent: trueを設定します。
キャッシュ戦略
- CI/CD で Vercel またはセルフホスト可能なソリューションを使って、リモートキャッシュを設定します。
- 正確な
outputs配列を定義して、適切にキャッシュがヒットするようにします。 - タスクのキャッシュに影響するファイルを指定するには、
inputsを使用します。 - キャッシュディレクトリを
outputsから除外します(例:!.next/cache/**)。
タスクの依存関係
dependsOnを使用して、タスク間の関係を定義します。"^build"- 依存先のビルドを先に実行します。"lint"- 同じパッケージ内で lint を実行します。"@repo/ui#build"- 特定のパッケージでビルドを実行します。
- 複雑なビルドパイプラインでは、適切なタスクの実行順序を定義します。
共有設定
- 共有設定パッケージを作成します。
@repo/typescript-config- 共有 TypeScript 設定@repo/eslint-config- 共有 ESLint 設定@repo/tailwind-config- 共有 Tailwind 設定
- ワークスペースの設定では、
extendsまたはインポートを使用して設定を参照します。
開発ワークフロー
turbo devを使用して、ワークスペース全体で開発サーバーを実行します。- コマンドを特定のワークスペースに絞り込みます:
turbo build --filter=web - パターンを使って
--filterを指定します:turbo build --filter=./apps/* - 継続的にビルドするには、
turbo watchでウォッチモードを使用します。
CI/CD との統合
- ビルドを高速化するために、CI でリモートキャッシュを有効にします。
- 実行される内容を事前に確認するには、
--dry-runを使用します。 globalEnvとenvを使って、環境変数を適切に処理します。- GitHub Actions またはその他の CI を、Turborepo のキャッシュとともに設定します。
ベストプラクティス
- 類似したワークスペース間で、タスク定義に一貫性を持たせます。
- パッケージ固有のオーバーライドには、ワークスペースレベルの
turbo.jsonを使用します。 - ルートレベルの依存関係は最小限にし、必要なワークスペースにインストールします。
- README ファイルに、各ワークスペースの用途と関連性を記載します。
- 型チェックを高速化するために、TypeScript のプロジェクト参照を使用します。
- 大規模なコードベースでは、インクリメンタルビルドを導入します。
コメント
Markdown 対応