最近、プライベートなpythonプロジェクトでblackをruffで置き換えたのでそのメモ。
ここ数ヶ月の間にblackとruffを導入したんですが、ruff v0.1.2でformatterが導入されたのでblackへの置き換えを小さめなプロジェクトで実施しました。
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を置き換えることが出来ました。
ruffに置き換えたことで良かったこととしては、依存関係が減ったのが一つ。それと、パフォーマンスに関してはあんまり改善された実感はありません。自分は poetry run ruff
で呼び出しているのでpoetryの処理のオーバーヘッドが体感できない一因かと思います。
ruffは開発のスピードが早いので自分がこのエントリーを数ヶ月放置しているあいだにバージョン0.3までリリースされていました。 2024年はrust製のツールがこれまで以上に流行っていくのでは無いかなと思っております。