Pythonのコメントってどう書くの?Pythonのコーディング規約 - PEP8 って何?

プログラミング
誰がみても分かりやすいコーディングの要素の1つとして、コメントの書き方があります。Pythonにおけるコメントの書き方を解説します。同時に、Pythonにおけるコーディング規約 - PEP8 を解説します。コメントとコーディング規則をマスターし、Pythonらしいプログラムを書きましょう!
Pythonのコメントってどう書くの?Pythonのコーディング規約 - PEP8 って何?

沢山のプログラミング言語であふれている今の時代、エンジニアには複数のプログラミング言語を扱うことが要求されています。そして、それぞれの言語でコメントの書き方やコーディング規則が異なっています。
この記事では、Pythonにおけるコメントの書き方、コーディング規約 - PEP8 について解説します。

Pythonでコメントを書いてみる

プログラムの各部分でコーディングの目的や関数の期待する戻り値を記述するコメントは、プログラムの可読性を高める役割を果たします。
本記事ではPythonにおけるコメントの書き方を解説します。

なぜコメントが必要か

コメントの書き方を説明する前に、なぜプログラムにコメントが必要なのでしょうか?

主な理由として、

  1. プログラムの意図を伝えるため
  2. デバッグや保守を容易に行うため
  3. プログラムが想定通り動作しない時、原因特定のためや任意のプログラムをコメントアウトするため

が挙げられます。

次のコードを見てください。

import numpy as np
x = np.arange(1, 13)
y = x[np.mod(x, 4) == 1]
print(y)

これでは一体何が出力されるのか疑問に思ってしまうでしょう。
こちらにコメントをつけてみます。

# NumPyをnpという名前でインポート
import numpy as np

# xに1から11までの連番を代入
x = np.arange(1, 12) # x=[1 2 3 4 5 6 7 8 9 10 11]
 
# 4で割ったときの余りが1の時、yに代入
y = x[np.mod(x, 4) == 1] # y=[1 5 9]
 
# 代入されたyを出力する
print(y)

いかがでしょうか?
プログラムの意図が分かりやすくなりました。コメントはプログラムの意図を伝えてくれます。

Pythonにおけるコメントの記載ルール

それではPythonにおけるコメントの記載ルールをみていきましょう。
Pythonのコメントは、「#」を使用します。

コメント構文

# ●●●

「#」の後の半角スペースはあってもなくても問題ありません。
読みやすさという観点で、半角スペースを1つ空けると見やすくなります。

インラインコメント
行の途中に記載するコメントを「インラインコメント」と呼びます。

x = np.arange(1, 12) # x=[1 2 3 4 5 6 7 8 9 10 11]

ブロックコメント(行全体)
「#」を行頭に書くと、その行全体がコメントとなります。このコメントを、「ブロックコメント」と呼びます。

# NumPyをnpという名前でインポート

複数行にわたるコメント
プログラムを書いていると、プログラムのある部分10行ほどコメントアウトしたい、という事があります。ブロックコメントを10個挿入すれば良いわけですが、「#」を10個挿入し、作業が終わったら「#」を削除する、なんとも面倒くさい作業になります。

そこでPythonにおいて、プログラム中に記述された文字列は実行に影響を及ぼさない、という仕様を利用し、クォーテーションを使って複数行単位のコメントを記述することができます。

具体的には、「'''( シングルクォーテーション3つ)」、あるいは「"""(ダブルクォーテーション3つ)」で囲み、コメントアウトします。

import numpy as np
'''
x = np.arange(1, 13)
y = x[np.mod(x, 4) == 1]
print(y)
'''

上記の場合、シングルクォーテーションで囲まれた3行が文字列扱いとなり、プログラムで実行されません。

コメントの注意点

Pythonにおけるコメントの注意点を説明します。

インラインコメント、ブロックコメントの場合、行の一部分を範囲指定してコメントすることはできません。つまり、2つ目の「#」でコメントの終わりを指定することはできません。最初の「#」以降は、全てコメントとみなされます。

次のサンプルでは、2つ目の「#」でエラーとなります。

a = "コメント1" # aにコメント代入 # b=”コメント2”

また、複数行にわたるコメントの場合、クォーテーションを用いてコメントアウトできますが、インデントに注意する必要があります。インデントがずれている場合エラーとなります。

for x in {1,2,3,4,5}:
    print "数値"
'''
このコメントはインデントがずれているのでエラーになります
'''
    print x

Pythonのコーディング規約 - PEP8

Pythonでは、ソースコードのスタイルに一貫性を持たせ読みやすいコードにするため、「PEP8」と言われるコーディング規約が発行されています。本章では、このコーディング規約を解説します。

コーディング規約 - PEP8とは

PEPとは、「Python Enhancement Proposal」の略です。Pythonにおいて、「スタイルを統一し読みやすいコードを書こう」というアイデアのもとに作られたのが、このソースコードスタイルガイドになります。

Pythonのソースコードスタイルガイドは、次のURLで確認することができます。

Style Guide for Python Code
http://legacy.python.org/dev/peps/pep-0008/

PEP8 日本語訳
https://pep8-ja.readthedocs.io/ja/latest/

コーディング規約 - PEP8のポイント

PEP8に含まれるすべての規約に触れる事は出来ませんが、幾つかの主なポイントを取り上げていきます。

インデントは半角スペース4つで統一し、タブは使用しません。関数等の引数が多く改行を入れる際は、関数の括弧の開始部分と要素が合うようにします。1行の長さは、半角79文字以内に制限します。

空行の数はトップレベルのクラスや関数に関しては、2行分の空行を入れ、クラス内部(インデントが入っている領域)は、1行分の空白を入れます。

また、Pythonで採用されている命名規約は少し面倒で、次のように書く事が推奨されています。

  • 関数名や変数名:小文字のみ、単語間はアンダースコアを用いる(例:test_func_a)
  • クラス名:先頭を大文字、パスカルケースで記載(例:TestClass)
  • 定数名:すべて大文字で、単語間はアンダースコアを用いる(例:TEST_CONST)
  • モジュール名:すべて小文字で、単語間はアンダースコアを用いることもできる(例:test_module)
  • パッケージ名:すべて小文字で、アンダースコアの仕様は制限する(例:testpackage)

いかがでしょうか?コーディング規約-PEP8のポイントを幾つか列挙しました。
詳しくは「PEP8 日本語訳」を参照してください。良い例と悪い例が、各トピックで説明されています。Pythonでプログラムを記述するにあたっての悩みがなくなり、統一感のあるコードを書けるようになるでしょう。

Pythonらしいコーディング

3

PEP8 - Pythonのコーディング規約も学ぶことができました。
では、最後にPythonらしいコーディングを見てみましょう。

サンプルコード

import random

# メインクラス
class MainClass1:

    # xにランダム初期値を代入
    x = random.randrange(10)

    # xセット
    def setX(self, x):
        self.x = x

    # xゲット
    def getX(self):
        return self.x

# メインクラス
class MainClass2:

    # xにランダム初期値を代入
    x = random.randrange(10)

    # xセット
    def setX(self, x):
        self.x = x
 
    # xゲット
    def getX(self):
        return self.x
 
# クラスーインスタンス1
obj1 = MainClass1()

# クラスーインスタンス2
obj2 = MainClass2()
 
# 各クラスの値を表示
print('Class1:{0}, Class2:{1}'.format(obj1.getX(), obj2.getX()))
 
# 結果を表示する
if obj1.getX() > obj2.getX():
    print('Class1 WON!!')
elif obj1.getX() < obj2.getX():
    print('Class2 WON!!')
else:
    print('DRAW!!')

サンプルコーディングの解説

PEP8―コーディング規約に沿っていることを解説します。

まず、インデントはタブを使用せず半角スペース4つで統一されています。
1行の長さは半角79文字以内になっています。
空行の数は、トップレベルのクラスや関数に関しては2行分の空行を入れ、クラス内部は1行分の空白となっています。

この例ではクラス名が出てきていますので、先頭を大文字、パスカルケースで記載しています。
パッケージ名はすべて小文字で、アンダースコアの仕様は制限されています。

Pythonのコーディング規約 - PEP8 に沿ってプログラムを書くことによって、誰もが理解できる見やすいコードを記述することができます。

まとめ

Pythonにおけるコメントの書き方、コーディング規約 - PEP8 について解説しました。

コメントは、プログラムの意図を伝えます。コーディング規約は、プログラミングのスタイルを整えます。しっかりマスターし、分かりやすいコメント、見やすいプログラムを書いていきましょう!


この記事のキーワードに関する勉強会・イベントを探す

TECH PLAYでは、ITエンジニア向けの勉強会・イベント情報を提供しています。
興味のある方はぜひご参加ください。


おすすめのコラム