Ruff vs Flake8: CIのPythonリンターにはどちらを選ぶ?
RuffはFlake8よりはるかに高速に動作するRustベースのリンターで、多くのプラグインのルールを取り込んでいます。
Flake8はpyflakes、pycodestyle、そしてプラグインをラップする、長年使われているPythonリンターです。Ruff(Astral製)はFlake8/プラグインの大量のルールを再実装したRustベースのリンターで、桁違いに高速に動作し、しばしば複数のツールを一度に置き換えます。
| Flake8 | Ruff | |
|---|---|---|
| 実装 | Python | Rust |
| 速度 | 遅い | 極めて速い |
| ルールのカバレッジ | コア + プラグイン | 多くのプラグインのルールを再実装 |
| 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に移します。
関連ガイド
Ruff vs Black: Which Python Formatter for CI?Ruff vs Black for Python CI: formatter speed, compatibility, and all-in-one tooling. Which formatter keeps yo…
mypy vs Pyright: Which Python Type Checker for CI?mypy vs Pyright for Python CI: speed, strictness, editor integration, and inference. Which static type checke…
How to Speed Up GitHub Actions: 9 High-Impact TacticsMake GitHub Actions faster: caching, parallelization, test splitting, Docker layer caching, slimmer images, a…