開発を効率化するPython自動整形ツール:flake8とBlack
はじめに
定年退職後の備忘録としてまとめたものです。
Pythonのスタイルガイド(PEP 8)を手作業で守るのは大変です。そこで、コーディング規約のチェックやコードの自動整形を行ってくれる便利なツールが活躍します。ここでは、代表的なツールであるflake8とBlackの使い方を、簡単な例を交えながら紹介します。
1. flake8:スタイルガイドのチェックツール
flake8は、あなたの書いたコードがPEP 8に準拠しているかをチェックしてくれるツールです。コードを修正する機能はなく、どこがルール違反しているかを教えてくれます。
インストール方法
pip install flake8
使い方
以下の内容をexample.pyとして保存します。あえてPEP 8に違反したコードにしています。
example.py
def my_func( a, b ):
x=a+b
return x
コマンドラインで以下のコマンドを実行します。
flake8 example.py
実行結果は以下のようになります。
example.py:1:14: E231 missing whitespace after ','
example.py:1:15: W292 no newline at end of file
example.py:2:5: E225 missing whitespace around operator
example.py:2:7: E225 missing whitespace around operator
-
example.py:1:14: E231:example.pyの1行目14文字目にE231というエラーがあることを示しています。 -
E231やE225は、PEP 8で定義されたエラーコードです。これらのコードを検索することで、どのルールに違反しているか詳細がわかります。
2. Black:妥協なきコードフォーマッター
Blackは、コードのフォーマットを自動で修正してくれるツールです。PEP 8などのルールに従い、統一されたスタイルに自動整形します。Blackは、設定項目がほとんどなく、「妥協なきフォーマッター」と呼ばれるほど、開発者の好みに左右されず、一貫したスタイルを適用します。
インストール方法
pip install black
使い方
先ほど使用したexample.pyをBlackで整形してみましょう。
example.py (整形前)
def my_func( a, b ):
x=a+b
return x
コマンドラインで以下のコマンドを実行します。
black example.py
Blackはファイルを直接上書きします。example.pyの中身が以下のようになります。
example.py (整形後)
def my_func(a, b):
x = a + b
return x
- 引数リストの空白や演算子の周りの空白が自動で修正されました。
-
Blackはコードの構文を解析して整形するため、単純な置換ツールよりも賢く動作します。
まとめ:どちらを使うべきか?
-
flake8:コードレビューやCI/CDパイプラインで、コーディング規約に違反している箇所を検知したい場合に適しています。 -
Black:日常的な開発で、手作業で整形する手間をなくし、常に統一されたコードスタイルを保ちたい場合に適しています。
両者は併用することが多いです。開発者はBlackでコードを整形し、CI/CDでflake8を使って、Blackがカバーしきれないルール違反(未使用の変数など)をチェックするというワークフローが一般的です。これらのツールを導入することで、スタイルに関する議論の時間を減らし、本質的な開発に集中できるようになります。