💈

Python のフォーマッターに Ruff を使うべき根拠

に公開

特別な理由がない限り、Python コードのフォーマッターは Ruff を使用することをお奨めします

  • Black とほぼ同一の出力を生成するように設計されており、次のような Black の利点を引き継いでいるため:
    • フォーマッターのカスタマイズで揉めないため
    • 誰が書いても同じコードになりやすいため
  • Black, isort と比較して次の点で優れているため:
    • Black, isort のコードスタイルを、様々なリンターの指摘を受けることがなくなるよう改善しているため
    • Black, isort よりも高速に動作するため

Python の 3 大主要フォーマッター比較

フォーマッター GitHub Star (2025-05-02 時点)
autopep8 4612
yapf 13892
Black 40240

Black が他のフォーマッターよりも選ばれた理由

  • Black はカスタマイズは 1 行あたりの文字数程度しか許可されていません
    • 「カスタマイズができない」ということが評価されて、
      カスタマイズができる yapf などより支持され勢いがあります
  • 参考: Python開発を円滑に進めるためのツール設定 Part.1 | ログミーBusiness
    • autopep8yapf は、
      「自分的にはここの引数は全部縦に並べておきたい」とやっておいたときに、
      縦に並べたままにしてくれるのですが、
      blackは行の長さに引っかからないかぎり問答無用で全部横に並べます

autopep8

hhatto/autopep8: A tool that automatically formats Python code to conform to the PEP 8 style guide.

  • 日本人のフリーランスの方が開発されたフォーマッター
  • PEP 8 に準拠することを目的とします

yapf

google/yapf: A formatter for Python files

  • Google 製フォーマッター
  • 自由度が高いカスタマイズが可能

Black

Ruff

BlackRuff の違い

インポートのソートも Ruff を使用することをお奨めします

RuffBlack と同様に:

  • isort についても置き換えることを目標に開発されています:
  • インポートのソートのスタイルを意図的に改善しています
    • Black のフォーマットスタイルとの互換性は保たれています

isort

  • インポートをアルファベット順にソートし、自動的にセクションとタイプに分割します
  • Black のフォーマットスタイルと互換性を持つように設定することができます

isortRuff の違い

次の記事にまとまっています:
- How does Ruff's import sorting compare to isort? | FAQ | Ruff

Discussion