【ITニュース解説】Naming convention in Python
2025年09月21日に「Dev.to」が公開したITニュース「Naming convention in Python」について初心者にもわかりやすく解説しています。
ITニュース概要
Pythonの命名規則はコードの可読性と管理性を高める。クラスはCapWords、変数・関数はlower_snake_case、定数はUPPER_SNAKE_CASEが標準だ。アンダースコアは変数を非公開にしたり、予約語との衝突を避けたり、特殊な役割を持つメソッドを示すために使われ、コード理解に役立つ。
ITニュース解説
システムエンジニアを目指す上で、プログラミング言語の「命名規則」を理解することは非常に重要だ。命名規則とは、変数や関数、クラスなどに名前を付ける際の一貫したルールのことで、これを守ることでコードの可読性や保守性が格段に向上する。特にチームで開発を行う際には、全員が同じルールに従うことで、他の人が書いたコードでもすぐに内容を理解し、作業を進めやすくなるため、円滑なプロジェクト進行に不可欠な要素と言える。
Pythonにおける基本的な命名規則を見ていこう。まず、クラスの名前は「CapWords」または「PascalCase」と呼ばれる形式で記述することが推奨されている。これは、単語の最初の文字を大文字にし、各単語を連結する形式だ。例えば、「Cls」や「MyCls」、「MyFirstCls」のように記述する。このルールに従うことで、コードを見たときに、それが変数や関数ではなく、クラスであることが一目でわかるようになる。
次に、変数名や関数名については「lower_snake_case」という形式を用いるのが一般的だ。これは、すべての文字を小文字にし、複数の単語をアンダースコア(_)で連結する形式を指す。「var」や「my_var」、「my_first_var」のような変数の例や、「func()」、「my_func()」、「my_first_func()」のような関数の例がこれに該当する。この規則は、変数や関数がクラス名とは異なる役割を持つことを明確にし、コード全体の一貫性を保つ上で役立つ。
プログラムの中で、値が途中で変更されることのない「定数」を定義する際には、「UPPER_SNAKE_CASE」という形式が使われる。これは、すべての文字を大文字にし、複数の単語をアンダースコアで連結する形式だ。「PI」(円周率)や「E」(自然対数の底)、「MIN_NUM」(最小値)、「MAX_NUM」(最大値)といった例がこれに当たる。大文字のみで記述することで、その値がプログラムの実行中に変わらない「定数」であることを明確に示し、誤って変更してしまうリスクを防ぐ狙いがある。
Pythonのコードを構成するファイルである「モジュール」の名前は、短く、すべて小文字で記述するのが基本だ。もし可読性を高める必要がある場合は、アンダースコアで単語を区切ることも許容される。例えば、「my1stmod.py」や「my_1st_mod.py」といった形だ。これらのモジュールは、「import」文を使って他のファイルから読み込まれる。同様に、複数のモジュールをまとめた「パッケージ」の名前も短く、すべて小文字で記述するが、モジュール名とは異なり、基本的にはアンダースコアを使わないのが推奨されている。ただし、可読性が著しく向上する場合に限り、アンダースコアを使用することも考慮される。例えば、「my1stpkg」や「myfirstpackage」といった形式が一般的だ。
これらの基本的な命名規則に加えて、Pythonではアンダースコアの使い方によって特別な意味を持たせる慣習がある。これは「プライベートな(内部的な)要素」を示すためによく用いられる。
まず、単一の先頭アンダースコア(例: _var、_func、_Cls)は、「この要素はクラスの内部で主に使われることを想定しているが、外部からアクセスすることも可能である」という意図を示す。これは、開発者に対して「この変数は直接変更したり、この関数を呼び出したりしない方が良い」という暗黙のメッセージを送るもので、非強制的なプライベート属性と呼ばれる。外部からアクセスしてもエラーにはならないが、設計思想としては内部利用を推奨している。例えば、クラス内で一時的に使用する変数や、外部には公開したくないヘルパー関数などに用いられる。
次に、二重の先頭アンダースコア(例: __var、__func、__Cls)は、より強力に外部からのアクセスを制限したい場合に使う。Pythonでは、このような名前を持つ属性に対して「名前修飾(Name Mangling)」という処理が行われる。これは、属性名の先頭にクラス名とアンダースコアが自動的に付加されることで、外部から直接その名前でアクセスしようとしても見つけられないようにする仕組みだ。例えば、__varという属性は、実際には_Cls__varのような名前に変更される。これにより、クラスの外部からcls.__varのように直接アクセスしようとすると、エラーが発生する。これは強制的なプライベート属性として機能し、クラスの内部実装を外部から隠蔽し、誤った操作を防ぐのに役立つ。ただし、完全にアクセスできないわけではなく、名前修飾された後の名前を知っていればアクセス自体は可能だが、これは非推奨とされている。
単一の末尾アンダースコア(例: var_、func_、Cls_)は、Pythonの予約語や組み込み関数名など、すでに存在する識別子と名前が衝突するのを避けるために使用される。例えば、「class」や「def」、「list」といった名前はPythonのキーワードであり、変数名や関数名として直接使うことはできない。このような場合に、class_やlist_のように末尾にアンダースコアを付けることで、名前の衝突を回避し、コードの意図を明確に保つことができる。これは、主に予約語と同名の変数を定義する必要がある、といった特殊なケースで利用される。
最後に、二重の先頭および末尾アンダースコア(例: __var__、__func__、__Cls__)は、Pythonの内部で特別な意味を持つ属性やメソッドのために予約されている。これらは「特殊メソッド」や「Dunder(Double Underscore)メソッド」と呼ばれ、オブジェクトの初期化を行う__init__、文字列表現を返す__str__、クラスそのものを表す__class__、名前を表す__name__など、様々な場面で利用される。これらはPythonの言語仕様の一部であり、通常は開発者が独自にこのような形式の属性名を作成することは避けるべきだ。これらはクラスの外部からもアクセス可能であり、特定の機能を実現するためにPythonによって定義されている。
これらの命名規則を適切に理解し、実践することで、書かれたコードは読みやすく、他の開発者と共有しやすくなり、長期的なメンテナンスも容易になる。特に、システムエンジニアとして多人数での開発に携わる際には、こうした「作法」を守ることが、高品質なソフトウェアを効率的に開発するための重要なスキルとなる。