KEIS BLOGは株式会社ケイズ・ソフトウェアが運営しています。

KEIS BLOG

コーディング規約の手っ取り早い導入方法

LINEで送る
Pocket

こんにちは。本日はコーディング規約についてのお話です。

コーディング規約ってみなさんの現場にはありますでしょうか?あるのが当たり前かと思いきや、私の経験の中では無い現場の方が多かったです。あれってどうやって作成されているのでしょうね?MECE(もれなく、かぶりなく)であり、粒度もそろえて、現場のメンバー構成に合わせて・・・となるとかなり大変そうです。

という事で、ネットから入手できるコーディング規約もいくつかあるのですが、コーディング規約本をメンバーの人数分買い揃え、配布するというのはいかがでしょうか?一読してチームに合わないものは「×」を付けてしまえばよいのです。それを基本にして、チーム独自のモノを追加する。これがもっとも手っ取り早いのではないでしょうか?

この手の本の良い所は単純な規約の羅列ではなく、
・ルールの意味
・なぜこのルールが存在するのか
・良い例、悪い例
についての解説がなされている事です。ルールの意味が分からないままにルールに従うのって、しんどいですからね。

さて、このようなコーディング規約を扱った本の中で、Java に限ってここ最近出版された本は2冊あります。

最新Javaコーディング作法  プロが知るべき、107の規約と21の心得
最新Javaコーディング作法  プロが知るべき、107の規約と21の心得

こちらは Java のコーディング規約にとどまらず、コードレビューの心得の部分にまで踏み込んで記載された1冊です。

少し読みにくさは感じるのですが、規約ごとにその規約が静的検査可能なのか、その目的と言った情報が記載されているために理解がしやすく、もちろんルールの理由や良い例、悪い例も記載されています。

巻末に静的チェックツールの紹介とその利用方法が記載されており、(しかもそんなに長くない)。心得に関しては短い中でもレビュータイミングについてまで踏み込んで記載されています。採用する、しないはともかく、レビュアは必読と言えるのではないでしょうか?

最後に本書の最も大きなメリットと思えるのが、初版発行日が2011年10月でありながら、 Java7について触れられていることです。

Java7になることによってコーディング規約はかなり影響を受けます。これは Java7 の主な変更点がシンタックスの改善だったからです。2013年時点では Java7 に準拠したコーディング規約を記述した書籍は本書しかないのでは無いでしょうか?

Javaルールブック ~読みやすく効率的なコードの原則
Javaルールブック ~読みやすく効率的なコードの原則

本書は発行日が2011年3月と若干古いためその半年ほどの差が明暗を分けたのか? Java6以上が対象、逆に言うとJava7は対象としておらずその点が残念ではあるのですが、一般的と思われるコーディング規約をMECEに簡潔にまとめた1冊になっています。

なぜその規約が存在するのかその説明と同期も簡単に記載されており、実際に悪い例、良い例を挙げて説明されているため、単純にコーディング規約だけ列挙されているようなものではありません。

また重要度順に星をつけてあるのもポイントです。「うちのチームでは重要度星5つだけ採用しよう」であるとか、「うちのチームでは星3つのものまで採用しよう」であるとか、実際にはそのような適用を行う事の方が現場では多くなりそうです。星がつけてあるおかげで全てを適用するわけでは無いケースでも選定がずいぶん楽になります。

この本自体を持ち歩かなくても、巻末に3枚でコーディングルールだけをまとめたものが付録されており、そこだけを切り取って携帯できるようになっているのも気が利いています。レビュワー側については本書を何度か読めば内容、理由は把握できるはずですので、それで充分です。

ちなみに重要度星5つとなっているルールは、小文字の違いで名前を区別しない、といった非常にバグを生みやすい記述方法に対しての禁止や、定数はstatic finalで宣言する、文字列リテラルはnewしない、といった常識の範疇のもの、文字列リテラルと変数を比較するときは、文字列リテラルのequalsメソッドを利用する、と言った、守らないとそもそもバグになってしまうものと、まさに最低限と言える内容になっています。

Java7になった場合、例えば数値リテラルの書き方はJava7に準拠した形が望ましいし、例外処理の部分などはJava 7の記述方法のほうが圧倒的に可読性が向上します。読みやすさや星による重要度わけ、巻末のルールシートが便利なだけに、今後Java7に完全に準拠した版が出版されるのを期待したいです。

以上2冊のご紹介でした。なかなかこの手のコーディング規約で面倒なのは、バージョンが変わると最善の方法も変わるということです。 Javaの場合、後方互換性が極端に重視されているので、古い方法においても同じ事を行うことができてしまうのですが、やはりそれは最善とは言えません。

古くで言えばハッシュテーブル、また日付関係の扱い、スレッド、ファイル操作等々です。またさらに言えば、いずれ来るJava8では、例えば日付関係のAPIの大幅な変更その他もろもろが入っていますので、またしても規約は影響をうけます。まあ考え方を変えればこの手の規約本は言語のバージョンが変わるたびに買い直し、著者ウハウハ!、こちらは必要経費という事で割り切るしかないのでしょうか?

この記事に対するご意見、ご感想は blog@keis-software.com までよろしくお願いします。

LINEで送る
Pocket