はじめに
pythonのツール「Flake8」について特徴や機能などの基本を理解したいと思い、「Flake8」について調べてみました。
開発環境
・WSL2/Ubuntu環境
・Python: 3.10.12
Flake8とは
以下は「Flake8」のGithubのREADMEより引用
Flake8 is a wrapper around these tools:
・PyFlakes
・pycodestyle
・Ned Batchelder's McCabe script
Flake8は「PyFlakes」と「pycodestyle」と「Ned Batchelder's McCabe script」の3つのツールのラッパーです。
PyFlakes
Pythonプログラムのエラーをチェックするプログラムです。
PyFlakesは設計方針として、Pylintよりも高速に動作することを挙げています。
PyFlakesを実際に以下のtkinterを使用したサンプルプログラムに適用してみました。
その結果もあわせて記載します。
import tkinter as tk
from tkinter import filedialog, Text
# Function to save file
def Sample_SaveFunc(event=None):
local_notuse = "Not use"
print("Save_Sample")
# configure root
root = tk.Tk()
root.title("pyflakes_sample")
root.geometry("800x600")
# configure text
text = Text(root, wrap="word", undo=True)
text.pack(fill="both", expand=True)
# configure key-bind
root.bind("<Control-s>", Sample_SaveFunc)
root.bind("<Control-S>", Sample_SaveFunc)
# display window
root.mainloop()
PyflakesSample.py:2:1: 'tkinter.filedialog' imported but unused
PyflakesSample.py:6:5: local variable 'local_notuse' is assigned to but never used
「使用されていないインポート文の検出」や「使用していないローカル変数の検出」も実施していることを確認できました。
pycodestyle
PEP8のスタイル規則に照らし合わせて、Pythonプログラムをチェックするツールです。
以下pypiのサイト内で「使用例と出力」の章がありますが、この章にてE201:「 ( の後ろに空白がある場合に発生する警告」や E221:「演算子の前に複数の空白が存在する警告」などPEP8に沿ったコーディングであるかをチェックしていることが確認できました。
Ned Batchelder's McCabe script
McCabe の複雑性をチェックするスクリプトです。
Pyflakesの箇所で紹介したサンプルプログラム:PyflakesSample.pyに対して、以下コマンドを実行することでMcCabe の複雑性を確認してみます。
python -m mccabe PyflakesSample.py
5:0: 'Sample_SaveFunc' 1
Sample_SaveFunc関数のMcCabe複雑度が1であることを示しています。
本スクリプトでMcCabe複雑度をチェックしていることを確認できました。
おわりに
Flake8は、「PyFlakes」と「pycodestyle」と「Ned Batchelder's McCabe script」のラッパーであり、それぞれ「Pythonプログラムのエラーをチェック」、「PEP8のスタイル規則に沿っているかをチェック」、「McCabe複雑度をチェック」しているツールであることがわかりました。本記事の内容が少しでも何かの役に立てば幸いです。
参考文献