uokadaの見逃し三振は嫌いです

ここで述べられていることは私の個人的な意見に基づくものであり、私が所属する組織には一切の関係はありません。

blackをruffで置き換えてる - Replacement black with ruff

最近、プライベートなpythonプロジェクトでblackをruffで置き換えたのでそのメモ。

ここ数ヶ月の間にblackとruffを導入したんですが、ruff v0.1.2でformatterが導入されたのでblackへの置き換えを小さめなプロジェクトで実施しました。

astral.sh

blackとruff formatのdiff check/formatのコマンド体系はほぼ同じで機械的に置換しただけで動かすことが可能でした。

# 差分チェック
$ poetry run black           --check --diff  **/*.py

$ poetry run ruff format --check --diff **/*.py

----
# ファイルのフォーマット
$ poetry run black **/*.py

$ poetry run ruff format  **/*.py

ただ、設定でまだ移行出来ないものがあります。

自プロジェクトのblackの設定はあまりカスタマイズせずで設定で使っていました。

[tool.black]
target-version = ["py39"]
line-length = 120
skip-string-normalization = true

ですが、移行を検討開始した当初skip-string-normalization = true に相当する設定がまだ存在しませんでした。 issueは上がっていたのですが、議論が続いていて解決するまでruffへの移行のブロッカーとなっていました。 v0.1.18で quote-style = "preserve" が設定できるようになりました。これが入った事で、自分のプロジェクトではpyproject.tomlとCIの設定変更だけでblackを置き換えることが出来ました。

github.com

docs.astral.sh

ruffに置き換えたことで良かったこととしては、依存関係が減ったのが一つ。それと、パフォーマンスに関してはあんまり改善された実感はありません。自分は poetry run ruff で呼び出しているのでpoetryの処理のオーバーヘッドが体感できない一因かと思います。

ruffは開発のスピードが早いので自分がこのエントリーを数ヶ月放置しているあいだにバージョン0.3までリリースされていました。 2024年はrust製のツールがこれまで以上に流行っていくのでは無いかなと思っております。