Skip to content
Latchkey

Ruff vs Black: CIのPythonフォーマッターにはどちらを選ぶ?

RuffのフォーマッターはBlack互換の出力を目指す高速なもので、同じバイナリでlintも行います。

Blackは広く採用されている、主張の強いPythonコードフォーマッターです。Ruff(Astral製)は、Blackとの高い互換性を目指して設計されたフォーマッターを含み、はるかに高速に動作し、Ruffのリンターと1つのツールに統合されています。

BlackRuff (format)
実装PythonRust
速度遅い非常に速い
Black互換性該当なし(基準そのもの)設計上高い
Lintingなし(フォーマットのみ)あり(lint + format)
採用状況広く普及急速に拡大中

CIでは

format --checkステップはpushのたびに実行されます。Ruffはこれを目に見えて高速化し、Blackに加えてリンターを1つのバイナリで置き換えられます。RuffのフォーマッターはBlack互換の出力を目指すため、ほとんどのコードベースでは切り替え時のフォーマットの差分はわずかです。Blackは依然として基準となるフォーマッターであり、最も幅広いエコシステムの馴染みとエディタサポートを持ちます。

移行の手間

小さな差分を吸収するため、ruff formatをリポジトリ全体に1つのコミットで実行し、その後CIで強制しましょう。出力は設計上Black互換なので、churnは通常低くなります。特定のツールやワークフローが明示的に必要とする場合のみBlackを残しましょう。

結論

Black互換の出力で高速なフォーマット(に加えてlint)を1つのツールで: Ruff。最大のエコシステムの馴染みを持つ基準となるフォーマッターが欲しい: Black。切り替えはchurnが少なく、1つのコミットで再フォーマットできます。

関連ガイド