SideCI Blog

自動コードレビューサービスSideCIを提供している株式会社アクトキャットのコーポレートブログです。



flake8を使ってPythonプロジェクトを自動コードレビューする

どのようなプログラミング言語であっても、複数人で開発しているとそれぞれが独自の開発スタイルを持ちがちです。その補正としてコードレビューは大事なプロセスになります。

今回はPythonの文法チェックツールであるflake8を紹介します。SideCIではflake8を用いたPythonプロジェクトのコードレビュー自動化に対応しています。

flake8のインストール

flake8は pip コマンドでインストールできます。

$ pip install flake8

flake8の使い方

基本的な使い方は flake8 コマンドに続けてファイルまたはディレクトリパスを指定するだけです。

$ flake8 url.py
url.py:22:1: H306  imports not in alphabetical order (urlparse, urllib)
url.py:30:3: E111 indentation is not a multiple of four
url.py:31:1: W293 blank line contains whitespace
url.py:58:1: E302 expected 2 blank lines, found 1
  :

–statistics オプションを付けると最後に統計が出ます。エラーの多いものから出るので、対応すべき順番付けにもなりそうです。

39      E111 indentation is not a multiple of four
1       E128 continuation line under-indented for visual indent
1       E302 expected 2 blank lines, found 1
10      F821 undefined name 'cmp'
1       H306  imports not in alphabetical order (urlparse, urllib)
3       W291 trailing whitespace
4       W293 blank line contains whitespace
1       W391 blank line at end of file

–show-source オプションをつけるとソースコードのどの部分を修正すれば良いかが分かりやすくなります。

$ flake8  --show-source url.py 
url.py:22:1: H306  imports not in alphabetical order (urlparse, urllib)
import urllib
^
url.py:63:73: W291 trailing whitespace
    provides a better interface for comparing and manipulating URLs than
                                                                        ^
url.py:108:20: F821 undefined name 'cmp'
            return cmp(self.to_string(), str(other))
                   ^

オプションについて

flake8のオプションは次のようになっています。–ignoreで無視するエラーコードを指定したり、–show-pep8でエラーに関係するPEP 8のメッセージを表示してくれます。PEP 8というのはPythonのコーディングスタイルガイドです。

自動変換を行う

インデントや空白行に関する問題を自動解決する際に使えるのが autopep8 です。インストールは pip で行えます。

$ pip install autopep8

後は autopep8 で置き換えるだけです。

$ autopep8 -i url.py

SideCIではflake8を用いたPythonプロジェクトのコードレビュー自動化に対応しています。flake8をGitHubへのプッシュに連携して自動レビューするようにしたり、複数人での開発時にはクラウドサービスを利用した運用が便利です。SideCIでは tox.ini または setup.cfg を使って設定の変更が可能です。

ぜひ活用してください。

flake8 3.3.0 : Python Package Index