IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

ゼロから歩くPythonの道

CTC 教育サービス

 [IT研修]注目キーワード   Python  Power Platform  最新技術動向  生成AI  Docker  Kubernetes 

第60回 Pythonを使う時の変数名には、命名規則がある ~変数名に使ってはいけないもの編~ (菱沼佑香) 2025年2月

こんにちは、吉政創成 菱沼です。
今回も「きれいなPythonプログラミング(マイナビ出版)」という書籍を利用して学習します。

4章「わかりやすいネーミング」にという章の学習中です。この章では、変数の適切な名前の付け方を学ぶことになります。
前回までは変数名にはこういった名前を付けるのが良いという内容を学んできましたが、今回は、こういう名前を付けるのはやめようという内容です。

ジョークやダジャレは誰もが知っているわけではないことを念頭に

変数名はとにかく誰が読んでもわかりやすいものにしよう、というのはよく理解しましたが、今回はやめた方が良い名前に関する話題です。まずはジョークやダジャレ、文化的な言及を避けましょうというものからです。

---------------------------------------------------------------
P.67
コードの意図を明確に伝えるためには、文化固有の知識が必要な表現は邪魔になることがあります。インターネットのおかげで、英語が堪能ではなくても、英語のジョークを理解できなくても、世界中の見知らぬ人たちとソースコードを共有することが簡単になりました。
本編の前半で述べたように、Pythonのドキュメントで使用されているspam、egg、baconという名前は、モンティ・パイソンのスケッチコメディーを元にしていますが、これらはメタ構文変数としてのみ使用するもので、実際のコードで使用することはお勧めできません。
一番よいのは、英語を母国語としない人でも理解しやすいコードを書く事です。つまり、丁寧で、直接的で、ユーモアのない方法です。
---------------------------------------------------------------

ちなみに、この前後の文章で、実際に筆者が遭遇したジョーク...というか、他の業界の用語を基にした変数名がつけられたもののエピソードが書かれています。当然、用途が分からず、説明を受けたそうですが、一度ではなぜその名前にしたのか理解できず詳しく聞いたこと、そして、命名者が退職したと同時に変数名を変更したというものです。ここら辺は皮肉がたっぷり含まれた形で書かれており、該当の変数名を付けた人に対して、「理解しがたいわぁ...迷惑だわぁ...」と思っている様子がありありと目に浮かぶようでした。
グッとくるのは「将来的にそのジョークは面白くなくなるかも」や「説明しなければならないようなジョークほど寒いものはありません」という一文ですね。ほんとグッときます。

さて、確かに外国のジョークや文化に詳しくない私からすると、一見して分からない変数名を見つけたら「?マーク」が頭に飛び散りそうです。他の業界の専門用語を元にされていても、やはりすぐには理解できません。さらに言えば、同じ単語が異なる業界ごとに違う意味になることもありますので、どの業界のものなのかと思うこともでてくるかもしれません。
調べる→意味を知る、選別する→意味から用途を推測するという流れは面倒でしかありませんし、作った側や引き継がれた側として、毎度誰かに説明するのも面倒です。誰もが知っていて当たり前の知識であるという思い込みは捨てて、シンプルにその変数が持つ役割の名前を付けてあげるのが一番ですね。

ちなみに、最悪な変数名(P.71)という項目があるのですが、ここでは変数には必ずデータが含まれているのだからdataという名前を使わないこと、varやtempも同じく、おすすめしないという事が書かれています。例えば、温度データの統計的分散を保持する変数を作りたいのなら、tempVarDataではなく、temperatureVarianceというような名前にせよと書かれていました。
よっぽど変数名に苦労されてきたのか、ここにも皮肉があふれていました。これまでの中で、著者の気持ちが一番あふれている章な気がします。お疲れ様です。

Pythonの組み込み名を変数に利用しない

さて次に、例えばlistやsetなどの組み込み名を変数名に利用しないという内容です。利用しないようにする理由はこちら。

---------------------------------------------------------------
P.69
例えば変数にlistやsetという名前を付けると、Pythonのlist()やset()関数が上書きされてしまい、後でバグが発生する可能性があります。list()関数はリストオブジェクトを生成します。しかし、それを上書きすると、このようなエラーが発生します。

fig01

listという名前にリストの値を割り当てる①と、元のlist()関数がなくなってしまい、list()を呼ぼうとする②とTypeErrorが発生してしまいます。
---------------------------------------------------------------

なるほど。
かといって、Pythonですでに利用されている組み込み名をすべて覚えておくというのはなかなか難しいですよね。それを調べるには次の方法があるそうです。

  • インタラクティブシェルに使いたい名前を入力する
  • 使いたい名前をインポートしてみる

これを実行してみて、使用されていない場合には、NameErrorやModule NotFoundErrorが発生するそうです。

覚えておきたい上書きできちゃうPythonの名前

識別子として使わないでほしいものとしては、all、any、date、email、file、format、hash、id、input、list、min、max、object、open、random、set、str、sum、test、typeなどがあるそうです。

ファイル名をサードパーティ製ライブラリと同じ名前にしない

インストール済みのサードパーティ製ライブラリと、同じ名前の.pyファイルがあると上書きされてしまい、ライブラリの関数が存在しないというエラーが発生してしまうそうです。

予約語は変数名に使えない

書籍のこの章には書かれていないようですが、この二つ以外に、「予約語」に使われているものは使えないという話を聞いたことがありました。予約語にはあらかじめ、特定の動作や操作、データ型を識別するためのものが定義されているため、変更ができないのだそう。
Python3.11には35個の予約語がありますが、ときどきバージョンアップによって追加されることもあるそうです。必要に応じて調べておくのがいいかもしれません。
調べ方など含め、参考URLを載せておきますので、興味がある方はご一読ください。

Pythonのキーワード(予約語)一覧を確認するkeyword
【Python】予約語とは

Python変数名のつけかたのまとめ

これでこの章が終了します。改めて、変数名の付け方についてまとめておきます。

  • モジュールには小文字の名前(PEP8)
  • クラスにはパスカルケースの名前(PEP8)
  • 短すぎても長すぎてもダメ
  • 明確で簡潔でありながら説明的に(説明的すぎる方が良いこともある)
  • 誰もが理解できる名前を
  • ジョークやダジャレ、文化的な引用を使わない
  • 丁寧で直接的、ユーモアのない名前
  • 標準ライブラリで使われているものは使わない(all、any、date、email、file、format、hash、id、input、list、min、max、object、open、random、set、str、sum、test、typeなど)
  • サードパーティ製ライブラリと同じ名前のファイルは作らない
  • 予約語は変数に使えない

PEP8の命名規則の原文はこちら。
https://peps.python.org/pep-0008/#naming-conventions

それでは今回はこちらで終了です。次回から5章「怪しいコード臭」に入ります。
今回もお付き合いいただきありがとうございました。

 

 [IT研修]注目キーワード   Python  Power Platform  最新技術動向  生成AI  Docker  Kubernetes