普段、Python環境を作る時、uv + Ruffで環境構築するんですけど、ちょいちょい「あのコマンド何だったけ?」ってなって、その度に検索やらAIに聴いたりしていたんで、AIまとめさせて、それを記事にしてもらいました。(以下、AIによる作成)
はじめに
Pythonプロジェクトを始めるたびに、こんな経験はありませんか?
- 仮想環境の作成に時間がかかる
- パッケージのインストールが遅い
- リンターとフォーマッターの設定が煩雑
- 複数のツールを覚えるのが大変
2025年の今、これらの問題を一気に解決する最強タッグがあります。それが uv と Ruff です。
この記事では、わずか数分でモダンなPython開発環境を構築し、開発体験を劇的に向上させる方法を紹介します。
uv:Rust製の爆速Pythonパッケージマネージャー
uvとは?
uvは、Rust言語で書かれた超高速なPythonパッケージインストーラー兼プロジェクト管理ツールです。pip、pip-tools、pipx、poetry、pyenv、virtualenvの機能を一つに統合し、その上で10〜100倍の速度向上を実現しています。
インストール(30秒で完了)
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows (PowerShell)
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
# または pipx 経由
pipx install uv
基本的な使い方
プロジェクトの初期化
# 新規プロジェクトを作成
uv init my-project
cd my-project
# 既存プロジェクトで初期化
uv init
Pythonバージョンの管理
# Python 3.12をインストール
uv python install 3.12
# プロジェクトで使用するPythonバージョンを指定
uv python pin 3.12
パッケージ管理
# パッケージを追加(自動的に仮想環境も作成)
uv add fastapi uvicorn pydantic
# 開発用パッケージを追加
uv add --dev pytest ruff
# requirements.txtから一括インストール
uv pip install -r requirements.txt
# プロジェクトの依存関係を同期
uv sync
スクリプトの実行
# 仮想環境内でPythonスクリプトを実行
uv run python main.py
# 仮想環境内でコマンドを実行
uv run pytest
uvの驚異的なパフォーマンス
従来のpipと比較した実行時間の例:
-
NumPy + pandas + scikit-learn のインストール
- pip: 45秒
- uv: 3秒(15倍高速!)
-
仮想環境の作成
- venv: 3秒
- uv: 0.1秒(30倍高速!)
Ruff:オールインワンのPython開発ツール
Ruffとは?
Ruffは、これもRust製の超高速なPythonリンター&フォーマッターです。Black、isort、Flake8、pylint、autoflake、pyupgradeなど、複数のツールの機能を一つに統合しています。
Ruffのセットアップ
# uvでプロジェクトに追加
uv add --dev ruff
# またはグローバルにインストール
uv tool install ruff
設定ファイル(pyproject.toml)
[tool.ruff]
# 対象のPythonバージョン
target-version = "py312"
# 1行の最大文字数
line-length = 100
[tool.ruff.lint]
# 有効にするルール
select = [
"E", # pycodestyle errors
"W", # pycodestyle warnings
"F", # pyflakes
"I", # isort
"B", # flake8-bugbear
"C4", # flake8-comprehensions
"UP", # pyupgrade
"ARG", # flake8-unused-arguments
"SIM", # flake8-simplify
]
[tool.ruff.per-file-ignores]
# テストファイルでは一部のルールを無視
"tests/*" = ["ARG", "S101"]
Ruffの使い方
リンティング(コードチェック)
# 現在のディレクトリをチェック
uv run ruff check .
# 自動修正可能な問題を修正
uv run ruff check --fix .
# より詳細な出力
uv run ruff check --show-fixes .
フォーマット
# コードをフォーマット
uv run ruff format .
# 変更内容を確認(実際には変更しない)
uv run ruff format --check .
実践:3分で作るFastAPIプロジェクト
実際にuv + Ruffを使って、FastAPIプロジェクトを爆速でセットアップしてみましょう。
Step 1: プロジェクト作成(30秒)
# プロジェクトを作成
uv init fastapi-demo
cd fastapi-demo
# Python 3.12を使用
uv python pin 3.12
Step 2: 依存関係のインストール(20秒)
# 本番用パッケージ
uv add fastapi uvicorn pydantic python-dotenv
# 開発用パッケージ
uv add --dev ruff pytest httpx
Step 3: アプリケーションコード作成(1分)
src/main.py
:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI(title="FastAPI Demo")
class Item(BaseModel):
name: str
price: float
is_offer: bool = False
@app.get("/")
async def root():
return {"message": "Hello, uv + Ruff!"}
@app.post("/items/")
async def create_item(item: Item):
return {"item": item, "message": "Item created successfully"}
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str | None = None):
return {"item_id": item_id, "q": q}
Step 4: Ruff設定とチェック(30秒)
pyproject.toml
に追加:
[tool.ruff]
target-version = "py312"
line-length = 100
[tool.ruff.lint]
select = ["E", "W", "F", "I", "B", "UP", "SIM"]
[tool.ruff.format]
quote-style = "double"
indent-style = "space"
コードをチェック&フォーマット:
uv run ruff check --fix src/
uv run ruff format src/
Step 5: 実行(10秒)
uv run uvicorn src.main:app --reload
起動後、ブラウザで表示されたURLを開く
1. グローバルツールの管理
# Jupyter Labをグローバルにインストール
uv tool install jupyterlab
# インストール済みツールを確認
uv tool list
# ツールを実行
uvx jupyterlab
2. 複数プロジェクトの管理
# ワークスペースの作成
uv init --workspace
uv workspace add packages/*
3. プロダクション用のロックファイル
# uv.lockファイルを生成
uv lock
# ロックファイルから正確に再現
uv sync --frozen
まとめ
uv + Ruffの組み合わせによるPython開発環境の構築により、管理が簡単かつ高速になりました。
メリット
- セットアップ時間が10分の1以下に短縮
- 統一されたツールチェーンで学習コストが低い
- Rust製による圧倒的なパフォーマンス
- モダンなPythonの機能に完全対応
こんな人におすすめ
- Pythonプロジェクトの立ち上げを頻繁に行う人
- CI/CDの実行時間を短縮したい人
- 複数のリンター/フォーマッターの設定に疲れた人
- 最新のツールで開発体験を向上させたい人