Skip to content
Latchkey

Flake8 vs Ruff:Python の linting の転換

Ruff は Flake8 のチェックの大半を Rust で再実装しており、はるかに高速に動作します。Flake8 は長い裾野を持つプラグインと使い慣れた点を保っています。

Flake8 は pyflakes、pycodestyle、そしてプラグインのエコシステムを束ねる、Python のデフォルト linter でした。Ruff はそれらと同じルールの多くを、単一のバイナリと 1 つの config で、はるかに高い速度でカバーします。

Flake8Ruff
言語PythonRust
速度大規模リポジトリでは遅い非常に速い
プラグイン大きなエコシステム多くのルールが組み込み、外部プラグインは少なめ
Configsetup.cfg / .flake8 / tox.inipyproject.toml [tool.ruff]
Autofixなし多くのルールで対応

Ruff が優れている点

Ruff ははるかに速く、多くの問題を autofix し、複数のツールを 1 つの config の背後に統合します。Flake8 のルールコードをマッピングしているため、移行はしばしば同等のルールセットを有効にするだけで済みます。ほとんどのコードベースでは、実際に使うチェックをカバーします。

Flake8 が優れている点

Flake8 は大きく成熟したプラグインのエコシステムを持っています。Ruff がまだ再実装していないニッチな Flake8 プラグインに依存しているなら、Flake8 の方が広い裾野を持ちます。長く安定した実績を評価するチームもあります。

移行

Flake8 の config を [tool.ruff] に移し、対応するルールファミリーを有効にして、CI のゲートを切り替える前に自分のコードベースで出力を比較しましょう。Ruff に同等物がない場合のみ、特定の Flake8 プラグインを残してください。

結論

ほとんどのプロジェクトでは、今や Ruff の方が優れたデフォルトです。より速く、autofix があり、config が 1 つで済みます。Ruff がまだカバーしていないプラグインのためだけに、Flake8 に留まる(または併用する)とよいでしょう。

関連ガイド