Python変数名のルール|初心者が守るべき命名の基本

Python初心者向けの変数名命名ルールを詳しく解説。基本的なルールから読みやすいコードを書くためのコツまで実例付きで紹介。

Learning Next 運営
52 分で読めます

変数名で困ったことはありませんか?

みなさん、Pythonで変数を使う時に「どんな名前をつければいいの?」と悩んだことはありませんか?

「変数名は何でもいいの?」 「どんなルールがあるの?」 「読みやすいコードを書くにはどうすればいい?」

このような疑問を持つ方はとても多いです。

実は、良い変数名をつけるコツがあるんです。

この記事では、Python初心者が知っておくべき変数名の命名ルールを詳しく解説します。 基本的なルールから実践的なコーディングのコツまで、読みやすく保守しやすいコードを書けるようになりましょう!

変数名の基本ルール

まず、Pythonで変数名をつける時の絶対に守るべきルールを覚えましょう。

これを知らないとエラーになってしまいます。

使える文字の種類

Pythonで変数名に使える文字が決まっています。

# 使える文字の例
name = "田中" # 英字(OK)
age1 = 25 # 数字(先頭以外はOK)
user_name = "佐藤" # アンダースコア(OK)
firstName = "鈴木" # 大文字小文字混在(OK)
print(f"名前: {name}")
print(f"年齢: {age1}")
print(f"ユーザー名: {user_name}")
print(f"名前: {firstName}")

英字、数字、アンダースコアが使えます。

実行結果:

名前: 田中 年齢: 25 ユーザー名: 佐藤 名前: 鈴木

正しい文字を使えば問題なく動作します。

使えない文字の例

これらの文字は使えません。

# 使えない文字の例(エラーになります)
# 1st_name = "田中" # 数字で始まる(NG)
# user-name = "佐藤" # ハイフン(NG)
# total price = 1000 # スペース(NG)
# user@home = "鈴木" # @記号(NG)
# 正しい書き方
first_name = "田中" # OK
user_name = "佐藤" # OK
total_price = 1000 # OK
user_at_home = "鈴木" # OK
print(f"正しい変数名の例:")
print(f" first_name = {first_name}")
print(f" user_name = {user_name}")
print(f" total_price = {total_price}")
print(f" user_at_home = {user_at_home}")

特殊文字やスペースは使えません。

実行結果:

正しい変数名の例: first_name = 田中 user_name = 佐藤 total_price = 1000 user_at_home = 鈴木

アンダースコアで区切るのが正しい方法です。

予約語は使えない

Pythonが特別に使っている単語は変数名にできません。

# 予約語の例(これらは使えません)
# if = 10 # if は予約語(NG)
# for = 20 # for は予約語(NG)
# class = 30 # class は予約語(NG)
# 正しい書き方
if_statement = 10 # OK
for_loop = 20 # OK
class_name = 30 # OK
print("予約語を避けた正しい例:")
print(f" if_statement = {if_statement}")
print(f" for_loop = {for_loop}")
print(f" class_name = {class_name}")
# よく使う予約語の例
python_keywords = [
"if", "else", "for", "while", "def", "class",
"and", "or", "not", "True", "False", "None"
]
print(f"
避けるべき予約語の例:")
print(f" {', '.join(python_keywords[:6])}")
print(f" {', '.join(python_keywords[6:])}")

予約語は文法で使われる特別な単語です。

実行結果:

予約語を避けた正しい例: if_statement = 10 for_loop = 20 class_name = 30 避けるべき予約語の例: if, else, for, while, def, class and, or, not, True, False, None

予約語には別の名前を付ける必要があります。

大文字小文字の区別

Pythonは大文字と小文字を別の文字として扱います。

# 大文字小文字の区別
name = "田中太郎" # 小文字
Name = "佐藤花子" # 最初だけ大文字
NAME = "鈴木一郎" # 全部大文字
print("大文字小文字の区別:")
print(f" name = {name}")
print(f" Name = {Name}")
print(f" NAME = {NAME}")
print("これらは全て異なる変数です")
# 型も確認
print(f"
変数の確認:")
print(f" name の値: {name}")
print(f" Name の値: {Name}")
print(f" NAME の値: {NAME}")

同じスペルでも大文字小文字が違えば別の変数です。

実行結果:

大文字小文字の区別: name = 田中太郎 Name = 佐藤花子 NAME = 鈴木一郎 これらは全て異なる変数です 変数の確認: name の値: 田中太郎 Name の値: 佐藤花子 NAME の値: 鈴木一郎

混乱を避けるため、統一したルールで書きましょう。

Pythonの推奨スタイル(PEP 8)

Pythonコミュニティで推奨されている書き方があります。

このルールに従うと、他の人が読みやすいコードになります。

snake_case(スネークケース)

変数名は小文字でアンダースコア区切りが推奨です。

# PEP 8推奨のsnake_case
user_name = "田中太郎"
user_age = 25
email_address = "tanaka@example.com"
is_admin = True
total_amount = 15000
print("PEP 8推奨の変数名:")
print(f" user_name = {user_name}")
print(f" user_age = {user_age}")
print(f" email_address = {email_address}")
print(f" is_admin = {is_admin}")
print(f" total_amount = {total_amount}")

単語をアンダースコアで区切る方法です。

実行結果:

PEP 8推奨の変数名: user_name = 田中太郎 user_age = 25 email_address = tanaka@example.com is_admin = True total_amount = 15000

読みやすくて理解しやすい形式です。

定数は大文字

変更しない値(定数)は大文字で書きます。

# 定数の命名(大文字でアンダースコア区切り)
MAX_LOGIN_ATTEMPTS = 3
DEFAULT_PAGE_SIZE = 20
API_TIMEOUT_SECONDS = 30
TAX_RATE = 0.1
print("定数の例:")
print(f" MAX_LOGIN_ATTEMPTS = {MAX_LOGIN_ATTEMPTS}")
print(f" DEFAULT_PAGE_SIZE = {DEFAULT_PAGE_SIZE}")
print(f" API_TIMEOUT_SECONDS = {API_TIMEOUT_SECONDS}")
print(f" TAX_RATE = {TAX_RATE}")
# 定数を使った計算
price = 1000
tax_amount = price * TAX_RATE
total_price = price + tax_amount
print(f"
定数を使った計算:")
print(f" 商品価格: {price}円")
print(f" 税額: {tax_amount}円")
print(f" 合計: {total_price}円")

定数は全て大文字で書きます。

実行結果:

定数の例: MAX_LOGIN_ATTEMPTS = 3 DEFAULT_PAGE_SIZE = 20 API_TIMEOUT_SECONDS = 30 TAX_RATE = 0.1 定数を使った計算: 商品価格: 1000円 税額: 100.0円 合計: 1100.0円

定数だとひと目でわかるようになります。

避けるべき書き方

Python では一般的でない書き方です。

# 避けるべき書き方の例
userName = "佐藤花子" # キャメルケース(避ける)
UserAge = 30 # 大文字始まり(避ける)
emailaddress = "sato@example.com" # 区切りなし(避ける)
ISADMIN = False # 変数なのに大文字(避ける)
print("避けるべき書き方:")
print(f" userName = {userName} # キャメルケース")
print(f" UserAge = {UserAge} # 大文字始まり")
print(f" emailaddress = {emailaddress} # 区切りなし")
print(f" ISADMIN = {ISADMIN} # 変数なのに大文字")
# 推奨される書き方
user_name = "佐藤花子"
user_age = 30
email_address = "sato@example.com"
is_admin = False
print(f"
推奨される書き方:")
print(f" user_name = {user_name}")
print(f" user_age = {user_age}")
print(f" email_address = {email_address}")
print(f" is_admin = {is_admin}")

統一感のある読みやすいコードになります。

実行結果:

避けるべき書き方: userName = 佐藤花子 # キャメルケース UserAge = 30 # 大文字始まり emailaddress = sato@example.com # 区切りなし ISADMIN = False # 変数なのに大文字 推奨される書き方: user_name = 佐藤花子 user_age = 30 email_address = sato@example.com is_admin = False

PEP 8に従うと統一感が生まれます。

意味のある変数名をつける

技術的なルールだけでなく、わかりやすい名前をつけることも大切です。

コードを読む人のことを考えましょう。

悪い例と良い例

変数名だけで何かわからない例わかりやすい例を比べてみましょう。

# 悪い例(何を表すかわからない)
d = 7
count = 50
timeout = 30
print("悪い例(意味が不明):")
print(f" d = {d} # dが何なのかわからない")
print(f" count = {count} # 何をカウントしているの?")
print(f" timeout = {timeout} # 30秒?30分?")
# 良い例(意味が明確)
days_until_deadline = 7
student_count = 50
timeout_seconds = 30
print(f"
良い例(意味が明確):")
print(f" days_until_deadline = {days_until_deadline} # 期限まで7日")
print(f" student_count = {student_count} # 学生数50人")
print(f" timeout_seconds = {timeout_seconds} # タイムアウト30秒")

変数名を見ただけで何かわかるようにします。

実行結果:

悪い例(意味が不明): d = 7 # dが何なのかわからない count = 50 # 何をカウントしているの? timeout = 30 # 30秒?30分? 良い例(意味が明確): days_until_deadline = 7 # 期限まで7日 student_count = 50 # 学生数50人 timeout_seconds = 30 # タイムアウト30秒

具体的で理解しやすい名前にするのがコツです。

関数での比較

関数の中でも意味のある変数名が重要です。

# 悪い例(意味不明な関数)
def calc(a, b, c):
"""悪い例:何を計算するかわからない"""
x = a * b
y = x - c
z = y * 0.1
return z
# 良い例(意味が明確な関数)
def calculate_tax_amount(price, quantity, discount):
"""良い例:税額を計算することが明確"""
subtotal = price * quantity
discounted_amount = subtotal - discount
tax_amount = discounted_amount * 0.1
return tax_amount
# 使用例
TAX_RATE = 0.1
print("関数での変数名の比較:")
print(f"悪い例: calc(1000, 3, 500) = {calc(1000, 3, 500)}")
print(f"良い例: calculate_tax_amount(1000, 3, 500) = {calculate_tax_amount(1000, 3, 500)}")
print(f"
良い例では処理の流れが理解できます:")
print(f" price = 1000円(単価)")
print(f" quantity = 3個(数量)")
print(f" discount = 500円(割引)")
print(f" subtotal = 1000 × 3 = 3000円(小計)")
print(f" discounted_amount = 3000 - 500 = 2500円(割引後)")
print(f" tax_amount = 2500 × 0.1 = 250円(税額)")

処理の流れがわかりやすい名前にします。

実行結果:

関数での変数名の比較: 悪い例: calc(1000, 3, 500) = 250.0 良い例: calculate_tax_amount(1000, 3, 500) = 250.0 良い例では処理の流れが理解できます: price = 1000円(単価) quantity = 3個(数量) discount = 500円(割引) subtotal = 1000 × 3 = 3000円(小計) discounted_amount = 3000 - 500 = 2500円(割引後) tax_amount = 2500 × 0.1 = 250円(税額)

計算の意味がわかるコードになりました。

単位や種類を含める

単位や種類を変数名に含めると間違いを防げます。

# 単位を含めた変数名
weight_kg = 70 # 体重(キログラム)
height_cm = 175 # 身長(センチメートル)
age_years = 25 # 年齢(年)
timeout_seconds = 30 # タイムアウト(秒)
distance_meters = 1500 # 距離(メートル)
print("単位を含めた変数名:")
print(f" weight_kg = {weight_kg}")
print(f" height_cm = {height_cm}")
print(f" age_years = {age_years}")
print(f" timeout_seconds = {timeout_seconds}")
print(f" distance_meters = {distance_meters}")
# BMI計算の例
def calculate_bmi(weight_kg, height_cm):
"""BMIを計算(単位が明確)"""
height_m = height_cm / 100 # センチをメートルに変換
bmi = weight_kg / (height_m ** 2)
return round(bmi, 1)
bmi_value = calculate_bmi(weight_kg, height_cm)
print(f"
BMI計算結果:")
print(f" 体重: {weight_kg}kg")
print(f" 身長: {height_cm}cm")
print(f" BMI: {bmi_value}")

単位がわかると計算ミスを防げます。

実行結果:

単位を含めた変数名: weight_kg = 70 height_cm = 175 age_years = 25 timeout_seconds = 30 distance_meters = 1500 BMI計算結果: 体重: 70kg 身長: 175cm BMI: 22.9

単位を明記することで安全な計算ができます。

適切な長さの変数名

変数名は短すぎても長すぎてもいけません。

適切なバランスを見つけましょう。

短い変数名が適切な場合

ループや数学的な処理では短い名前でもOKです。

# 短い変数名が適切な例
print("短い変数名が適切な例:")
# 単純なループ
print("単純なループ:")
for i in range(5):
print(f" {i}: こんにちは")
# 数学的な計算
def distance(x1, y1, x2, y2):
"""2点間の距離(数学的なのでx,yでOK)"""
dx = x2 - x1
dy = y2 - y1
return (dx**2 + dy**2)**0.5
print(f"
2点間の距離:")
result = distance(0, 0, 3, 4)
print(f" distance(0, 0, 3, 4) = {result}")
# 座標の計算
x = 10
y = 20
print(f"
座標:")
print(f" x = {x}")
print(f" y = {y}")

文脈が明確なら短くてもOKです。

実行結果:

短い変数名が適切な例: 単純なループ: 0: こんにちは 1: こんにちは 2: こんにちは 3: こんにちは 4: こんにちは 2点間の距離: distance(0, 0, 3, 4) = 5.0 座標: x = 10 y = 20

数学や単純な処理では短い名前も使えるということがわかります。

長い変数名が必要な場合

複雑な概念や設定値では長い名前が必要です。

# 長い変数名が必要な例
print("長い変数名が必要な例:")
# 設定値
MAX_DATABASE_CONNECTION_ATTEMPTS = 3
USER_SESSION_TIMEOUT_MINUTES = 30
EMAIL_VERIFICATION_TOKEN_EXPIRY_HOURS = 24
print("設定値:")
print(f" MAX_DATABASE_CONNECTION_ATTEMPTS = {MAX_DATABASE_CONNECTION_ATTEMPTS}")
print(f" USER_SESSION_TIMEOUT_MINUTES = {USER_SESSION_TIMEOUT_MINUTES}")
print(f" EMAIL_VERIFICATION_TOKEN_EXPIRY_HOURS = {EMAIL_VERIFICATION_TOKEN_EXPIRY_HOURS}")
# 複雑な状態管理
is_user_email_verified = False
last_password_change_date = "2024-01-01"
current_user_permission_level = "admin"
print(f"
状態管理:")
print(f" is_user_email_verified = {is_user_email_verified}")
print(f" last_password_change_date = {last_password_change_date}")
print(f" current_user_permission_level = {current_user_permission_level}")
# ビジネスロジック
def calculate_employee_annual_bonus(base_salary, performance_score, years_of_service):
"""従業員の年間賞与を計算"""
base_bonus_rate = 0.1
performance_multiplier = performance_score / 100
service_bonus = years_of_service * 0.01
annual_bonus = base_salary * (base_bonus_rate + performance_multiplier + service_bonus)
return round(annual_bonus)
# 使用例
bonus = calculate_employee_annual_bonus(4000000, 85, 5)
print(f"
賞与計算例:")
print(f" 基本給: 4,000,000円")
print(f" パフォーマンス: 85点")
print(f" 勤続年数: 5年")
print(f" 年間賞与: {bonus:,}円")

重要で複雑な概念は詳しい名前にします。

実行結果:

長い変数名が必要な例: 設定値: MAX_DATABASE_CONNECTION_ATTEMPTS = 3 USER_SESSION_TIMEOUT_MINUTES = 30 EMAIL_VERIFICATION_TOKEN_EXPIRY_HOURS = 24 状態管理: is_user_email_verified = False last_password_change_date = 2024-01-01 current_user_permission_level = admin 賞与計算例: 基本給: 4,000,000円 パフォーマンス: 85点 勤続年数: 5年 年間賞与: 640,000円

複雑な概念は長い名前で明確に表現します。

省略のルール

省略する時のルールがあります。

# 省略のルール例
print("省略のルール:")
# 避けるべき省略
print("避けるべき省略:")
# usr = "田中" # user と書く
# cnt = 10 # count と書く
# amt = 1000 # amount と書く
# 正しい書き方
user = "田中"
count = 10
amount = 1000
print(f" user = {user} # usr ではなく user")
print(f" count = {count} # cnt ではなく count")
print(f" amount = {amount} # amt ではなく amount")
# 許容される省略(業界標準)
print(f"
許容される省略:")
user_id = 12345
api_url = "https://api.example.com"
html_content = "<h1>Hello</h1>"
json_data = {"name": "田中"}
print(f" user_id = {user_id} # id は標準的")
print(f" api_url = {api_url}")
print(f" html_content = {html_content}")
print(f" json_data = {json_data}")
# 文脈によって判断
print(f"
文脈によって判断:")
max_size = 1000 # maximum の省略
min_value = 1 # minimum の省略
temp_file = "temp.txt" # temporary の省略
print(f" max_size = {max_size} # 文脈が明確なら max でOK")
print(f" min_value = {min_value} # 文脈が明確なら min でOK")
print(f" temp_file = {temp_file} # 文脈が明確なら temp でOK")

業界標準の省略なら使ってもOKです。

実行結果:

省略のルール: 避けるべき省略: user = 田中 # usr ではなく user count = 10 # cnt ではなく count amount = 1000 # amt ではなく amount 許容される省略: user_id = 12345 # id は標準的 api_url = https://api.example.com html_content = <h1>Hello</h1> json_data = {'name': '田中'} 文脈によって判断: max_size = 1000 # 文脈が明確なら max でOK min_value = 1 # 文脈が明確なら min でOK temp_file = temp.txt # 文脈が明確なら temp でOK

読みやすさを最優先に考えます。

実践的な命名テクニック

プロが使っている命名のコツを覚えましょう。

場面に応じた適切な名前の付け方があります。

真偽値(True/False)の命名

True/Falseを表す変数は特別な書き方があります。

# 真偽値の命名パターン
print("真偽値の命名パターン:")
# is_ で始まる(状態を表す)
is_logged_in = True
is_valid_email = False
is_admin_user = True
print("is_ パターン(状態):")
print(f" is_logged_in = {is_logged_in}")
print(f" is_valid_email = {is_valid_email}")
print(f" is_admin_user = {is_admin_user}")
# has_ で始まる(所有を表す)
has_permission = True
has_error = False
has_children = True
print(f"
has_ パターン(所有):")
print(f" has_permission = {has_permission}")
print(f" has_error = {has_error}")
print(f" has_children = {has_children}")
# can_ で始まる(能力を表す)
can_edit = True
can_delete = False
can_view = True
print(f"
can_ パターン(能力):")
print(f" can_edit = {can_edit}")
print(f" can_delete = {can_delete}")
print(f" can_view = {can_view}")
# 実用例
def check_user_access(user_level):
"""ユーザーアクセス権限をチェック"""
is_admin = user_level == "admin"
can_edit_posts = user_level in ["admin", "editor"]
has_read_permission = user_level in ["admin", "editor", "viewer"]
return is_admin, can_edit_posts, has_read_permission
# テスト
admin_check = check_user_access("admin")
editor_check = check_user_access("editor")
viewer_check = check_user_access("viewer")
print(f"
アクセス権限チェック:")
print(f" 管理者: is_admin={admin_check[0]}, can_edit={admin_check[1]}, has_read={admin_check[2]}")
print(f" 編集者: is_admin={editor_check[0]}, can_edit={editor_check[1]}, has_read={editor_check[2]}")
print(f" 閲覧者: is_admin={viewer_check[0]}, can_edit={viewer_check[1]}, has_read={viewer_check[2]}")

質問形式で考えるとわかりやすい名前になります。

実行結果:

真偽値の命名パターン: is_ パターン(状態): is_logged_in = True is_valid_email = False is_admin_user = True has_ パターン(所有): has_permission = True has_error = False has_children = True can_ パターン(能力): can_edit = True can_delete = False can_view = True アクセス権限チェック: 管理者: is_admin=True, can_edit=True, has_read=True 編集者: is_admin=False, can_edit=True, has_read=True 閲覧者: is_admin=False, can_edit=False, has_read=True

役割が明確で読みやすいコードになります。

数量やカウンターの命名

数を表す変数にも決まったパターンがあります。

# 数量・カウンターの命名
print("数量・カウンターの命名:")
# _count で終わる
user_count = 150
error_count = 5
retry_count = 3
print("_count パターン:")
print(f" user_count = {user_count}")
print(f" error_count = {error_count}")
print(f" retry_count = {retry_count}")
# num_of_ で始まる
num_of_pages = 10
num_of_items = 25
num_of_attempts = 3
print(f"
num_of_ パターン:")
print(f" num_of_pages = {num_of_pages}")
print(f" num_of_items = {num_of_items}")
print(f" num_of_attempts = {num_of_attempts}")
# total_ で始まる
total_amount = 15000
total_score = 450
total_users = 1000
print(f"
total_ パターン:")
print(f" total_amount = {total_amount}")
print(f" total_score = {total_score}")
print(f" total_users = {total_users}")
# 実際の統計処理例
def calculate_statistics(scores):
"""点数の統計を計算"""
item_count = len(scores)
total_score = sum(scores)
average_score = total_score / item_count if item_count > 0 else 0
max_score = max(scores) if scores else 0
min_score = min(scores) if scores else 0
return {
"item_count": item_count,
"total_score": total_score,
"average_score": round(average_score, 1),
"max_score": max_score,
"min_score": min_score
}
# テストデータ
test_scores = [85, 92, 78, 96, 73, 88]
stats = calculate_statistics(test_scores)
print(f"
統計計算結果:")
print(f" item_count = {stats['item_count']}件")
print(f" total_score = {stats['total_score']}点")
print(f" average_score = {stats['average_score']}点")
print(f" max_score = {stats['max_score']}点")
print(f" min_score = {stats['min_score']}点")

何を数えているかわかる名前にします。

実行結果:

数量・カウンターの命名: _count パターン: user_count = 150 error_count = 5 retry_count = 3 num_of_ パターン: num_of_pages = 10 num_of_items = 25 num_of_attempts = 3 total_ パターン: total_amount = 15000 total_score = 450 total_users = 1000 統計計算結果: item_count = 6件 total_score = 512点 average_score = 85.3点 max_score = 96点 min_score = 73点

数量の種類が明確になります。

対になる概念の命名

セットで使う変数は対で考えます。

# 対になる概念の命名
print("対になる概念の命名:")
# 開始・終了
start_time = "09:00"
end_time = "17:00"
start_date = "2024-01-01"
end_date = "2024-12-31"
print("開始・終了:")
print(f" start_time = {start_time}, end_time = {end_time}")
print(f" start_date = {start_date}, end_date = {end_date}")
# 最小・最大
min_age = 18
max_age = 65
min_price = 100
max_price = 10000
print(f"
最小・最大:")
print(f" min_age = {min_age}, max_age = {max_age}")
print(f" min_price = {min_price}, max_price = {max_price}")
# 入力・出力
input_file = "data.txt"
output_file = "result.txt"
input_data = [1, 2, 3, 4, 5]
output_data = [x * 2 for x in input_data]
print(f"
入力・出力:")
print(f" input_file = {input_file}, output_file = {output_file}")
print(f" input_data = {input_data}")
print(f" output_data = {output_data}")
# 前・後
previous_value = 100
next_value = 200
old_password = "old123"
new_password = "new456"
print(f"
前・後:")
print(f" previous_value = {previous_value}, next_value = {next_value}")
print(f" old_password = {old_password}, new_password = {new_password}")
# 実用例:ファイル処理
def process_file_data(input_filename, output_filename):
"""ファイルデータを処理"""
print(f"
ファイル処理の例:")
print(f" 入力ファイル: {input_filename}")
print(f" 出力ファイル: {output_filename}")
# ファイル処理のシミュレーション
raw_data = "元のデータ"
processed_data = f"処理済み{raw_data}"
print(f" raw_data = {raw_data}")
print(f" processed_data = {processed_data}")
return processed_data
# 処理実行
result = process_file_data("input.txt", "output.txt")

対で使うことが明確になります。

実行結果:

対になる概念の命名: 開始・終了: start_time = 09:00, end_time = 17:00 start_date = 2024-01-01, end_date = 2024-12-31 最小・最大: min_age = 18, max_age = 65 min_price = 100, max_price = 10000 入力・出力: input_file = data.txt, output_file = result.txt input_data = [1, 2, 3, 4, 5] output_data = [2, 4, 6, 8, 10] 前・後: previous_value = 100, next_value = 200 old_password = old123, new_password = new456 ファイル処理の例: 入力ファイル: input.txt 出力ファイル: output.txt raw_data = 元のデータ processed_data = 処理済み元のデータ

関連する変数の関係がわかりやすくなります。

よくある間違いと対策

初心者がやりがちな変数名の間違いを覚えておきましょう。

これを避けることで、より良いコードが書けます。

意味のない名前を避ける

何を表すかわからない名前は使わないようにします。

# よくある間違い:意味のない名前
print("よくある間違い例:")
# 悪い例
# data = "田中太郎" # dataが何のデータ?
# info = 25 # infoが何の情報?
# temp = "admin" # tempが何の一時的な値?
# thing = 1000 # thingが何?
# 良い例
user_name = "田中太郎"
user_age = 25
user_role = "admin"
product_price = 1000
print("改善例:")
print(f" user_name = {user_name} # ユーザー名のデータ")
print(f" user_age = {user_age} # ユーザー年齢の情報")
print(f" user_role = {user_role} # ユーザー権限の一時値")
print(f" product_price = {product_price} # 商品価格の値")
# 関数での比較
def bad_function(data, info, temp):
"""悪い例:引数の意味がわからない"""
result = data + str(info) + temp
return result
def good_function(user_name, user_age, user_status):
"""良い例:引数の意味が明確"""
user_summary = user_name + str(user_age) + user_status
return user_summary
# 比較
bad_result = bad_function("田中", 25, "アクティブ")
good_result = good_function("田中", 25, "アクティブ")
print(f"
関数での比較:")
print(f" 悪い例: bad_function('田中', 25, 'アクティブ') = {bad_result}")
print(f" 良い例: good_function('田中', 25, 'アクティブ') = {good_result}")
print(f" 結果は同じだが、良い例の方が理解しやすい")

具体的で明確な名前を使いましょう。

実行結果:

よくある間違い例: 改善例: user_name = 田中太郎 # ユーザー名のデータ user_age = 25 # ユーザー年齢の情報 user_role = admin # ユーザー権限の一時値 product_price = 1000 # 商品価格の値 関数での比較: 悪い例: bad_function('田中', 25, 'アクティブ') = 田中25アクティブ 良い例: good_function('田中', 25, 'アクティブ') = 田中25アクティブ 結果は同じだが、良い例の方が理解しやすい

変数名だけで内容がわかるようにします。

型名を変数名にしない

データの型を変数名にするのは良くありません。

# よくある間違い:型名を変数名にする
print("型名を変数名にする間違い:")
# 悪い例(型名が変数名)
# list = [1, 2, 3] # list は型名
# string = "こんにちは" # string は型名
# number = 42 # number は型名
# boolean = True # boolean は型名
# 良い例(内容を表す名前)
scores = [85, 92, 78]
greeting_message = "こんにちは"
student_age = 42
is_registered = True
print("改善例:")
print(f" scores = {scores} # 点数のリスト")
print(f" greeting_message = {greeting_message} # 挨拶メッセージ")
print(f" student_age = {student_age} # 学生の年齢")
print(f" is_registered = {is_registered} # 登録済みかどうか")
# より具体的な例
student_names = ["田中", "佐藤", "鈴木"]
error_message = "ユーザーが見つかりません"
total_count = 150
has_permission = False
print(f"
より具体的な例:")
print(f" student_names = {student_names}")
print(f" error_message = {error_message}")
print(f" total_count = {total_count}")
print(f" has_permission = {has_permission}")
# 実用例:商品管理システム
def manage_products():
"""商品管理の例"""
# 悪い例の変数名(コメントアウト)
# list = ["りんご", "バナナ", "オレンジ"]
# dict = {"りんご": 100, "バナナ": 80}
# 良い例
product_names = ["りんご", "バナナ", "オレンジ"]
product_prices = {"りんご": 100, "バナナ": 80, "オレンジ": 120}
print(f"
商品管理システム:")
print(f" product_names = {product_names}")
print(f" product_prices = {product_prices}")
# 商品情報の表示
for product in product_names:
price = product_prices.get(product, 0)
print(f" {product}: {price}円")
manage_products()

何のデータかわかる名前にします。

実行結果:

型名を変数名にする間違い: 改善例: scores = [85, 92, 78] # 点数のリスト greeting_message = こんにちは # 挨拶メッセージ student_age = 42 # 学生の年齢 is_registered = True # 登録済みかどうか より具体的な例: student_names = ['田中', '佐藤', '鈴木'] error_message = ユーザーが見つかりません total_count = 150 has_permission = False 商品管理システム: product_names = ['りんご', 'バナナ', 'オレンジ'] product_prices = {'りんご': 100, 'バナナ': 80, 'オレンジ': 120} りんご: 100円 バナナ: 80円 オレンジ: 120円

型ではなく内容を表現することが大切です。

一貫性を保つ

同じプロジェクト内では命名ルールを統一します。

# 一貫性のある命名
print("一貫性のある命名の重要性:")
# 悪い例:バラバラな命名
# userName = "田中" # キャメルケース
# user_age = 25 # スネークケース
# UserEmail = "tanaka@example.com" # 大文字始まり
# USERPHONE = "090-1234-5678" # 全部大文字
# 良い例:統一された命名
user_name = "田中"
user_age = 25
user_email = "tanaka@example.com"
user_phone = "090-1234-5678"
print("統一された命名(snake_case):")
print(f" user_name = {user_name}")
print(f" user_age = {user_age}")
print(f" user_email = {user_email}")
print(f" user_phone = {user_phone}")
# ID系の変数も統一
user_id = 12345
product_id = 67890
order_id = 11111
print(f"
ID系変数の統一:")
print(f" user_id = {user_id}")
print(f" product_id = {product_id}")
print(f" order_id = {order_id}")
# 日時系の変数も統一
created_at = "2024-01-01 10:00:00"
updated_at = "2024-01-02 15:30:00"
deleted_at = None
print(f"
日時系変数の統一:")
print(f" created_at = {created_at}")
print(f" updated_at = {updated_at}")
print(f" deleted_at = {deleted_at}")
# フラグ系の変数も統一
is_active = True
is_verified = False
is_admin = True
print(f"
フラグ系変数の統一:")
print(f" is_active = {is_active}")
print(f" is_verified = {is_verified}")
print(f" is_admin = {is_admin}")
# 設定系の変数も統一
MAX_FILE_SIZE = 1024 * 1024 # 1MB
MAX_USER_COUNT = 1000
MAX_RETRY_ATTEMPTS = 3
print(f"
設定系変数の統一:")
print(f" MAX_FILE_SIZE = {MAX_FILE_SIZE}")
print(f" MAX_USER_COUNT = {MAX_USER_COUNT}")
print(f" MAX_RETRY_ATTEMPTS = {MAX_RETRY_ATTEMPTS}")

統一感のあるコードが読みやすさを向上させます。

実行結果:

一貫性のある命名の重要性: 統一された命名(snake_case): user_name = 田中 user_age = 25 user_email = tanaka@example.com user_phone = 090-1234-5678 ID系変数の統一: user_id = 12345 product_id = 67890 order_id = 11111 日時系変数の統一: created_at = 2024-01-01 10:00:00 updated_at = 2024-01-02 15:30:00 deleted_at = None フラグ系変数の統一: is_active = True is_verified = False is_admin = True 設定系変数の統一: MAX_FILE_SIZE = 1048576 MAX_USER_COUNT = 1000 MAX_RETRY_ATTEMPTS = 3

パターンが統一されているので理解しやすいコードになります。

まとめ: 良い変数名で読みやすいコードを

Python変数名の命名ルールの基本から実践的なテクニックまで詳しく解説しました。

良い変数名をつけることで、コードの可読性と保守性が大幅に向上します。

必須の基本ルール

これだけは絶対に守りましょう。

  • 使える文字: 英字、数字、アンダースコアのみ
  • 先頭文字: 数字で始められない
  • 予約語: Python の特別な単語は使用禁止
  • 大文字小文字: 区別されるので注意

PEP 8推奨スタイル

Pythonコミュニティの標準です。

  • 変数名: snake_case(小文字でアンダースコア区切り)
  • 定数: UPPER_SNAKE_CASE(大文字でアンダースコア区切り)
  • 統一性: プロジェクト全体で一貫したスタイル

意味のある名前のコツ

読む人のことを考えた命名です。

  • 自己説明的: 変数名だけで何かわかる
  • 具体的: data、info、temp などの曖昧な名前を避ける
  • 単位明示: 時間、距離、重量などは単位を含める
  • 適切な長さ: 短すぎず長すぎないバランス

実践的なテクニック

場面に応じた適切なパターンです。

  • 真偽値: is_、has_、can_ で始める
  • カウンター: count、num_of、total_ を使う
  • 対の概念: start/end、min/max、input/output
  • 設定値: MAX_、DEFAULT_、_TIMEOUT など

避けるべき間違い

初心者がやりがちな問題です。

  • 意味のない名前: data、info、temp、thing
  • 型名の使用: list、string、number、boolean
  • 命名の不統一: キャメルケースとスネークケースの混在
  • 日本語の過度な使用: 国際化や互換性の問題

良い変数名は、未来の自分やチームメンバーへの贈り物です。

まずは基本的なsnake_caseから始めて、徐々に意味のある具体的な名前をつけられるようになりましょう!

関連記事