Pythonとコーディング規約
プログラミングを学んでいる方、会社や組織で働いているITエンジニアの方であれば、「コーディング規約」という言葉を耳にしているかと思います。とはいえ、場合によっては厳格にコーディング規約を守っている方は少ないかもしれません。
なぜなら、コーディング規約通りにコーディングをしなくともプログラムは作れますし、何の問題もなく動いてくれるからです。では何のためにコーディング規約が存在するのか、なぜコーディング規約を守る必要があるのか、Pythonのコーディング規約PEP8について解説します。
【参考】:はじめに — pep8-ja 1.0 ドキュメント
コーディング規約とは
コーディング規約を一言で述べると、プログラミングでソースコードを記述する際に守りたいルールです。ルールを守らないとペナルティがあるのかと心配する方がいますが、基本的にペナルティはありません。
ただし、組織によっては厳格なコーディング規約を決めており、ルールを守らない人に対しては、注意を与えることもあります。
コーディング規約はプログラム言語の文法ではなく、書き方、スタイルに関する組織内の約束事です。それは変数や関数に関する命名規則であったり、使ってはいけない機能の禁止事項であったり、スペースやインデント、括弧記号や演算子の配置の仕方など、様々な規約があります。
では、なぜそのような規約が必要なのでしょうか?自分流のコーディングスタイルで良いのではないかと思う方もいるでしょう。次項でコーディング規約が必要な理由を述べます。
コーディング規約はなぜ必要?
企業や組織でシステムを開発する際に、プログラミングにおいてある程度ルールを明確化しておかないと、他の人が書いたコードを読んだり、ロジックを理解して修正をしたりする場合に、作業が難しくなります。
例えば、Aさんのソースコードは読みやすいのに、Bさんのコードは読みにくいといったことが起こります。こうしたことを減らすためにコーディング規約があります。
コーディングの仕方をコーディング規約として定めておくと、読みやすく、メンテナンスがしやすいプログラムが出来上がり、結果的にソフトウェアの開発効率が向上します。
ただし、規約を定めるに当たっては、言語特性、開発環境、組織や構成員の考え方、組織の方針によって温度差があり、一概に優劣を定めることはできません。たとえば、システム開発系ベンダーのコーディング規約があっても、委託元のコーディング規約を優先することもあります。
集団が異なると、同じ項目に対して異なるルールが適用されることもあり、ここで混乱を招く場合も起こり得ます。しかし言語側でコーディング規約が用意されていると、組織が異なっても同じルールを適用しやすくなるため、組織をまたがった開発や、受託開発などでの混乱を回避しやすくなります。
比較的新しく、人気の高いPython言語には、PEP8という言語側で用意されたコーディング規約がありますが、PHPやPerlなどの他の言語にもコーディング規約が用意されています。
Pythonコーディング規約(PEP8) とは
コーディング規約について理解できたところで、Pythonのコーディング規約と言われるPEP8(読み方はペップエイト)について詳しく見ていきましょう。
【参考】:PEP 8 – Python コードのスタイル ガイド | peps.python.org
PEP8の概要
Python において「標準」を定めるために PEP(Python Enhancement Proposal)というものがあります。 Pythonの機能拡張で議論されたことがまとめられた設計書です。
PEP8はこのPEPの8番目の文書で、「Style Guide for Python Code」すなわち Python コードに関する「書き方ガイド」とも言われ、コーディングの作法を記したものと考えてください。
一貫性にこだわりすぎない
PEP8の冒頭には「A Foolish Consistency is the Hobgoblin of Little Minds」と記されています。一貫性にこだわり過ぎては、狭い心の小鬼になってしまうという意味です。
スタイルガイドに合わせることも重要ですが、こだわり過ぎた結果コードの一貫性が失われてしまったり、コーディング規約に準拠することで得られるはずだったメリットが損なわれたりしたら、元も子もないということなのでしょう。
例えば、PEP8を適用する前に作られたプログラムは、PEP8のルールとは異なるルールで書かれている場合、無理にPEP8準拠に書き換えることで、逆に読みにくいコードになってしまう場合もあります。コーディング規約を絶対視し過ぎないようにということです。
PEP8ライブラリの活用
PEP8にはコードが規約通りになっているか否かをチェックしてくれるPEP8ライブラリがあります。Pipコマンドでインストールします。他、Pythonにはコードチェックツールが多く用意されていますが、古くから使われている※autopep8をおすすめします。
またPythonのコーディングにVscode「Visual Studio Code」を利用している方は、autopep8をVscodeで設定して利用することも可能です。
$ pip8 install pep8
コードスタイルをチェックしたい時は次のように利用します。
$ pip8 <file-path>
ソースコードも表示したい時は次のようにしてください。
$ pip8 <file-path> --show-source
【参考】※:autopep8: PEP 8 スタイル ガイドに準拠するように Python コードを自動的にフォーマットするツール|Github 【参考】:Visual Studio Code | Microsoft Azure
PEP8の3種類のルール
Pythonコードを書く上で基本的なコーディングのスタイルを取り決めたPEP8には、大別すると3種類のルールがあります。コードの可読性を重視したPEP8のルールについて、主なものを見てみましょう。
一見、細かすぎて面倒に感じるかもしれませんが、このルールに従ってコーディングされたソースコードは非常に見やすく、分かりやすいと感じるでしょう。
【参考】:PEP 8 – Python コードのスタイル ガイド | peps.python.org
コードレイアウトのルール
PEP8のコードレイアウトに関する、代表的なルールについて挙げてみましょう。
▪インデントに関するルール ブロックの範囲について、Pythonではインデントを用いて表現します。インデントに関する基本ルールは次の通りです。 ①インデントにはタブではなく半角のスペースを使用する ②1ブロックにつき、インデントは半角スペースを4つに統一する
▪インポートに関するルール ①import は1度につき1つのモジュールをインポートする ②同一のモジュール内から複数要素のインポートを行う場合はカンマで区切る ③ライブラリ毎にグループ化する
▪1行の文字数に関するルール ①コード部分については半角79文字以内とする ②コメントやdocstringなど、改行を入れやすい場合には半角72文字以内とする
▪空行の数に関するルール ①トップレベルの関数やクラスについては2行分の空白を入れる ②クラス定義内のメソッドについては1行分の空白を入れる
コメントのルール
PEP8のコメント(注釈や説明)に関する代表的なルールは以下の通りです。
▪コメント文字列は誰が見ても分かるようにする ▪コメントとコードに矛盾がないようにする ▪ハッシュ文字:#とコメント文字列の間には半角スペースを1つ入れる ▪インラインコメントを入れる時は(#)の前に半角スペース2文字以上を入れる ▪公開するモジュール関数は 「docstring」で関数について説明する
命名規則のルール
最後に、Pythonの命名規則に関するルールについて解説します。命名規則は変数やクラスなどの命名に関する決まり事で、Python に限らず全てのプログラミング言語に共通しますが、命名規則があると見た目が統一され、コードを読みやすくするという狙いがあります。
PEP8では文字を見ただけで、名前の種類が分かるよう設定されています。一部抜粋しました。
▪変数名は全て大文字にし、単語間はアンダースコアで接続する ▪関数名/変数名は英小文字で、単語間はアンダースコアでつなぐ ▪クラス名は各単語の先頭を大文字化し、アンダースコアを使わずつなぐ ▪メソッド名/インスタンス変数名は基本的には関数名/変数名と同じだが、外部に非公開のものは先頭にアンダースコアを1つ付加する ▪モジュール名/パッケージ名はすべて小文字で短い名称とする
コーディング規約を遵守して品質を高めよう
この記事では、コーディング規約とは何か、Pythonのコーディング規約PEP8とは何か、PEP8の代表的なコーディングルールについて解説しました。コーディング規約はシステム開発では重要な規約です。
これまでコーディング規約を特に意識していなかったという方は、これを機会に自分のプログラムが規約に沿っているのか確認をしてみましょう。コーディング規約を守るのは、最初は面倒に感じるかもしれませんが、次第にそのメリットが分かってきます。
Pythonのコードを書く際には、ぜひPEP8に従ってコードを書くように習慣づけることをおすすめします。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから