Python / Package / flake8:コード検査の導入と使い方
Flake8はPythonコードを実行せず、スタイル上の問題や未使用のimportなどを調べる静的解析ツールです。プロジェクト環境に導入し、python -m flake8 ファイル名.pyで検査して、表示された位置と診断コードを基に修正します。すべてのPEPへの準拠を検証したり、自動でコードを直したりするものではありません。
PEP・PEP 8とFlake8の関係
PEPはPython Enhancement Proposalの略で、Pythonの機能・手続き・設計などを提案、説明する文書です。PEPの文書体系のうち、PEP 8はコードスタイルを扱います。スタイル検査と、すべての提案文書の検証を混同しないようにします。
Flake8はpycodestyleのスタイル検査、Pyflakesの静的解析、mccabeの複雑度検査を統合します。複雑度の検査には--max-complexityなどの基準設定が必要です。E・W系は主にスタイル、F系はPyflakesの診断です。プラグインで検査やコードを追加できますが、型検査やテストの代わりにはなりません。
プロジェクト環境にインストールする
Windows PowerShellで新しい練習用フォルダーを開きます。PythonとWindowsのpyランチャーが必要です。同名の仮想環境が既にあるプロジェクトでは、作り直さず既存環境の実行ファイルを選びます。実行ファイルを直接指定するため、アクティベーション用スクリプトの実行ポリシーを変更する必要はありません。
py -3 -m venv .venv
.\.venv\Scripts\python.exe -m pip install "flake8==7.4.1"
.\.venv\Scripts\python.exe -m flake8 --version
Flake8 7.4.1はPython 3.10以降が必要です。ここでのコマンドと診断はWindows・Python 3.12.14・Flake8 7.4.1で確認しました。バージョン固定は結果を再現するためで、別バージョンではPython要件や診断の変更も確認します。最後のコマンドでFlake8と構成ツールのバージョンが表示されます。
macOS・Linuxでは利用可能なPython 3で仮想環境を作成し、.venv/bin/pythonからpipとFlake8を実行します。Windowsのパスはそのまま使いません。モジュールとして実行する方法は、インストール先と検査に使うPythonの食い違いを防ぐのに役立ちます。
診断の位置とコードを読む
プロジェクトにbad.pyを作り、次のコード全体を保存します。最終行の末尾にも改行を入れます。環境のPythonで実行すると1が表示されます。
import os
value=1
print(value)
1
正常に動作しても、不要なコードやスタイルの問題は残ることがあります。同じフォルダーで検査します。
.\.venv\Scripts\python.exe -m flake8 bad.py
bad.py:1:1: F401 'os' imported but unused
bad.py:2:6: E225 missing whitespace around operator
形式はファイル:行:列: コード 説明です。F401は1行目のosが未使用、E225は2行6列の代入演算子の周囲に空白がないことを示します。違反が見つかったため、このコマンドの終了コードは1です。Flake8の診断コードと対応するツールの説明で原因を確認します。
修正して再検査する
未使用のimportを削除し、代入演算子の両側に空白を入れます。別ファイルを作らず、既存のbad.py全体を以下に置き換えて保存します。実行結果は引き続き1です。
value = 1
print(value)
1
同じファイルを再検査します。--countは検出件数を最後に表示します。
.\.venv\Scripts\python.exe -m flake8 --count bad.py
0
この例は診断0件、終了コード0で通過します。--countなしでは、問題がなければ通常は診断が出ません。Flake8は自動修正しないので、エディターで修正・保存した後に再検査します。実行結果と検査結果は別々に確認してください。
.flake8で共通ルールを設定する
プロジェクトのルートに.flake8を作ります。次はPythonではなくINI形式です。88文字はプロジェクト方針の例です。Flake8の既定の最大行長は79であり、88がPEP 8の新しい既定値になったわけではありません。
[flake8]
max-line-length = 88
extend-exclude = .venv,build,dist
extend-excludeは既定の除外を保ちながら仮想環境やビルド出力を追加します。検査すべきソースまで除外しないか確認します。設定ファイルを明示して修正済みファイルを検査します。
.\.venv\Scripts\python.exe -m flake8 --config .flake8 --count bad.py
0
これも0件で通過します。最後のbad.pyを.に変えるとプロジェクト全体を検査します。他のファイルに問題があれば診断が出ます。設定の説明では.flake8・setup.cfg・tox.iniの[flake8]セクションを扱っています。コマンドライン指定が優先するため、エディターやCIの引数も確認します。
例外の範囲と検査の限界
診断を消す前に、不要なコードなのか、方針上の例外が必要なのかを判断します。避けられない1行の例外は理由を残し、# noqa: F401のように対象コードだけを指定します。ignoreは既定の無視一覧を置き換え、extend-ignoreは追加するため、オプションの意味を確認します。
継続的インテグレーション(CI)では失敗時の終了コードを維持します。--exit-zeroは違反があっても成功になるので、合否判定には向きません。Flake8とプラグインのバージョンを依存関係に記録し、更新時はルールの変化を確認します。検査通過は入力処理・業務ロジック・実行環境の正しさを保証しないため、実行と必要なテストも行います。




