mcpField
P
pnpm-workspace

pnpm-workspace

github.com/oakoss開発20185 回インストール10 週間前に更新
リポジトリ

pnpm-workspace について

マルチパッケージリポジトリ向けの、pnpm workspace の実用ガイドです。ローカルパッケージのリンク、依存バージョンの統一、対象を絞ったコマンド実行を扱います。

主な機能

  1. 01パッケージグロブによるワークスペース設定
  2. 02workspace: によるローカルリンク
  3. 03catalog による依存バージョン統一
  4. 04フィルターによるパッケージ選択
  5. 05ワークスペースのインストールと公開手順

活用シーン

  1. 01マルチパッケージリポジトリの設定
  2. 02アプリとライブラリ間でのパッケージ共有
  3. 03依存バージョンの統一
  4. 04選択したパッケージでのスクリプト実行

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/oakoss/agent-skills --skill pnpm-workspace

インストール後、Claude Code で/pnpm-workspaceを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
filtering.md
monorepo-integration.md
shared-configs.md
workspace-setup.md

詳細

pnpm ワークスペース

概要

pnpm ワークスペースは、pnpm-workspace.yaml による組み込みのモノレポサポート、ローカルパッケージのリンクに使う workspace: プロトコル、特定のパッケージ間でコマンドを実行できる強力なフィルタリング機能を提供します。カタログを使うと、ワークスペース内のすべてのパッケージで依存関係のバージョンを統一できます。

使用する場面: 複数パッケージのリポジトリ、利用側アプリと共有ライブラリがある場合、パッケージ間で依存関係を一貫して管理する場合、パッケージの一部を対象にコマンドを実行する場合。

使用しない場面: 単一パッケージのプロジェクト、すでに npm/yarn ワークスペースを使用しているプロジェクト(移行が必要)、パッケージごとにバージョン範囲が変動する依存関係が必要なプロジェクト。

クイックリファレンス

パターンAPI / 設定主なポイント
ワークスペースを定義するpnpm-workspace.yaml の packages グロブpackage.json を含むディレクトリに一致します
ローカルパッケージをリンクする"dep": "workspace:*"常にローカルのワークスペースパッケージを解決します
バージョン範囲を指定してリンクする"dep": "workspace:^1.0.0"ローカルのバージョンが範囲を満たさない場合、インストールに失敗します
デフォルトカタログpnpm-workspace.yaml の catalog: キー依存関係のバージョンを管理する唯一の情報源
名前付きカタログ名前付きグループを指定する catalogs: キー複数のバージョンセット(例:react18、react17)
パッケージでカタログを使用する"dep": "catalog:" または "dep": "catalog:name"pnpm publish 時に実際のバージョンへ解決されます
名前でフィルタリングする--filter <name> または -F <name>完全一致またはグロブパターン(@scope/*)
依存関係を含めてフィルタリングする--filter "foo..."パッケージとそのすべての依存関係
依存元を含めてフィルタリングする--filter "...foo"パッケージと、それに依存するすべてのパッケージ
ディレクトリでフィルタリングする--filter "./packages/app"ディレクトリパス配下のすべてのパッケージ
Git の変更でフィルタリングする--filter "[origin/main]"コミットまたはブランチ以降に変更されたパッケージ
フィルターから除外する--filter "!foo"一致するパッケージを選択対象から除外します
パッケージでスクリプトを実行するpnpm --filter <pkg> <script>一致したパッケージでのみスクリプトを実行します
再帰的に実行するpnpm -r run <script>ワークスペース内のすべてのパッケージでスクリプトを実行します
すべてをインストールするpnpm installワークスペース全体で単一のロックファイルを使用します
ワークスペースパッケージを公開するpnpm publishworkspace: と catalog: を実際のバージョンに置き換えます
ワークスペースの依存関係を注入する.npmrc の inject-workspace-packages=trueシンボリックリンクではなくハードリンクを使用します。デプロイに必要です
スクリプトのセキュリティ(v10+)package.json の allowBuildsライフサイクルスクリプトはデフォルトでブロックされます。依存関係ごとに許可します

よくある間違い

間違い正しい方法
workspace:* を使用したまま公開するpnpm は公開時に workspace:* を実際のバージョンに自動で置き換えます
packages: にディレクトリを記載し忘れるすべてのパッケージディレクトリは、pnpm-workspace.yaml の glob に一致する必要があります
ワークスペースのパッケージで npm install を使用する必ずワークスペースのルートから pnpm install を使用します
パッケージ間でバージョンを重複してハードコードするcatalog: を使用してバージョン定義を一元管理します
サブパッケージ内で pnpm install を実行するワークスペースのルートから実行し、対象パッケージの指定には --filter を使用します
--filter がディレクトリ名に一致すると想定する--filter はディレクトリ名ではなく、package.json の name フィールドに一致します
zsh で除外フィルターの ! をエスケープしない\! を使用するか、フィルターを引用符で囲みます:--filter="!foo"
ワークスペース外の依存関係に workspace: を使用するworkspace: プロトコルは、ワークスペースに定義されたパッケージでのみ機能します
pnpm 10 へのアップグレード後にライフサイクルスクリプトが失敗するpnpm 10 ではスクリプトがデフォルトでブロックされます。設定の allowBuilds に依存関係を追加します
inject-workspace-packages を設定せずに pnpm deploy を使用する.npmrc で inject-workspace-packages=true を設定します(pnpm 10 では必須です)

委任

  • ワークスペースの足場作り:既存のパッケージ構成を調査するには、Explore エージェントを使用します
  • 依存関係の監査:パッケージ間のバージョンの一貫性を確認するには、Task エージェントを使用します

turborepo スキルが利用可能な場合は、ビルドのオーケストレーション、タスクのキャッシュ、CI の最適化を委任します。 changesets スキルが利用可能な場合は、バージョン管理、変更履歴の生成、npm への公開を委任します。

参考資料

コメント