turborepo-monorepo
Turborepo を使ったモノレポの構築・管理を包括的にサポートします。Turborepo ワークスペースの作成、turbo.json のタスク設定、Next.js / NestJS アプリのセットアップ、Vitest / Jest によるテストパイプラインの構成、CI/CD の設定、リモートキャッシュの導入、ビルドパフォーマンスの最適化など、TypeScript / JavaScript プロジェクトのモノレポ運用全般で活用できます。
description の原文を見る
Provides comprehensive Turborepo monorepo management guidance for TypeScript/JavaScript projects. Use when creating Turborepo workspaces, configuring turbo.json tasks, setting up Next.js/NestJS apps, managing test pipelines (Vitest/Jest), configuring CI/CD, implementing remote caching, or optimizing build performance in monorepos
SKILL.md 本文
Turborepo モノレポ
概要
Turborepo モノレポ管理のガイダンスを提供します。ワークスペース作成、turbo.json タスク設定、Next.js/NestJS の統合、テストパイプライン(Vitest/Jest)、CI/CD セットアップ、およびビルドパフォーマンスの最適化に対応しています。
使用する場合
- Turborepo ワークスペースの作成または初期化
- 依存関係と出力を持つ
turbo.jsonタスクの設定 - モノレポ構造での Next.js/NestJS アプリの設定
- Vitest/Jest テストパイプラインの設定
- CI/CD ワークフローの構築(GitHub Actions、GitLab CI)
- Vercel Remote Cache によるリモートキャッシング実装
- ビルド時間とキャッシュ命中率の最適化
- タスク依存関係またはキャッシュの問題をデバッグ
- 他のモノレポツールから Turborepo への移行
手順
ワークスペース作成
-
新しいワークスペースの作成:
pnpm create turbo@latest my-workspace cd my-workspace -
既存プロジェクトでの初期化:
pnpm add -D -w turbo -
ルートで turbo.json を作成(最小設定):
{ "$schema": "https://turborepo.dev/schema.json", "pipeline": { "build": { "dependsOn": ["^build"], "outputs": ["dist/**", ".next/**"] }, "lint": { "outputs": [] }, "test": { "dependsOn": ["build"], "outputs": ["coverage/**"] } } } -
ルートの package.json にスクリプトを追加:
{ "scripts": { "build": "turbo run build", "dev": "turbo run dev", "lint": "turbo run lint", "test": "turbo run test", "clean": "turbo run clean" } } -
CI 前にタスクグラフを検証:
turbo run build --dry-run --filter=... # タスク実行順序を確認
タスク設定
-
turbo.jsonでタスクを設定:{ "pipeline": { "build": { "dependsOn": ["^build"], "outputs": ["dist/**"] }, "test": { "dependsOn": ["build"], "outputs": ["coverage/**"] }, "lint": { "outputs": [] } } } -
タスクを実行:
turbo run build # すべてのパッケージ turbo run lint test build # 複数タスク turbo run build --filter=web # 特定パッケージ -
並列型チェック(キャッシュの問題を避けるためトランジットノードを使用):
{ "pipeline": { "transit": { "dependsOn": ["^transit"] }, "typecheck": { "dependsOn": ["transit"] } } } -
コミット前に検証:
turbo run build --dry-run # タスク順序と影響を受けるパッケージを確認
フレームワーク統合
Next.js: ".next/**" を出力し、["NEXT_PUBLIC_*"] 環境変数を使用 - references/nextjs-config.md を参照
NestJS: "dist/**" を出力、cache: false, persistent: true で開発タスク - references/nestjs-config.md を参照
テスト設定
-
Vitest 設定:
{ "pipeline": { "test": { "outputs": [], "inputs": ["$TURBO_DEFAULT$", "vitest.config.ts"] }, "test:watch": { "cache": false, "persistent": true } } } -
影響を受けたテストを実行:
turbo run test --filter=[HEAD^]完全なテスト設定については
references/testing-config.mdを参照してください。
パッケージ設定
- パッケージ固有の turbo.json を作成:
詳細なパッケージ設定パターンについては{ "extends": ["//"], "tasks": { "build": { "outputs": ["$TURBO_EXTENDS$", ".next/**"] } } }references/package-configs.mdを参照してください。
CI/CD 設定
-
検証チェックポイント付きの GitHub Actions:
- name: Install dependencies run: pnpm install - name: Validate affected packages (dry-run) run: pnpm turbo run build --filter=[HEAD^] --dry-run # VALIDATE: 出力を確認して、想定されたパッケージのみがビルドされることを確認 - name: Run tests run: pnpm run test --filter=[HEAD^] - name: Build affected packages run: pnpm run build --filter=[HEAD^] - name: Verify cache hits run: pnpm turbo run build --filter=[HEAD^] --dry-run | grep "Cache" # VALIDATE: 変更されていないパッケージのキャッシュ命中を確認 -
リモートキャッシュ設定:
# Vercel にログイン npx turbo login # リポジトリをリンク npx turbo link完全な CI/CD セットアップ例については
references/ci-cd.mdを参照してください。
タスク プロパティ リファレンス
| プロパティ | 説明 | 例 |
|---|---|---|
dependsOn | 先に完了する必要があるタスク | ["^build"] - 依存関係を優先 |
outputs | キャッシュするファイル/フォルダ | ["dist/**"] |
inputs | キャッシュハッシュ用ファイル | ["src/**/*.ts"] |
env | ハッシュに影響する環境変数 | ["DATABASE_URL"] |
cache | キャッシングの有効/無効 | true または false |
persistent | 長時間実行タスク | dev サーバー用 true |
outputLogs | ログの詳細度 | "full"、"new-only"、"errors-only" |
依存関係パターン
^task- 依存関係内のタスクを最初に実行(トポロジカル順序)task- 同じパッケージ内のタスクを最初に実行package#task- 特定パッケージのタスクを実行
フィルター構文
| フィルター | 説明 |
|---|---|
web | web パッケージのみ |
web... | web + すべての依存関係 |
...web | web + すべての依存元 |
...web... | web + 依存関係 + 依存元 |
[HEAD^] | 前回コミット以降の変更パッケージ |
./apps/* | apps/ 内のすべてのパッケージ |
ベストプラクティス
パフォーマンス最適化
- 特定の出力を使用 - 必要な部分のみキャッシュ
- 入力を微調整 - 出力に影響しないファイルを除外
- トランジットノード - 並列型チェックを有効化
- リモートキャッシュ - チーム/CI 全体でキャッシュを共有
- パッケージ設定 - パッケージごとの動作をカスタマイズ
キャッシング戦略
{
"pipeline": {
"build": {
"outputs": ["dist/**"],
"inputs": ["$TURBO_DEFAULT$", "!README.md", "!**/*.md"]
}
}
}
タスク構成
- 独立タスク -
dependsOnなし: lint、format、spellcheck - ビルドタスク -
dependsOn: ["^build"]: build、compile - テストタスク -
dependsOn: ["build"]: test、e2e - 開発タスク -
cache: false, persistent: true: dev、watch
よくある問題
タスクが順序通りに実行されない
問題: タスクが間違った順序で実行される
解決方法: dependsOn 設定を確認
{
"build": {
"dependsOn": ["^build"]
}
}
変更されていないファイルでキャッシュミスが発生
問題: キャッシュが予期せず無効化される
解決方法: globalDependencies と inputs を確認
{
"globalDependencies": ["tsconfig.json"],
"pipeline": {
"build": {
"inputs": ["$TURBO_DEFAULT$", "!*.md"]
}
}
}
キャッシュ命中後の型エラー
問題: キャッシュにより TypeScript エラーが検出されない
解決方法: 型チェック用にトランジットノードを使用
{
"transit": { "dependsOn": ["^transit"] },
"typecheck": { "dependsOn": ["transit"] }
}
例
例 1: 新しいワークスペースを作成
入力: "Next.js と NestJS を含む Turborepo を作成"
pnpm create turbo@latest my-workspace
cd my-workspace
# Next.js アプリを追加
pnpm add next react react-dom -F apps/web
# NestJS API を追加
pnpm add @nestjs/core @nestjs/common -F apps/api
例 2: テストパイプラインを設定
入力: "すべてのパッケージで Vitest をセットアップ"
{
"pipeline": {
"test": {
"dependsOn": ["build"],
"outputs": ["coverage/**"],
"inputs": ["$TURBO_DEFAULT$", "vitest.config.ts"]
},
"test:watch": {
"cache": false,
"persistent": true
}
}
}
例 3: CI で影響を受けたテストを実行
入力: "CI で変更されたパッケージのみテスト"
pnpm run test --filter=[HEAD^]
例 4: キャッシュの問題をデバッグ
入力: "キャッシュミスの原因を調査"
# ドライランで実行内容を確認
turbo run build --dry-run --filter=web
# ハッシュ入力を表示
turbo run build --force --filter=web
制約と警告
- Node.js 18+ が Turborepo に必須
- パッケージマネージャーフィールド が root の
package.jsonで必須 - 出力は必ず指定 してキャッシング機能を有効化
- 持続的なタスク は依存元を持つことができません
- Windows: WSL または Git Bash を推奨
- リモートキャッシュ は Vercel アカウントまたは自己ホストソリューションが必要
- 大規模モノレポ は
concurrency設定の増加が必要な場合があります
リファレンスファイル
特定のトピックに関する詳細なガイダンスについては、以下を参照してください:
| トピック | リファレンスファイル |
|---|---|
| turbo.json テンプレート | references/turbo.json |
| Next.js 統合 | references/nextjs-config.md |
| NestJS 統合 | references/nestjs-config.md |
| Vitest/Jest/Playwright | references/testing-config.md |
| GitHub/CircleCI/GitLab CI | references/ci-cd.md |
| パッケージ設定 | references/package-configs.md |
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- giuseppe-trisciuoglio
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/giuseppe-trisciuoglio/developer-kit / ライセンス: MIT
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。