
RuffとBlackを併用してコードの品質を上げるPython
PythonのLintツール・コードフォーマッタであるRuffとBlack
※Lintツールってなんぞや?はこの記事の最下部
なんかRuffが優秀やで!と聞いていたのでRuffだけあればよくない?って思っていたんだけど、なんか併用するといいよと聞いた。
併用するという発想がなかったのでそれぞれの違いを調べてみた
. RuffとBlackの役割の確認
1. Ruff
主にLintツールとしての役割を担いますが、部分的にコードフォーマッタとしての機能も持っている。
Lintツールとして:
未使用のインポートや変数の削除。
PEP 8準拠のスタイルチェック(例: カンマの後のスペース、行の長さなど)。
コードの潜在的なバグの検出。
コードフォーマッタとして:
Ruffの--fixオプションで、一部のスタイル修正や不要なコードの削除を「自動修正」できる。
ただし、修正可能な範囲は限定的。
2. Black
コードフォーマッタ特化型ツール。
すべてのコードをBlack流のスタイルに強制的に整形します。
インデント、行の長さ、文字列の引用符(デフォルトでダブルクォート)などを統一してくれる。
プログラムエラーや未使用インポートなどの問題は検出しません(Lint機能はない)。
準備
pip install ruff black
Ruffの基本操作
コードのLintチェック:
ruff check .
カレントディレクトリのすべてのファイルを静的解析します。
修正可能な箇所を自動修正
ruff check . --fix
Blackの基本操作
コード全体を整形:
black .
プロジェクト全体のコードを整形します。
ともに特定のファイルだけを指定することもできる
black your_file.py
流れとして
ruff check . --fix
black .
ruff check .
ってやると、修正→整形→再確認ってなって、コードの綺麗になる!
でも、毎回こんなコマンド打つのめんどくさい!ってときは
Makefileを使う。
手動で実行するのが面倒なら、Makefileやスクリプトを使って自動化
※Windowsならbatか?
例: Makefile
format:
ruff check . --fix
black .
ruff check .
実行するときに
make format
だけで全部実行できる!
おまけ byChatGPTその他
Lintツールとは?
Lintツールとは、コードを静的に解析して問題点を指摘するツールのことです。
静的解析: コードを実行せずに、プログラムの文法やスタイル、潜在的なバグをチェックします。
プログラミング言語に特有のスタイルガイド(例: PythonのPEP 8)やベストプラクティスを基に、コードが「正しく書かれているか」「改善すべき箇所がないか」を確認します。
Lintツールの役割
Lintツールは以下のような問題を検出・修正するために使用されます:
コーディングスタイルの違反
プロジェクトで定められたスタイルガイドに従っているかをチェックします。
例: インデントの深さ、スペースとタブの不一致、行の長さの超過。
文法エラー
明らかな文法エラーや、動作しない可能性が高いコードを指摘します。
例: 未定義の変数、構文ミス。
不要なコードやリソース
未使用の変数やインポートを検出します。
例: import os など使われていないインポート。
潜在的なバグの検出
実行時に問題を引き起こす可能性のあるコードを指摘します。
例: 未使用のローカル変数、定義されていない名前の使用。
ベストプラクティスの強制
コードが効率的で、読みやすく、保守可能であるかを確認します。