はじめに
組織・プロジェクトによる多少の差はあれど、
コーディング規約を読んだ経験がある人は多いのではないでしょうか?
斯く言う私もいくつかコーディング規約を読んだ経験があります。
コーディング規約と一言でいっても様々なルールがあり、
・本当に規約を遵守する必要があるのか?
・規約を決めた人の好みじゃないのか?
という疑問を持ったことがある人もいるのではないかと思います。
そこで、「価値の高いコーディング規約とは何か?」という視点でコーディング規約の本質について考えてみたいと思います。
価値の高いコーディング規約とは?
まず、コーディング規約を定める目的は何でしょうか?
ソフトウェア開発者がプログラムを記述するルールを統一することでプログラムの品質や保守性の向上を図り、組織・プロジェクトとして一定の水準を担保することだと思います。
なので、__コーディング規約の本質とは、コーディングルールを定めることでプログラムの品質や保守性の向上に寄与すること(≒プロダクトの価値を高めること)__であると考えます。
本当に規約を遵守する必要があるのか?、規約を決めた人の好みじゃないのか? という疑念を持つ場合、このプログラムの品質や保守性の向上に寄与する(≒プロダクトの価値を高める)ルールとなっていないことが多いと感じます。
if文を例にあげて考えてみたいと思います。
例)if文のコーディングスタイル
プロジェクトAのコーディング規約でif文のコーディングスタイルについて、可読性の向上のために以下のルールがあるとします。
① if文の括弧は、条件式の後に改行せずに書くこと
if a < 1 {
if b < 1 {
***
}
}
if文の括弧の位置は、いくつかコーディングスタイルがあり、
以下のようなスタイルの方が馴染みがある人も多いかと思います。
if a < 1
{
if b < 1
{
***
}
}
①のようなルールがあった場合、
本当に規約を遵守する必要があるのか?、規約を決めた人の好みじゃないのか?
という疑念を持つ人もいるのではないでしょうか。
これは、①のルールがプログラムの品質や保守性の向上に対する貢献度が低いからだと考えます。
極端に言うと後者のコーディングスタイルを採用することで、
プログラムの品質や保守性が低下し、プロダクトの価値低下に繋がるでしょうか?
そこまでの影響はないと思われる人が多いのではないでしょうか。
では、次のようなルールの場合は、どうでしょうか。
② if文の括弧の後は改行し、インデントを整えること
if a < 1 { // 括弧の後は改行する
if b < 1 { // インデントを整える
***
}
}
もし、②のルールがない場合、
以下のようなプログラムを記述をするソフトウェア開発者がいるかもしれません。
if a < 1 { if b < 1 { *** } }
このようなプログラムが散見される場合、どう感じるでしょうか?
プログラムの可読性が低下し、バグを誘発する可能性があると感じるのではないでしょうか。
なので、②のルールはプログラムの品質や保守性の向上に対する貢献度が高く、コーディング規約として必要なルールだと感じます。(もちろん、個人差はあります。)
ルールの貢献度を意識する
コーディング規約の本質とは、コーディングルールを定めることでプログラムの品質や保守性の向上に寄与すること(≒プロダクトの価値を高めること)です。
なので、コーディング規約のルールは、プログラムの品質や保守性の向上に対して貢献する内容でなければなりません。この貢献度が明確となっているルールこそが価値の高いコーディング規約であると考えます。
コーディング規約とは、コーディングスタイルを統一することが目的ではなく、コーディングスタイルを統一することでプログラムの品質や保守性を向上することが目的なのです。
さいごに
いろいろなコーディング規約がある中で本当に価値のあるコーディング規約とは何だろう?という疑問があり、個人の視点で考えてみました。
個人の見解となりますので、賛否両論はあると思っています。
組織・プロジェクトのレベルによっては、例としてあげた内容は当たり前であり、
価値のないルールであるということもあるかと思います。
大切なのは、コーディング規約がある理由やルールの貢献度について意識することだと思います。コーディング規約は目的ではなく、目的を達成するための手段であるということを意識していきたいですね。
最後まで読んでいただき、ありがとうございました。