こんにちは、吉政創成 菱沼です。
今回もPythonエンジニア育成推進協会のPython 3 エンジニア認定実践試験の主教材「Python実践レシピ/技術評論社」を使って学習中です。
前回から2章「コーディング規約」に入り、PEP8に書かれているコーディング規約をもとにコメントの付け方について学びました。今回は命名規則に関するルールです。
Pythonのコーディング規約「PEP8」が必要な理由
Pythonのコーディング規約であるPEP8に定義されている内容は大きく3つに分類されるそうです。
- コードのレイアウトに関するルール
- コメントに関するルール
- 命名規約に関するルール
PEP8の原文はこちらからお読みいただけます。
https://peps.python.org/pep-0008
①②を学習してきましたが、今回は③の命名規則に関するルールになります。(P24 2.1.4命名規則)
命名規則の項目では、変数名やクラス名、モジュール名などの名前の付け方を学びます。
サンプルコードを見ていると単語の頭文字が大文字だったり、2つ目以降の単語の頭文字だけが大文字だったり、「_(アンダースコア)」が入っていたり、やたら長いかと思いきや短かったりといろいろな種類をみかけますよね。アレはコーディングした人の好みかと思いきや、実はPEP8で指標が定められているものだったんだそうです。どんなルールがあるのか見ていきたいと思います。
ちなみに、もうコーディング規約については詳しいからOK!という方は、Pythonエンジニア育成推進協会が実施している無料の試験「PythonZen & PEP 8 検定試験」にぜひチャレンジしてみてくださいね。
https://pythonzen-pep8-exam.jp
命名規則で指定されている表記と使用例
まず、テキストで紹介されている命名規則の表記方法の種類(+ちょっとした補足)と、用途の表の一部分を書き出してみます。
<表記方法>
- CamelCase:単語の先頭の文字を大文字にする(CapWords、CapitalisedWords、StudyCapsとも呼ぶ)
単語の頭文字が大きいので、ラクダのこぶのように見えることから名づけられました。パスカルケースやローワーキャメルケースとも呼ばれることもある模様。最初の単語の頭文字を小文字にするパターンもあるようですが、PEP8のページにはすべての単語の頭文字を大文字にするものだけが紹介されていました。
HTTPのようにすべて大文字で表現されるものの場合はそのまま大文字で、続く単語の頭文字も大文字にして書くようです。
- lowercase:すべての文字を小文字にする
- lower_case_with_underscores:単語全てを小文字にし、それらをアンダースコアでつなげる
snake_caseとも呼ばれるこちらは小文字で書かれており、よく利用されているようです。定数用に利用する場合はこのあと紹介する5番目のすべてを大文字+アンダースコアで書くパターンを利用するようです。
- UPPERCASE:すべての文字を大文字にする
- UPPER_CASE_WITH_UNDERSCORES:単語全てを大文字にし、それらをアンダースコアでつなげる
用途 | スタイル | 用例 |
パッケージ・モジュール名 | lowercase | system、daetime |
クラス名 | CamelCases | TestCase、HTTPRequest |
関数・変数名 | lowercase、lower_case_with_underscores | serialize_response、is_connected |
定数 | UPPERCASE、UPPER_CASE_WITH_UNDERSCORES | MAX_OVERFLOW、TOTAL |
例外 | CamelCase、末尾にError | ClientApiError |
命名規則の規範
テキストには特に書かれていませんが、PEP8の原文にはより詳細に守るべき規範となるものが示されています。以下はPEP8原文から一部分を要約して書きだしたものです。
- 単一文字の変数名に「l(小文字のエル)」、「O(大文字のオー)」、「I(大文字のアイ」を使わない
- 標準ライブラリで使用される識別子はASCII互換にする
- モジュール名は短く、すべて小文字にする(アンダースコア使用OK)
- パッケージ名は短く、すべてを小文字にする(アンダースコアの使用は非推奨)
- クラス名はCamelCaseを使用するが、インターフェースが文書化され、主に呼び出し可能オブジェクトとして使用する場合は関数の命名規則を使用できる
- 型変数は通常CamelCaseを使用するか短い名前にする
- 例外名はクラスの命名規則を適用し、接尾辞に「Error」をつける
- 関数名は小文字にし、必要に応じて単語をアンダースコアで区切る
- 変数名は関数名と同じ規則にする
- メソッド名とインスタンス変数は関数の命名規則を使用し、必要に応じて単語をアンダースコアで区切る
- 定数はすべて大文字で記述し、単語はアンダースコアで区切る
- クラスのパブリック属性の先頭にはアンダースコアをつけない
などなど。
上記は一部分を書き出しているだけなので、より細かな規約はぜひ原文をご確認ください。
https://peps.python.org/pep-0008/#naming-conventions
PEP8のよくある使い方(P.24)
PEP8を守ってコーディングされているかをチェックするツールとして、pycodestyleが紹介されています。こちらは次の学習項目のFlake8という静的コード解析ツールの中で利用できるそうです。
また、自動でソースコードを修正するツールとしておなじみBlack様が挙げられており、こちらも別の章で説明されています。
ちなみに、テキスト&試験とは関係ないのですが、Pythonエンジニア育成推進協会の顧問理事、寺田様のコラム「Python業界、2024年の振り返りと2025年の展望」では、近年、BlackからRuffというツールに変更されたというお話がされています。ぜひそちらのコラムもご一読ください!
https://www.pythonic-exam.com/archives/9102
最適な名前の付け方は?
毎度結構悩む変数名。どんな名前にすればいいかと悩んだ結果、今まではとにかく安直で覚えやすくてタイプミスしにくい簡単な名前を付けてきました。
では実際にはどういった名前を付けるべきかと言えば、「実装よりも使い方を表した名前」を付けるのが良いそうです。まあ…たぶん外れていない範囲…だったと思います。「そうはいっても…」と悩むのであれば、標準ライブラリやサードパーティー製ライブラリを参考にしてみてほしいということでした。いろいろなコードを見て学んでいきたいと思います!
それではきりが良いので、今回はこちらで終了です。お付き合いいただきありがとうございました。
お時間がある方は、ぜひ無料のPEP試験も受験してみてくださいね。
https://pythonzen-pep8-exam.jp
実践試験について知りたい方は以下をご覧ください。
●Python3エンジニア認定実践試験
https://www.pythonic-exam.com/exam/jissen