😸

【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

これで .venvpyproject.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