2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

pip を窓から投げ捨てた - uv に全移行したら開発体験が別物になった

2
Last updated at Posted at 2026-02-24

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.tomlrequirements.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 公式サイト - 無料トライアルあり

2
5
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
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?