今回はPythonでコーディング規約に従うように自動整形したり静的解析するライブラリについてです。
目次
そもそも静的解析って?
静的解析とは、コードを実行せずに解析を行うことです。
不要なコードだったりコーディング規約に従ってない個所を自動で検出してくれます。
利点は以下のようなものです。チーム開発だと効果がより大きいです。
- ツール/ライブラリで不要なコードなどをはじいてくれるのでコードレビューの負担が減る
- コーディング規約に則ったコードになるため可読性や保守性が向上する
使用するライブラリ
flake8
Pythonのコードを解析して良くないところを表示してくれるライブラリです。
以下のような項目をチェックしてくれます。gitと連携することもできます。
- 不要なimportや変数などがないか
- Pythonのコーディング規約であるPEP8に準拠しているか
- 循環的複雑度が高くないか
循環的複雑度については以下のページを参照。
https://docs.roguewave.com/jp/klocwork/current/mccabecyclomaticcomplexity
black
PEP8に合うように自動でコードを修正してくれるライブラリです。
ライブラリのインストール
pipで入れるだけです。
pip install flake8 black
コマンド実行
まずはflake8。以下のコマンドを実行すると引っかかったところがコンソール上に表示されます。
max-line-lengthは1行何文字以上で警告出すか、max-complexityは循環的複雑度がいくつ以上で警告出すかを設定できます。
flake8のオプションについて詳しくはこちらを参照。
https://flake8.pycqa.org/en/latest/user/options.html
flake8 app --show-source --max-complexity 5 --max-line-length 120
次にblack。以下のコマンドを実行すると自動修正されて、修正された箇所がコンソールに表示されます。
line-lengthはflake8のmax-line-lengthと同じ意味です。
blackのオプションについて詳しくはこちらを参照。
black app --line-length 120
gitとflake8を連携する
git管理しているディレクトリで、以下のコマンドを実行するとcommit時にflake8を実行してくれます。
1か所でも引っかかったらcommitが通らないようにします。
flake8 --install-hook git
git config --bool flake8.strict true
また、これだと実行時にオプションが指定できません。設定ファイルを置いておくとオプションが適用できます。
.flake8という名前のファイルを用意し、Windowsなら~/.flake8、それ以外なら~/.config/.flake8という感じで置いておくとオプションが適用されます。
中身はこんな感じで、オプション名 = 値 という形式です。
[flake8]
max-line-length = 120
max-complexity = 5