コーディング規約
コーディング規約とは
全く同じ機能を持つシステムでも、コードは複数の書き方ができる。チームで開発する場合、人によってコードの書き方にばらつきがあると可読性が下がってしまうため、コードの書き方が全体で統一されるようにコーディング規約が定められていることが多い。コーディング規約は、会社やプロジェクトごとに異なるが、本記事ではPythonの標準ライブラリで利用されているPEP8をもとにコーディング規約の一例を紹介する。あくまでもコードを読みやすくするための指針にすぎないなので、チーム内で合意が取れている場合は以下で示す書き方に固執する必要はない。
命名規則
# 悪い例
animals = ['dog', 'cat']
for i in animals:
pass
# 良い例
animals = ['dog', 'cat']
for animal in animals:
pass
名前は可能な限りドメインを表現したものにする。わかりにくい略称は使わない。
# 悪い例
aaa = 'John'
cnt = 10
# 良い例
name = 'John'
count = 10
命名規則 | 例 | |
パッケージ名 | すべて小文字で表記。 | mypackage |
クラス名・例外名 | 単語の頭文字のみ大文字で表記 | MyClass |
モジュール名・関数名・メソッド名・変数名 | すべて小文字で表記。単語の区切りにアンダースコア(_)を使用。 | my_function |
定数名 | すべて大文字で表記。単語の区切りにアンダースコア(_)を使用。 | MY_CONSTANT |
インポート文
import os
import sys
def main():
pass
if __name__ == "__main__":
main()
import os
import sys
import flask
import mylibrary
def main():
pass
if __name__ == "__main__":
main()
# 悪い例
import os, sys
# 良い例
import os
import sys
if文
# 悪い例
if x != 0:
print("xは0でない")
else:
print("xは0")
# 良い例
if x == 0:
print("xは0")
else:
print("xは0でない")
# 悪い例
if not x is None:
pass
# 良い例
if x is not None:
pass
# 悪い例
if bool_value == True:
pass
# 良い例
if bool_value:
pass
レイアウト
# 悪い例
x = 1;
# 良い例
x = 1
# 悪い例
def func(a, b, c, d, e, f, g, h, i, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z):
pass
# 良い例
def func(
a, b, c, d, e, f, g, h, i, k, l, m,
n, o, p, q, r, s, t, u, v, w, x, y, z
):
pass
for count in range(100):
print(count)
※ VSCodeでは、標準でタブがスペースに変換される設定になっているので特に意識する必要はない。
# 悪い例
int_val=10+20
dict_val={'a':1,'b':2}
int_val==dict_val
# 良い例
int_val = 10 + 20
dict_val = {'a': 1, 'b': 2}
int_val == dict_val
# 悪い例
if 10 > 3 :
pass
# 良い例
if 10 > 3:
pass
# 悪い例
def func(arg1, arg2 = 1):
return arg1 + arg2
func(arg1 = 10)
# 良い例
def func(arg1, arg2=1):
return arg1 + arg2
func(arg1=10)
# 悪い例
x = ( 1 + 2 )
# 良い例
x = (1 + 2)
# 悪い例
num = 10 + 20 + 30 + 40 + \
50 + 60 + 70
# 良い例
num = (
10 + 20 + 30 + 40
+ 50 + 60 + 70
)
# 悪い例
def func(
arg1,
arg2,
):
return arg1 + arg2
# 良い例
def func(
arg1,
arg2,
):
return arg1 + arg2
import os
import re
class Class1():
def func1(self):
pass
def func2(self):
pass
class Class2:
def func1(self):
pass
def func2(self):
pass
def func1():
pass
def func2():
pass
# 悪い例
data = load_data()
output = process(data)
save(output)
# 良い例
def main():
data = load_data()
output = process(data)
save(output)
if __name__ == "__main__":
main()
VSCodeでLinterやFormatterを利用する
コードを静的に解析してルールに従っているか確認、修正するために、LinterやFormatterを利用すると便利である。この記事では代表的なLinter/Formatterとして、Mypy、Flake8、Black Formatterを紹介する。
ライブラリ名 | 説明 | ドキュメント |
Mypy | Pythonコードの型チェックができるライブラリ。 宣言した型通りの値が渡されているか確認してくれる。 | Mypy Doc |
Flake8 | Pythonコードのエラーチェックができるライブラリ。 PEP8に従っているかや論理エラーがないかなどを確認してくれる。 | Flake8 Doc |
Black Formatter | Pythonコードのフォーマット修正ができるライブラリ。 PEP8のサブセットであるブラックコードスタイルに従い、 コードを自動で修正してくれる。 | Black Formatter Doc |
VSCodeでは、Mypy、Flake8、Black Formatterを簡単に利用できるよう拡張機能が用意されている。
Mypy
Flake8
Black Formatter
▼修正後