Flake8 から Ruff への移行
はじめに
Python の静的解析ツールとして長年利用されてきた Flake8
ですが Ruff
へ移行することで、圧倒的な処理速度と多機能な Linter & Formatter の恩恵を受けることができます。
本記事では、Flake8 から Ruff へ移行するメリットや移行方法を紹介します。
Flake8 との比較
Flake8 の特徴と制限
Flake8
は、Python の Linter(静的解析ツール)として広く使われています。しかし、以下のような制限があります。
- Lint 機能のみ(コード整形や import の自動整理はできない)
-
複数のプラグインを追加しないと機能が不足する(
isort
,black
などと組み合わせが必要) - 処理速度が遅い(特に大規模なプロジェクトでの実行時間が長い)
Ruff の特徴
Ruff
は Rust で実装された超高速な Linter & Formatter です。Flake8 と比べて以下のようなメリットがあります。
- 圧倒的な速度(Flake8 の 10~100 倍速)
- Linter + Formatter + import 順の整理が 1 つで完結
- Flake8 のプラグイン機能を標準でカバー
pyproject.toml
に設定を統一可能
Ruff の導入手順
1. インストール
まず、Ruff をインストールします。
pip install ruff
2. Flake8 の代わりに Ruff を使用する
Flake8 を使用していた場合、以下のように Ruff に置き換えます。
# Flake8
flake8 .
# Ruff(Linter)
ruff check .
Ruff はデフォルトで Flake8 のルールセットをカバーしているため、基本的に ruff check
を実行するだけで同様の Lint 結果が得られます。
Ruff の使い方
1. コードの静的解析(Lint)
ruff check .
2. 自動修正
ruff check --fix .
3. コードフォーマット
Ruff は black
のようにコードの整形も可能です。
ruff format .
4. Import の自動整理
Ruff は isort
のように import 文の順番も整理できます。
ruff check --select I --fix .
VSCode で Ruff を使う
Ruff を VSCode のフォーマッターとして設定すると、保存時に自動整形できます。
settings.json
に設定を追加
1. {
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnSave": true
}
2. Python のフォーマッターとして Ruff を明示
{
"python.formatting.provider": "none",
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnSave": true
}
これで、保存時に ruff format
が実行されるようになります。
.flake8
から pyproject.toml
への移行
Flake8 の設定を pyproject.toml
に統合することで、より管理しやすくなります。
[lint]
line-length = 88
select = ["E", "F", "I"] # Flake8 互換のルールを適用
fix = true # 自動修正を有効化
これにより、Flake8 の .flake8
や setup.cfg
なしで Ruff の設定を一元管理できます。
Flake8 とのパフォーマンス比較
実際に Ruff の速さを体感してみましょう。
time flake8 .
time ruff check .
大規模プロジェクトで比較すると、Flake8 より Ruff の方が 10 倍以上高速なことが分かります。
まとめ
- Flake8 から Ruff に移行すると、Lint・フォーマット・import 整理が 1 つで完結!
- Flake8 + isort + black の代替として Ruff を使うと管理が楽になる!
- VSCode でも Ruff を設定すれば保存時に自動整形できる!
- 圧倒的な処理速度で開発のストレスを軽減!
今後のプロジェクトでは、Ruff への移行を検討してみてはいかがでしょうか? 🚀
Discussion