ruff の最小構成(flake8 / black / isort からの移行)

一言まとめ

ruff 一本で flake8・isort・black・pyupgrade を置き換えられる。select は E/F/I/UP、E501 は ignore にする。

作成 · 更新 · #python#ruff#lint
目次 2 sections
  1. 01 関連
  2. 02 更新履歴

ruff 一本で flake8(lint)、isort(import整列)、black(フォーマット)、pyupgrade(構文の近代化)を置き換えられます。

pyproject.toml の最小設定です。

[tool.ruff]
line-length = 88
[tool.ruff.lint]
select = ["E", "F", "I", "UP"]
ignore = ["E501"]

E/F が pycodestyle と pyflakes、I が isort、UP が pyupgrade に対応します。ルール群は接頭辞で選ぶ形なので、増やしたくなったら select に足します。

E をまとめて選ぶと E501(行長超過)まで入ります。フォーマッタは折り返しをベストエフォートでしか行いません。長い URL を含むコメントのように整形しても縮まらない行が残り、ruff format 済みのコードで E501 が出続けます。ruff 自身の既定が ["E4", "E7", "E9", "F"] と E501 を避けた形になっているのも同じ理由です。行長はフォーマッタに任せて ignore に入れておきます。

target-version は書いていません。[project] の requires-python があれば ruff がそこから解決するので、両方書くとズレる余地を作るだけです。

Terminal window
$ ruff check . --fix
$ ruff format .

移行は2段に分けると差分が読めます。まず ruff check で flake8 と isort を外す。ここは既存コードの指摘が出るだけで、整形は変わりません。それが落ち着いてから ruff format に切り替えて black を外します。ruff format は black の drop-in replacement をうたっていて、black 整形済みのコードなら99.9%以上の行が同じ結果になるとドキュメントにあります。ただし意図的な差異がいくつか残っているので差分はゼロにはならず、lint の修正と混ぜると読めなくなります。

関連#

更新履歴#

  • 2026-06-26: 初版(memos から移行)
  • 2026-10-09: 関連に pathlib 移行を追加
  • 2026-10-09: タイトルを概念名に揃え、tags を補う

同じトピック — Python