[Django] flake8の使い方

2021-03-13 hit count image

DjangoのプロジェクトでPythonのコードスタイルを統一するため静的コード解析であるflake8を使う方法について説明します。

概要

Djangoでサーバサイドを開発していますが、他の開発者たちと一緒に開発することになりました。色んな開発者たちと一緒に開発してるので、コードのスタイルを統一して、潜在的なバグも減らすため、静的コード分析ツールであるflake8を導入することになりました。

このブログポストではDjangoプロジェクトにflake8を設定して使う方法について説明します。

flake8のインストール

Djangoでflake8を使うためにはまず、flake8をインストールする必要があります。次のコマンドを実行してflake8をインストールします。

pip install flake8

インストールを完了したら、忘れないようにrequirements.txtにも保存しておきます。

pip freeze > requirements.txt

これでflake8をインストールする方法について見てみました。

flake8の使う方法

次のコマンドを実行してflake8することができます。

flake8

Djangoプロジェクトフォルダでflake8を実行したら下記のような内容が確認できます。

./venv/lib/python3.8/site-packages/pyflakes/checker.py:153:31: F821 undefined name 'PercentFormat'
./venv/lib/python3.8/site-packages/pyflakes/checker.py:160:9: F821 undefined name 'Generator'
./venv/lib/python3.8/site-packages/pyflakes/checker.py:160:9: F821 undefined name 'PercentFormat'
./venv/lib/python3.8/site-packages/pyflakes/checker.py:180:47: F821 undefined name 'Optional'
./venv/lib/python3.8/site-packages/pyflakes/checker.py:759:35: F821 undefined name 'List'
./venv/lib/python3.8/site-packages/pyflakes/checker.py:760:35: F821 undefined name 'Dict'

flake8の結果を見ると、checker.py:153:31: F821 undefined name 'PercentFormat'ようにファイル名:エラーの位置 エラーID エラ内容が確認できます。

flake8の設定

私はDjangoプロジェクトフォルダにvirtualenvを生成して使っています。それで、flake8が不要にvirtualenvのフォルダまで分析をしてます。私はflake8がvirtualenvのフォルダを分析しないように設定する必要がありました。

falke8はvirtualenvフォルダを無視するように設定するため、.flake8ファイルをDjangoプロジェクトのフォルダに生成して次のように修正しました。

[flake8]
exclude =
    .git,
    .gitignore,
    *.pot,
    *.py[co],
    __pycache__,
    venv,
    .env

このように設定して、設定がうまく反映されたか確認するため、下記のコマンドを使ってflaske8を実行してみました。

flake8

そしたら以前とは違って下記のような結果が出ました。

./petmeeting/settings.py:98:80: E501 line too long (91 > 79 characters)
./petmeeting/settings.py:101:80: E501 line too long (81 > 79 characters)
./petmeeting/settings.py:104:80: E501 line too long (82 > 79 characters)
./petmeeting/settings.py:107:80: E501 line too long (83 > 79 characters)
./petmeeting/settings.py:132:33: W292 no newline at end of file

flake8はたくさんのことをチェックしてますが、一般的には考えなくてもいい部分までもエラーで表示する場合があります。私は次のように無視してもいい内容を追加して設定しました。

[flake8]
exclude =
    .git,
    .gitignore,
    *.pot,
    *.py[co],
    __pycache__,
    venv,
    .env

ignore =
    E121,
    E126,
    E127,
    E128,
    E203,
    E225,
    E226,
    E231,
    E241,
    E251,
    E261,
    E265,
    E302,
    E303,
    E305,
    E402,
    E501,
    E741,
    W291,
    W292,
    W293,
    W391,
    W503,
    W504,
    F403,
    B007,
    B950,

max-line-length = 200

この内容はSiderと言う会社のおすすめルールを適用した内容です。

このルールはかってに決めたことではなく、この会社が研究をしてその結果を元にしておすすめしてるようです。詳しい内容は下記のリンクを参考して下さい。

完了

これでDjangoプロジェクトでflake8を使う方法について説明しました。また、要らないルールやフォルダを無視するための設定方法もみてみました。今度は他の開発者たちと一緒に開発しながらこのように設定したflake8が役に立てることを期待してみます。

私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!

Posts