Pythonコーディング規約
本記事ではPythonのコーディング規約に関する情報を記述する。
コーディング規約とは、チーム開発を行う際に、コード上のコメントの記述や関数、変数の定義時のルールを決めることで、コードの見た目を均一に整え、レビュー等を行いやすくするために決められる。
コーディング規約を決める際の指標として下記3点をまとめる。
- PEP8
- Flake8
- Black
PEP8
PEP8とはPythonのスタイルガイドである。
スタイルガイドとは、インデントや空白などのコードの見た目に関するもの、コメント、関数や変数の命名などの基本ルールを定義したコーディング規約のこと。
-
コードのレイアウトに関するルール
読みやすく、見た目に一貫性があるコードを目指すための指針。-
インデント
基本のインデントは半角スペース4文字
カッコ内部で改行した際のインデントについては下記コードを示す。<正しい例> - カッコの先頭に揃えるパターン def correct_indent1(var_one, var_two var_three, var_four): - 先頭の値を縦で揃え、定義の初めの位置に閉じカッコを揃えるパターン num_list = [ 1, 2, 3, 4, 5, 6, ]
<誤った例> - 引数が揃っていないパターン def miss_indent1(var_one, var_two, var_three, var_four): print('test') - 引数は揃っているが関数内部の行と同じインデントのパターン def_miss_indent2( var_one, var_two, var_three, var_four): print('test')
-
空白
空行については下記ルールが定義されている- トップレベルの関数やクラスの間は、2行空ける
- クラス内のメソッドの定義は、1行空ける
-
import文
import文については下記ルールが定義されている- 異なるモジュールはimport文を分ける
- 次の順番でグループ化する
- 標準ライブラリ
- サードパーティに関連するもの
- ローカルライブラリ
-
空白
空白については下記ルールが定義されている- 余計な空白文字は使わない
- 代入演算子や比較演算子などの両側に1つ空白を入れる
- カンマの後ろに空白を入れる
- 同じカッコなどの終わりを表す文字の前に空白を入れない
-
-
コメントに関するルール
コメントで重要なことはコードと矛盾しないこと。
コード修正時はコメントも更新する必要がある。
コメントの書き方の例として3つ紹介する-
ブロックコメント
ブロックコメントは説明したいコードの前の行に書くコメント。- コードと同じインデント
- 1つの#と1つの空白の後ろに書く
-
インラインコメント
インラインコメントは、コードと同じ行に書くコメント。- コードとコメントの間に2つ以上の空白
- 1つの#と1つの空白の後ろに書く
-
docstring
docstringとは、モジュール、関数、クラス、メソッドについて説明を書くコメント。- よりよく書くためのルールがPEP257にまとめられている
- 関数やメソッドの説明はdefの直後に書く
- """で始まり、"""で終わる行
- 説明が複数行の場合は、1行目の後に空行を置く
-
-
命名に関するルール
PEP8での命名規則を下記表に示す。
用途 | スタイル | 用例 |
---|---|---|
パッケージとモジュール名 | lowercase | system, datetime |
クラス名 | CamelCase | TestCase, HTTPRequest |
関数、変数名 | lowercaseまたは、lower_case_with_underscores | testnum、test_def |
定数 | UPPERCASEまたは、UPPER_CASE_WITH_UNDERSCORES | MINVALUE、MAX_VALUE |
例外の名前 | CamelCase、末尾にError | ClientApiError |
Flake8
Flake8はコーディング規約であるPEP8に準拠しているか、不具合のもとになる箇所がないかを静的コード解析を行うツールである。
- Flake8のインストール
Flake8は下記コマンドを実行することでインストールできる
pip install flake8
- 静的コードチェックコマンド
静的コード解析実行コマンドを下記に示す。
<特定のファイルを解析>
flake8 ファイルパス
<フォルダ内のPythonファイルを解析>
flake8 フォルダパス
- エラーコード
エラーコード一覧は下記記事が大変参考になります。
- オプション
主要なオプションを下記に示す。
オプション | 概要 | 使用例 |
---|---|---|
ignore | 特定のエラーを無視 | flake8 --ignore=E203, E501 |
exclude | チェックの対象から除外 | flake8 --exclude=.env, doc/build |
max-line-length | 1行の最大文字数指定 | flake8 --max-line-length=80 |
max-complexity | 複雑度を設定しチェック | flake8 --max-complexity=10 |
Black
Blackは妥協のないコードフォーマッターである。
PEP8の規約をもとに、PEP8で明確に定められていない項目についても独自に定めた規約にコードを自動整形するツール。
変更もできないため、コーディング規約で議論する必要がなくなるメリットがある。
- インストール
pip install black
- 実行コマンド
black ファイルパス
- オプション
主要なコマンドラインオプションを下記に示す。
オプション | 概要 |
---|---|
-l, --line-length | 1行の最大文字数 |
--check | ファイルをチェックし結果を出力する。ファイル修正はしない |
--diff | ファイルをチェックし差分を出力する。ファイル修正はしない |
--include | チェックしたいファイルやディレクトリを正規表現で指定 |
--exculde | 除外するファイルやディレクトリを正規表現で指定 |