uv完全ガイド: Rustで作られた超高速Pythonパッケージマネージャー
Pythonのパッケージ管理はこれまでpipやpoetry、pipenvなど様々なツールが使われてきましたが、2024年から急速に普及しているuvが開発者の間で大きな話題になっています。Rustで書かれたuvはpipの10〜100倍の速度を実現し、仮想環境管理、Pythonバージョン管理まで一つのツールで完結させることができます。本記事では、uvの基本から実践的な使い方まで徹底解説します。
uvとは何か
uvはAstralが開発したPython向けの超高速パッケージマネージャーです。同社が開発した高速Pythonリンターruffと同様に、Rustで実装されることで圧倒的なパフォーマンスを実現しています。
uvの主な特徴
- 超高速インストール: pipより10〜100倍高速
- pip互換:
pip installコマンドの代替として動作 - 仮想環境管理:
venvの代替として使用可能 - Pythonバージョン管理:
pyenvのような機能も内蔵 - pyproject.toml完全対応: モダンなPythonプロジェクト構成に対応
- ロックファイル生成: 再現可能な環境を保証
- ワークスペース対応: モノレポ構成をサポート
インストール
macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
pipからインストール
pip install uv
インストール確認
uv --version
# uv 0.5.x (例)
pipの代替として使う
uvはpipのドロップイン代替として設計されています。既存のワークフローをそのまま活用できます。
パッケージインストール
# pip の代わりに uv pip を使う
uv pip install requests
uv pip install "fastapi[all]"
uv pip install -r requirements.txt
# 開発用依存関係
uv pip install pytest --dev
パッケージのアンインストール
uv pip uninstall requests
インストール済みパッケージ確認
uv pip list
uv pip show requests
パッケージのアップグレード
uv pip install --upgrade requests
uv pip install --upgrade-package requests -r requirements.txt
仮想環境の管理
仮想環境の作成
# カレントディレクトリに .venv を作成
uv venv
# 名前を指定して作成
uv venv myenv
# Pythonバージョンを指定
uv venv --python 3.12
uv venv --python 3.11.5
仮想環境の有効化
# macOS / Linux
source .venv/bin/activate
# Windows
.venv\Scripts\activate
uvを使ったワンライナー実行
uvは自動的に仮想環境を検出・使用します。明示的に有効化しなくても動作します。
# .venv が存在する場合、自動的に使用される
uv pip install fastapi
uv run python main.py
プロジェクト管理(モダンなワークフロー)
uvはpyproject.tomlを使ったプロジェクト管理もサポートしています。
新規プロジェクトの作成
uv init myproject
cd myproject
作成されるファイル構成:
myproject/
├── pyproject.toml
├── README.md
├── src/
│ └── myproject/
│ └── __init__.py
└── .python-version
生成されるpyproject.toml:
[project]
name = "myproject"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = []
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
依存関係の追加
# 本番依存関係を追加
uv add fastapi
uv add "sqlalchemy>=2.0"
uv add httpx pydantic
# 開発用依存関係を追加
uv add --dev pytest pytest-asyncio
uv add --dev ruff mypy
# オプション依存関係を追加
uv add "fastapi[all]"
依存関係を追加するとpyproject.tomlが自動更新されます:
[project]
dependencies = [
"fastapi>=0.115.0",
"sqlalchemy>=2.0",
"httpx>=0.27.0",
"pydantic>=2.0",
]
[dependency-groups]
dev = [
"pytest>=8.0",
"pytest-asyncio>=0.24",
"ruff>=0.7.0",
"mypy>=1.11",
]
依存関係の削除
uv remove requests
uv remove --dev pytest
ロックファイルの生成と同期
# uv.lock を生成(または更新)
uv lock
# ロックファイルから環境を同期
uv sync
# 開発用依存関係を除いて同期
uv sync --no-dev
# 特定のグループのみ同期
uv sync --group dev
uv.lockはgitにコミットすることで、チーム全員が同一の環境を再現できます。
Pythonバージョン管理
uvはPythonのインストールと管理もサポートしています。pyenvのような別ツールが不要になります。
利用可能なPythonバージョン確認
uv python list
Pythonのインストール
uv python install 3.12
uv python install 3.11 3.12 3.13
# 最新バージョンをインストール
uv python install
Pythonバージョンの固定
# プロジェクトのPythonバージョンを固定(.python-versionファイルが作成される)
uv python pin 3.12
Pythonバージョンを指定して実行
uv run --python 3.11 python --version
uv venv --python 3.12 .venv
スクリプトの実行
uvを使ったスクリプト実行
# 仮想環境を自動検出してスクリプトを実行
uv run python main.py
uv run python -m pytest
uv run fastapi dev
# 依存関係を指定してスクリプト実行
uv run --with requests python fetch_data.py
インラインスクリプトメタデータ対応
PEP 723に従ったインラインメタデータをサポートしています:
#!/usr/bin/env -S uv run
# /// script
# requires-python = ">=3.12"
# dependencies = [
# "requests>=2.31",
# "rich>=13.0",
# ]
# ///
import requests
from rich import print
response = requests.get("https://api.github.com/zen")
print(f"[bold green]{response.text}[/bold green]")
このスクリプトを実行するだけで、依存関係が自動的にインストールされます:
uv run script.py
# または
chmod +x script.py
./script.py
ツールの管理
uvはCLIツールのインストールと管理も対応しています。pipxの代替として使用できます。
ツールのインストールと実行
# ツールを一時的に実行(インストール不要)
uv tool run ruff check .
uvx ruff check . # uvx は uv tool run の短縮形
# ツールをグローバルにインストール
uv tool install ruff
uv tool install black
uv tool install httpie
# インストール済みツールの確認
uv tool list
# ツールのアップデート
uv tool upgrade ruff
uv tool upgrade --all
CI/CDでの活用
GitHub Actionsでuvを使う例:
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v4
with:
version: "latest"
- name: Set up Python
run: uv python install
- name: Install dependencies
run: uv sync --all-extras --dev
- name: Run tests
run: uv run pytest
- name: Run linter
run: uv run ruff check .
- name: Run type checker
run: uv run mypy src/
pipとのパフォーマンス比較
実際の計測結果(packages数が多いプロジェクトでの比較):
| ツール | インストール時間 |
|---|---|
| pip | 約45秒 |
| pip + cache | 約12秒 |
| poetry | 約30秒 |
| uv | 約1.5秒 |
| uv + cache | 約0.2秒 |
uvのキャッシュ機能により、同一パッケージは2回目以降ほぼ瞬時にインストールが完了します。
既存プロジェクトへの移行
pipからuvへの移行
# requirements.txt がある場合
uv init
uv pip install -r requirements.txt
uv pip freeze > requirements.txt # 必要に応じて
# または pyproject.toml に移行
uv init
cat requirements.txt | xargs uv add
poetryからuvへの移行
# pyproject.toml はそのまま使えることが多い
# poetry.lock → uv.lock への変換
uv lock
# 依存関係の同期
uv sync
pipenvからuvへの移行
# Pipfile から pyproject.toml に変換
uv init
# Pipfile の [packages] セクションのパッケージを手動で追加
uv add requests flask sqlalchemy
uv add --dev pytest black
uvの設定
pyproject.tomlまたはuv.tomlで設定をカスタマイズできます:
# uv.toml または pyproject.toml の [tool.uv] セクション
[tool.uv]
# パッケージキャッシュの場所
cache-dir = "~/.cache/uv"
# デフォルトのPythonバージョン
python = "3.12"
# インデックス設定
index-url = "https://pypi.org/simple"
# プライベートリポジトリの追加
[[tool.uv.index]]
name = "company-private"
url = "https://private.company.com/simple/"
よくある使用パターン
FastAPIプロジェクトの素早いセットアップ
uv init fastapi-project
cd fastapi-project
uv add "fastapi[all]" sqlalchemy alembic pydantic-settings
uv add --dev pytest httpx pytest-asyncio ruff mypy
uv run fastapi dev src/main.py
データサイエンスプロジェクト
uv init data-analysis
cd data-analysis
uv add numpy pandas matplotlib seaborn scikit-learn jupyter
uv run jupyter lab
CLIツールの開発
uv init mycli
cd mycli
uv add typer rich click
uv add --dev pytest
# エントリーポイントを pyproject.toml に設定
uv run mycli --help
まとめ
uvはPythonエコシステムに革命をもたらすツールです。その主なメリットをまとめます:
- 圧倒的な速度: Rustで実装されたuv はpipの10〜100倍高速で、CI/CD時間を大幅に短縮できます
- 一つで完結: pip、venv、pyenv、pipxの機能をuvひとつで代替できます
- pip互換: 既存のワークフローをほぼそのまま移行できます
- モダンなPythonサポート: pyproject.toml、ロックファイル、ワークスペースを標準でサポートします
- 活発な開発: Astralチームによる継続的な改善と活発なコミュニティがあります
2026年現在、uvはPythonプロジェクトのデファクトスタンダードになりつつあります。新規プロジェクトはuvで始め、既存プロジェクトも段階的に移行することを強くお勧めします。