概要
Python の linter・フォーマッターである Ruff の使い方について解説します。
インストール
Python のパッケージ・プロジェクト管理ライブラリ uv と合わせて使用することを推奨します。 まず、こちらの記事を参考にシステムに uv をインストールします。
Python – パッケージ管理ライブラリ uv の使い方を解説 | pystyle
プロジェクトの仮想環境に Ruff をインストールする場合
uv
で作成したプロジェクトに ruff
をインストールする場合、以下のコマンドを実行します。
# プロジェクトを作成
uv init --app myapp
cd myapp
# プロジェクトに Ruff を追加
uv add --dev ruff
グローバルに Ruff をインストールする場合
グローバルに ruff
をインストールする場合、以下のコマンドを実行します。
uv tool install ruff@latest
基本的な使い方
linter を実行し、指摘事項を確認する
ruff check
で linter を実行し、指摘事項を確認できます。
$ ruff check
sample.py:3:8: F401 [*] `os` imported but unused
|
1 | from typing import Iterable
2 |
3 | import os
| ^^ F401
|
= help: Remove unused import: `os`
Found 1 error.
[*] 1 fixable with the `--fix` option.
linter を実行し、指摘事項を自動で修正する
ruff check --fix
で指摘事項を自動で修正できます。
$ ruff check --fix
Found 1 error (1 fixed, 0 remaining).
フォーマッターを実行し、自動整形する
ruff format
で自動フォーマットを行えます。
$ ruff format
1 file reformatted, 1 file left unchanged
実行対象のファイルを指定
デフォルトでは、カレントディレクトリ以下のファイルが対象になりますが、 対象を特定のディレクトリまたはファイルに限定する場合、引数でパスを指定します。
# src/numbers/__init__.py が対象
ruff check src/numbers/__init__.py
# numbers ディレクトリ以下のファイルが対象
ruff check src/numbers
VSCode での使用
拡張をインストールすることで、VSCode のフォーマッターとして Ruff を使用できます。
- Ruff をインストールする
設定ファイルで Python のフォーマッターとして指定する
{ "[python]": { "editor.codeActionsOnSave": { "source.fixAll": "explicit", "source.organizeImports": "explicit" }, "editor.defaultFormatter": "charliermarsh.ruff" } }
linter の設定
uv init
で作成したプロジェクトには、プロジェクトの設定ファイルを記述する pyproject.toml
が存在します。
linter で有効にするルールを指定するには、pyproject.toml
に [tool.ruff.lint]
セクションを追加します。
有効にする linter を指定する
Ruff では数多くの linter がサポートされており、select
で有効にする linter をコードで指定します。
[tool.ruff.lint]
select = [
# pycodestyle
"E",
# Pyflakes
"F",
# pyupgrade
"UP",
# flake8-bugbear
"B",
# flake8-simplify
"SIM",
# isort
"I",
]
linter の一覧は以下のコマンドで確認できます。
ruff linter
各 linter を有効にした場合、どのようなルールが適用されるかは Rules | Ruff で確認します。
特定のルールを無効にする
プロジェクト全体で無効にする
特定のルールをプロジェクト全体で無効にしたい場合、ignore
で無効にするルールのコードを指定します。
[tool.ruff.lint]
select = ["E", "F", "UP", "B", "SIM", "I"]
# ルール F401 を無効
ignore = ["F401"]
ルールのコードは Rules | Ruff で確認します。
特定のファイルでのみ無効にする
行の末尾に # noqa
というコメントを記述すると、その行で指定したルールが無効になります。
# ルール F841 を無視
x = 1 # noqa: F841
# ルール E741 と F841 を無視
i = 1 # noqa: E741, F841
# すべてのルールを無視
x = 1 # noqa
複数行の文字列の場合、最後の行の末尾にコメントを追加します。
"""Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.
""" # noqa: E501
import 文の場合、import 文の末尾にコメントを追加します。すべての import 文に対して、ルールの無効化が適用されます。
import os # noqa: I001
import abc
ファイル全体でルールを無効にする場合、ファイルのいずれかの箇所 (通常は先頭) に以下のコメントを追加します。
# このファイルですべてのルールを無視する
# ruff: noqa
# このファイルでルール F841 を無視する
# ruff: noqa: F841
フォーマッターの設定
フォーマッター black 同様、細かい設定はできないようになっていますが、一部設定可能な項目があります。 設定の一覧は Settings | Ruff を参照してください。
[tool.ruff.format]
# docstring 内のコードブロックをフォーマットするかどうか
docstring-code-format = true
# ファイル名に generated を含むファイルはフォーマット対象から除外する
exclude = ["generated"]
コメント