5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIエージェントにも正しく使ってほしいPython環境管理ツール「uv」最新情報ガイド

Posted at

「uvを使って環境構築してください」AIエージェントにそう指示ても、uvの古いコマンドを使い何度もエラーを出力します。
私はPythonで開発を行うときには環境管理ツール「uv」を使っています。AIを活用した開発でもuvを使いたかったのですが毎回AIが間違えるのでpipとvenvを使う方法を指示しなおしていました。

この現象には技術的な背景がありそうです。uvは2024年2月に初期リリースされ、その後の数ヶ月で大幅な機能拡張が行われました。一方で多くのAIモデルの知識カットオフ日はこの重要な進化期間と重なっています。さらに、インターネット上に古い情報が更新されずに残存し、初期バージョンについての記事が多くAIの学習に過剰な影響を与えているのではと考えています。

これではuvの良さが活かせないと思い最新のuvについての情報をまとめました。

本記事はuvの最新機能と正確な使い方を確認するためのガイドです。また記事の最後には「AIエージェント用プロンプト」を用意しました。このプロンプトを使えば AIと共同開発する際にuvの能力を最大限に活用しましょう。

はじめに

Pythonの開発環境管理とパッケージ管理は、さまざまなツールによって行われてきました。pyenvでPythonバージョンを管理し、venvで仮想環境を作成し、pipでパッケージをインストールする、あるいはpoetryでプロジェクト管理するといった手法が一般的でした。

しかし、これらの既存ツールには依存関係解決の遅さ、プラットフォーム間の互換性問題、設定の複雑さなどの課題がありました。これらの問題を解決すべく登場したのが、Rustで実装された高速なパッケージマネージャー「uv」です。

本記事では、uvの特徴から基本的な使い方、高度な設定まで、包括的に解説します。そして最後に、AIエージェントと共に正確にuvを使うためのプロンプトを提供します。

1. uvとは

1.1 概要と特徴

uvは、Astral(以前はRuffチームとして知られていた)が開発した、Python向けの高速パッケージインストーラーおよび環境管理ツールです。その名前はUniVerse(宇宙)に由来しています。

uvの主な特徴は次のとおりです:

  • 圧倒的な速度: Rustで実装されており、従来のPythonツールと比較して非常に高速です
  • 一貫性: Pythonバージョン管理からパッケージ管理まで、単一のツールに統合
  • 互換性: pip互換APIを提供し、既存のワークフローに簡単に統合可能
  • クロスプラットフォーム: 同じロックファイルを異なるOS間で共有可能
  • 強力なキャッシュ機構: パッケージのダウンロードとビルドをキャッシュして処理を高速化

1.2 従来ツールとの違い

機能 pip venv poetry pyenv uv
パッケージインストール
仮想環境管理
Pythonバージョン管理
ロックファイル
依存関係解決 遅い - 普通 - 非常に速い
実装言語 Python Python Python Shell Rust

1.3 uvが解決する問題点

  • 速度: パッケージのインストールと依存関係解決が非常に高速(pandasのインストールが約3秒で完了)
  • 統一性: 複数のツールを使い分ける必要がなく、単一のツールで環境管理が可能
  • 互換性: 異なるOSやアーキテクチャ間でも同じロックファイルを使用可能
  • 分かりやすさ: 直感的なコマンド体系とシンプルな設定ファイル

2. インストールとセットアップ

2.1 インストール方法

macOS

Homebrewを使用する場合:

brew install uv

Linux

curlを使用する場合:

curl -LsSf https://astral.sh/uv/install.sh | sh

Windows

PowerShellを使用する場合:

irm https://astral.sh/uv/install.ps1 | iex

wingetを使用する場合:

winget install astral.uv

pipを使用する場合(すべてのOS共通):

pip install uv

2.2 インストール確認

インストールが完了したら、バージョン確認コマンドでインストールが正常に行われたことを確認します:

uv --version

2.3 基本設定

uvは特別な設定を必要としませんが、以下のようにしてキャッシュディレクトリの場所などを環境変数で設定できます:

# キャッシュディレクトリの設定
export UV_CACHE_DIR=~/.cache/uv

# キャッシュを無効にする場合
export UV_NO_CACHE=1

3. Python管理機能

3.1 Pythonバージョンの確認とインストール

利用可能なPythonバージョンを確認:

uv python list --available

特定のバージョンをインストール:

uv python install 3.12

複数のバージョンを一度にインストール:

uv python install 3.10 3.11 3.12

インストール済みのバージョン一覧を表示:

uv python list

3.2 プロジェクトのPythonバージョン指定

プロジェクトディレクトリ内でPythonバージョンを固定:

uv python pin 3.12

これにより、.python-versionファイルが作成され、プロジェクトで使用するPythonバージョンが指定されます。

3.3 pyenvからの移行

pyenvを使用している場合、以下のように移行できます:

  1. pyenvで管理しているバージョンを確認

    pyenv versions
    
  2. 必要なバージョンをuvでインストール

    uv python install 3.10.4
    
  3. プロジェクトの.python-versionファイルはそのまま活用可能

4. 仮想環境の管理

4.1 仮想環境の作成

uvで仮想環境を作成するには:

uv venv

特定のPythonバージョンを指定して作成:

uv venv -p 3.11

仮想環境のディレクトリを指定:

uv venv -p 3.12 ./my_venv

4.2 仮想環境の有効化

作成した仮想環境を有効化:

# Linux/macOS
source .venv/bin/activate

# Windows
.venv\Scripts\activate

4.3 既存プロジェクトへの適用

既存のプロジェクトに対して:

  1. プロジェクトディレクトリに移動
  2. 仮想環境を作成
  3. requirements.txtがある場合は依存関係をインストール
cd myproject
uv venv
source .venv/bin/activate
uv pip install -r requirements.txt

5. パッケージ管理

5.1 プロジェクトの作成

新しいプロジェクトを作成:

uv init myproject -p 3.12
cd myproject

これにより、基本的なプロジェクト構造とpyproject.tomlファイルが作成されます。

5.2 依存関係の管理

パッケージの追加:

uv add numpy pandas matplotlib

開発用の依存関係の追加:

uv add --dev pytest black

依存関係の削除:

uv remove pandas

環境を最新化:

uv sync

依存関係の更新:

uv sync --upgrade

5.3 pyproject.tomlの構成

基本的なpyproject.tomlファイルの例:

[project]
name = "myproject"
version = "0.1.0"
description = "My Python project"
readme = "README.md"
requires-python = ">=3.10"
dependencies = [
    "numpy>=1.22.0",
    "pandas>=2.0.0",
]

[project.optional-dependencies]
dev = [
    "pytest>=7.0.0",
    "black>=23.0.0",
]

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

5.4 特殊なソースからのインストール

PyTorchなど特殊なインデックスが必要なパッケージの場合:

[tool.uv.sources]
torch = [
    { index = "pytorch-cu121" },
]

[[tool.uv.index]]
name = "pytorch-cu121"
url = "https://download.pytorch.org/whl/cu121"
explicit = true

6. 高度な機能

6.1 キャッシュシステム

uvは強力なキャッシュ機構を備えており、以下の項目をキャッシュします:

  • ダウンロードしたパッケージ
  • ビルドされたwheelファイル
  • 依存関係解決の結果

キャッシュの場所を確認:

uv cache dir

キャッシュのクリア:

uv cache clear

6.2 依存関係解決アルゴリズム

uvの依存関係解決は以下の要素を考慮します:

  • バージョン制約
  • プラットフォームマーカー
  • 依存関係の競合

解決モードの指定:

# 最新バージョンを優先(デフォルト)
uv sync

# 最低バージョンを優先
uv sync --resolution lowest

# 直接依存のみ最低バージョンを優先
uv sync --resolution lowest-direct

6.3 依存関係ツリーの表示

依存関係ツリーを表示:

uv tree

特定のパッケージの依存関係を表示:

uv tree pandas

6.4 ロックファイルのエクスポート

異なる形式へのエクスポート:

# requirements.txt形式にエクスポート
uv export -f requirements

7. ツール実行

7.1 uvxコマンド

uvxコマンド(uv tool runの別名)を使うと、パッケージが提供するコマンドラインツールを一時的な環境で実行できます:

# pytestを実行
uvx pytest

# blackでフォーマット
uvx black .

プラグインと一緒に実行:

# pytest-covを含めて実行
uvx --with pytest-cov pytest --cov

7.2 恒久的なツールのインストール

頻繁に使用するツールを恒久的にインストール:

uv tool install black ruff

7.3 スクリプト実行

仮想環境内でスクリプトを実行:

uv run script.py

特定のPythonバージョンでスクリプトを実行:

uv run --python 3.10 script.py

8. 実践的なワークフロー

8.1 新規プロジェクト開発の例

# プロジェクト作成
uv init myapp -p 3.12
cd myapp

# 依存関係の追加
uv add fastapi uvicorn sqlalchemy

# 開発用依存関係の追加
uv add --dev pytest black ruff

# 仮想環境で実行
uv run app.py

8.2 CI/CDでの利用

GitHub Actionsの設定例:

name: Test

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - name: Set up Python
      uses: actions/setup-python@v5
      with:
        python-version: '3.12'
    - name: Install uv
      uses: astral-sh/setup-uv@v3
      with:
        enable-cache: true
    - name: Install dependencies
      run: uv sync
    - name: Test
      run: uv run pytest

8.3 Dockerとの統合

Dockerfileの例:

FROM python:3.12-slim

# uvをインストール
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/

# プロジェクトをコピー
COPY . /app
WORKDIR /app

# 依存関係をインストール
RUN uv sync --frozen

# アプリケーションを実行
CMD ["uv", "run", "app.py"]

9. トラブルシューティング

9.1 一般的な問題と解決法

インストールの問題

問題:uvがパッケージをインストールできない場合
解決:

# キャッシュをクリア
uv cache clear

# pip互換モードを試す
uv pip install package_name

依存関係の解決の問題

問題:依存関係の解決ができない場合
解決:

# 詳細なエラーログを表示
uv sync -v

特定のソースからのインストール問題

問題:カスタムインデックスからのインストールが失敗する場合
解決:pyproject.toml[tool.uv.sources][tool.uv.index]セクションを確認

9.2 パフォーマンス最適化

  • ローカルキャッシュをクリアせずに保持する
  • 大規模プロジェクトでは--frozenフラグを使ってロックファイル通りにインストール
  • 開発環境では--upgradeを必要なときだけ使用

10. まとめと展望

10.1 uvの現状と将来性

uvは比較的新しいツールですが、その速度と統合された機能性により急速に採用が広がっています。Rustで実装された他のPythonツール(Ruff, Maturin, Pydantic-Coreなど)の成功を見ると、uvの将来性も期待できます。

特に、以下の点が評価されています:

  • 開発環境のセットアップ時間の大幅な短縮
  • 単一ツールでの統合管理の利便性
  • クロスプラットフォーム互換性
  • 大規模プロジェクトでのパフォーマンス

10.2 他のツールからの移行ガイド

pipからの移行

基本的にpipコマンドをuv pipに置き換えるだけで動作します。例:

# pipの場合
pip install -r requirements.txt

# uvの場合
uv pip install -r requirements.txt

poetryからの移行

  1. poetryで管理されているプロジェクトのpyproject.tomlは基本的にそのまま利用可能
  2. poetry.lockをuv.lockに変換する場合:
    uv export -f lock
    

pyenvからの移行

  1. pyenvでインストールしていたPythonバージョンをuvでインストール
  2. プロジェクトの.python-versionファイルはそのまま利用可能

参考リソース

AIエージェントがuvコマンドを誤る理由

冒頭でも触れたように、AIエージェントがuvコマンドを誤って使用する根本的な理由には、技術的な背景があります。ここではその詳細をAIを使ってまとめました。

uvの進化とLLMの知識カットオフの不運な重なり

uvは2024年2月15日にAstral社から初めてリリースされました。当初はpipとpip-toolsの代替として設計されたドロップイン置き換えツールでしたが、リリース後すぐに活発な開発が行われました。

2024年7月頃には初期リリース以来最大の機能拡張が発表され、単なるpipの代替から、Pythonプロジェクト全体を管理するためのエンドツーエンドソリューションへと進化しました。この時点でもuvのAPIは「2024年時点では決して安定していない」と明記されていました。

一方で、主要なLLMの知識カットオフ日は以下のようになっています。

  • GPT-4(2024年1月までの版): 2023年4月
  • Claude 3モデル群: 2023年8月
  • Claude 3.5 Sonnet: 2024年4月
  • Claude 3.7 Sonnet: 2024年11月頃

これらの日付を比較すると、uvの初期リリースと主要な機能追加・API変更の期間は、多くの主要LLMの知識カットオフ日と重なるか、その直後に発生しています。

インターネット情報とLLMの学習の問題

LLMはインターネット上のコンテンツから学習しますが、以下のような問題があります:

  1. 情報の停滞と残存: 古いブログ記事やチュートリアルが更新されずに残り続け、uvの初期バージョンについての情報が過剰に残っています。

  2. 情報の比率と学習バイアス: 新しいツールの初期バージョンについての記事が爆発的に増える一方、最新情報は比較的少ないため、LLMの学習にバイアスがかかります。

  3. 非公式情報の影響: 公式ドキュメント以外の情報には不正確な内容も含まれ、LLMはそれらも区別なく学習します。

特に2024年後半のuv機能アップデートについては、情報量が少なく、最新のLLMであるClaude 3.7 Sonnetでも完全に把握できていない可能性があります。

おわりに

uvは、Pythonの環境管理とパッケージ管理を一新する可能性を秘めたツールです。そのシンプルさと高速性により、開発者の生産性を大きく向上させることができます。

この記事が、uvを使ったPython開発環境の構築と管理の参考になれば幸いです。特にAIエージェントと共に開発する場合は、次のセクションの「AIエージェント用プロンプト」をご活用ください。

最新のアップデートや詳細な機能については、常に公式ドキュメントを参照することをお勧めします。

AIエージェント用プロンプト

AIエージェント用 uvコマンドリファレンス

基本情報:
名称: uv (universe)
最新バージョン: 0.6.17 (2025年4月現在)
公式サイト: https://astral.sh/uv
リポジトリ: https://github.com/astral-sh/uv
概要: Rustで実装された高速なPythonパッケージマネージャーおよび環境管理ツール

インストール方法:
macOS (Homebrew): brew install uv
Linux/macOS (curl): curl -LsSf https://astral.sh/uv/install.sh | sh
Windows (PowerShell): irm https://astral.sh/uv/install.ps1 | iex
Windows (winget): winget install astral.uv
pip (全OS共通): pip install uv

Python管理コマンド:
利用可能なPythonバージョン一覧: uv python list --available
Pythonインストール: uv python install 3.12
複数バージョン同時インストール: uv python install 3.10 3.11 3.12
インストール済みバージョン一覧: uv python list
プロジェクト用Pythonバージョン固定: uv python pin 3.12

仮想環境管理コマンド:
仮想環境作成: uv venv
特定Pythonバージョンで仮想環境作成: uv venv -p 3.11
特定ディレクトリに仮想環境作成: uv venv -p 3.12 ./my_venv
仮想環境有効化 (Linux/macOS): source .venv/bin/activate
仮想環境有効化 (Windows): .venv\Scripts\activate

プロジェクト管理コマンド:
新規プロジェクト作成: uv init myproject -p 3.12
依存関係追加: uv add numpy pandas matplotlib
開発用依存関係追加: uv add --dev pytest black
依存関係削除: uv remove pandas
仮想環境同期: uv sync
依存関係アップグレード: uv sync --upgrade
依存関係ツリー表示: uv tree

パッケージ管理コマンド (pip互換):
パッケージインストール: uv pip install numpy pandas
特定バージョンインストール: uv pip install pandas==2.1.0
requirements.txtからインストール: uv pip install -r requirements.txt
パッケージアップグレード: uv pip install --upgrade numpy

ツール実行コマンド:
ツール一時実行: uv tool run pytest または uvx pytest
プラグイン付き実行: uvx --with pytest-cov pytest --cov
ツール永続インストール: uv tool install black ruff
Pythonスクリプト実行: uv run script.py
特定Pythonバージョンで実行: uv run --python 3.10 script.py

pyproject.toml 基本設定:
[project]
name = "myproject"
version = "0.1.0"
description = "Project description"
readme = "README.md"
requires-python = ">=3.10"
dependencies = [
"numpy>=1.22.0",
"pandas>=2.0.0",
]

[project.optional-dependencies]
dev = [
"pytest>=7.0.0",
"black>=23.0.0",
]

特殊インデックス設定例:
[tool.uv.sources]
torch = [
{ index = "pytorch-cu121" },
]

[[tool.uv.index]]
name = "pytorch-cu121"
url = "https://download.pytorch.org/whl/cu121"
explicit = true

依存関係解決オプション:
最新バージョン優先(デフォルト): uv sync
最低バージョン優先: uv sync --resolution lowest
直接依存のみ最低バージョン優先: uv sync --resolution lowest-direct

トラブルシューティング:
キャッシュディレクトリ表示: uv cache dir
キャッシュクリア: uv cache clear
詳細ログ表示: uv sync -v

主要エラー対応:
依存関係解決エラー: uv sync -v で詳細確認
パッケージ未発見エラー: インデックス設定確認
権限エラー: 管理者権限で実行
キャッシュ破損: uv cache clear で解決

注意点:
uvは常に最新バージョンのパッケージを優先するが、--resolution オプションで変更可能
プロジェクト間でuv.lockファイルは共有でき、異なるOSでも動作する
依存関係の解決は従来のツールと比較して著しく高速
基本コマンド構造: uv [サブコマンド] [オプション]

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?