Python

PEP8とは?Pythonコーディング規約の基本ルールとチェックツール(Ruff対応)

PEP8(読み方はペップエイト)は、Pythonコードの書き方をそろえるための標準コーディング規約です。名称は「Python Enhancement Proposal 8」の略で、Pythonの改善提案(PEP)のうち番号8の文書です。2001年7月5日にGuido van Rossumらが公開して以来、Pythonコミュニティで事実上の共通ルールとして使われてきました。この記事では、PEP8の定義と目的、インデントや1行の文字数といった基本ルール、snake_caseなどの命名規則、Ruffを中心としたチェックツール、VSCodeでの設定、Google Python Style Guideとの違い、そして「どこまで守るべきか」までを一度に整理します。

まとめ:PEP8の要点

  • 正体:PEP8 = Python Enhancement Proposal 8。Python公式のコーディングスタイルガイドで、読み方はペップエイト。
  • 基本ルール:インデントは半角スペース4つ、1行は79文字(コメント・docstringは72文字)、演算子まわりの空白、importは1行1つでグループ分け。
  • 命名規則:変数・関数・メソッドはsnake_case、クラスと例外はCapWords、定数はUPPER_CASE、モジュール名は小文字(必要ならアンダーバー)。
  • チェックは自動化が前提:2026年時点の主流はRuff。従来のflake8・pycodestyle・black・isortの役割を1本に統合し、桁違いに速い。旧「pep8」パッケージは2016年にpycodestyleへ改称済み。
  • 守り方:PEP8自身が「無分別な一貫性は避けよ」と述べている。厳守が目的ではなく、プロジェクト内の一貫性と可読性が優先。

以下で、それぞれのルールと現在のツール事情を具体的に見ていきます。

PEP8とは何か(定義・読み方・略称)

PEPは「Python Enhancement Proposal(Python拡張提案)」の頭字語で、Python本体の仕様変更や指針をまとめた文書群です。番号が振られており、PEP8は番号8の文書としてコーディングスタイルを扱います。読み方は「ペップエイト」が一般的で、「PEP」の部分を「ペップ」と読みます。

作成は2001年7月5日、著者はPythonの生みの親であるGuido van Rossumに加え、Barry Warsaw、Alyssa Coghlanの3名です。PEP8が定めるのは「正しい書き方」ではなく「読みやすさをそろえるための取り決め」であり、文書の冒頭でも可読性(readability)を最優先に置くと明言しています。1人で書き捨てるスクリプトより、複数人が長期間触れるコードほど効果が大きいルールです。

PEP8の主要ルール(インデント・行の長さ・空白・import)

PEP8で問い合わせの多い基本ルールは、性質の異なる複数の項目に分かれます。用途ごとに分けて押さえます。

インデントは半角スペース4つ

1段のインデントに半角スペースを4つ使います。タブとスペースの混在は禁止で、Python3ではインデントにタブとスペースを混ぜると構文エラーになります。新規コードはスペースを使い、タブで書かれた既存コードに合わせる場合のみタブを許容する、という順序でPEP8は整理しています。

1行は79文字まで(コメント・docstringは72文字)

コード行は最大79文字、コメントとdocstringのような文章ブロックは最大72文字が上限です。古い端末の幅80文字に由来しますが、現在でもエディタを左右に分割したときやコードレビューの差分表示で効果があります。ただしこの数値は現場で最も緩められる項目でもあり、コードフォーマッタのBlackは既定88文字、Ruffのフォーマッタも88文字を既定にしています。チームで88や99に統一する運用も一般的です。

空白の入れ方

二項演算子の前後にはスペースを1つ入れ(x = a + b)、カンマの後ろにはスペース、前には入れません。関数呼び出しの丸括弧の直前や、インデックスの角括弧の直前にはスペースを置きません。キーワード引数のイコールの前後は、型注釈が無い場合はスペースを入れないのが原則です。

importは1行に1つ、グループで分ける

import文はモジュールごとに行を分け、「標準ライブラリ → サードパーティ → 自作モジュール」の3グループに空行を挟んで並べます。from module import * のワイルドカードインポートは、名前空間に何が入るか不明瞭になるため避けます。この並べ替えは後述のツールが自動化してくれます。

# 悪い例
import sys, os
from mymodule import *

# 良い例
import os
import sys

import requests

from myapp import config

PEP8の命名規則(snake_case・CapWords・定数)

命名規則は、名前を見ただけで「変数か・クラスか・定数か」を区別できるようにするための取り決めです。対象ごとに使うスタイルが決まっています。

対象 スタイル
変数・関数・メソッド snake_case(小文字+アンダーバー) user_name, calculate_total
クラス・例外 CapWords(PascalCase) DataProcessor, ValidationError
定数 UPPER_CASE MAX_RETRY, DEFAULT_TIMEOUT
モジュール 短い小文字(必要ならアンダーバー) data_loader.py
パッケージ 短い小文字(アンダーバー非推奨) myapp

変数・関数はsnake_case

変数名・関数名・メソッド名は、すべて小文字にして単語の区切りをアンダーバーでつなぎます。getData のようなcamelCaseはPythonでは使いません。短縮形や1文字名は避け、役割が分かる名前を選びます。

クラスと例外はCapWords

クラス名と例外名は、各単語の頭文字を大文字にして連結するCapWords(PascalCaseとも呼ばれます)を使います。CapWordsとは、この「頭文字を大文字にして単語を続ける」書き方の呼び名です。例外クラスは末尾を Error でそろえると役割が伝わります。

class OrderProcessor:
    def process(self, orders):
        return [o for o in orders if o.is_valid]


class OrderValidationError(Exception):
    pass

定数とモジュール名

定数はモジュールの先頭でまとめて定義し、すべて大文字とアンダーバーで書きます。モジュール名(ファイル名)は短い小文字で、可読性が上がる場合だけアンダーバーを使います。パッケージ名(ディレクトリ名)は同じく小文字ですが、アンダーバーは避けるのが推奨です。「モジュール名にアンダーバーを使うべきか」という疑問には、単語区切りで読みやすくなるなら使ってよいのが公式の立場です。

PEP8をチェック・自動整形するツール(Ruff・flake8・black)

PEP8は文書であって、それ自体がコードを検査するわけではありません。準拠しているかは専用ツールで自動チェックします。ここは数年で勢力図が変わった領域なので、現在の選択肢を役割で分けて押さえます。

Linter(検査)とFormatter(整形)の違い

ツールは大きく2種類あります。Linterはスタイル違反や潜在的なバグを「指摘」するもの、Formatterはコードを規約どおりに「書き換える」ものです。flake8・pylint・pycodestyleはLinter、black・autopep8はFormatterに分類されます。両者は併用するのが一般的でした。

現在の主流はRuff

2026年時点でPythonのスタイル管理の中心になっているのがRuffです。Astral社がRust言語で開発したツールで、flake8・pycodestyle・isort・pydocstyle・pyupgrade・blackといった従来ツールの役割を1本に統合し、900種類以上のルールを備えます。既存のLinterやFormatterより10〜100倍速く、大規模なコードベースでも短時間で全ファイルを検査・整形できるのが採用が進んだ理由です。導入と実行はコマンド3つで完結します。

pip install ruff

# スタイル違反を検査
ruff check .

# 規約どおりに自動整形
ruff format .

従来ツールとpep8パッケージの改称

Ruff以前は、flake8(pycodestyle+pyflakes+複雑度チェックの統合)でLintし、blackやautopep8で整形し、isortでimportを並べ替える、という組み合わせが定番でした。今も広く使われており、既存プロジェクトで無理に乗り換える必要はありません。注意点として、かつて pep8 という名前だったチェックツールは、規約そのものと紛らわしいため2016年にpycodestyleへ改称されています。現在 pip install pep8 を案内する記事は情報が古いので、pycodestyleかRuffを使ってください。

ツール 役割 特徴
Ruff Linter+Formatter Rust製・非常に高速・多くのツールを統合
flake8 Linter pycodestyle+pyflakesの定番統合
pycodestyle Linter 旧pep8パッケージ。スタイル検査に特化
black Formatter 設定を削ぎ落とした自動整形(既定88文字)
autopep8 Formatter pycodestyleの指摘を自動修正

VSCodeでPEP8を適用する設定

VSCodeでは拡張機能と設定でPEP8チェックを常時働かせられます。現在はMicrosoft公式の「Ruff」拡張機能を入れ、保存時の自動整形とimport整理を有効にするのが最短です。settings.json に次を追加します。

{
  "[python]": {
    "editor.defaultFormatter": "charliermarsh.ruff",
    "editor.formatOnSave": true,
    "editor.codeActionsOnSave": {
      "source.organizeImports.ruff": "explicit"
    }
  }
}

従来のflake8で運用する場合は、Microsoftの「Flake8」拡張機能を入れ、1行の文字数上限などをワークスペース設定で調整します。いずれの場合も、保存のたびに違反が可視化・修正されるため、レビューでスタイルを指摘する手間が減ります。

PEP8とGoogle Python Style Guideの違い

Pythonのスタイルガイドには、PEP8のほかにGoogleが公開するGoogle Python Style Guideがあります。大枠は共通しますが、細部が異なります。どちらか一方を採用し、社内で統一するのが実務上の答えです。

項目 PEP8 Google Python Style Guide
1行の長さ 79文字 80文字
docstring形式 形式は限定しない ArgsやReturnsを明記するGoogleスタイル
位置づけ Python全体の共通規約 Google社内向けに調整した規約

公開ライブラリや一般的なプロジェクトはPEP8を基準にすれば十分です。docstringを機械的に整形したい、型注釈を厳密に運用したいといった要件がある場合に、Googleスタイルの一部を取り入れると扱いやすくなります。

PEP8はどこまで守るべきか

PEP8を「絶対のルール」と捉えると、かえって可読性を損ないます。PEP8自身が冒頭で「A Foolish Consistency is the Hobgoblin of Little Minds(無分別な一貫性は狭量な精神の悪癖)」という有名な一節を掲げ、規約を破ってよい場面を明示しています。守るべきかを判断する基準は次のとおりです。

  • 可読性が下がるとき:ルールに従うことで逆に読みにくくなるなら、従わない方がよい。
  • 既存コードと食い違うとき:周囲がPEP8非準拠でも、一貫性のためその流儀に合わせる場面がある。
  • 後方互換のため:古いPythonバージョンと互換を保つ必要がある箇所。

優先順位は「プロジェクト内の一貫性 > PEP8との一貫性」です。特に1行の文字数(E501)は、Black/Ruffの既定88文字やチーム標準の99文字に合わせて緩めるのが実務では普通です。そして、守るかどうかを人が毎回議論するのではなく、Ruffやpre-commitで自動化してレビューの争点から外すのが、最も生産的な付き合い方です。スタイルの正しさは機械に任せ、人はロジックのレビューに集中すべきです。

よくある質問

PEP8の読み方は何ですか?

「ペップエイト」と読みます。PEPの部分を「ペップ」、末尾の8を「エイト」と読むのが一般的です。

PEP8とは何の略ですか?

「Python Enhancement Proposal 8」の略です。Pythonの改善提案(PEP)の8番目で、コーディングスタイルを定めた文書を指します。

PEP8は必ず守らないといけませんか?

必須ではありません。PEP8自身が可読性を損なう場面や既存コードに合わせる場面では従わなくてよいと述べています。目的は厳守ではなく、プロジェクト内で一貫した読みやすいコードにすることです。

pep8・pycodestyle・flake8・Ruffの違いは?

「pep8」は規約の名前であり、同名だったチェックツールは2016年にpycodestyleへ改称されました。flake8はpycodestyleなどを束ねたLinter、RuffはLinterとFormatterを1本に統合した高速なツールです。これから始めるならRuffが扱いやすい選択肢です。

Pythonの1行は何文字までですか?

PEP8ではコード行が79文字、コメントとdocstringが72文字までです。ただしBlackやRuffのフォーマッタは既定で88文字を採用しており、チームで88や99に統一する運用も広く行われています。

関連記事

資料請求

RELATED POSTS 関連記事