フォーマッター/リンターしたい(ruff
)
$ ruff --version
ruff 0.6.1
$ ruff format
$ ruff check
$ ruff check --statistics
ruff
はRustで書かれたPython用のリンター&フォーマッタです。
これまでblack
、isort
、flake8
を組み合わせてできたことをすべて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ツールなのでpipx
やuv 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
select
やignore
で設定できるカテゴリ記号は公式ドキュメントの「ルール」に書いてあります。
どんなものがあるかなと思って書き写してみたら、なんと58種類もありました。
E
,W
:pycodestyle
F
:Pyflakes
C90
:mccabe
I
:isort
N
:pep8-naming
D
:pydocstyle
UP
:pyupgrade
YTT
:flake8-2020
ANN
:flake8-annotations
ASYNC
:flake8-async
TRIO
:flake8-trio
S
:flake8-bandit
BLE
:flake8-blind-except
FBT
:flake8-boolean-tra
B
:flake8-bugbear
A
:flake8-builtins
COM
:flake8-commas
CPY
:flake8-copyright
C4
:flake8-comprehensions
DTZ
:flake8-datetimez
T10
:flake8-debugger
DJ
:flake8-django
EM
:flake8-errmsg
EXE
:flake8-executable
FA
:flake8-future-annotations
ISC
:flake8-implicit-str-concat
ICN
:flake8-import-conventions
G
:flake8-logging-format
INP
:flake8-no-pep420
PIE
:flake8-pie
T20
:flake8-print
PYI
:flake8-pyi
PT
:flake8-pytest-style
Q
:flake8-quotes
RSE
:flake8-raise
RET
:flake8-return
SLF
:flake8-self
SLT
:flake8-slots
SIM
:flake8-simplify
TID
:flake8-tidy-imports
TCH
:flake8-type-checking
INT
:flake8-gettext
ARG
:flake8-unused-arguments
PTH
:flake8-use-pathlib
TD
:flake8-todos
FIX
:flake8-fixme
ERA
:eradicate
PD
:pandas-vet
PGH
:pygrep-hooks
PL
:pylint
TRY
:tryceratops
FLY
:flynt
NPY
: NumPy-specific rulesAIR
:Airflow
PERF
:Perflint
FURB
:refurb
LOG
:flake8-logging
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 .
が実行されます。
ファイルは修正されます。