規約、規約ってうっせぇんだよ
何ごとにもルールはある。プログラミングにおいても同じだ。「コードはわかりやすく書け」というのが鉄則であり、わかりにくい汚いコードは嫌われることになる。では、わかりやすいコードはどう書いたらいいんだということになるが、それを実現させてくれるのがコーディング規約である。コードを一定の決まりごとによって書いていけばわかりやすいコードを書くことができるわけだ。基本的に初心者プログラマーだろうが、ベテランプログラマーだろうが、同じ品質のコードを書けるということになる。
コーディング規約の目的
コーディング規約の目的は、コードの可読性と保守性および品質の向上である。可読性はコードが読みやすい、わかりやすいということであり、保守性は、コードのメンテナンスつまり、後から変更しやすく、また新たな処理を追加しやすいということになる。最初のうちは、可読性をあげるために、コーディング規約に沿ってコードを書いていくのがいいだろう。品質は、コードの一貫性である。書き方がバラバラなコードは、複数のプログラマーによって、ひとつのシステムを開発していく際に、変数名ひとつにとってもバグの温床になりやすい。これひとつを防ぐだけでも大きな意味がある。
コーディング規約は、プログラミング言語ごとにあり、すべてのプログラミング言語を調べたわけではないが、少なくとも、こういうふうに書こうというものはある。たとえば、Pythonではpep8、PHPではPSRなどである。JavascriptやJavaなどにもコーディング規約がある。ひとつのプログラミング言語に対して2つ以上のコーディング規約が存在するケースもある。
コーディング規約で決められていること
コーディング規約には、主に次のような内容が記載されている。
- 命名規則
- コーディングスタイル
- 禁止事項
命名規則では、変数や定数、クラス、関数や手続きといった命名について。コーディングスタイルでは、インデント、コメント、1行の長さ、空白行といったコードの書き方。禁止事項は、その名とおり、コーディングする際にやってはいけないことが定められている。
ひとつの例として、全てではないが、おもなPythonのコーディング規約についてみてみる。
- 変数名や関数名は小文字で書き、単語と単語の間は_(アンダースコア)で区切る。
- 定数は大文字
- クラス名はパスカル記法で書く
- インデントは空白4文字
- 1行の長さは79文字以内
- print文や変数への文字列の代入などに使用するクォーテーションはシングルクォーテーションを使用する
- 余分な空白は使用しない
- 四則演算記号の前後は1つの空白を入れる
- 引数などカンマで区切る場合はカンマの後ろに空白を入れる
- インデントにタブは禁止
これだけではないが、結構、細かく決められている。
Lintパッケージの導入
ひとつひとつ意識して書いていくのは大変なので、fake8やpycodestyleといったコード規約に沿ったコードになっているかチェックしてくれるlintパッケージを導入するのが楽である。Pythonでは、pipを使って導入できる。導入後、有効にする方法は使用しているIDEやエディタによって異なる。ちなみにコマンドラインからもチェックすることが可能である。
flake8 <ファイル名>.py
一番良い方法は、コマンドラインからチェックするより、IDEやエディタで有効にして、常にチェックしてくれる状態にしておくのがいいだろう。
規約、規約ってうっせえんだよ
便利なコーディング規約だが、基本的に守る必要はない。誤解しないように言っておくが、これは、プロジェクトとして、コーディングについて決まり事があれば、そちらを優先させるということである。また、1行79文字以内となっていたとしても、1行を分割することによって可読性をさげるのであれば守らなくてもよい。一貫性は重要ではあるが、あまりにも一貫性にこだわるのも問題だろう。崩す必要性があれば崩しても構わないのである。
最後にJavaのコーディング規約に紹介されていた、コーディングの心得5か条を載せておこう。
- 見やすさを重視せよ
- ネーミングはわかりやすく
- サンプルコードは鵜呑みしない
- 同じコードは2度書かない
- 役割はひとつに