0Pricing
TypeScript Academy · レッスン

TypeScriptでのpnpm Workspaces

pnpmと共有tsconfigでmonorepoを設定します。

「TypeScriptでのpnpm Workspaces」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全4レッスンが含まれています。

pnpm ワークスペースとは

pnpm ワークスペースを使用すると、共有された node_modules 構造を持つ単一のリポジトリで複数のパッケージを管理できます。ディスク使用量を削減し、パッケージ間のインポートも可能になります。

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

ワークスペース構造の作成

一般的な pnpm モノレポでは、共有ライブラリに packages/ を、デプロイ可能なアプリケーションに apps/ を使用します。

monorepo/
├── pnpm-workspace.yaml
├── package.json          # root
├── packages/
│   ├── core/             # shared logic
│   └── ui/               # shared components
└── apps/
    └── web/              # Next.js app

ルートの tsconfig.json

ルートの tsconfig で基本オプションを設定し、すべてのワークスペースパッケージを参照します。

{
  "compilerOptions": {
    "strict": true,
    "target": "ES2022",
    "module": "ESNext",
    "moduleResolution": "bundler"
  },
  "references": [
    { "path": "packages/core" },
    { "path": "packages/ui" },
    { "path": "apps/web" }
  ]
}

パッケージ単位の tsconfig

各パッケージはルート設定を拡張し、それぞれの composite と outDir を設定します。

// packages/core/tsconfig.json
{
  "extends": "../../tsconfig.json",
  "compilerOptions": {
    "composite": true,
    "outDir": "./dist",
    "rootDir": "./src"
  }
}

パッケージ間の依存関係のインストール

ワークスペースプロトコルとともに pnpm add を使用して、モノレポ内のパッケージをリンクします。

# Add @myapp/core to apps/web
pnpm add @myapp/core --workspace --filter apps/web

# package.json entry:
# "@myapp/core": "workspace:*"

TypeScript のパス解決

ルートの tsconfig に paths エイリアスを追加すると、開発中に TypeScript がワークスペースパッケージをソースへ解決できます。

{
  "compilerOptions": {
    "paths": {
      "@myapp/core": ["./packages/core/src/index.ts"],
      "@myapp/ui": ["./packages/ui/src/index.ts"]
    }
  }
}

すべてのパッケージのビルド

ルートから tsc --build を使用して、すべてのコンポジットパッケージを依存関係の順序に従ってビルドします。

# Build all
tsc --build

# Or with pnpm recursive script:
pnpm -r build

パッケージ全体でのスクリプト実行

pnpm -r(再帰実行)または --filter を使用すると、一致するすべてのパッケージでスクリプトを実行できます。

# Run tests in all packages
pnpm -r test

# Run only in packages/core
pnpm --filter @myapp/core test

ESLint と Prettier の共有設定

リンティング設定を共有パッケージにまとめ、各パッケージでそれを拡張して、モノレポ全体でコードスタイルを統一します。

// packages/eslint-config/index.js
module.exports = { extends: ["airbnb-typescript"], ... };

Turborepo との統合

Turborepo を追加してビルド、テスト、Lint のタスクをキャッシュおよび並列化し、依存関係の順序付けには pnpm のワークスペースグラフを使用します。

npx create-turbo@latest
# or add to existing monorepo:
pnpm add turbo -w

まとめ: TypeScript での pnpm ワークスペース

pnpm ワークスペースと TypeScript のプロジェクト参照を組み合わせると、共有 node_modules、workspace:* によるパッケージ間インポート、tsc --build による高速なビルドを備えた強力なモノレポ構成を作成できます。

確認問題

pnpm ワークスペースのパッケージとなるディレクトリを定義するファイルはどれですか。

学んだこと

TypeScript のプロジェクト参照と pnpm ワークスペースを組み合わせると、共有 node_modules、ワークスペースプロトコルによるパッケージ間リンク、増分ビルドを備えた効率的なモノレポを構築できます。キャッシュと並列化には Turborepo を追加します。

よくある質問

「TypeScriptでのpnpm Workspaces」レッスンは無料ですか?

はい。「TypeScriptでのpnpm Workspaces」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全4レッスンが含まれています。

「TypeScriptでのpnpm Workspaces」で何を学びますか?

pnpmと共有tsconfigでmonorepoを設定します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

TypeScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「TypeScriptでのpnpm Workspaces」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このTypeScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. TypeScriptプロジェクト参照の解説
  2. TypeScriptでのpnpm Workspaces
  3. 共有型パッケージの戦略
  4. MonorepoのIncremental BuildとCache
← TypeScript Academyに戻る