Skip to content
Latchkey

Ruff vs Flake8: CIのPythonリンターにはどちらを選ぶ?

RuffはFlake8よりはるかに高速に動作するRustベースのリンターで、多くのプラグインのルールを取り込んでいます。

Flake8はpyflakes、pycodestyle、そしてプラグインをラップする、長年使われているPythonリンターです。Ruff(Astral製)はFlake8/プラグインの大量のルールを再実装したRustベースのリンターで、桁違いに高速に動作し、しばしば複数のツールを一度に置き換えます。

Flake8Ruff
実装PythonRust
速度遅い極めて速い
ルールのカバレッジコア + プラグイン多くのプラグインのルールを再実装
Autofixなしあり(多くのルール)
統合複数のツール/プラグイン1つのツールで多くのチェック

CIでは

Ruffは通常、Flake8がはるかに長い時間を要する大規模なPythonコードベースを1秒未満でlintでき、Flake8に加えて複数のプラグイン(isort、pyupgrade風のルールなど)を1つの高速なバイナリで置き換えられます。多くの問題をautofixもします。Flake8は依然として馴染みがあり安定しています。Ruffがまだ移植していないニッチなFlake8プラグインに依存している場合は、そのチェックを残しましょう。

移行の手間

有効にしているFlake8のプラグインをRuffのルールセットに対応付け、Ruffを--fix付きで1つのコミットで実行し、その後CIで強制しましょう。ほとんどの一般的なFlake8/プラグインのルールにはRuffの同等物があります。依存している特殊なプラグインがあれば確認しましょう。

結論

複数のツールを統合しautofixもする非常に高速なlintが欲しい: Ruff。RuffにないニッチなFlake8プラグインに依存している: そのチェックを残す(または両方を実行)。ほとんどのチームはlintの大部分をRuffに移します。

関連ガイド