1. ホーム
  2. 記事一覧
  3. 【徹底解説】Pythonのコーディング規約とは?PEP8について解説

2022.11.26

【徹底解説】Pythonのコーディング規約とは?PEP8について解説

プログラミングには様々な言語があり、それぞれにコーディング規約があります。

今回はPythonのコーディング規約について詳しく説明していきます。

コーディング規約とは ?

コーディング規約とは、プログラマーがコーディングを行うときに守るべきルールです。

システムやアプリを作る際に、複数人で一つのシステムの開発をすることはよくあります。また、すでに作成されているシステムをメンテナンスすることもあります。その時、プログラマーが「自分ルール」でコーディングを行わないようにルールを規定します。

コーディング規約は、プログラムを書く上でとても大切なルールです。変数や関数、クラス名のつけ方から特定の処理を禁止するルールなど、コーディングする上で様々なルールを定めたものです。コーディング規約に沿って開発をすることによりコードの書き方に一貫性が生まれ、コードの可読性や保守性が高まります。

特に規模の大きなプロジェクトにおいては各言語のコーディング規約や、会社が細かく取り決めたルールに則ってコーディングをすることが大切です。

Pythonのコーディング規約とは?

では、Pythonのコーディング規約はどのようなものなのでしょうか?

Pythonのコーディング規約は、PEP8(Python Enhancement Proposal #8)と呼ばれており、そのルールは大きく3つに分けることが出来ます。

  • コードレイアウトに関するルール
  • コメントに関するルール
  • 命名規則に関するルール

他にも、式や文中の空白文字に関するルールなどもあります。以下、3つのルールについて深掘ります。

コードレイアウトに関するルール

インデントに関するルール

  • pythonではインデントに空白を4つ入れます。
if(x>y):
    print('x>y')
else:
  print('x<y')
  • 関数やリストの呼び出しで長い場合に途中で改行を入れる際には、括弧の開始部分と要素がぴったり合うようにします。
foo = long_function_name(var_one, var_two,
                         var_three, var_four)
  • 括弧の直後に改行するのであれば、インデント1つ分ずらします。
foo = long_function_name(
    var_one, var_two, var_three, var_four)
  • 関数定義時に引数が多く、改行を入れる場合には、2つインデントを入れる必要があります。
def long_function_name(
    var_one,var_two,var_three,
    var_four):
    print(var_one)
  • if文で長くなる場合には、括弧を加えて、且つ改行後はインデントを2つ加えるなどの対応を行います。
if (var_one == 100
  and var_two == 200
  and var_three == 300):
  do_something()

一行の長さ

  • コードの1行の長さは79文字以下にします。
  • 無理矢理79文字以下にしなくても構いません。また1文が79文字以上になる場合、バックスラッシュを差し込むことで改行は許容されます。

空白行

  • トップレベルの関数とクラスの間に2つの空白行を挿入します。
class ClassOne:
    pass


class ClassTwo:
    pass


def my_function():
    return None
  • クラス内の関数はそれぞれ1つの空白行を挿入します。
class ClassOne:
    def method_one(self):
        return None

    def method_two(self):
        return None
  • 以下はその他の空白に関するルールです。
使い方良い例悪い例
開きかっこの直後、閉じかっこの直前には入れないfunc(arg1, arg2)func( arg1, arg2 )
二項演算子や累算代入演算子などの前後には空白文字を1つ入れるx = 1a += 1x=1a+=1
優先順位が異なる演算子が1つの式中に現れるときには、優先順位が高いものの前後には空白文字を含めないa = xx + yya = x * x + y * y
関数定義でデフォルト引数値を指定するときには「=」の前後に空白文字を入れないdef func(x=0, y=0):def func(x = 0, y = 0):
関数呼び出しでキーワード引数に値を指定するときには「=」の前後に空白文字を入れないfunc(x=1, y=1)func(x = 1, y = 1)

コメントに関するルール

コメントに関するルールも規定されています。

コメントについては以下が推奨されています。

  • コードの内容と相反するコメントは混乱を招くため、コードを修正した場合はコメントも修正したコードに合わせて更新する。
  • 非英語圏のプログラマーである場合、そのコードを使用する人が自分の母語を使う人たちと確信できるとき以外は、英語でコメントを書く。
  • コメントはきちんとしたセンテンス(文)にする。
  • ブロックコメントは、きちんとしたセンテンスで構成された段落を1つ以上含める。
  • センテンスは大文字で始まり、ピリオドで終わる。また、次のセンテンスとの間には半角空白文字を2つ含める。
  • ブロックコメントはそのブロックが対象とするブロックのインデントに合わせる。
  • ブロックコメントの各行は「#」で始め、その後に半角空白文字を1つ含める。
  • ブロックコメントが複数の段落で構成される場合は、それらは「#」だけを含んだ行で区切る。
  • インラインコメントは、なるべく使わないようにする。
  • インラインコメントとコードの間には最低でも2つの半角空白文字を入れ、その後「#」に続けてコメントを記述する。
  • コードでの処理を冗長に書くのではなく、なぜその処理を行っているかを説明するためにコメントを使用する。(理由が分かりづらい時に利用する)

命名規則に関するルール

Pythonだけではなくすべてプログラム言語で共通することですが、変数やクラス・関数などにそれぞれ異なった名前を付ける必要があります。

関数名,変数名

小文字のみで、単語間をアンダースコアで区切ります。

def sample_func():
    return pass
word = "アイウエオ”
blur_word = "ぼかす”

クラス名

キャメルケースで記述します。キャメルケースとは、それぞれの英単語の先頭を大文字にする表記方法です。

class SampleClass(): 

定数名

すべて大文字で、単語をアンダースコアで区切ります。

SAMPLE_CONST = "xxx"

モジュール名

すべて小文字で記述します。読みやすくなるのであればアンダースコアを使用しても問題ありません。

samplemodule
sample_module

【その他】インポートの記述に関するルール

先頭に記述

  • import文は特別なことがない限り、スクリプトの先頭に記述します。
  • importの順番は下記の流れで行います。
    1. 標準ライブラリ
    2. サードパーティー
    3. 自作したモジュール
  • それぞれのグループは1行の空行を入れます。またグループの中でも、アルファベット順に記述します。

行を分ける

  • 1つのimport文で複数のライブラリをインポートしないようにします。
# 正しい
import openpyxl
import os

# 間違い
import openpyxl, os

モジュールの絶対インポートを使う

  • 相対インポートでも絶対インポートでも記述可能な場合には、可読性向上のため、絶対インポートを利用します。
from mypkg.sibling import example

まとめ

PEP8は可読性が高く、一貫性のあるPythonコードを書くための基本的なコーディングスタイルガイドです。コードレイアウトや空文字の使い方、コメントの書き方など、細かな決まりがたくさんありますが、多くの人がこの決まりを守ることにより読みやすいコードになります。

ただし、プロジェクトごとにすでに独自の規約がある場合はそちらを優先した方がいい場合があります。PEP8に準拠してコードが読みづらくなる個所が発生した場合は、準拠よりも読みやすさを優先した方が良いでしょう。

PEP8のルールを守り、誰が読んでも分かりやすいコードを目指しましょう。

【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

IT未経験者必見 USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。

「フリーランスエンジニア」

近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。

「成功する人とそうでない人の違いは何か?」

私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。

比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。

多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、

note記事3000いいね超えの殿堂記事 今すぐ読む

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事