0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

uv + Ruff でpython環境を構築(覚書)

Posted at

 普段、Python環境を作る時、uv + Ruffで環境構築するんですけど、ちょいちょい「あのコマンド何だったけ?」ってなって、その度に検索やらAIに聴いたりしていたんで、AIまとめさせて、それを記事にしてもらいました。(以下、AIによる作成)

はじめに

Pythonプロジェクトを始めるたびに、こんな経験はありませんか?

  • 仮想環境の作成に時間がかかる
  • パッケージのインストールが遅い
  • リンターとフォーマッターの設定が煩雑
  • 複数のツールを覚えるのが大変

2025年の今、これらの問題を一気に解決する最強タッグがあります。それが uvRuff です。

この記事では、わずか数分でモダンな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の実行時間を短縮したい人
  • 複数のリンター/フォーマッターの設定に疲れた人
  • 最新のツールで開発体験を向上させたい人

参考リンク

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?