MicroArchitectures
H.Ueda
Programmer
ブログ
Python 開発環境の管理をシンプルに。次世代ツール「uv」の基本と使い方
今回は、The Ultimate Guide to uv という記事を参考に、最近の Python エコシステムで非常に注目されているパッケージマネージャー「uv」について、その機能や導入方法を整理してみたいと思います。
Python の開発環境を構築しようとすると、pyenv や poetry、pip、venv など、用途ごとに異なるツールを組み合わせる必要があり、少し複雑に感じることが多いのではないでしょうか。こうした状況をひとつのツールで解決しようとしているのが、今回紹介する uv です。
uv とは何か
uv は、高速なリンターとして知られる ruff を開発した Astral 社によって作られた、Rust 製の Python プロジェクトマネージャーです。
これまで個別のツールが担っていた「Python 本体のインストール」「パッケージの依存関係管理」「仮想環境の構築」といった役割を、すべて単一の実行ファイルで完結させることを目指しています。Rust で書かれているため、従来のツールと比較しても動作が非常にスムーズなのが特徴かと思います。
ツールの統合イメージ
uv がどのように既存のツールを置き換えるのか、図にすると以下のようなイメージになります。
flowchart TD
subgraph 従来のツール
A[pyenv: バージョン管理]
B[pip/poetry: パッケージ管理]
C[venv: 仮想環境]
D[pipx: ツール実行]
end
subgraph uv による統合
E[uv python]
F[uv sync / add]
G[uv venv]
H[uv run]
end
E -.-> A
F -.-> B
G -.-> C
H -.-> D
このように、複数のツールを使い分けるストレスを軽減してくれるのが uv の大きな利点かもしれません。
従来のツールとの比較
主な機能について、これまでの一般的なツールと uv を比較してみます。
| 機能 | 従来のツール | uv |
|---|---|---|
| Python のインストール | pyenv / 公式インストーラー | uv python install |
| パッケージ管理 | pip / pip-tools / poetry | uv add / uv sync |
| 仮想環境の作成 | venv / virtualenv | uv venv |
| 外部ツールの実行 | pipx | uvx (または uv run) |
| パッケージの固定 | requirements.txt / poetry.lock | uv.lock |
ステップ 1:uv のインストール
uv 自体が Python のバージョンを管理する仕組みを持っているため、Python とは独立した形でインストールすることが推奨されています。
macOS / Linux の場合:
curl -LsSf https://astral.sh/uv/install.sh | sh
Windows の場合:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
インストール後、uv --version を実行してバージョンが表示されれば、こちら側の準備は完了です。
ステップ 2:Python バージョンの管理
これまでは pyenv などを使って Python 自体をインストールしていましたが、uv を使うとコマンドひとつで特定のバージョンをダウンロードできます。
たとえば、Python 3.12 をインストールしたい場合は以下のように入力します。
uv python install 3.12
現在インストールされているバージョンの一覧を確認するのも簡単です。
uv python list
必要なときに必要なバージョンをすぐ用意できるため、環境構築の手間がかなり省けるかと思います。
ステップ 3:プロジェクトの初期化
新しいプロジェクトを始める際は、uv init コマンドを使用します。これは Node.js の npm init や Rust の cargo init に近い感覚かもしれません。
uv init my_project
cd my_project
このコマンドを実行すると、以下のようなファイルが生成されます。
pyproject.toml: プロジェクトの設定や依存関係を記述する標準ファイル.python-version: 使用する Python のバージョンを指定hello.py: サンプルの実行ファイル
ステップ 4:依存関係の管理
パッケージの追加も直感的です。たとえば requests をプロジェクトに追加したい場合は、以下のように実行します。
uv add requests
このとき、uv は自動的に仮想環境を作成し、依存関係を解決した上で uv.lock ファイルを生成してくれます。このロックファイルがあることで、他の開発メンバーと同じ環境を確実に再現できるようになります。
実際に使ってみると、依存関係の解決スピードが速いことに気づくかもしれません。これは内部で Rust による最適化が行われているためと考えられます。
まとめ
uv を導入することで、これまでバラバラだった Python のツールチェーンを一箇所に集約できる可能性があります。設定ファイルが標準の pyproject.toml に準拠している点も、既存プロジェクトからの移行を考える上で安心材料になるのではないでしょうか。
もちろん、既存のプロジェクトですでに poetry や pip-tools が安定して動いている場合は無理に移行する必要はないかもしれませんが、新規プロジェクトを立ち上げる際には、有力な選択肢のひとつになるかと思います。
まずは個人の小さなスクリプトから試してみると、その手軽さを実感しやすいかもしれません。
参照記事
- The Ultimate Guide to uv
- 7 Underused Rust Features Every Senior Developer Knows
- Training LLM, from Scratch, in Rust
- We Built a Kernel Module in Rust — And It Actually Worked
- Inside the Secret Tools Real Rust Teams Use (That Cargo Doesn’t Want You to Know About)
- Go Just Killed Rust’s Only Advantage (And Nobody’s Talking About It)