Ruff
について紹介します。Ruff
はRust製のPythonコードフォーマッターです。Rust製ですが、Python向けツールとなります。Ruff
です。Flake8
のような)既存linterや(Black
のような)既存フォーマッターより10~100倍高速pip
でインストール可能pyproject.toml
サポートFlake8
、isort
、Black
と共存可能import
の削除など)自動エラー修正ruff-lsp
によるもの)pip
でインストールできます。$ pip install ruff
$ ruff --version
ruff 0.1.3
import datetime as dt
def hello_world():
print("Hello world!")
ruff check ファイル名
でコードの検査ができます。ファイル名
を.
にすることで、カレントディレクトリを起点に検査可能です。$ ruff check .
datetime
モジュールがあることを報告しています。wrong.py:1:20: F401 [*] `datetime` imported but unused
Found 1 error.
[*] 1 fixable with the `--fix` option.
--fix
オプションをつけることで、このコードを自動修正してくれます。$ ruff check --fix .
datetime
モジュールが取り除かれました。Ruff
はpyproject.toml
、ruff.toml
、または.ruff.toml
を親ディレクトリに設置することによってコード規約を設定可能です。pyproject.toml
をルートディレクトリに作ってみましょう。[tool.ruff]
line-length=79
[tool.ruff.lint]
extend-select = ["E501"]
def so_long_list():
l = ['Apple', 'Banana', 'Chocolate', 'Cookie', 'Peech', 'Orange', 'Cake', 'Pizza', 'Cheeze', 'Beer']
[print(i) for i in l]
$ ruff check .
wrong.py:2:5: E741 Ambiguous variable name: `l`
wrong.py:2:80: E501 Line too long (104 > 79)
Found 2 errors.
food_list
に修正します。def so_long_list():
food_list = ['Apple', 'Banana', 'Chocolate', 'Cookie', 'Peech', 'Orange', 'Cake', 'Pizza', 'Cheeze', 'Beer']
[print(food) for food in food_list]
format
コマンドによって、コードの整形が可能です。$ ruff format .
def so_long_list():
food_list = [
"Apple",
"Banana",
"Chocolate",
"Cookie",
"Peech",
"Orange",
"Cake",
"Pizza",
"Cheeze",
"Beer",
]
[print(food) for food in food_list]
Ruff
は高速でありつつ、多くの機能が含まれているので主要なコマンドとオプションを覚えておきましょう。コマンド | 説明 |
---|---|
$ ruff check [ファイルパス] | コードの分析を行う |
$ ruff rule [ルール名] | コード規約ルールの説明を表示 |
$ ruff clean | キャッシュクリア |
$ ruff format [ファイルパス] | コード整形を行う |
オプション | 説明 |
---|---|
ruff check --fix | 修正を適用 |
ruff check --watch | 監視モードでリアルタイム検査 |
ruff check --config [設定ファイルパス] | 設定ファイルを指定 |
ruff format --diff | 整形対象を表示 |
Ruff
の高速さが顕著になっていきます。Black
やFlake8
、isort
を取り入れているプロジェクトでも、Ruff
の導入は比較的安全なので、ぜひ検討してみてください。