要約: Flake8 + Black + isort はもうすべて Ruff だけで置き換えられる。
PythonのLinterとして、すでに Ruff を使われている方も多いと思います。Ruffは Rust で実装された高速なPython用Linterで、従来よく使われていた Flake8 に比べて数十倍短い時間で処理が終わるほか、Flake8の主要なプラグインの代替も初めから搭載されています(Lintルール一覧)。
その成功が約束されている(?)ためか、Ruff の知名度がまだ低いころから GitHub Actions公式のPythonチュートリアルは早々に Flake8 を Ruff に置き換えていました。
そして、2023年10月末にリリースされた v0.1.2 あたりから、ついにLintだけでなく、コードフォーマット(コード整形)の機能も正式に搭載されました。公式のブログ記事はこちら:
Pythonのコード整形といえば今までは Black が主流でした。その代替を目指す Ruff のフォーマット機能は Black よりも30倍以上高速で(画像は公式ブログから引用)、Black と 99.9% 以上の互換性があると謳っています。
速度の面だけでなく、従来よく使われてきた Flake8, Black, isort という別々のツールがすべて Ruff ひとつだけで済むようになるのも嬉しいポイントでしょう。
- (Linter) Flake8 → Ruff !!!
- (Formatter) Black → Ruff !!!
- (import sorting) isort → Ruff !!!
VS Code の設定
明示的にフォーマッタとして Ruff を使うようにするには、設定ファイルを以下のように書き換えればOKです。Ruff の拡張機能を入れておくことをお忘れなく。
"[python]": {
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnType": true,
// ...
}
Flake8やisort用の拡張機能は、もし入っていたら、できれば削除してしまいましょう。
また、他のエディタをお使いの方には ruff-lsp があります。
コマンドラインで実行
新たに、コードフォーマットのための format
コマンドが増えました。
# formatter を実行
ruff format .
# linter を実行
ruff check . --fix
(おまけ) GitHub Actions の設定
これは linter の話ではありますが、 ruff check
に --output-format=github
を付けると、LintエラーをGitHubのインラインアノテーションにしてくれます。
- name: Run Ruff (lint)
run: ruff check --output-format=github .
- name: Run Ruff (format)
run: ruff format . --check --diff
pyproject.toml
フォーマット機能に関しては、特に設定なしでBlackと同じ挙動を目指そうとしてくれます。
なお過去のRuffの pyproject.toml
での設定は現状そのままでも動作しますが、今後は lint の設定と format の設定を分けて記述するようになっています。詳細は公式ドキュメント (https://docs.astral.sh/ruff/configuration/) を参照してください。
[tool.ruff]
# ...
[tool.ruff.lint]
# ...
[tool.ruff.format]
# ...
[tool.ruff.lint.isort]
# ...