【保存版】Python初心者必見!「汚いコード」と言われないための書き方ルール8選

※当サイトはアフィリエイトプログラムに参加しています。

【保存版】Python初心者必見!「汚いコード」と言われないための書き方ルール8選 コラム

Pythonは「読みやすさを重視した言語」として知られています。その哲学は「美しいものは醜いものより良い」「読みやすさ重要」という考え方に基づいています。しかし、プログラミング初心者のうちは「きれいなコード」や「読みやすいコード」がどういうものかわからないことが多いでしょう。

この記事では、Pythonで「汚いコード」と言われないための8個の書き方ルールを紹介します。これらのルールはすぐに実践でき、あなたのコードを劇的に改善します。

8個の書き方ルール
  1. PEP 8に従う – Pythonの公式スタイルガイド
  2. 意味のある変数名を使う
  3. 適切なインデントとスペースを使う
  4. 関数とクラスを適切に分割する
  5. 効果的なコメントを書く
  6. docstring(文書化文字列)を活用する
  7. 例外処理を適切に行う
  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)

スポンサーリンク

変数名は短すぎず、長すぎず、そして何を表しているのかが一目でわかるようにしましょう。

命名規則:

  • 変数・関数名:スネークケース(小文字+アンダースコア)user_name
  • クラス名:パスカルケース(単語の先頭を大文字)UserAccount
  • 定数:すべて大文字+アンダースコア MAX_RETRY_COUNT

悪い例:

# aが何を表しているのか不明
a = 100

# 一時的な変数名だが意味不明
temp = “山田太郎”

# 長すぎる
data_from_database_which_contains_user_information = {}

良い例:

# 何の値か明確
age = 100

# 何のデータか明確
user_name = “山田太郎”

# 適切な長さで意味が通る
user_data = {}

スポンサーリンク

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}

スポンサーリンク

一つの関数やクラスが多くのことをしすぎないようにしましょう。「単一責任の原則」に従い、一つの関数は一つのことだけを行うようにします。

悪い例:

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
スポンサーリンク

コメントは「なぜそのコードを書いたのか」という意図を説明するためのものです。コードの内容をそのまま書くような無駄なコメントは避けましょう。

悪い例:

# 年齢を1増やす
age = age + 1

# ユーザー一覧をループする
for user in users:
# ユーザー名を表示
print(user.name)

良い例:

# 誕生日が来たのでユーザーの年齢を更新
age = age + 1

# アクティブユーザーのみを大文字で表示
for user in active_users:
print(user.name.upper())

スポンサーリンク

関数、クラス、モジュールには適切な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)
スポンサーリンク

例外は具体的に捕捉し、裸の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)
スポンサーリンク

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')
スポンサーリンク

「汚いコード」と言われないためには、一貫したスタイルでコードを書くことが大切です。この記事で紹介した8のルールを実践することで、あなたのPythonコードは格段に読みやすくなります。

特に初心者のうちは、すべてのルールを一度に守るのは難しいかもしれません。まずは意味のある変数名を使うことと、適切なインデントを心がけることから始めてみましょう。慣れてきたら徐々に他のルールも取り入れていくとよいです。

コードの美しさは、それを書いた人の技術力と思いやりの表れです。あなたのコードが他の開発者から「きれいだ」と言われるようになったら嬉しいですよね。

※当サイトはアフィリエイトプログラムに参加しています。

コラム
スポンサーリンク
meguをフォローする