← 技術共有一覧へ戻る
2026-08

Python のコード整形・静的解析ツールを整理する:isort / Black / Ruff / Pylance / Flake8

PythonLinterDevEx

Python プロジェクトでは「フォーマッター」「リンター」「型チェッカー」と呼ばれるツールが乱立していて、名前だけでは何をしてくれるのか分かりにくいです。ここでは代表的な isort・Black・Flake8・Pylance・Ruff の5つについて、①どのカテゴリに属するのか ②カテゴリごとに何を解決するのか ③実際どう組み合わせるのか、という順番で整理します。

1. まず3つのカテゴリに分けて考える

Python のコード品質まわりのツールは、大きく3種類に分けられます。

カテゴリ解決すること書き換えるか
フォーマッター(整形)コードの見た目(改行・インデント・クォート・import 順序など)を、決まったルールで自動的に揃えるする
リンター(静的解析)バグの温床になりやすい書き方(未使用 import、未定義変数、危険な比較など)を検出して警告するしない
型チェッカー型ヒントをもとに、実行前に型の不整合を検出するしない

この5つのツールを、上の3カテゴリに当てはめると次のようになります。

ツール属するカテゴリ
isortフォーマッター(import 順序専門)
Blackフォーマッター(コード全体)
Flake8リンター
Pylance型チェッカー寄り(エディタの言語サーバー)
Ruff上記3カテゴリのうちフォーマッター・リンターの大部分を1ツールで肩代わり

つまり isort と Black は「フォーマッター」、Flake8 は「リンター」、Pylance は「型チェッカー」寄り、Ruff は特定の1カテゴリではなく複数カテゴリにまたがって代替する、という関係になっています。

2. 各ツールの役割解説

フォーマッター系

isort — import 文の並び順を整えるだけの専用フォーマッターです。標準ライブラリ/サードパーティ/自プロジェクト内モジュールをグループ分けし、アルファベット順に並べ替えます。Black と組み合わせて使われることが多く、「コードの中身は Black、import の順番は isort」という役割分担が定番でした。

Black — 「意見を挟まない(opinionated)」フォーマッターとして有名で、行の折り返し・クォートの統一(基本ダブルクォート)・末尾カンマなど、ほぼ設定項目を持たずに一意な整形結果を出します。設定でチーム内の議論(タブかスペースか、クォートはどちらか等)を終わらせることを目的に作られたツールです。整形専任で、バグ検出は行いません。

リンター系

Flake8 — PEP8(コーディング規約)違反や、未使用 import・未使用変数、複雑度が高すぎる関数などを検出する伝統的なリンターです。それ自体は薄いラッパーで、実体は pyflakes(バグ検出)+ pycodestyle(PEP8 チェック)+ mccabe(複雑度計測)というプラグイン構成になっています。Flake8 自身はコードを書き換えません(自動修正機能なし)。

型チェッカー

Pylance — VS Code 用の Python 言語サーバーで、Microsoft 製の型チェッカー Pyright をベースにしています。エディタ上でのコード補完・定義ジャンプ・型ヒントの不整合検出・ホバー時の型情報表示などをリアルタイムに提供します。CI で実行する類のツールというより、エディタ体験(DX)を支えるツールという位置づけです。

カテゴリを横断する統合ツール

Ruff — Rust 実装の高速な静的解析・整形ツールで、Flake8 本体および数十種類の Flake8 プラグイン、isort、(一部)pyupgrade などのルールセットを1つのバイナリで再実装しています。ruff check でリント(Flake8 相当)、ruff format で Black 互換のフォーマットが行える上、--fix で多くの指摘を自動修正できます。「フォーマッター」と「リンター」の2カテゴリを、圧倒的な実行速度でほぼ1本に統合できるのが最大の特徴です(型チェックは対象外)。

3. 比較表

ツール種別主な仕事自動修正実行速度型チェック
isortフォーマッターimport 順序の整理あり速いなし
Blackフォーマッターコード全体の整形あり普通なし
Flake8リンターPEP8/バグの疑いを検出なし普通なし
Pylance言語サーバー/型チェッカーエディタ補完・型検証一部(Quick Fix)速い(常駐)あり(Pyright)
Ruffリンター+フォーマッターFlake8+isort 相当を高速に代替あり非常に速いなし

4. どう組み合わせるか

  • 新規プロジェクトで最短構成にしたい → Ruff 単体(ruff format + ruff check --fix)でフォーマット・import 整理・大半の Lint ルールをカバーできる。CI もエディタ保存時も同じルールで完結する。
  • 既存プロジェクトが Black + isort + Flake8 で構築済み → 無理に置き換えず、Ruff の Flake8/isort 互換ルールで段階的に移行するのが安全(挙動差分が出るルールもあるため)。
  • 型の堅牢性を上げたい → Ruff や Flake8 は型チェックをしないため、Pylance(エディタ)や pyright / mypy(CI)を別途組み合わせる。
  • エディタでの快適さが目的 → Pylance は CLI で完結する他のツールと違い、エディタに常駐して補完・ジャンプ・ホバー情報を提供するもので、CI 用の Lint とは目的が異なる。CI には Ruff や mypy を別途組み込む。

まとめ

「フォーマットと大半の Lint は Ruff 一本化」「型チェックは Pylance(エディタ)+ mypy/pyright(CI)」という組み合わせが、2026年時点でのシンプルかつ高速な標準構成になっています。