mcpField
U
uv-workspaces

uv-workspaces

github.com/laurigates開発59326 回インストール1 日前に更新
リポジトリ

uv-workspaces について

UV workspaces で Python のモノレポや複数パッケージを管理する開発者向けのリファレンススキルです。ワークスペース設定、依存関係の解決、コマンド、Docker のキャッシュ方法を解説します。

主な機能

  1. 01メンバーと依存関係の設定
  2. 02パッケージの同期・ロック・ビルド
  3. 03ソース継承とバージョン制約の説明
  4. 04Docker キャッシュ例の提示

活用シーン

  1. 01共有依存関係を持つ Python モノレポの構築
  2. 02ワークスペースの依存関係解決の調査
  3. 03CI でのメンバー同期やテスト

インストール

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

$npx skills add https://github.com/laurigates/claude-plugins --skill uv-workspaces

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

同梱ファイルREFERENCE.md

詳細

UV ワークスペース

UV ワークスペースを使ってモノレポやマルチパッケージプロジェクトを管理するためのクイックリファレンスです。

このスキルを使う場面

次の場合はこのスキルを使います…次の場合は別のスキルを使います…
共有依存関係を持つ Python モノレポをセットアップするとき単一パッケージを管理するとき(uv-project-management)
ワークスペースのメンバーやパッケージ間の依存関係を設定するときGit/URL 依存関係を追加するとき(uv-advanced-dependencies)
--package または --all-packages フラグを使うときPyPI 向けにビルド/公開するとき(python-packaging)
仮想ワークスペースを作成するとき(プロジェクトを含まないルート)Python のバージョンを管理するとき(uv-python-versions)
ワークスペースの依存関係解決をデバッグするときスタンドアロンのスクリプトを実行するとき(uv-run)

クイックリファレンス

ワークスペースの構成
my-workspace/
├── pyproject.toml          # Root workspace config
├── uv.lock                 # Shared lockfile (all members)
├── packages/
│   ├── core/
│   │   ├── pyproject.toml
│   │   └── src/core/
│   ├── api/
│   │   ├── pyproject.toml
│   │   └── src/api/
│   └── cli/
│       ├── pyproject.toml
│       └── src/cli/
└── README.md
ルートの pyproject.toml
[project]
name = "my-workspace"
version = "0.1.0"
requires-python = ">=3.11"

[tool.uv.workspace]
members = ["packages/*"]

# Optional: exclude specific members
exclude = ["packages/experimental"]
仮想ワークスペース(ルートパッケージなし)

ルートが純粋に整理目的であり、パッケージ自体ではない場合は、[project] テーブルを省略します。

# Root pyproject.toml — virtual workspace (no [project] table)
[tool.uv.workspace]
members = ["packages/*"]
  • ルートはワークスペースのメンバーではありません
  • すべてのメンバーはサブディレクトリに配置します
  • uv run と uv sync には --package または --all-packages が必要です(指定しないとエラーになります)
メンバーの pyproject.toml
[project]
name = "my-api"
version = "0.1.0"
requires-python = ">=3.11"
dependencies = [
    "my-core",       # Workspace member
    "fastapi",       # External (PyPI)
]

[tool.uv.sources]
my-core = { workspace = true }

よく使うコマンド

操作コマンド
ワークスペースのルートを同期するuv sync
すべてのメンバーを同期するuv sync --all-packages
特定のメンバーを同期するuv sync --package my-api
メンバーのコンテキストで実行するuv run --package my-api python script.py
ワークスペース全体をロックするuv lock
依存関係をアップグレードするuv lock --upgrade-package requests
特定のパッケージをビルドするuv build --package my-core
メンバーに依存関係を追加するcd packages/api && uv add requests
ワークスペース依存関係を追加するcd packages/api && uv add ../core

主な動作

ソースの継承

ルートの tool.uv.sources は、上書きされない限りすべてのメンバーに適用されます。

ユースケース:すべてのメンバー向けにワークスペースのソースをルートで定義し、特定のメンバーで異なるバージョンが必要な場合にのみ上書きします。

# Root pyproject.toml — applies to all members
[tool.uv.sources]
my-utils = { workspace = true }

# packages/legacy/pyproject.toml — needs pinned version
[tool.uv.sources]
my-utils = { path = "../utils-v1" }  # Overrides root entirely

上書きは依存関係ごとに行われ、完全に置き換わります。メンバーがある依存関係のソースを定義すると、その依存関係に対するルートのソースは完全に無視されます。

requires-python の解決

ワークスペースでは、すべてのメンバーの requires-python の共通部分が適用されます。

# packages/core: requires-python = ">=3.10"
# packages/api:  requires-python = ">=3.11"
# Effective:     requires-python = ">=3.11"

すべてのメンバーで、互換性のある Python バージョン要件を指定する必要があります。

編集可能なインストール

ワークスペースメンバーの依存関係は常に編集可能です。ソースを変更すると、再インストールせずにすぐ反映されます。

デフォルトの適用範囲
コマンドデフォルトの適用範囲上書き
uv lockワークスペース全体—
uv syncワークスペースのルートのみ--package, --all-packages
uv runワークスペースのルートのみ--package, --all-packages
uv buildすべてのメンバー--package

ワークスペースとパス依存関係の比較

機能{ workspace = true }{ path = "../pkg" }
共有ロックファイルはいいいえ
常に編集可能はい任意
ワークスペースのメンバーである必要があるはいいいえ
--package フラグが使えるはいいいえ
競合する依存関係を許可いいえはい

メンバー間で要件が競合する場合や、個別の仮想環境が必要な場合は、パス依存関係を使います。

Docker のレイヤーキャッシュ

# Install deps first (cached layer)
COPY pyproject.toml uv.lock packages/*/pyproject.toml ./
RUN uv sync --frozen --no-install-workspace

# Then install project (changes frequently)
COPY . .
RUN uv sync --frozen
フラグ効果
--no-install-project現在のプロジェクトをスキップし、依存関係のみをインストールします
--no-install-workspaceすべてのワークスペースメンバーをスキップし、依存関係のみをインストールします
--no-install-package <name>特定のパッケージをスキップします
--frozenロックファイルの最新状態チェックをスキップします

エージェント向けの最適化

コンテキストコマンド
すべてのメンバーを同期uv sync --all-packages
CI 同期(固定)uv sync --all-packages --frozen
特定のメンバーをテストuv run --package my-core pytest --dots --bail=1
すべてのメンバーをテストuv run --all-packages pytest --dots --bail=1
アップグレードしてロックuv lock --upgrade-package <dep>
1 つのパッケージをビルドuv build --package my-core
Docker の依存関係レイヤーuv sync --frozen --no-install-workspace

関連項目

  • uv-project-management — 個別のパッケージの管理
  • uv-advanced-dependencies — パス依存関係と Git 依存関係
  • python-packaging — ワークスペースパッケージのビルドと公開

詳細なワークスペースのパターン(仮想ワークスペース、Docker との統合、ソースの継承、同期戦略)、CI/CD の例、トラブルシューティングについては、REFERENCE.md を参照してください。

コメント