【Python開発】uv × Ruff × Mypy × Black で最強の開発環境を構築する
コード品質・整形・型安全をすべて自動化。
しかも「爆速」&「シンプル」。
uv + Ruff + Mypy + Black で、Python開発の生産性を最大化しよう。
🧠 この記事でわかること
- 「uv」「Ruff」「Black」「Mypy」の役割
- 各ツールのインストールと設定
- 実際の開発で使うコマンド例
- VSCode・pre-commitとの統合方法
⚡️ 1. uvとは?
まず最初に、uv について。
uvは「Ruff」を開発している Astral社製のRust実装Pythonツールチェーンです。
pip,pipx,venv,poetryを全部まとめた、
次世代の超高速ツール。
🚀 特徴
| 項目 | 内容 |
|---|---|
| 速度 | pipの10〜20倍。Rust実装で高速依存解決 |
| 統合管理 | venv・依存管理・ツール管理を1コマンド化 |
| pip互換 | 既存のプロジェクトとも完全互換 |
| 一時実行 |
uv run で仮想環境を意識せず実行できる |
| 依存の固定 | lockファイル生成で再現性が高い |
🧰 2. 導入するツール(黄金トリオ)
| ツール | 主な役割 | 概要 |
|---|---|---|
| Ruff | Lint(構文・スタイル・import順など) | Flake8, isort, pycodestyleなどを統合したLintツール |
| Black | コードフォーマッタ | 見た目を完全に統一するフォーマッタ |
| Mypy | 静的型チェック | type hintsを解析して型の整合性を検証 |
⚙️ 3. プロジェクトの初期化とインストール
🔹 プロジェクト作成
uv init my_project
cd my_project
🔹 Ruff / Black / Mypy を導入
uv add ruff black mypy
🔹 依存をロック(再現性を確保)
uv lock
これで .venv と pyproject.toml / uv.lock が作成され、
仮想環境と依存関係を自動で管理してくれます。
📁 4. 設定:pyproject.toml
以下の設定を追加して、すべてのツールを一元管理します。
[project]
name = "my_project"
version = "0.1.0"
requires-python = ">=3.11"
[tool.black]
line-length = 88
target-version = ["py311"]
[tool.ruff]
line-length = 88
target-version = "py311"
[tool.ruff.lint]
select = ["E", "F", "B", "I"]
ignore = ["E501"]
fixable = ["I", "B"]
[tool.mypy]
python_version = "3.11"
ignore_missing_imports = true
disallow_untyped_defs = true
warn_return_any = true
strict_optional = true
💻 5. よく使うuvコマンドまとめ(実戦編)
開発中によく使う実行パターンを一覧で紹介します👇
🧩 Lint(構文チェック + 軽微な自動修正)
uv run ruff check . --fix
- import順や未使用変数、PEP8違反を高速チェック
- 自動修正できる箇所は即修正
🎨 コード整形(見た目を統一)
uv run black .
- Blackが自動整形(改行・インデント・括弧位置などを統一)
- チーム全員がまったく同じフォーマットを共有可能
🧠 型チェック(type hintsの整合性)
uv run mypy .
- 型ミスや戻り値の不一致を静的解析で検出
- 実行前にバグの温床を潰せる
⚡️ まとめ実行(ワンライナー)
uv run ruff check . --fix && uv run black . && uv run mypy .
→ 一発で「Lint → 整形 → 型検証」まで完了!
CI/CDでもこの1行を使うだけでOKです。
🧠 6. Ruff + Black + Mypy の役割の違い
| 目的 | 担当ツール | 説明 |
|---|---|---|
| コード品質 | Ruff | 未使用importやPEP8違反などを発見&修正 |
| 見た目の統一 | Black | コード全体の整形を完全自動化 |
| 安全性保証 | Mypy | 型ヒントを利用してバグを事前検出 |
Ruffは「コードの健康診断」
Blackは「美容整形」
Mypyは「安全検査」
と覚えると分かりやすいです。
🧩 7. VSCode設定例(保存時自動実行)
.vscode/settings.json
{
"python.defaultInterpreterPath": ".venv/bin/python",
"editor.formatOnSave": true,
"python.formatting.provider": "black",
"ruff.lintOnSave": true,
"mypy.enabled": true
}
これで「保存するたびに」:
- Ruffがチェック
- Blackが整形
- Mypyが型エラーを通知
完全自動でクリーンな状態を維持できます。
🔄 8. pre-commit連携で自動チェック
.pre-commit-config.yaml
repos:
- repo: https://github.com/charliermarsh/ruff-pre-commit
rev: v0.7.0
hooks:
- id: ruff
args: [--fix]
- repo: https://github.com/psf/black
rev: 24.10.0
hooks:
- id: black
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.11.2
hooks:
- id: mypy
インストール:
uv tool install pre-commit
pre-commit install
→ git commit 時に自動で Ruff・Black・Mypy を実行。
コミット時の品質漏れを防げます。
⚖️ 9. Ruffだけではダメなの?
確かに、Ruffにも ruff format や簡易型チェック機能があります。
でも現時点(2025年)では以下の理由でBlack / Mypy併用が推奨:
| 機能 | Ruff | Black / Mypy |
|---|---|---|
| コード整形 | 一部対応(β) | 完全対応・安定 |
| 型チェック | 簡易(Lintレベル) | 厳密な静的解析 |
Ruffは万能ではなく、
「品質」と「スタイル」と「型安全」は分業がベスト。
⚙️ 10. CI/CD 例(GitHub Actions)
name: Code Quality
on: [push, pull_request]
jobs:
lint-type-format:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v1
- run: uv sync
- run: |
uv run ruff check . --fix
uv run black .
uv run mypy .
🧩 11. 実際の開発ワークフロー
# 1️⃣ コードを書く
vim app/main.py
# 2️⃣ 保存 → RuffがLint、Blackが整形、Mypyが補完チェック
# 3️⃣ 手動で実行するなら
uv run ruff check . --fix
uv run black .
uv run mypy .
# 4️⃣ 問題なければコミット
git add .
git commit -m "✨ clean and type-safe update"
🏁 12. まとめ
| 目的 | ツール | コマンド例 |
|---|---|---|
| 品質チェック | Ruff | uv run ruff check . --fix |
| コード整形 | Black | uv run black . |
| 型安全性 | Mypy | uv run mypy . |
| 一括実行 | 全部 | uv run ruff check . --fix && uv run black . && uv run mypy . |
💡 Ruff(品質) × Black(整形) × Mypy(安全)
そしてそれらを統べる uv(速度と統一性)。
これが2025年の “Python開発の黄金トリオ構成” です。
🔗 参考リンク
🧩 Ruffが健康を守り、Blackが美しさを整え、Mypyが安全を保証する。
そして、それらを束ねる「uv」があなたの開発を加速させる。🚀 今すぐこの構成で、最速でクリーンなPython開発を始めよう。
Discussion