Python – フォーマッター Ruff の使い方

概要

Python の linter・フォーマッターである Ruff の使い方について解説します。

インストール

Python のパッケージ・プロジェクト管理ライブラリ uv と合わせて使用することを推奨します。 まず、こちらの記事を参考にシステムに uv をインストールします。

Python – パッケージ管理ライブラリ uv の使い方を解説 | pystyle

プロジェクトの仮想環境に Ruff をインストールする場合

uv で作成したプロジェクトに ruff をインストールする場合、以下のコマンドを実行します。

# プロジェクトを作成
uv init --app myapp
cd myapp
# プロジェクトに Ruff を追加
uv add --dev ruff
Bash

グローバルに Ruff をインストールする場合

グローバルに ruff をインストールする場合、以下のコマンドを実行します。

uv tool install ruff@latest
Bash

基本的な使い方

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.
Bash

linter を実行し、指摘事項を自動で修正する

ruff check --fix で指摘事項を自動で修正できます。

$ ruff check --fix
Found 1 error (1 fixed, 0 remaining).
Bash

フォーマッターを実行し、自動整形する

ruff format で自動フォーマットを行えます。

$ ruff format
1 file reformatted, 1 file left unchanged
Bash

実行対象のファイルを指定

デフォルトでは、カレントディレクトリ以下のファイルが対象になりますが、 対象を特定のディレクトリまたはファイルに限定する場合、引数でパスを指定します。

# src/numbers/__init__.py が対象
ruff check src/numbers/__init__.py
Bash
# numbers ディレクトリ以下のファイルが対象
ruff check src/numbers
Bash

VSCode での使用

拡張をインストールすることで、VSCode のフォーマッターとして Ruff を使用できます。

  1. Ruff をインストールする
  2. 設定ファイルで Python のフォーマッターとして指定する

    {
      "[python]": {
        "editor.codeActionsOnSave": {
          "source.fixAll": "explicit",
          "source.organizeImports": "explicit"
        },
        "editor.defaultFormatter": "charliermarsh.ruff"
      }
    }
    JSON

linter の設定

uv init で作成したプロジェクトには、プロジェクトの設定ファイルを記述する pyproject.toml が存在します。 linter で有効にするルールを指定するには、pyproject.toml[tool.ruff.lint] セクションを追加します。

有効にする linter を指定する

Ruff では数多くの linter がサポートされており、select で有効にする linter をコードで指定します。

pyproject.toml
[tool.ruff.lint]
select = [
    # pycodestyle
    "E",
    # Pyflakes
    "F",
    # pyupgrade
    "UP",
    # flake8-bugbear
    "B",
    # flake8-simplify
    "SIM",
    # isort
    "I",
]
TOML

linter の一覧は以下のコマンドで確認できます。

ruff linter
Bash

各 linter を有効にした場合、どのようなルールが適用されるかは Rules | Ruff で確認します。

特定のルールを無効にする

プロジェクト全体で無効にする

特定のルールをプロジェクト全体で無効にしたい場合、ignore で無効にするルールのコードを指定します。

pyproject.toml
[tool.ruff.lint]
select = ["E", "F", "UP", "B", "SIM", "I"]
# ルール F401 を無効
ignore = ["F401"]
TOML

ルールのコードは Rules | Ruff で確認します。

特定のファイルでのみ無効にする

行の末尾に # noqa というコメントを記述すると、その行で指定したルールが無効になります。

# ルール F841 を無視
x = 1  # noqa: F841

# ルール E741 と F841 を無視
i = 1  # noqa: E741, F841

# すべてのルールを無視
x = 1  # noqa
Python

複数行の文字列の場合、最後の行の末尾にコメントを追加します。

"""Lorem ipsum dolor sit amet.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.
"""  # noqa: E501
Python

import 文の場合、import 文の末尾にコメントを追加します。すべての import 文に対して、ルールの無効化が適用されます。

import os  # noqa: I001
import abc
Python

ファイル全体でルールを無効にする場合、ファイルのいずれかの箇所 (通常は先頭) に以下のコメントを追加します。

# このファイルですべてのルールを無視する
# ruff: noqa
Python
# このファイルでルール F841 を無視する
# ruff: noqa: F841
Python

フォーマッターの設定

フォーマッター black 同様、細かい設定はできないようになっていますが、一部設定可能な項目があります。 設定の一覧は Settings | Ruff を参照してください。

pyproject.toml
[tool.ruff.format]
# docstring 内のコードブロックをフォーマットするかどうか
docstring-code-format = true
# ファイル名に generated を含むファイルはフォーマット対象から除外する
exclude = ["generated"]
TOML

コメント

コメントする