Ruff: Flake8に代わる静的解析ツール
最近話題になっている(?)Ruffについて、備忘録用に簡単にまとめてみました。
そもそも静的解析ツールとは
静的解析とは実行せずにコード検証をおこなうことで、コーディング規約(PEP8)に従っているかなどをチェックしてくれます。ちなみに、静的解析ツールはLinterとも呼ばれます。
Pythonの静的解析ツールとして有名なのが、flake8です。
flake8とは
上記の通り、Pythonの静的解析ツールです。pipで簡単にインストール可能です。
筆者の場合は、VSCodeのsettings.jsonに以下を追加し、flake8の設定をしています。
{
...,
// linter (flake8)
"python.linting.enabled": true,
"python.linting.lintOnSave": true,
"python.linting.pylintEnabled": false,
"python.linting.flake8Enabled": true,
"python.linting.flake8Args": [
"--max-line-length=120",
"--ignore=E203,W503,W504",
],
// formatter (black)
"python.formatting.provider": "black",
"python.formatting.blackArgs": [
"--line-length=120",
],
...
}
flake8はPythonの自動整形ツールであるblackと併用することが一般的です。
Ruffとは
さて、やっと本題のRuffについてです。Ruffは簡単にいうと、Pythonの静的解析ツールで、Rust製で非常に高速なのが特徴です。
個人的に大きな利点だと感じたのは、pyproject.toml
で設定可能な点です。flake8はpyproject.toml
に対応していないため、別途wrapper(pyproject-flake8)の導入が必要でした。
使い方
基本的には、ruff check .
を実行するだけです。(.
の部分は特定のディレクトリやファイルのパスでもok)
例えば、以下のようなコードがあった場合、次のようなエラーが発生します。
import os
def sample() -> str:
return "これはsampleです."
❯ ruff .
src/sample.py:1:8: F401 [*] `os` imported but unused
Found 1 error.
[*] 1 potentially fixable with the --fix option.
ただし、筆者の場合、コマンドを使用するのはCI実行時くらいです。基本的にはVSCode拡張機能であるPylanceで、エラー部分をチェックしています。
pyproject.toml
基本的にはデフォルトの設定のまま使用しています。行の長さだけ120を指定しています。
[tool.ruff]
line-length = 120
settings.json (VSCode)
筆者の場合、flake8の設定を消し、ruffの設定は特に追加していません。
おわりに
Pythonの静的解析ツールであるRuffについてまとめてみました。
今回は備忘録用なため、細かい説明や使い方を省いているのでご容赦ください。
Discussion