「変数名や関数名、どう付けたらいいの?」と迷ったことはありませんか。
Pythonでは、名前の付け方ひとつでコードの読みやすさや保守性が大きく変わります。将来の自分や同僚が読んだときにすぐ理解できるようにすることが、良いプログラマーへの近道です。このページでは、Pythonの命名規則(PEP 8に沿った基本)を、初学者にもわかりやすく具体例と一緒に解説します。
まずは土台となるルールから確認しましょう。迷ったときはここに立ち返ると安心です。
「3か月後の自分が読んでも、ひと目で意図が伝わるか?」を基準に考えると、名前の質が自然と上がります。
Pythonでは、変数名と関数名にスネークケース(単語をアンダースコアでつなぐ)を使うのが基本です。 キャメルケースに慣れている人は、最初少し違和感があるかもしれませんが、Pythonコミュニティではこちらが標準です。
# 良い例(snake_case)
user_age = 25
total_price = 100.50
# 悪い例(Pythonでは非推奨)
UserAge = 25 # これはクラス名のスタイル
totalPrice = 100.50 # camelCase
また、ブール値(True/False)には is_, has_, can_ のような接頭辞を付けると読みやすくなります。
is_active = True
has_error = False
can_execute = True
コレクション(リストや辞書など)には、複数形や中身がわかる名前を使うと、コードを追いやすくなります。たとえば users はユーザーの一覧、user_by_id は「IDをキーにしたユーザー辞書」という意図が伝わります。
一度決めたら実行中に変えない値は定数として、すべて大文字+アンダースコアで書きます。 Pythonには厳密な定数はありませんが、慣習として変更しないことを示します。
MAX_CONNECTIONS = 100
API_BASE_URL = "https://api.example.com"
DEFAULT_TIMEOUT_SEC = 30
定数は基本的にモジュールの先頭(グローバル)にまとめて置くと探しやすくなります。 環境ごとに変える値(APIキーやエンドポイントなど)は、別ファイルや環境変数で管理すると、より安全です。
クラス名は各単語の先頭を大文字にするキャメルケースにします。
名詞(もの・概念)で表すと意図が伝わりやすくなります。
class UserProfile:
pass
class ShoppingCart:
pass
頭字語(HTTP, URL など)が含まれる場合、クラス名では HTTPServer のように大文字のままつなげるのが一般的です。対して、変数・関数では http_server のように小文字で統一します。
クラス内部の外に出したくない属性には先頭にアンダースコアを付けます(_balance など)。 ダブルアンダースコア(__name)は特殊な名前マングリングを起こすため、まずはシングルアンダースコアで十分です。
関数名は snake_case で、何をするのかを一言で表しましょう。 迷ったら「動詞+目的語」が基本形です。
def calculate_total(price, tax):
return price + tax
def get_user_info(user_id):
# ユーザー情報を取得する処理
pass
取得は get、作成は create、更新は update、削除は delete、変換は to_〜/convert_〜 など、チームで言葉を揃えるとコード全体が読みやすくなります。 「やってみたら副作用もあった」関数は、名前に動作を混ぜると誤解を防げます(fetch_and_cache_user など)。
意外と見落としがちですが、ファイル名やディレクトリ名も命名規則の一部です。読みやすさとインポートのしやすさを意識しましょう。
アンダースコアには「ただの区切り」以上の意味があります。曖昧なまま使っていませんか?
for _ in range(3):
do_something()
実際のコードで、命名がどのように効いてくるのかを体感してみましょう。次の例はシンプルなショッピングカートです。
class ShoppingCart:
def __init__(self):
self.items = []
def add_item(self, item_name, item_price):
item = {
'name': item_name,
'price': item_price
}
self.items.append(item)
def calculate_total(self):
total = 0
for item in self.items:
total += item['price']
return total
def display_items(self):
for item in self.items:
print(f"Item: {item['name']}, Price: {item['price']}")
# 使用例
cart = ShoppingCart()
cart.add_item('Apple', 0.5)
cart.add_item('Banana', 0.3)
cart.display_items()
print(f"Total Price: {cart.calculate_total()}")
このコードでは、クラス名に ShoppingCart(キャメルケース)、メソッド名と属性名に add_item や calculate_total、items(スネークケース)を使い、Pythonの一般的なスタイルに合わせています。
メソッド名は動詞から始まり、それぞれの役割が短い名前に凝縮されています。 たとえば add_item は「アイテムを追加する」動作、calculate_total は「合計を計算する」動作が直感的に伝わります。属性 items は複数形にすることで「複数のアイテムを持つリスト」だとすぐに分かります。
辞書のキー name と price も短くシンプルで、余計な装飾や曖昧な略語を避けています。このように命名だけで、コメントを増やさなくてもコードの意図が自然に読み取れるようになります。
命名は「小さな投資で大きな効果」が得られる最強のリファクタリングです。スネークケースとキャメルケースの使い分け、定数やブール値の表現、アンダースコアの意味など、基本をそろえるだけでコードの読みやすさは見違えるはずです。
次にコードを書くとき、「この名前は未来の自分を助けるだろうか?」と一度問いかけてみてください。きっと、より伝わる Python コードになります。