キャリテク!マガジン
- TOP
- キャリテク!マガジン
- Pythonのコーディング規約、PEP8とは何者か。
Pythonのコーディング規約、PEP8とは何者か。
こんにちは、吉政創成 菱沼です。
さて、今回も「Pythonによるネットワーク自動化の教科書」という書籍を片手に学習していきます。
Pythonに興味がある!という超初心者の方、ぜひ一緒に学習していただければ幸いです。
前回はPEPやPythonZenの項目を学習しました。
今回はPythonのコーディング規約が書かれているPEP8について学習したいと思います。
■Pythonのコーディング規約PEP8とは
まずPEP8についての解説です。
PEP8は、Python でプログラムを書く際のコーディング規約です。空白やインデント(字下げ)の使い方、コメントの書き方、変数や関数名の命名規則など、コーディングにおけるさまざまな規約が記載されています。PEP8に従ったプログラムを書くことで、コーディングスタイルに一貫性が生まれ、読みやすいプロ グラムになります。
Chapter1 Git入門編:1.1.3.2 PEP8
※PEP8: https://peps.python.org/pep-0008/
サンプルコードをWebや本で探していると、人によって、スペースを入れたり、入れなかったりと、たまにそれぞれの方で癖が出ていることに気づくことがあります。
それでも動くと言えば動くのですが、中には見にくいなあと感じる事があります。
PEP8を理解して書けるようになれば、プログラムの書き方が統一できるので誰もが見やすいコードになるということのようなので、一度読んでみて、気を付けて書けるようにしたいですね。
■PEP8に書かれていること
さて、具体的にPEP8にはどういったことが書かれているのでしょうか。続きの引用です。
代表的なスタイルガイドのいくつかを紹介します。
Chapter1 Git入門編:1.1.3.2 PEP8
コードのレイアウト
• 1 レベルインデントするごとに、スペースを4 つ使いましょう。
• スペースが好ましいインデントの方法です。タブとスペースを混在させることは禁止されています。
コメント
• コードと矛盾するコメントは書かないでください。複数の完全な文章で書く必要があります。それぞれの文章はピリオドで終わります。
• コメントはできるだけ英語で書くようにしてください。
• ブロックコメント(行全体のコメント)は、「#」とスペース1 つから始めます。
• インラインコメント(行の後ろに書くコメント)は、控えめに使います。文とインラインコメントの間には、少なくとも2 つのスペースを置きます。インラインコメントは、「#」とスペース1 つから始めます。
命名規約
• モジュールの名前は、全て小文字の短い名前にするべきです。アンダースコアを使っても構いませんが、読みやすくするためには適切に使う必要があります。
• パッケージの名前は、全て小文字の短い名前を使うべきであり、アンダースコアを使うことは推奨されません。
• クラスの名前には、通常CapWords 方式を使うべきです。CapWords 方式とは、最初の1 文字を大文字にし、そのあとはキャメルケースとする方式です。
• 関数や変数の名前には、小文字のみを使うべきです。また、必要に応じて単語をアンダースコアで区切ることで読みやすくすることができます。
• メソッド名とインスタンス変数には、関数の命名規約を使う必要があります。公開されていないメソッドやインスタンス変数にだけ、アンダースコアを先頭に付けるべきです。
• 定数は通常モジュールレベルで定義されます。全ての定数は大文字で書き、単語をアンダースコアで区切ります。例えば、MAX_OVERFLOW やTOTAL などがあります。
最初に出てくる4つのスペースってそういえば意識したことがありませんでした。IDLEなどのエディタを使ってると、エディタ側が勝手にインデントを入れてくれますしね。
一応、IDLEでインデントの数を数えてみたら、タブではなく、きちんとスペース4つでした。
自分でインデントの部分を書くときには、スペース4つと忘れないようにしたいですね。
原文の方も確認しましたが、結構いろいろあります。1行当たりの最大文字数は79文字とか。import文は並列にせず、ひとつずつ行を分けるとか。
例えばこういう書き方だそうです。(PEP8原文からの切り出しです。)
これに関しては書籍によってはNG例のように同じ行に書かれていることがありますので、学習するときに思い出せるようにしたいですね。importの項目はこれ以外にもいくつかありました。
そういえば、文字列を書く場合には引用符を使いますが、「”(ダブルクォーテーション)」と「’(シングルクォーテーション)」の2つのケースがあります。
私が使用した初心者向けの別の学習本では、英語には「it’s」のように使うことがあるので、「”」を使いましょうと書かれていましたが、割とWebのサンプルコードでは「’」が使われていることが多いような印象です。
そこで、一応確認してみたのですが、実際はどちらでもいいらしく、対象となる文字列内にどちらかの引用符が使用されているのであれば、使用されていない方の引用符で囲めばいいという事でした。
クラス名で使うCapWords方式とは?
ところで、文中にあるCapWords方式とは何か調べてみました。
これは最初の一文字を大文字で書き、次の文字からはキャメルケースと呼ばれる記述方法を使う事だそうです。
例えば、「ClassName」とか「HitAndBlow」のように、名前の最初の文字を大文字にし、その後に続く単語の頭文字も大文字にすることで、スペースがなくとも単語間の区切りがわかりやすいように書く事のようです。「classname」「hitandblow」とか読みにくいですものね。
ちなみに、このキャメルは、ラクダからきてるそうですよ。
Pythonではキャメルケース方式が選択されるようですが、こうした単語の組み合わせによる命名のルールは他にもいくつかあるそうです。
まとめられているページがありましたので、ご紹介します。
興味がある方は参考リンクをご参照ください。
参考:命名規則に出てくるキャメルケースなどの種類
スペースの入れ方は?
関数の中でスペースを入れる必要があるのですが、これが人によって異なることがあります。
例えば、spam(ham[1], {eggs: 2})と書いたときに、,の後と、:の後に半角スペースを入れているケースと、入れていないケースです。実際は入れるのがPEP8に沿うようです。
原文にいくつかスペースの入れ方の例が載っていましたので、一部分を引用します。他のケースは原文をご確認ください。(赤がNG、緑がOKです。)
■PEP8のルールに合わせて強制的に整形してくれるフォーマッター
いろいろなルールがあることが分かったのですが、さすがにすべてを覚えきることは難しいです。
そして、昨今のPython教本の中には、PEP8を意識して書かれていないものもあるらしく、覚えるのに必死な初心者にとっては何が正しいのか分からなくなることがあります。
そこで便利なのがPEP8のルールに合わせて強制的に整形してくれるフォーマッターの存在です。有名どころでは俺様ツールのBlack様がおられます。
このBlack様は議論の余地を与えてくださらない超俺様ツールだということで、違う書き方を一切させてくださいません。
VS Codeのプラグインで追加することができ、ある程度の設定が必要です。使用される方は、設定について事前に調べてみてくださいね。
ちなみに、コードを整形してくれるフォーマッター以外に、コードのチェックをしてくれるリンターと呼ばれるツールがあります。
リンターを使うと、エラーがある箇所を事前に見つけやすくなるそうです。こちらはおそらくflake8あたりが有名どころだと思います。こちらも興味がある方は確認してみてくださいね。
参考リンク)
PythonのコードフォーマッターのBlackの使い方
VSCodeでPythonフォーマッターを設定してみた
Python のフォーマッタの比較と VSCode での設定方法
2021年Python開発リンター導入のベストプラクティス
Pythonのリンター・フォーマッターをしっかりと理解する(Flake8, Black, isort, mypy)
Pythonのコードフォーマッターについての個人的ベストプラクティス
そういえば、PEP8と先日勉強したPythonZenの理解度チェックをする無料のPythonZen & PEP 8 検定試験というものがあります。
こちらはPython3エンジニア認定試験を提供しているPythonエンジニア育成推進協会が公開しているものです。無料なので何度もチェックできます。どこかでチャレンジしてみてもいいかもしれません。
それではきりが良いので、今回はこちらで終了です。
今回もお付き合いいただきありがとうございました。