Python | Web / API:PEP8 の基礎

Python Python
スポンサーリンク
  1. 概要(PEP8は「読みやすさと一貫性」をコードに宿すための基本ルール)
  2. コードレイアウトの基礎(インデント・行長・改行)
    1. インデントはスペース4つに統一
    2. 行の長さは原則79文字(説明文は72文字)
    3. 括弧での綺麗な改行(バックスラッシュ不要)
  3. 空白のルール(演算子・カンマ・関数定義)
    1. 演算子の前後に1スペース(ただし整列目的の過剰スペースはNG)
    2. カンマ・コロン・セミコロンの直前にスペースは入れない
    3. 関数定義や呼び出しの括弧直前にスペースは入れない
  4. 命名規則(わかりやすさと一貫性)
    1. 変数・関数はスネークケース、小文字+アンダースコア
    2. クラスはCapWords(パスカルケース)
    3. 定数は全て大文字+アンダースコア
    4. 先頭・末尾アンダースコアの意味
  5. importの並べ方(標準→サード→自作の順、1行1モジュール)
    1. 並び順とグループ分け
    2. 相対importの乱用は避け、絶対importを基本に
  6. 空行・コメント・docstring(文脈を正しく付ける)
    1. 空行で構造を区切る
    2. 行末コメントは控えめに、説明は上に
    3. docstringで「何をするか」「引数と戻り値」を簡潔に
  7. よくある落とし穴と安全な書き方(例外・比較・関数設計)
    1. None等との比較は is / is not を使う
    2. 真偽の比較は == True/False を避ける
    3. ミュータブルなデフォルト引数は使わない
    4. 例外の捕捉は広すぎない・メッセージは簡潔に
  8. PEP8を守るためのツール活用(機械でチェック&整形)
    1. チェック(pycodestyle / flake8)
    2. 自動整形(black / autopep8)
  9. 例題(PEP8前後でコードを整える)
    1. Before:詰まり・命名・改行がバラバラ
    2. After:PEP8準拠で読みやすく
  10. まとめ(まず「最低限の型」を体に入れる)

概要(PEP8は「読みやすさと一貫性」をコードに宿すための基本ルール)

PEP8はPythonの公式スタイルガイドで、見た目の揃え方や命名、インデント、改行など「どう書くと読みやすいか」を定めています。重要なのは「他人と未来の自分が理解しやすくなること」。まずはインデント4スペース、79文字以内の行長、命名規則、空白の置き方、importの並べ方、空行・コメント・docstringの基本を体に入れるのが近道です。


コードレイアウトの基礎(インデント・行長・改行)

インデントはスペース4つに統一

タブではなくスペースを使い、ネスト1段につき4スペースです。混在は読みにくさとエラーの元です。

def process(items):
    for x in items:      # ← 4スペース
        print(x)
Python

行の長さは原則79文字(説明文は72文字)

コードは79文字を目安に折り返します。docstringやコメントは72文字を目安に短めに。

# 悪い例:横に長すぎる
result = service.fetch(user_id, include_details=True, retry=3, timeout=10, cache=True)

# 良い例:括弧の内部改行で自然に折る
result = service.fetch(
    user_id,
    include_details=True,
    retry=3,
    timeout=10,
    cache=True,
)
Python

括弧での綺麗な改行(バックスラッシュ不要)

複数引数やリストは、括弧の中で改行して整えます。閉じ括弧は構造に合わせて縦揃えが読みやすいです。

data = {
    "name": "taro",
    "age": 23,
    "active": True,
}
Python

空白のルール(演算子・カンマ・関数定義)

演算子の前後に1スペース(ただし整列目的の過剰スペースはNG)

a = b + c      # 良い
a=b+c          # 悪い(詰まりすぎ)

# キーワード引数は前後のスペース不要
connect(timeout=10, retry=3)
Python

カンマ・コロン・セミコロンの直前にスペースは入れない

items = [1, 2, 3]     # 良い
items = [1,2,3 ]      # 悪い(置き方が不規則)
Python

関数定義や呼び出しの括弧直前にスペースは入れない

def add(a, b):  # 良い
    return a + b

add(1, 2)       # 良い
add (1, 2)      # 悪い(括弧前スペース)
Python

命名規則(わかりやすさと一貫性)

変数・関数はスネークケース、小文字+アンダースコア

def total_price(amount, tax_rate):
    return amount * (1 + tax_rate)
Python

クラスはCapWords(パスカルケース)

class OrderItem:
    ...
Python

定数は全て大文字+アンダースコア

MAX_RETRY = 3
API_BASE_URL = "https://api.example.com"
Python

先頭・末尾アンダースコアの意味

  • 先頭1つ「_name」:内部利用の意図
  • 末尾1つ「class_」:キーワード衝突回避
  • 先頭2つ「__name」:クラス内名前マングリング
  • 両端2つ「init」:言語の“マジック名”(予約的意味)

importの並べ方(標準→サード→自作の順、1行1モジュール)

並び順とグループ分け

  • 標準ライブラリ
  • サードパーティ(外部ライブラリ)
  • 自作パッケージ それぞれのグループの間に空行を入れます。
import os
import sys

import requests

from myapp.service import fetch_user
Python

相対importの乱用は避け、絶対importを基本に

# 推奨:絶対import
from myapp.utils import slugify

# 相対は最小限
from .utils import slugify
Python

空行・コメント・docstring(文脈を正しく付ける)

空行で構造を区切る

トップレベルのクラスや関数の間は2行、クラス内のメソッド間は1行を目安に。

def a():
    ...

def b():
    ...
Python

行末コメントは控えめに、説明は上に

# 悪い例:行末でダラダラ説明
value = compute(x)  # ここで複雑なロジックが動いて...

# 良い例:一行上に簡潔に
# 複雑なロジック:キャッシュを参照後に再計算
value = compute(x)
Python

docstringで「何をするか」「引数と戻り値」を簡潔に

def fetch_user(user_id: str) -> dict:
    """ユーザー情報を取得する。

    Args:
        user_id: ユーザーID

    Returns:
        ユーザー情報の辞書
    """
    ...
Python

よくある落とし穴と安全な書き方(例外・比較・関数設計)

None等との比較は is / is not を使う

if value is None:
    ...
Python

真偽の比較は == True/False を避ける

if is_valid:     # 良い
if is_valid == True:  # 悪い
Python

ミュータブルなデフォルト引数は使わない

# 悪い
def add_item(item, items=[]):
    items.append(item)
    return items

# 良い
def add_item(item, items=None):
    if items is None:
        items = []
    items.append(item)
    return items
Python

例外の捕捉は広すぎない・メッセージは簡潔に

try:
    r = requests.get(url, timeout=5)
    r.raise_for_status()
except requests.HTTPError as e:
    logger.error("HTTPエラー: %s", e)
Python

PEP8を守るためのツール活用(機械でチェック&整形)

チェック(pycodestyle / flake8)

コマンド一発でPEP8違反を検出できます。CIに組み込むと継続的に品質を維持できます。

pip install flake8
flake8 .

自動整形(black / autopep8)

まずblackで強力に整える、微修正はautopep8でも十分です。

pip install black
black .

例題(PEP8前後でコードを整える)

Before:詰まり・命名・改行がバラバラ

def Calc(a,b):return a+b
def getUser(id): 
    import requests,os
    r=requests.get("https://httpbin.org/get",timeout=5); 
    if r.status_code==200: print("OK");return r.json()
    else: print("NG");return None
Python

After:PEP8準拠で読みやすく

import requests

def calc(a: int, b: int) -> int:
    """2数の和を返す。"""
    return a + b


def get_user(user_id: str) -> dict | None:
    """ユーザー情報を取得。成功時は辞書、失敗時はNone。"""
    resp = requests.get("https://httpbin.org/get", timeout=5)
    if resp.status_code == 200:
        print("OK")
        return resp.json()
    print("NG")
    return None
Python
  • 関数名・引数名はスネークケース
  • importは先頭にまとめる
  • 1行1ステートメント、条件分岐を明確に
  • docstringで目的を簡潔に

まとめ(まず「最低限の型」を体に入れる)

PEP8の核心は「誰が読んでも同じに見える」揃え方です。インデント4スペース、79文字以内の行長、適切な空白、命名規則、importの順序、空行・コメント・docstringの基本を守るだけで、コードの質とチームの速度は上がります。ツール(flake8/black)で機械的に補助し、例外や比較などの落とし穴は定番パターンで回避する。まずは日々書くコードを“After”の型へ寄せていけば、PEP8は自然と身につきます。

タイトルとURLをコピーしました