Pythonは「読みやすさを重視した言語」として知られています。その哲学は「美しいものは醜いものより良い」「読みやすさ重要」という考え方に基づいています。しかし、プログラミング初心者のうちは「きれいなコード」や「読みやすいコード」がどういうものかわからないことが多いでしょう。
この記事では、Pythonで「汚いコード」と言われないための8個の書き方ルールを紹介します。これらのルールはすぐに実践でき、あなたのコードを劇的に改善します。
- PEP 8に従う – Pythonの公式スタイルガイド
- 意味のある変数名を使う
- 適切なインデントとスペースを使う
- 関数とクラスを適切に分割する
- 効果的なコメントを書く
- docstring(文書化文字列)を活用する
- 例外処理を適切に行う
- Pythonらしい書き方をする
1. PEP 8に従う – Pythonの公式スタイルガイド
PEP 8はPythonの公式スタイルガイドで、コードを書く際の標準的なルールを定めています。このガイドラインに従うことで、他の開発者にとっても読みやすいコードになります。
主なルール:
- インデントは4スペース
- 行の長さは最大79文字
- 関数やクラスの間は2行空ける
- インポートは別々の行に書く
- 演算子の周りにスペースを入れる
悪い例:演算子の周りにスペースがない
x=5;y=10
z=x+y
print(z)
良い例:
x = 5
y = 10
z = x + y
print(z)
2. 意味のある変数名を使う
変数名は短すぎず、長すぎず、そして何を表しているのかが一目でわかるようにしましょう。
命名規則:
- 変数・関数名:スネークケース(小文字+アンダースコア)
user_name
- クラス名:パスカルケース(単語の先頭を大文字)
UserAccount
- 定数:すべて大文字+アンダースコア
MAX_RETRY_COUNT
悪い例:
# aが何を表しているのか不明
a = 100
# 一時的な変数名だが意味不明
temp = “山田太郎”
# 長すぎる
data_from_database_which_contains_user_information = {}
良い例:
# 何の値か明確
age = 100
# 何のデータか明確
user_name = “山田太郎”
# 適切な長さで意味が通る
user_data = {}
3. 適切なインデントとスペースを使う
Pythonではインデントが文法の一部です。一貫したインデントで読みやすさを保ちましょう。
悪い例:インデントが揃っていない
def calculate_total(items):
total = 0
for item in items: # インデントが揃っていない
price = item['price']
total += price
return total
良い例:
def calculate_total(items):
total = 0
for item in items:
price = item['price']
total += price
return total
また、演算子や記号の前後にスペースを適切に入れることで読みやすくなります:
悪い例:前後にスペースがない
x=5+3*2
y=[1,2,3,4]
z={‘a’:1,’b’:2}
良い例:
x = 5 + 3 * 2
y = [1, 2, 3, 4]
z = {‘a’: 1, ‘b’: 2}
4. 関数とクラスを適切に分割する
一つの関数やクラスが多くのことをしすぎないようにしましょう。「単一責任の原則」に従い、一つの関数は一つのことだけを行うようにします。
悪い例:
def process_user_data(user_id):
# データベースからユーザー情報を取得
user = db.get_user(user_id)
# ユーザー情報を検証
if not user.name or not user.email:
print("Invalid user data")
return False
# ユーザー情報を処理
processed_data = {
'name': user.name.upper(),
'email': user.email.lower(),
'age': calculate_age(user.birth_date)
}
# 処理したデータを保存
db.save_processed_data(user_id, processed_data)
# メール送信
send_email(user.email, "データが処理されました")
return True
良い例:
def get_user_data(user_id):
return db.get_user(user_id)
def validate_user_data(user):
return bool(user.name and user.email)
def process_user_data(user):
return {
'name': user.name.upper(),
'email': user.email.lower(),
'age': calculate_age(user.birth_date)
}
def save_processed_data(user_id, processed_data):
db.save_processed_data(user_id, processed_data)
def notify_user(email):
send_email(email, "データが処理されました")
def handle_user_processing(user_id):
user = get_user_data(user_id)
if not validate_user_data(user):
print("Invalid user data")
return False
processed_data = process_user_data(user)
save_processed_data(user_id, processed_data)
notify_user(user.email)
return True
5. 効果的なコメントを書く
コメントは「なぜそのコードを書いたのか」という意図を説明するためのものです。コードの内容をそのまま書くような無駄なコメントは避けましょう。
悪い例:
# 年齢を1増やす
age = age + 1
# ユーザー一覧をループする
for user in users:
# ユーザー名を表示
print(user.name)
良い例:
# 誕生日が来たのでユーザーの年齢を更新
age = age + 1
# アクティブユーザーのみを大文字で表示
for user in active_users:
print(user.name.upper())
6. docstring(文書化文字列)を活用する
関数、クラス、モジュールには適切なdocstring(文書化文字列)を書きましょう。これにより、他の開発者があなたのコードをどう使うべきかがわかります。
良い例:
def calculate_bmi(weight, height):
"""
体重と身長からBMI(ボディマス指数)を計算します。
Args:
weight (float): 体重(kg)
height (float): 身長(m)
Returns:
float: 計算されたBMI値
Raises:
ValueError: 身長または体重が0以下の場合
"""
if weight <= 0 or height <= 0:
raise ValueError("身長と体重は正の値でなければなりません")
return weight / (height ** 2)
7. 例外処理を適切に行う
例外は具体的に捕捉し、裸のexceptは避けましょう。また、例外を握りつぶさずに適切に処理することが重要です。
悪い例:
try:
data = process_data(raw_data)
result = analyze_data(data)
save_result(result)
except: # 全ての例外を捕捉してしまう
print("エラーが発生しました")
良い例:
try:
data = process_data(raw_data)
result = analyze_data(data)
save_result(result)
except ValueError as e:
print(f"データ処理エラー: {e}")
except AnalysisError as e:
print(f"分析エラー: {e}")
log_error(e)
except IOError as e:
print(f"保存エラー: {e}")
retry_save(result)
8. Pythonらしい書き方をする
Pythonには便利な組み込み機能がたくさんあります。これらを活用してコードを簡潔にしましょう。
悪い例(他言語的):
# リスト内の要素を2倍にする
result = []
for i in range(len(numbers)):
result.append(numbers[i] * 2)
# 辞書のキーがあるか確認
if 'key' in my_dict.keys():
value = my_dict['key']
else:
value = 'default'
良い例(Pythonic):
# リスト内包表記を使用
result = [x * 2 for x in numbers]
# 辞書のget()メソッドを使用
value = my_dict.get('key', 'default')
Python初心者必見!「汚いコード」と言われないための書き方ルール8選 まとめ
「汚いコード」と言われないためには、一貫したスタイルでコードを書くことが大切です。この記事で紹介した8のルールを実践することで、あなたのPythonコードは格段に読みやすくなります。
特に初心者のうちは、すべてのルールを一度に守るのは難しいかもしれません。まずは意味のある変数名を使うことと、適切なインデントを心がけることから始めてみましょう。慣れてきたら徐々に他のルールも取り入れていくとよいです。
コードの美しさは、それを書いた人の技術力と思いやりの表れです。あなたのコードが他の開発者から「きれいだ」と言われるようになったら嬉しいですよね。