Python uv完全解説

高速なPythonパッケージ管理ツールuvの全体像を、役割・基本コマンド・pipやvenvとの違いから整理する入門ガイド。

uvは、Pythonのパッケージ管理、仮想環境、Python本体のバージョン管理、CLIツール実行をまとめて扱える高速な開発ツールです。この記事では「pipやvenvを毎回どう組み合わせればいいのか分からない」という段階から、uvで何をすればよいかを一枚の地図として整理します。

1. uvとは何か

uvはAstralが開発している、Rust製の高速なPythonパッケージ・プロジェクト管理ツールです。

公式ドキュメントでは、uvは pippip-toolspipxpoetrypyenvvirtualenv などの役割をまとめて置き換えられるツールとして説明されています。初心者目線では、「Pythonプロジェクトを作る」「ライブラリを入れる」「仮想環境を用意する」「コマンドを実行する」を、できるだけ少ない手順で扱うための道具と考えると入りやすいです。

flowchart LR
  U["uv"] --> P["Python本体の管理"]
  U --> V["仮想環境 .venv"]
  U --> D["依存関係 pyproject.toml"]
  U --> L["ロックファイル uv.lock"]
  U --> R["コマンド実行 uv run"]
  U --> T["CLIツール実行 uvx / uv tool"]
    
最初の理解: uvは「pipより速いインストーラー」だけではなく、Pythonプロジェクト全体を管理するための入口です。新しいプロジェクトでは、まず uv init、依存関係は uv add、実行は uv run と覚えると迷いにくくなります。

2. uvが解決すること

Python開発では、パッケージ、仮想環境、Pythonバージョン、ロックファイルが別々の話として出てきます。uvはそれらをひとつの操作体系にまとめます。

環境構築が速い

公式ドキュメントでは、uvはpipより10倍から100倍高速と説明されています。特に依存関係が多いプロジェクトや、キャッシュが効く環境で体感しやすいです。

仮想環境を自動で扱える

uv runuv sync を使うと、必要に応じてプロジェクト内の .venv を作成し、依存関係を同期します。

再現性を高められる

uv.lock に解決済みの依存関係を記録できます。チーム開発や別PCでの再セットアップ時に、同じ依存関係へそろえやすくなります。

3. まず押さえるファイル

uvのプロジェクトでは、pyproject.toml.venvuv.lock の役割を分けて理解すると全体像が見えます。

名前何を持つかGit管理初心者向けの理解
pyproject.toml プロジェクト名、Pythonバージョン条件、依存関係など 管理する 「このプロジェクトの設計書」
.venv 実際にライブラリが入る仮想環境 管理しない 「このプロジェクト専用のPython環境」
uv.lock 解決済みの正確なパッケージバージョン 管理する 「同じ環境を再現するための記録」
.python-version そのディレクトリで使うPythonバージョン 管理することが多い 「このプロジェクトで使うPythonの目印」
flowchart TD
  Init["uv init"] --> Py["pyproject.toml"]
  Init --> Ver[".python-version"]
  Add["uv add requests"] --> Py
  Run["uv run main.py"] --> Venv[".venv"]
  Run --> Lock["uv.lock"]
  Sync["uv sync"] --> Venv
  Lock --> Sync
    

4. インストールと確認

Windowsでは公式のPowerShell用インストーラーが用意されています。macOSやLinuxではシェルスクリプト、Homebrew、pipなど複数の方法があります。

Windows

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

macOS / Linux

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

インストール確認

uv --version
uv help
Windowsで詰まったら: インストール後に uv コマンドが見つからない場合は、ターミナルを開き直すか、PATHが反映されているかを確認します。

5. 最初のプロジェクトを作る

uvの基本形は、作成、追加、実行、同期です。まずはこの4つだけで十分です。

新しいプロジェクトを作る

uv init hello-uv
cd hello-uv

uv init を実行すると、pyproject.toml やサンプルの main.py などが作られます。

プログラムを実行する

uv run main.py

uv run は、プロジェクトの環境を確認し、必要なら .venvuv.lock を用意してからコマンドを実行します。

ライブラリを追加する

uv add requests

依存関係は pyproject.toml に追加され、実際の解決結果は uv.lock に記録されます。手で pip install するよりも、プロジェクトの状態がファイルに残りやすいのが利点です。

依存関係を同期する

uv sync

別PCでリポジトリを取得した後や、チームメンバーが依存関係を追加した後は uv sync で環境をそろえます。

6. よく使うコマンド一覧

最初からすべて覚える必要はありません。日常的にはプロジェクト系コマンドを中心に使います。

やりたいことコマンド使う場面
プロジェクト作成uv init my-app新しくPythonプロジェクトを始める
依存関係を追加uv add pandasライブラリをプロジェクトに入れる
依存関係を削除uv remove pandas不要なライブラリを外す
コマンド実行uv run python main.pyプロジェクト環境でPythonを動かす
環境同期uv syncuv.lock に合わせて .venv を整える
ロックファイル更新uv lock依存関係の解決結果を明示的に更新する
依存関係ツリー確認uv treeどのライブラリが何に依存しているか見る
Pythonを入れるuv python install 3.12指定バージョンのPythonを用意する
Pythonを固定uv python pin 3.12プロジェクトで使うPythonバージョンを指定する
一時的にツール実行uvx ruff check .ruffなどのCLIを一回だけ使う

7. pip・venvとの違い

uvはpipやvenvを否定するというより、よく使う作業をまとめて扱いやすくする道具です。

従来の考え方uvでの考え方ポイント
python -m venv .venv uv run または uv sync 必要に応じてプロジェクト環境を作成・同期する
pip install requests uv add requests 依存関係を pyproject.toml に残す
pip freeze > requirements.txt uv.lock 解決済みバージョンをロックファイルに記録する
pipx run ruff uvx ruff CLIツールを一時環境で実行できる
注意: uvには uv pip install のようなpip互換インターフェースもあります。ただし、新しいuvプロジェクトでは、まず uv adduv removeuv syncuv run を使うほうが、プロジェクト管理としては分かりやすいです。

8. 実務での基本ワークフロー

個人開発でもチーム開発でも、依存関係をファイルに残し、実行時はuvに環境をそろえてもらう流れが基本です。

新規プロジェクト

uv init my-app
cd my-app
uv python pin 3.12
uv add fastapi
uv add --dev pytest
uv run python main.py

既存プロジェクトを取得した後

git clone https://example.com/my-app.git
cd my-app
uv sync
uv run pytest

一時的にツールを実行する

uvx ruff check .
uvx black .

uvxuv tool run の短い別名です。プロジェクトに依存関係として追加するほどではないCLIツールを、さっと実行したいときに便利です。

9. lockとsyncの考え方

uvでは、依存関係を「解決する」ことと「環境へ入れる」ことを分けて考えます。

lock

uv lock は、pyproject.toml に書かれた依存関係を解決して、具体的なバージョンを uv.lock に記録します。

sync

uv sync は、uv.lock の内容に合わせて、プロジェクトの .venv を更新します。

公式ドキュメントでは、uv run のようなコマンドは実行前に自動でlockとsyncを行い、環境を最新状態に保つと説明されています。普段は自動に任せてもよいですが、CIやチーム開発では uv sync を明示すると状態をそろえやすいです。

uv lock
uv sync
uv run pytest

10. どんな人に向いているか

uvは、これからPython開発を始める人にも、既存のpip/venv運用を軽くしたい人にも向いています。

状況uvを使うメリットまず覚えるコマンド
Python入門中仮想環境と依存関係をまとめて扱えるuv inituv adduv run
データ分析pandasやjupyter周辺の依存関係を再現しやすいuv adduv sync
Web API開発FastAPI、pytest、ruffなどをプロジェクト単位で管理しやすいuv add --devuv run
CLIツール利用プロジェクトに入れずに一時実行できるuvxuv tool install
チーム開発uv.lock で環境差分を減らせるuv syncuv lock

11. 初心者がつまずきやすい点

uvは便利ですが、pipと同じ感覚で使いすぎると、プロジェクト管理の利点を逃すことがあります。

uv pip install から始めない

pip互換インターフェースは便利ですが、uvプロジェクトでは uv add を使うほうが依存関係を管理しやすいです。

.venv はGitに入れない

仮想環境は再作成できる作業用ディレクトリです。共有するのは pyproject.tomluv.lock です。

lockは自動更新される

uv run は必要に応じてロックと同期を行います。意図せずlockが変わった場合は、依存関係の変更が入っていないか確認します。

12. まとめ

uvは、Python開発の「環境構築が面倒」「何をGitに入れるのか分からない」「pipとvenvの組み合わせで迷う」を減らすための強力な入口です。

覚える順番コマンド意味
1uv initプロジェクトを作る
2uv addライブラリを追加する
3uv runプロジェクト環境で実行する
4uv sync環境をロックファイルに合わせる
5uvxCLIツールを一時実行する
このページのゴール: uvを「速いpip」としてだけ見るのではなく、Pythonプロジェクトを作って、依存関係を記録し、同じ環境を再現するための総合ツールとして理解することです。

参考ソース