ある小さなチームのPython3での開発のコーディングルールをまとめる。
タイトルにある「簡単な」の意味は、あまりプログラミングスキルが高くないチーム向けに基本的なことをざっくりとまとめているということ。
チームの進行度やスキルレベルの成長に合わせて進化させられたらいいな。
詳しい方からみると、Pythonコーディング規約のPEP8の抜粋にすぎませんので、そのようなものと思って読んでください。
環境
- Python 3.7.4
- pytest 5.2.2
フォルダ構成
- フォルダ構成を一定にしてプログラム開発する習慣をつける
- プログラムとセットでテストも作成する習慣をつける
(project name)
├── (project name) ............ プログラムのソースコード
│ ├── logs ................... ログ出力先フォルダ
│ ├── data ................... 連携ファイル格納先フォルダ
│ └── *.py
└── tests ..................... 単体テストのソースコード
└── test_*.py
命名規則
- Pythonの標準的な考え方やルールに則るのが原則
モジュール名、関数名、変数名
- 小文字のみ、単語間をアンダーバー(_)で区切る
- 例 sample_module.py, sample_function
非公開にしたい関数名、変数名
- 先頭にアンダーバー(_)をつける
- 非公開指定の関数や変数を呼び出さないこと(呼び出そうと思えばできてしまう)
定数名
- 大文字のみ、単語間をアンダーバー(_)で区切る
- 例 SAMPLE_CONSTANT
クラス名
- 単語の先頭を大文字にし、それ以外は小文字とし、アンダーバーで区切らない(Pascal記法という)
- 例 SampleClass
クォーテーション
- ダブルクォーテーション(")で統一
- Pyhonはシングルクォーテーション(')もOKだが、チームでは統一する
スペースの入れ方
- 余分なスペースは入れない方針で統一
- 何が余分かについては好みもあるかもしれないがプロジェクトの統一感を出したい
- 例
# 好ましくない例
family( parents[ 1 ] , children[ 1 ] )
sample_function ( x )
# 好ましい例
family(parents[1], children[1])
sample_function(x)
空行の入れ方
- 関数やクラスの区切りは2行分の空行を入れる。
- 例
# トップレベルの区切りの空行は2行
def sample_function_1()
pass
def sample_function_2()
pass
def sample_function_3()
pass
import文の書き方
- 複数をインポートする際は、ライブラリ毎に一行ずつ分けて書く
- 標準ライブラリ、サードパーティ製ライブラリ、プロジェクトで作成したモジュールでカテゴライズし、その順に並べる(カテゴリは1行分の空行で区切り、カテゴリの中はアルファベット順に並べる)
- 標準ライブラリは、pythonに用意されているライブラリのこと(例 datetime, logging)
- サードパーティ製ライブラリは、pythonが用意しているもの以外で企業や個人が配布しているライブラリのこと
-
from <モジュール名> import <オブジェクト名>
でオブジェクトを明示的にインポートすることを推奨 - 例
from datetime import datetime, timedelta
from logging import getLogger
from third_party_liblary import sample_object
from project_module import sample_function
コメントのつけ方
- 何を目的としたプログラムなのか、コメントがないと理解しにくいのでコメントを書く習慣をつける
- 公開する関数の説明は必ずコメントをつけること。
- 関数の説明にはdocstring(開始と終了をダブルクォート3個で囲んで書くやり方)を推奨
参考
- [Pythonコーディング規約]PEP8を読み解く
- Python, importの使い方(from, as, PEP8の推奨スタイル, 注意点など)
- [Python]可読性を上げるための、docstringの書き方を学ぶ(NumPyスタイル)
- PEP8(Python コードのスタイルガイド)
追記2021/1/10
内容を再確認し、冒頭に注意書きを追加「詳しい方からみると、Pythonコーディング規約のPEP8の抜粋にすぎませんので、そのようなものと思って読んでください。」