TL;DR
pip install が遅いと思ったことが一度でもあるなら、今すぐ uv に移行すべき。
# pip(従来)
pip install fastapi uvicorn sqlalchemy # 約 8〜15秒
# uv(新)
uv pip install fastapi uvicorn sqlalchemy # 約 0.3秒
30〜50倍速い。 これだけで移行する理由として十分。
uv とは
Rust 製の Python パッケージマネージャ。Astral(ruff を作った会社)が開発。
2024年に登場して、2025年から爆発的に普及し始めた。pip / Poetry / pyenv / virtualenv を全部置き換える。
移行前の構成(よくある地獄)
pyenv → Python バージョン管理
pip → パッケージインストール
virtualenv → 仮想環境
Poetry → 依存関係管理・ロック
pip-tools → requirements.txt 管理
ツールが5個。それぞれ学習コストがある。プロジェクトごとに pyproject.toml と requirements.txt が混在して管理が崩壊していた。
移行後の構成
uv ← これだけ
インストール
curl -LsSf https://astral.sh/uv/install.sh | sh
以上。
日常的な使い方
プロジェクト作成
# 新規プロジェクト(Python バージョンも自動管理)
uv init myproject
cd myproject
myproject/
├── .python-version ← Python バージョンを記録
├── pyproject.toml
├── README.md
└── main.py
パッケージ追加
uv add fastapi
uv add uvicorn sqlalchemy pydantic
uv add --dev pytest ruff # 開発用パッケージ
pip install + requirements.txt への追記が1コマンドに。
仮想環境なしで実行
uv run main.py # 仮想環境を自動で作って実行
uv run pytest # テスト実行
uv run uvicorn main:app --reload # FastAPI 起動
source .venv/bin/activate を一切書かなくていい。
スクリプトの依存関係をファイル内に書く
# /// script
# requires-python = ">=3.11"
# dependencies = ["requests", "rich"]
# ///
import requests
from rich import print
res = requests.get("https://api.github.com")
print(res.json())
uv run script.py # 依存関係を自動インストールして実行
スクリプト1ファイルで完結する。requirements.txt 不要。
速度比較(実測)
FastAPI + SQLAlchemy + Pydantic + uvicorn + alembic の環境を構築:
# pip(キャッシュなし)
time pip install fastapi sqlalchemy pydantic uvicorn alembic
real: 14.3s
# uv(キャッシュなし)
time uv pip install fastapi sqlalchemy pydantic uvicorn alembic
real: 0.4s
# uv(キャッシュあり)
time uv pip install fastapi sqlalchemy pydantic uvicorn alembic
real: 0.05s
キャッシュあり時は 0.05秒。もはや「インストールした」という感覚がない。
Poetry から移行
pyproject.toml はそのまま使える。
# Poetry のロックファイルから移行
uv sync # pyproject.toml を読んで環境を再現
# または requirements.txt から
uv pip install -r requirements.txt
CI/CD での使い方
GitHub Actions:
- name: Install uv
uses: astral-sh/setup-uv@v4
- name: Install dependencies
run: uv sync
- name: Run tests
run: uv run pytest
cache-dependency-path: uv.lock を追加するとキャッシュも効く。CI が3分→40秒になった(依存関係が多いプロジェクトほど差が出る)。
ハマりポイント
1. uv run でないと仮想環境が有効にならない
# ❌ これは仮想環境外で動く可能性がある
python main.py
# ✅ これが正しい
uv run python main.py
# または
source .venv/bin/activate && python main.py
2. グローバルツールは uv tool install
# ❌ これはプロジェクト依存に入ってしまう
uv add ruff
# ✅ グローバルツールとしてインストール
uv tool install ruff
uv tool install black
3. Python バージョンが自動で入る(驚く)
uv python install 3.13
# → 勝手にダウンロードしてインストールされる
pyenv 不要になった。
移行しない理由がない
| 機能 | pip | Poetry | uv |
|---|---|---|---|
| インストール速度 | 遅い | 遅い | 爆速 |
| Python バージョン管理 | ❌ | ❌ | ✅ |
| ロックファイル | ❌ | ✅ | ✅ |
| スクリプト実行 | ❌ | ❌ | ✅ |
| pip 互換 | ✅ | △ | ✅ |
| 学習コスト | 低 | 高 | 低 |
まとめ
# 今すぐインストール
curl -LsSf https://astral.sh/uv/install.sh | sh
# 既存プロジェクトに適用
uv pip install -r requirements.txt
# または
uv sync # pyproject.toml がある場合
pip に戻る理由が今のところ見つからない。
🚀 関連プロジェクト
この記事は NOVE OS 開発中に得た知見をまとめたものです。
NOVE OS は Rocky Linux サーバーを 1コマンドで自動最適化するツールです。eBPF・Rust・量子計算など最先端技術を統合し、ベンチマークスコア 2749点/3000点(91.6%) を達成しています。
👉 NOVE OS 公式サイト - 無料トライアルあり