まだpipとpyenv使ってない? - uv導入完全ガイド
python 25 min read

まだpipとpyenv使ってない? - uv導入完全ガイド

my-icon

karrinn

著者

まだpipとpyenv使ってない?

Python開発を10-100倍高速化する次世代パッケージマネージャー「uv」完全ガイド

圧倒的な高速化

Rustで書かれたuvは、pipの10-100倍の速度でパッケージをインストール。待ち時間のストレスから解放されます。

オールインワン

pip、pyenv、venv、poetry、pip-tools...これら全てを1つのツールで。もう複数のツールを使い分ける必要はありません。

開発環境のセットアップが5分で完了

従来の面倒な環境構築から解放され、すぐにコーディングに集中できます

この記事の対象者

この記事は以下のような方を対象としています。初心者でも安心して読み進められる内容になっています。

  • Python初学者(pipの使い方に慣れてきた方)

  • 複数のPythonバージョンを管理したい方

  • 環境構築に時間をかけたくない方

  • Windows、Mac、Linuxユーザー

  • チーム開発で環境の再現性を高めたい方

  • 最新のPython開発ツールに興味がある方

参考: uv公式ドキュメント

uvって何がすごいの?

Rust製の次世代パッケージマネージャー。pip、pyenv、poetry...全てを1つに統合し、10-100倍の高速化を実現しました。

uvは、Astral社が開発したRust製の次世代Pythonパッケージマネージャーです。Ruff(高速リンター)と同じチームが開発しており、その圧倒的な速度と使いやすさで注目を集めています。

従来のツールとの違い

これまでPython開発では、用途に応じて複数のツールを使い分ける必要がありました。

  • pip: パッケージインストール

  • pyenv: Pythonバージョン管理

  • venv: 仮想環境作成

  • poetry: 依存関係管理

  • pip-tools: 依存関係のロック

uvならこれ1つで全部できる

uvは、これら全ての機能を統合した単一ツールです。しかも、それぞれの機能が従来のツールより10-100倍高速に動作します。

  • 依存関係の解決が数秒で完了

  • 仮想環境の作成が瞬時に完了

  • グローバルキャッシュでディスク容量を節約

開発現場での体験

実際の開発現場では、pip freezeで依存ライブラリを管理していると、依存の依存まで全て出力されて管理が煩雑になる瞬間がありました。uvのロックファイルは直接依存のみを記録し、完全な再現性も保証してくれるため、この悩みから解放されました。

参考: uvの公式ブログ | GitHub公式リポジトリ

速度比較:数字で見る圧倒的パフォーマンス

数字は嘘をつきません。pipの10-100倍、仮想環境作成は80倍高速。実測データで見るuvの圧倒的スピード。

パッケージインストール

10-100倍高速

pipと比較して圧倒的な速度。数分かかっていた作業が数秒で完了します。

仮想環境作成

80倍高速

python -m venvと比較して約80倍。瞬時に環境が立ち上がります。

依存関係解決

数秒で完了

従来のツールでは数分かかっていた依存関係の解決が瞬時に終わります。

ディスク効率

大幅削減

グローバルキャッシュにより、同じパッケージの重複保存を回避します。

参考: DataCamp - UV完全ガイド | Real Python - uvプロジェクト管理

インストール方法(OS別)

macOS、Linux、Windows。どのOSでも1コマンドで簡単インストール。5分で開発環境が整います。

重要なポイント

uvはPythonに依存しないため、Pythonがインストールされていなくても使用できます。uvが必要に応じて自動的にPythonをインストールしてくれます。

macOS / Linux(推奨方法)

公式インストールスクリプトを使用します。curlまたはwgetで実行できます。

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

curlがない場合はwgetを使用:

wget -qO- https://astral.sh/uv/install.sh | sh

インストール後、ターミナルを再起動してください

Windows

PowerShellを管理者権限で開き、以下のコマンドを実行します。

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

PowerShellを再起動してください

pipで導入したい方

既存のPython環境がある場合、pipxでの導入を推奨します。

pipx install uv

pipxがない場合:

pip install uv

インストール確認

インストール後、以下のコマンドでバージョンを確認できます。

uv --version

参考: uv公式インストールガイド

基本的な使い方:よく使うコマンド

プロジェクト作成から依存関係管理まで。知っておくべき基本コマンドを実例とともに解説します。

プロジェクトの初期化 最重要

新しいプロジェクトを開始する際は、まずuv initを実行します。

uv init my-project

これにより以下のファイルが自動生成されます:

  • pyproject.toml: プロジェクト設定と依存関係

  • .python-version: 使用するPythonバージョン

  • README.md: プロジェクト説明

  • .gitignore: Git用の除外設定

依存関係の追加

パッケージをプロジェクトに追加します。

uv add requests

複数同時に追加:

uv add flask pandas numpy

自動的にpyproject.tomlとロックファイルが更新されます

依存関係の削除

不要なパッケージを削除します。

uv remove requests

pyproject.tomlとロックファイルから自動的に削除されます

環境の同期

pyproject.tomlの内容を環境に反映します。

uv sync

チームメンバーが同じ環境を再現する際に使用

スクリプトの実行

仮想環境を自動的にアクティベートして実行します。

uv run python main.py

環境のアクティベートが不要で便利です

参考: uv公式ガイド | DigitalOcean uvガイド

実践:プロジェクトを立ち上げてみよう

実際の手順を追って、uvでプロジェクトを作成してみましょう。

Step 1: プロジェクト作成

uv init my-app
cd my-app

プロジェクトフォルダが作成されます

Step 2: 依存関係追加

uv add flask

Flaskと必要な依存関係がインストールされます

Step 3: アプリケーション実行

uv run python hello.py

環境のアクティベートなしで直接実行できます

移行ガイド:他ツールからuvへのコマンド対応表

pip、poetry、pyenv使いの方へ。今まで使っていたコマンドがuvではどう変わるか、一覧表で確認できます。

移行する方へ

既にpip、poetry、condaなどを使っている方は、以下の対応表を参考にしてください。ほとんどの操作がより簡潔なコマンドで実現できます。

pip / pip-tools からの移行

最も一般的なpipコマンドとuvの対応関係です。

やりたいことpip / pip-toolsuv
パッケージをインストールpip install flaskuv add flask
複数パッケージをインストールpip install flask pandas numpyuv add flask pandas numpy
開発用パッケージをインストールpip install pytest --devuv add --dev pytest
requirements.txtからインストールpip install -r requirements.txtuv pip install -r requirements.txt
パッケージをアンインストールpip uninstall flaskuv remove flask
インストール済みパッケージ一覧pip listuv pip list
依存関係を固定(ロック)pip freeze > requirements.txtuv lock
依存関係をコンパイルpip-compile requirements.inuv pip compile pyproject.toml

参考: uvのpipインターフェース

Poetry からの移行

Poetryユーザーの方は、ほぼ同じ感覚で使えます。

やりたいことPoetryuv
新しいプロジェクト作成poetry new my-projectuv init my-project
既存プロジェクトを初期化poetry inituv init
依存関係を追加poetry add requestsuv add requests
開発用依存関係を追加poetry add --group dev pytestuv add --dev pytest
依存関係を削除poetry remove requestsuv remove requests
依存関係をインストールpoetry installuv sync
依存関係を更新poetry updateuv lock --upgrade
スクリプトを実行poetry run python script.pyuv run python script.py
仮想環境をアクティベートpoetry shellsource .venv/bin/activate
パッケージをビルドpoetry builduv build

参考: uvプロジェクトガイド

venv / virtualenv からの移行

venv/virtualenvuv
python -m venv .venvuv venv
virtualenv .venvuv venv
source .venv/bin/activateuv runで不要

uvは自動的に.venvを作成・管理します

pyenv からの移行

pyenvuv
pyenv install 3.12uv python install 3.12
pyenv global 3.12uv python pin 3.12
pyenv versionsuv python list

uvは必要に応じて自動でPythonをインストールします

Conda からの移行

Condaの主要機能もuvでカバーできます。

やりたいことCondauv
環境を作成conda create -n myenv python=3.12uv venv --python 3.12
環境をアクティベートconda activate myenvuv runで不要
パッケージをインストールconda install numpyuv add numpy
環境をエクスポートconda env export > environment.ymluv lock
環境を再現conda env create -f environment.ymluv sync

注意点

Condaの非Pythonパッケージ(Cコンパイラやシステムライブラリなど)には対応していません。純粋なPythonプロジェクトであればuvで十分です。

参考: DataCamp - Condaとuvの比較

移行のヒント

  • 既存のrequirements.txtはuv pip install -r requirements.txtでそのまま使えます

  • pyproject.tomlがあればuv syncだけで環境構築完了

  • 環境のアクティベートは不要。uv runで直接実行できます

  • 段階的な移行も可能。既存のツールと併用しながら試せます

pyproject.tomlの基本と重要ファイル

pyproject.tomlとuv.lock。この2つのファイルが、再現可能な開発環境を支えています。その役割と違いを理解しましょう。

pyproject.tomlとは

pyproject.tomlは、Pythonプロジェクトのメタデータと依存関係を定義する標準的な設定ファイルです。uvはこのファイルを中心にプロジェクト管理を行います。

基本的な構造

[project]
name = "my-app"
version = "0.1.0"
description = "プロジェクトの説明"
requires-python = ">=3.11"
dependencies = [
    "flask>=3.0.0",
    "requests>=2.31.0"
]

[dependency-groups]
dev = [
    "pytest>=8.0.0",
    "ruff>=0.11.0",
    "pyright>=1.1.400"
]

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

この設定により、プロジェクトの依存関係が明確に管理され、チーム全体で同じ環境を簡単に再現できます。

直接依存のみ

記述するのは直接使用するパッケージだけ

pip freezeのような膨大な出力とは無縁です

完全再現

ロックファイルで完全な再現性を保証

環境の差異によるトラブルを防ぎます

dependency-groupsの活用

uvでは、開発用の依存関係を[dependency-groups]セクションで管理できます。これにより、本番環境には不要なツールを明確に分離できます。

インストール方法

uv sync --group dev

開発用依存関係を含めてインストール

本番環境用

uv sync --no-dev

本番用の依存関係のみインストール

uv initで生成されるその他の重要ファイル

.python-version

プロジェクトで使用するPythonバージョンを指定します。

3.12

uvはこのファイルを読み取り、自動的に適切なPythonバージョンを使用します

uv.lock

依存関係の完全なスナップショットです。

  • すべての依存パッケージとそのバージョン

  • 依存の依存も含めた完全な情報

  • 環境の完全な再現性を保証

.gitignore

Gitで管理しないファイルを指定します。

uvは自動的にPythonプロジェクトに適した.gitignoreを生成します(.venv、__pycache__など)

.venv

仮想環境ディレクトリです。

uvは自動的に.venvディレクトリに仮想環境を作成します。明示的な作成コマンドは不要です

参考: Python Packaging Authority - pyproject.toml仕様

ワークスペース機能:モノレポ対応

複数のパッケージを1つのリポジトリで管理するモノレポ。uvのワークスペース機能で、効率的な開発が可能になります。

uvは、1つのリポジトリで複数のパッケージを管理するモノレポ構成にも対応しています。大規模プロジェクトや、ドキュメント・ツール類を分離したい場合に便利です。

pyproject.tomlでの設定

[tool.uv.workspace]
members = [
    "docs",
    "tools",
    "packages/*"
]

プロジェクト構成例

my-project/
├── pyproject.toml
├── src/
│ └── my_package/
├── docs/
│ └── pyproject.toml
└── tools/
    └── pyproject.toml

この構成により、各サブプロジェクトは独自の依存関係を持ちながら、全体として統一的に管理できます。

使用例

  • docs: Sphinx等のドキュメント生成ツール

  • tools: 開発用スクリプトやユーティリティ

  • packages/*: 複数の関連パッケージ

統一管理

複数のサブプロジェクトを1つのロックファイルで管理

独立性

各サブプロジェクトは独自の依存関係を持てる

参考: uv公式 - ワークスペース

開発環境を整える:おすすめ設定(ruff、pyright、pre-commit)

uvだけでは終わらない。ruff、pyright、pre-commitと組み合わせて、プロフェッショナルな開発環境を構築しましょう。

プロジェクト立ち上げ時に設定しておくと、コード品質が劇的に向上する3つのツールを紹介します。全てuvと相性が良く、簡単に導入できます。

Ruff:超高速リンター&フォーマッター

Ruffは、uvと同じAstral社が開発した超高速なPythonリンター&フォーマッターです。Black、isort、Flake8など複数のツールを1つに統合し、それらより10-100倍高速です。

導入方法

uv add --dev ruff

pyproject.tomlに設定を追加

[tool.ruff]
line-length = 88
select = ["E", "F", "B"]
ignore = []

[tool.ruff.format]
quote-style = "double"

使い方

uv run ruff check .
uv run ruff format .

メリット

  • コードスタイルの統一が自動化される

  • 潜在的なバグを早期発見できる

  • チーム開発でのコードレビューが楽になる

Pyright:高速型チェッカー

Pyrightは、Microsoft製の高速な静的型チェッカーです。型ヒントの間違いを実行前に検出し、バグを未然に防ぎます。

導入方法

uv add --dev pyright

pyproject.tomlに設定を追加

[tool.pyright]
venvPath = "."
venv = ".venv"
typeCheckingMode = "basic"

使い方

uv run pyright

メリット

  • 型に関するバグを実行前に発見

  • IDEの補完機能が向上

  • リファクタリングが安全になる

pre-commit:自動品質チェック

pre-commitは、Gitコミット前に自動的にコード品質チェックを実行するツールです。Ruffやpyrightを自動実行できます。

導入方法

uv add --dev pre-commit

基本的な.pre-commit-config.yaml

repos:
  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.13.3
    hooks:
      - id: ruff-check
        args: [--fix]
      - id: ruff-format
  - repo: https://github.com/RobertCraigie/pyright-python
    rev: v1.1.406
    hooks:
      - id: pyright

実践的な設定例(より充実)

repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v5.0.0
    hooks:
      - id: trailing-whitespace
      - id: end-of-file-fixer
      - id: check-yaml
      - id: check-added-large-files
  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.13.3
    hooks:
      - id: ruff
        args: [--fix]
      - id: ruff-format
  - repo: https://github.com/RobertCraigie/pyright-python
    rev: v1.1.406
    hooks:
      - id: pyright

セットアップ

uv run pre-commit install
uv run pre-commit run --all-files

追加で便利なhooks

  • trailing-whitespace: 行末の無駄な空白を削除

  • end-of-file-fixer: ファイル末尾の改行を統一

  • check-yaml: YAMLファイルの文法チェック

  • check-added-large-files: 大容量ファイルの追加を防止

メリット

  • コミット前に自動的に品質チェック

  • 問題のあるコードがリポジトリに入らない

  • チーム全体で同じチェックを強制できる

これら3つを組み合わせると

コミット前に自動的にコードがフォーマットされ、リントチェックと型チェックが走ります。問題があればコミットが失敗するため、品質の低いコードがリポジトリに入ることを防げます。実際の開発現場では、この設定により手動でのコードレビューの負担が大幅に減りました。

参考: Ruff公式ドキュメント | Pyright GitHub | pre-commit公式サイト

歴史:Pythonパッケージ管理の進化

easy_installからuvまで。20年以上にわたるPythonパッケージ管理の歴史を振り返り、uvの革新性を理解しましょう。

2008年頃

easy_install / setuptools時代

初期のパッケージインストーラー。依存関係の解決が不完全で、アンインストールが困難という問題がありました。

2011年

pipの登場

easy_installの問題を解決し、Pythonの標準パッケージマネージャーとして広く普及しました。しかし、依存関係のロックや仮想環境管理は別のツールが必要でした。

参考: pip公式ドキュメント

2018年

Poetryの登場

依存関係管理とパッケージング、仮想環境管理を統合。pyproject.tomlを採用し、Pythonプロジェクト管理に新しい風を吹き込みました。ただし、Pythonで書かれているため速度面での課題がありました。

参考: Poetry公式サイト

2024年

uvの誕生

Rustで書かれた超高速なパッケージマネージャー。pip、pyenv、venv、poetry、pip-toolsの機能を1つに統合し、10-100倍の高速化を実現。Pythonパッケージ管理の新時代を切り開きました。

参考: uv発表ブログ

コラム:なぜRustで書かれているのか

uvがRustで書かれている理由は、単なる速度だけではありません。Rustは、メモリ安全性とパフォーマンスを両立する言語として知られています。

  • 並列処理の最適化: Rustの優れた並列処理により、複数のパッケージを同時にダウンロード・インストールできます

  • メモリ効率: ガベージコレクションが不要で、メモリ使用量が少なく済みます

  • クロスプラットフォーム: 単一のバイナリで全てのOSに対応できます

実際の開発現場では、CIパイプラインでの依存関係インストールが従来の10分から1分以下に短縮され、開発サイクルが大幅に改善されました。

実践例:よくあるシナリオ

新規プロジェクト、既存プロジェクトの移行、Dockerコンテナでの利用。実際の開発現場で役立つシナリオ別ガイド。

シナリオ1: チームメンバーが環境を再現したい

リポジトリをクローンした後の手順

従来の方法(pip + venv)

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
  • 複数のコマンドが必要

  • 数分かかる

uvの場合

uv sync
  • 1コマンドで完了

  • 数秒で完了

シナリオ2: 異なるPythonバージョンで試したい

Python 3.11と3.12で動作確認したい場合

従来の方法(pyenv)

pyenv install 3.11
pyenv install 3.12
pyenv local 3.11
python -m venv .venv
...

複雑で時間がかかる

uvの場合

uv run --python 3.11 python main.py
uv run --python 3.12 python main.py

必要に応じて自動でインストール

pip freezeからの移行

既存のrequirements.txtがある場合も簡単に移行できます。

uv init
uv add $(cat requirements.txt | grep -v '#')

pyproject.tomlには直接依存のみが記録され、メンテナンスが容易になります

uvがもたらす開発体験の変化

環境構築30分→5分、ツール数10個→1個。uvが変えるのは速度だけではありません。開発体験そのものが変わります。

これまでのPython開発では、環境構築に多くの時間を費やしていました。新しいプロジェクトを始めるたび、複数のツールを組み合わせて環境を整える必要がありました。

uvは、この状況を根本から変えます。単一のツールで全てが完結し、しかも圧倒的に高速です。pip freezeで管理していた依存関係は、直接使用するパッケージだけをpyproject.tomlに記述すればよくなり、依存の依存まで全部出力されていた煩雑さから解放されます。

実際の開発現場では、チームメンバーの環境構築時間が30分から5分以下に短縮され、新メンバーのオンボーディングが劇的にスムーズになりました。また、CIパイプラインでの依存関係インストールが高速化され、フィードバックループが大幅に改善されました。

uvは単なるツールの置き換えではなく、Python開発の生産性を次のレベルに引き上げる存在です。PEP 621に準拠したpyproject.tomlを使用し、Pythonエコシステムの標準に沿った開発ができます。

30分→5分

環境構築時間の短縮

実際のプロジェクトでの測定値

1つ

必要なツールの数

従来は5つ以上必要でした

今後、どれを使いますか?

Python開発環境の選択肢は複数あります。それぞれに長所がありますが、あなたのプロジェクトに最適なのはどれでしょうか。

選択肢を考えてみましょう

  • 従来の組み合わせ(pip + venv + pyenv): 枯れた技術で安定

  • Poetry: 統合されたツールで使いやすい

  • uv: 圧倒的な速度と最新の開発体験

参考文献・リソース

さらに深く学びたい方へ。公式ドキュメント、コミュニティ、実践的なチュートリアルをまとめました。

公式ドキュメント・信頼できる情報源

作成日: 2025年10月 | 全データは公式ドキュメントおよび信頼できる技術情報源に基づく

関連トピック

コメント (0)

まだコメントはありません。最初のコメントを残しませんか?

コメントを投稿

メールアドレスが公開されることはありません。必須項目には * が付いています