uv を触り始めると、最初は uv venvuv pip install が目に入りやすいはずです。だから、uv は「pip や venv をまとめて扱いやすくした道具」と見えやすい。これは入口としてはかなり自然です。ただ、少し使うと uv adduv runuv init まで出てきて、思ったより守備範囲が広いことに気づきます。この記事では、その広がり方を整理します。

結論

uv は pip + venv の便利版として入りやすいですが、実際にはそれよりかなり広い統合ツールです。

uv は、パッケージ導入や仮想環境の作成だけでなく、Python 本体の導入、プロジェクトの初期化、依存関係とロックファイルの管理、コマンド実行、ツールの導入まで扱えます。

そのため、最初は「pip は入れる、venv は分ける、uv はまとめる」で理解してよいのですが、uv を使い続けるなら、それだけでは少し狭くなります。

uv pip installuv add の違いを先に押さえる

この二つの見分けがつくと、uv 全体の見通しがかなりよくなります。

ストーク

最初にここが気になるたい。uv pip install requests で入るなら、uv add requests は何が違うとね。

シママ

どちらも依存関係を入れるように見えるけれど、入口の考え方が少し違うのよ。uv pip install は pip 互換寄り、uv add はプロジェクト運用寄りなの。

ストーク

なるほどね。今の環境にとりあえず入れる感覚か、プロジェクトの依存関係として持たせる感覚かの違いたい。

シママ

うん。その整理でかなり分かりやすくなるよ。

uv pip install は、pip に近い感覚で使える入口です。既存の pip 手順を読み替えたいときや、まずは動かしてみたいときに自然です。

uv pip install requests

一方の uv add は、uv のプロジェクト運用に寄った入口です。依存関係をその場で入れて終わりにするのではなく、プロジェクトの情報として持ち、後の uv lockuv run につながっていきます。

uv add requests
とりあえず触る・pip から移る・簡単に試すなら uv pip installプロジェクトとして育てるなら uv add。まずはこの二つの入口の違いを押さえると、uv 全体が見えやすくなります。

uv でプロジェクト運用するなら、最初に何を実行するか

uv add は便利ですが、いきなり単独で出てくるコマンドではありません。まずは土台を作る必要があります。

ここはかなり大事な前提です。uv add は、「いまいるフォルダに適当にパッケージを入れる」ためのコマンドというより、そのディレクトリを uv のプロジェクトとして扱う前提で使うコマンドです。

つまり、uv add を自然に使うには、少なくとも pyproject.toml があること、そして通常は uv init 済みであることを前提に考えると分かりやすいです。

シママ

だから、uv add だけ先に覚えると少し浮いて見えるのよね。「何に add するの?」が残るから。

ストーク

先にプロジェクトの箱を作って、その箱の依存関係として追加する、という順番たいね。

最初の基本手順

新しくプロジェクトを始めるなら、まずは対象ディレクトリで uv init を実行します。

uv init

これで、uv がプロジェクトとして扱うための基本ファイルが作られます。とくに重要なのが pyproject.toml です。以後、依存関係やプロジェクトの情報は、このファイルを中心に管理していくことになります。

そのうえで、必要なライブラリをプロジェクト依存関係として追加するなら、次に使うのが uv add です。

uv add requests

ここでやっているのは、単にその場の環境へ入れることだけではありません。このプロジェクトは requests に依存しているという情報を、プロジェクト側に持たせる動きです。だから uv add は、uv pip install よりも「プロジェクト運用」の色が濃いわけです。

さらに、実際にコードを動かすときは uv run が自然につながります。

uv run python main.py

この流れをひとつのまとまりで見ると、次のようになります。



terminal

uv init
uv add requests
uv run python main.py

それぞれ何をしているのか

uv init は、これから管理するプロジェクトの土台を作るコマンドです。pyproject.toml がない状態でいきなり uv add を見るより、先にこの段階を意識した方がずっと理解しやすくなります。

uv add requests は、そのプロジェクトに必要な依存関係を追加するコマンドです。単に「今の環境に requests を入れる」より、「このプロジェクトは requests を使う」と宣言する意味合いが強くなります。

uv run python main.py は、そのプロジェクトの文脈で Python を実行するための入口です。環境や依存関係をプロジェクト側で見ながら実行できるので、uv の流れとして自然です。

uv add は単独で覚えるより、uv initpyproject.tomluv adduv run の流れで理解する方が実用的です。

なぜ「pip + venv の代替」だけでは足りなくなるのか

uv は、実際にはもっと多くの作業をまとめています。

uv を最初に見ると、uv venvuv pip install が目立つので、「venv と pip をまとめたもの」と理解しやすいです。これは悪い理解ではありません。

ただ、そこから少し先へ進むと uv inituv adduv lockuv runuv python installuv tool install まで現れます。ここまで来ると、uv はもう環境作成とパッケージ導入だけの道具ではありません。

つまり、入口は「pip + venv をまとめる」でよくても、実態としては Python 開発まわりの周辺作業をかなり広く統合している と見た方が自然です。

uv はどこまで広いのか

機能一覧ではなく、「何をまとめているか」で見ると整理しやすくなります。

1. Python 本体の管理

uv は、仮想環境の中だけで完結する道具ではありません。たとえば uv python install 3.12 のように、使いたい版の Python 本体を入れるところまで扱えます。

uv python install 3.12

2. 仮想環境の作成

ここは入口として見えやすい部分です。uv venv で仮想環境を作り、その中で作業できます。

uv venv

3. パッケージ導入

パッケージ導入には、さきほど見た二つの入口があります。pip 互換寄りに入るなら uv pip install、プロジェクト運用寄りに入るなら uv add です。

4. プロジェクト管理

uv は、プロジェクトを作り、依存関係を加え、ロックし、実行する流れまで持っています。つまり「環境を作って終わり」ではなく、「そのプロジェクトをどう育てるか」まで守備範囲に入っています。



terminal

uv init
uv add requests
uv run python main.py

5. ツール導入

さらに uv は、開発ツールを入れて使う入口も持っています。ここまで来ると、uv は Python エコシステム全体の周辺作業をまとめる現代的な統合ツールだと見るのが自然です。

uv tool install ruff
シママ

こうやって見ると、uv は「入れる」「分ける」だけじゃなくて、「始める」「管理する」「実行する」までつながっているのよね。

ストーク

だから、最初の説明だけやと後で足りなく感じるわけたい。

uv pip installuv add をどう使い分けるか

どちらかを否定するのではなく、文脈で分けるのが大切です。

uv pip install が自然な場面

pip の感覚でまず触りたいとき、既存の pip 手順を読み替えたいとき、学習用に小さく試したいときは uv pip install が分かりやすいです。コマンドの意味が直感的で、入口としてやさしいからです。

uv add が自然な場面

これから uv の流れでプロジェクトを育てるなら、uv add の方が本流に近いです。依存関係をプロジェクトの情報として持ち、uv lockuv run とつながるからです。

この違いは、「今の環境に入れる」という見方で止まるか、「このプロジェクトの依存関係として持つ」という見方に進むか、と言い換えてもよいでしょう。

迷ったら、今は試しているだけかこれからこのプロジェクトを管理していくのか、のどちらかを先に決めると選びやすくなります。

Windows でつまずきやすい点

ここは初心者が止まりやすいですが、珍しい失敗ではありません。

Windows で仮想環境を有効化するとき、PowerShell では次のようなコマンドを使います。

.venv\Scripts\Activate.ps1

ただし、この Activate.ps1 がそのまま動かず止まることがあります。原因の一つとして、PowerShell の実行ポリシーが関係することがあります。

ここで大事なのは、「自分だけがおかしいわけではない」と知っておくことです。これは Windows 特有の詰まりどころで、かなりよくある部類です。

この場では深掘りしませんが、少なくとも PowerShell と実行ポリシーが関係することがある と知っているだけで、不安はかなり減ります。

最初にどう考えると迷いにくいか

最初の理解と、その次の理解を分けて持つのがおすすめです。

最初は、uv venv で環境を作り、必要なら有効化して、uv pip install でライブラリを入れる。この流れで十分です。



terminal

uv venv
uv pip install requests

ただ、少し慣れてきたら、uv adduv run の考え方も早めに知っておくと楽になります。単に入れるだけでなく、プロジェクトとして管理する視点に自然につながるからです。

シママ

最初は単純に触っていいの。でも、そのあとで「プロジェクトとして持つ」見方へ広げると、uv の強みが見えやすいよ。

ストーク

最初の理解を捨てるんじゃなくて、その上に uv adduv run を載せていく感じたいね。

まとめ

uv は便利な入口ですが、それだけでは終わりません。

uv は、最初は pip や venv をまとめて扱いやすくした道具として理解できます。ただ、実際には Python 本体、プロジェクト、実行、ツールまでかなり広く扱います。

そして uv pip installuv add は、どちらが正しいかではなく文脈の違いです。前者は pip 互換寄りの入口、後者はプロジェクト運用寄りの入口。この二つが見分けられるようになると、uv の全体像はかなりつかみやすくなります。