🐍
異星のruff
なにこれ
Python用のツール。
以下の役割を担う。
- 静的解析
- フォーマッター
- リンター
- インポートソーター
なにが嬉しいの?
- 1個だけ入れればOKになる。
- プラグインの追加が不要。
- isortとかflake8とか不要。
- 動作が早い。
- Rustでできてる。
- ruff-lspという専用LSP内蔵。
- 自動修正機能搭載。
- エディタからもCLIからも修正可能。
- 設定しやすい。
- 既存のライブラリ(isortやflake8とか)のルールがそのまま使えると思ってOK
-
pyproject.toml
とかruff.toml
にルールを設定できる。
- 様々なエディタで利用可能。
- vscode
- vim
- emacs
- zed
- etc
引用
- ⚡️ (Flake8のような)既存のリンターや(Blackのような)フォーマッタよりも10-100倍高速
- 🐍 pip経由でインストール可能
- 🛠️ pyproject.tomlのサポート
- 🤝 Python 3.13との互換性
- ⚖️ Flake8、isort、Blackとのドロップインパリティ
- 📦 未変更ファイルの再分析を回避するためのキャッシュ機能内蔵
- 🔧 自動エラー修正(例えば、未使用のインポートを自動的に削除)のための修正サポート
- 📏 800以上の組み込みルール、 800 以上の組み込みルール。flake8-bugbear のような一般的な Flake8 プラグインをネイティブで再実装
- ⌨️ VS Code などのファーストパーティエディタとの統合
- 🌎 階層的でカスケード可能なコンフィギュレーションでモノレポフレンドリー。
設定方法は?
ruff
ではflake8
やblack
などデフォルトで有効になっているルールがある。
つまりデフォルトで無効になっているルールもある。
デフォルトで有効のものは上書きで設定することになり、デフォルトで無効になっているものは有効にする必要がある。
設定方法の例
- selectで有効、ignoreで無効
- FやIとすると関連するルールを全て設定できる。
- E501とすると特定のルールのみ指定することになる。
- ルールの適用をディレクトリやファイルで絞り込める。
pyproject.toml
[tool.ruff]
select = ["E502", "F", "I"]
ignore = ["E501", "F841"]
[tool.ruff.per-file-ignores]
"tests/*.py" = ["E501", "F841"]
設定例の引用
pyproject.toml
# Exclude a variety of commonly ignored directories.
exclude = [
".bzr",
".direnv",
".eggs",
".git",
".git-rewrite",
".hg",
".ipynb_checkpoints",
".mypy_cache",
".nox",
".pants.d",
".pyenv",
".pytest_cache",
".pytype",
".ruff_cache",
".svn",
".tox",
".venv",
".vscode",
"__pypackages__",
"_build",
"buck-out",
"build",
"dist",
"node_modules",
"site-packages",
"venv",
]
# Same as Black.
line-length = 88
indent-width = 4
# Assume Python 3.8
target-version = "py38"
[lint]
# Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default.
# Unlike Flake8, Ruff doesn't enable pycodestyle warnings (`W`) or
# McCabe complexity (`C901`) by default.
select = ["E4", "E7", "E9", "F"]
ignore = []
# Allow fix for all enabled rules (when `--fix`) is provided.
fixable = ["ALL"]
unfixable = []
# Allow unused variables when underscore-prefixed.
dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
[format]
# Like Black, use double quotes for strings.
quote-style = "double"
# Like Black, indent with spaces, rather than tabs.
indent-style = "space"
# Like Black, respect magic trailing commas.
skip-magic-trailing-comma = false
# Like Black, automatically detect the appropriate line ending.
line-ending = "auto"
# Enable auto-formatting of code examples in docstrings. Markdown,
# reStructuredText code/literal blocks and doctests are all supported.
#
# This is currently disabled by default, but it is planned for this
# to be opt-out in the future.
docstring-code-format = false
# Set the line length limit used when formatting code snippets in
# docstrings.
#
# This only has an effect when the `docstring-code-format` setting is
# enabled.
docstring-code-line-length = "dynamic"
本家
設定
ルール
設定方法
VScodeプラグイン
使い方
# checkの後にPATHを指定できる。省略すると全てが範囲に指定される。
ruff check
# --fixで修正できる。
ruff check --fix
Discussion