フォーマッター/リンターしたい(ruff

$ ruff --version
ruff 0.6.1

$ ruff format
$ ruff check
$ ruff check --statistics

ruffはRustで書かれたPython用のリンター&フォーマッタです。 これまでblackisortflake8を組み合わせてできたことをすべてruffに集約できます。 pyproject.tomlに設定を記述できるため、既存のPythonプロジェクトにも導入しやすいです。

注釈

Pythonのリンター&フォーマッタの変遷は闇が深そうです。 時代とともにベストプラクティスが移り変わっている感じで、 これを使っておけばOKみたいな標準的なモジュールが存在しませんでした。 ruffは、そのような悩みを解決してくれるツールです。

インストールしたい(ruff

// グローバルに追加
$ pipx install ruff
// プロジェクトに追加(dev)
$ poetry add ruff --group=dev
// プロジェクトに追加する場合(dev)
$ uv add ruff --group dev

// グローバルに追加
$ uv tool install ruff

ruffはCLIツールなのでpipxuv toolなのでグローバルにインストールできます。 プロジェクトに追加する場合は --group dev オプションで追加するとよいです。

フォーマットしたい(ruff format

$ ruff format
$ ruff format --check
$ ruff format --diff
$ ruff format ファイル名

formatコマンドでフォーマッターとして利用できます。 引数にファイル名を指定したり、確認したいディレクトリでruff format .を指定して実行します。

1[tool.ruff]
2line-length = 100
3
4[tool.ruff.format]
5quote-style = "double"

リンターしたい(ruff check

$ ruff check .
$ ruff check ファイル名

ruff checkコマンドでリンターを実行します。 引数にファイル名やディレクトリを指定できます。 ruff check .でプロジェクト内のすべての該当するファイルを指定できます。

$ ruff check --show-fixes
$ ruff check --fix

--show-fixesで修正が必要な箇所を表示します。 --fixで軽微な修正を自動修正できます。 修正された箇所はターミナルに出力されます。

$ ruff check ファイル名 --select カテゴリ記号
$ ruff check . --select ALL
$ ruff check . --select E F W I D

--selectオプションを使って、チェックしたいカテゴリーやエラー番号などを指定できます。

$ ruff check --statistics
$ ruff check --statistics --select ALL

--statisticsオプションと--select ALLを使って、 どのルールを有効にすればよいか確認できます。

ルールを確認したい(ruff rule

$ ruff rule ルールID

selectignoreで設定できるカテゴリ記号は公式ドキュメントの「ルール」に書いてあります。 どんなものがあるかなと思って書き写してみたら、なんと58種類もありました。

  1. E, W: pycodestyle

  2. F: Pyflakes

  3. C90: mccabe

  4. I: isort

  5. N: pep8-naming

  6. D: pydocstyle

  7. UP: pyupgrade

  8. YTT: flake8-2020

  9. ANN: flake8-annotations

  10. ASYNC: flake8-async

  11. TRIO: flake8-trio

  12. S: flake8-bandit

  13. BLE: flake8-blind-except

  14. FBT: flake8-boolean-tra

  15. B: flake8-bugbear

  16. A: flake8-builtins

  17. COM: flake8-commas

  18. CPY: flake8-copyright

  19. C4: flake8-comprehensions

  20. DTZ: flake8-datetimez

  21. T10: flake8-debugger

  22. DJ: flake8-django

  23. EM: flake8-errmsg

  24. EXE: flake8-executable

  25. FA: flake8-future-annotations

  26. ISC: flake8-implicit-str-concat

  27. ICN: flake8-import-conventions

  28. G: flake8-logging-format

  29. INP: flake8-no-pep420

  30. PIE: flake8-pie

  31. T20: flake8-print

  32. PYI: flake8-pyi

  33. PT: flake8-pytest-style

  34. Q: flake8-quotes

  35. RSE: flake8-raise

  36. RET: flake8-return

  37. SLF: flake8-self

  38. SLT: flake8-slots

  39. SIM: flake8-simplify

  40. TID: flake8-tidy-imports

  41. TCH: flake8-type-checking

  42. INT: flake8-gettext

  43. ARG: flake8-unused-arguments

  44. PTH: flake8-use-pathlib

  45. TD: flake8-todos

  46. FIX: flake8-fixme

  47. ERA: eradicate

  48. PD: pandas-vet

  49. PGH: pygrep-hooks

  50. PL: pylint

  51. TRY: tryceratops

  52. FLY: flynt

  53. NPY: NumPy-specific rules

  54. AIR: Airflow

  55. PERF: Perflint

  56. FURB: refurb

  57. LOG: flake8-logging

  58. RUF: Ruff-specific rules

コミットフックしたい(ruff-pre-commit

repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
  rev: v0.6.7
  hooks:
  # ruff check
  - id: ruff
  # ruff format
  - id: ruff-format

ruff用のフックがあるので、pre-commitと連携させることができます。

id: ruffを有効にすると ruff check .が実行されます。 ファイルは修正されません。

id: ruff-formatを有効にすると ruff format .が実行されます。 ファイルは修正されます。

リファレンス