DevToolBox無料
ブログ

Monoレポツール2026:Turborepo vs Nx vs Lerna vs pnpm Workspaces比較

15分by DevToolBox

モノレポはコード共有、リファクタリング、依存関係管理を改善します。2026年はTurborepo、Nx、pnpm Workspacesが主流です。

Turborepo:セットアップと構造

TurborepoはJavaScript/TypeScriptモノレポに最適化されています。

# Create a new Turborepo monorepo
npx create-turbo@latest my-monorepo
cd my-monorepo

# Or add Turborepo to an existing monorepo
npm install turbo --save-dev

# Directory structure
my-monorepo/
├── apps/
│   ├── web/          # Next.js app
│   └── docs/         # Docs site
├── packages/
│   ├── ui/           # Shared React components
│   ├── utils/        # Shared utilities
│   └── tsconfig/     # Shared TypeScript configs
├── turbo.json        # Pipeline configuration
└── package.json      # Root workspace config

Turborepoパイプライン設定

turbo.jsonパイプラインはタスク間の依存関係とキャッシュ対象の出力を定義します。

// turbo.json — pipeline definition
{
    "$schema": "https://turbo.build/schema.json",
    "pipeline": {
        "build": {
            "dependsOn": ["^build"],   // ^ means: run in dependency order
            "outputs": [".next/**", "!.next/cache/**", "dist/**"]
        },
        "test": {
            "dependsOn": ["^build"],
            "inputs": ["src/**/*.tsx", "src/**/*.ts", "test/**/*.ts"]
        },
        "lint": {
            "outputs": []
        },
        "dev": {
            "cache": false,            // Never cache dev servers
            "persistent": true         // Long-running task
        },
        "type-check": {
            "dependsOn": ["^build"],
            "outputs": []
        }
    },
    "globalEnv": ["NODE_ENV", "DATABASE_URL"]
}

# Run all build tasks (uses cache if inputs unchanged)
npx turbo build

# Run only for specific apps/packages
npx turbo build --filter=web
npx turbo build --filter=...ui  # ui and all its dependents

# Force re-run (bypass cache)
npx turbo build --force

# View task graph
npx turbo build --graph

Nx:セットアップとプロジェクトグラフ

NxはよりリッチなフィーチャーセットをO提供:コードジェネレーター、Affectedコマンド。

# Create Nx monorepo
npx create-nx-workspace@latest my-nx-repo --preset=ts

# Add Nx to existing monorepo
npx nx@latest init

# Generate a new app or library
nx generate @nx/next:app web
nx generate @nx/react:library ui
nx generate @nx/node:library utils

# nx.json — workspace configuration
{
    "tasksRunnerOptions": {
        "default": {
            "runner": "nx/tasks-runners/default",
            "options": {
                "cacheableOperations": ["build", "test", "lint", "e2e"],
                "parallel": 3
            }
        }
    },
    "targetDefaults": {
        "build": {
            "dependsOn": ["^build"],
            "inputs": ["production", "^production"]
        }
    },
    "namedInputs": {
        "default": ["{projectRoot}/**/*", "sharedGlobals"],
        "production": ["default", "!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)"],
        "sharedGlobals": []
    }
}

pnpm Workspaces:軽量アプローチ

pnpm workspacesは追加ツールなしでネイティブモノレポサポートを提供。

# pnpm-workspace.yaml
packages:
  - 'apps/*'
  - 'packages/*'

# Install all workspace dependencies
pnpm install

# Add a package to a specific workspace
pnpm add react --filter @myapp/web

# Add a local workspace package as dependency
# In apps/web/package.json:
{
    "dependencies": {
        "@myapp/ui": "workspace:*"
    }
}

# Run scripts across all packages
pnpm --filter '*' run build
pnpm --filter './apps/*' run dev
pnpm --filter '...@myapp/ui' run test  # ui and dependents

# Publish all public packages
pnpm publish -r --access public

リモートキャッシュ

リモートキャッシュは開発者とCIシステム間でビルドアーティファクトを共有。

# Turborepo Remote Cache (Vercel)
# Enables sharing build cache across developers and CI

# 1. Link to Vercel
npx turbo login
npx turbo link

# 2. Now CI builds share cache with local dev:
# CI run: builds from scratch, uploads to cache
# Developer: pulls cache, gets instant builds

# Self-host with Turborepo Remote Cache (open source)
# docker run -p 3000:3000 ducktors/turborepo-remote-cache

# .turbo/config.json (auto-generated by turbo link)
{
    "teamId": "team_xxx",
    "apiUrl": "https://vercel.com"
}

# Nx Cloud (similar offering from Nx)
# nx connect-to-nx-cloud
# Provides remote caching + task distribution

Changesetsでのバージョン管理

Changesetsはモノレポでパッケージをバージョン管理・公開するための標準ツール。

# Changesets — versioning and publishing for monorepos
# Works with npm/yarn/pnpm workspaces

pnpm add -D @changesets/cli
pnpm changeset init

# When you make a change that needs a version bump:
pnpm changeset
# → Interactive prompt: which packages changed, bump type (major/minor/patch)

# Creates a markdown file in .changeset/ describing the change
# Example .changeset/funny-bears-dance.md:
---
"@myapp/ui": minor
"@myapp/utils": patch
---

Add new Button component with loading state

# Apply changesets (bumps versions, updates CHANGELOG.md)
pnpm changeset version

# Publish all changed packages
pnpm changeset publish

Turborepo vs Nx vs pnpm Workspaces

FeatureTurborepoNxpnpm Workspaces
Setup complexityLowMediumVery Low
Task cachingBuilt-inBuilt-inManual/external
Remote cacheVercel (free tier)Nx Cloud (paid)None built-in
Code generatorsNoYes (rich)No
Affected detectionBasic (--filter)Advanced (nx affected)Via Changesets
Language supportJS/TS focusedPolyglotAny
Learning curveLowMedium-HighLow

ベストプラクティス

  • pnpm workspaces + Turborepoから始める。
  • 明確な境界を定義:共有パッケージはpackages/、アプリはapps/に。
  • バージョン管理にChangesetsを使用。
  • リモートキャッシュを早期に有効化。
  • 各パッケージのpackage.jsonを明示的に保つ。

よくある質問

TurborepoかNxか?

Turborepoは多くのJSプロジェクトにとってよりシンプル。Nxは大規模リポ向けのより多くの機能を持つ。

モノレポとポリレポの違いは?

モノレポはすべてのコードを1つのリポジトリに格納します。

Turborepoキャッシュの仕組みは?

Turborepoは各タスクの入力をハッシュ化し、キャッシュから出力を復元します。

モノレポで異なるパッケージマネージャーは?

いいえ。すべてのワークスペースは同じパッケージマネージャーを使用する必要があります。

モノレポでの環境変数は?

アプリごとに環境変数を定義し、turbo.json globalEnvにリスト。

関連ツール

𝕏 Twitterin LinkedIn
この記事は役に立ちましたか?

最新情報を受け取る

毎週の開発ヒントと新ツール情報。

スパムなし。いつでも解除可能。

Try These Related Tools

{ }JSON Formatter.git.gitignore Generator

Related Articles

Bunパッケージマネージャー:2026年最速JavaScriptランタイム完全ガイド

Bun完全ガイド2026:インストール、ワークスペース管理、スクリプト、npm/yarn/pnpmより速い理由。

Dockerマルチステージビルド:本番環境向けイメージの最適化

Dockerマルチステージビルド完全マスター2026:イメージサイズ削減、ビルドとランタイム依存関係の分離。

Gitブランチ戦略:GitFlow vs トランクベース vs GitHub Flow

GitFlow、トランクベース開発、GitHub Flowのブランチ戦略を比較。ブランチ構造、マージワークフロー、CI/CD統合、チームに最適な戦略の選び方。