コーディング規約とは?必要な理由と、入れるべき項目、必要ないという意見について
エンジニアにとって、仕事をする上で大切なことのひとつに、コーディング規約があります。
今回はコーディング規約を作る目的や具体的にコーディング規約で示すべき項目、そして作る際の注意点まで細かく解説していきます。
HiPro Tech 会員のみ公開案件も多数。
コーディング規約とは?
コーディング規約とは、エンジニアやプログラマーが複数人で同一のタスクやプロジェクトを行う際に、ソースコードについて定めたルールのことです。
プログラムがどのように作られるべきかを示し、品質を保つために作成されます。
規約といっても、実際の内容は、タスクやプロジェクトを行うチームによって異なります。
しかし、示すべき項目はある程度決まっており、ソースコードの使用方法や禁止事項などが主な内容です。
使用する言語によってもコーディング規約は変わってきます。
主な言語としては、Java、PHP、Python、JavaScript、Ruby、C#、Scala、Swift、Erlangなどです。
Javaであれば、世界的に有名な某IT企業もコーディング規約のテンプレートを示しています。
他にもそれぞれの言語でいくつかコーディング規約のテンプレートが公開されているので、自身のプロジェクトに合ったものを見つけて参考にしてみると良いでしょう。
エンジニアがコーディング規約を作る目的・必要性は?
エンジニアがコーディング規約を作る目的は複数ありますが、主な目的を紹介します。
プログラムの保守性を高くする
プログラムの保守性というのは、正常な状態を維持するように保つことを指します。
例えば、コーディング規約によってプログラムの書き方を統一すれば、プログラムの内容をすぐに理解でき、プログラムの間違いやバグを発見して修正できるでしょう。
また、新しい人が途中からプロジェクトに参加したとしても、プログラムを理解するまでの工程がスムーズになります。
プロジェクトに参加している誰もが理解しやすいというのが大きな利点になります。
結果、プログラムが正常な状態を保ちやすくなり、保守性が高くなります。
プログラムの一定の品質を担保する
コーディング規約によってあらかじめバグの少ないコードを使用することを設定しておけば、品質を保ちやすくなります。
さらに、規約は明文化されているので、それらが守られているかを誰の目から見てもチェックすることができ、ミスを未然に防ぐことができます。
また、品質の向上という面でいえば、人によってはこれまで経験したことの無い方法でシステム開発を行うケースもあったと思いますが、コーディング規約を設けることによって、このような経験を積み、一人ひとりの知識や経験が強化され、その後の品質の向上も見込めるでしょう。
コーディング規約で示すこと
こちらで、コーディング規約で示す代表項目を紹介します。参考にしてください。
命名規則
命名規則とは、ソースコードの視認性や可読性を高めるために、識別子の名称のルールを定めたものです。
変数、定数、メソッド(関数)、クラスなどの名前の付け方の基準を決めています。
コーディングスタイル
コーディングスタイルとは、プログラムの細かい表現の仕方を基準として示したものです。
コースコードのレイアウトと考えると、わかりやすいかもしれません。
例えば、括弧の形や付け方、コメントの位置、空白を入れる場所や入れる数、改行する場所などを決めます。
それらをどのように表現するかは、言語によっても異なる部分もありますが、多くの場合は、プログラマーの好みによって表現が変わることが多いため、統一ルールとしてコーディング規約に示す必要があるのです。
リソース
プログラムを使用する際に、リソースが不足してしまうと、システムを動かすことができなくなってしまいます。
そのため、リソース不足や無駄なリソースを費やしてしまうことを防ぐために、リソースに関する説明や制限などをコーディング規約として示します。
ただし、大きなリソースを管理するのは非常に負荷がかかるため、リソースに関しては細かく示さなくとも、大枠の認識が揃えられるようにしておくケースが多いです。
禁止事項
コーディング規約で行うべきことを示すことも大切ですが、反対に行ってはいけないことも示さなくてはなりません。
具体的には、間違ったソースコードの文法や、現在では常用されなくなったものなどを使用しないように制限することで、さらにプログラムの統一を図ることができます。
しかし、場面によっては、例外として使用した方が良い場面も出てくる可能性があるので、そのような場合の例外パターンも、コーディング規約に示しておくと良いでしょう。
推奨事項
例えば、ルール内であっても、類似したソースコードがあった場合、どちらを使用した方が良いのか判断に迷う場合があります。
その際に、どちらを使用した方が良いかをこの項目では示します。
また、使用必須ではないがこちらの方が好ましいといったソースコードの書き方を示すのもこちらの項目です。
制限事項
こちらは、禁止事項ほどの強制力はない項目ですが、ここでは使用されるのが好ましくないコーディング方法やあまり推奨されない機能などを示します。
その際、ただ単に推奨されないということのみを書くのではなく、どのような場合に好ましくないのかという条件まで書いておくのがベストでしょう。
コーディング規約を作るときに心がけること
使用する言語や最新の技術に合わせて更新していく
コーディング規約は、普遍性を考慮して作られていることが望ましいです。
しかし、IT技術やプログラミング技術は、高い頻度で向上していき、その度に新たな機能が出現します。
そのような場合に、コーディング規約を見直さずに進んでしまうと、最新のIT技術を使用した機能と掛け合わせようとした際に不具合が起こってしまう、もしくは処理に時間がかかってしまう危険性があります。
使用する言語や進めていくプロジェクトによって、その都度見直しを検討しましょう。
短く、わかりやすく、チェックしやすいものにする
先にも述べた通り、コーディング規約の内容は、普遍性を考慮して作成することが望ましいです。
そして、「誰にでも」理解できる書き方でなければ、コーディング規約の意味がありません。
あまりにも長すぎるものや、わかりにくい内容のもの(一般的にあまり使用されていない単語を使用するなど)、項目として照らし合わせながらでないとチェックできないものにしてしまうのは、あまり好ましくありません。
実務経験が浅いエンジニアでもわかるような、親切な内容にするのがよいでしょう。
例外も認める
コーディング規約が普遍性を持つといっても、100%すべての場面で適用されるということは難しいです。
時には、例外的にコーディング規約に反することをした方が良い場合もあるでしょう。
こちらも先に述べましたが、あらかじめ想定できる例外であれば、コーディング規約の中に記載してしまった方が良いでしょう。
関連記事:PHP案件の業務内容とは?PHPの案件状況や報酬、必要スキルなども紹介
コーディング規約が不要だという意見もある
コーディング規約は必要だと考えられる場合もあれば、不要だと考えられる場合もあります。
例えば、複数人で円滑にタスクやプロジェクトを遂行するためには、コーディング規約を順守することが求められます。
一方で、以下の理由によってコーディング規約が不要という意見があることは軽視できません。
定期的なメンテナンスが必要である
IT技術は日々目まぐるしい進歩を遂げており、ソースコードについても同様です。
コーディング規約も、最新のIT技術やソースコードに合わせたアップデートが必要になります。
定期的なメンテナンスや見直しの手間が必要になるのはデメリットになるかもしれません。
技術のアップデートがある度に、コーディング規約を更新する必要が発生するのです。
負荷が重い
円滑なコーディングのために定められたコーディング規約が、エンジニアにとって負担となることも多いです。
コーディング規約によってコーディングの選択肢が狭められてしまうと、エンジニアは自由なコーディングができません。
優秀なエンジニアが能力を活かせないと感じたり、エンジニアによってはストレスを感じたりする場合もあります。
必要性を感じないエンジニアも多い
高い技術力を持つエンジニアにとっては、コーディング規約によって記述をそろえることに必要性を感じない場合も多いです。
前述のとおり、優秀なエンジニアにとっては規約によって記述をそろえることで、持っている技術力を発揮できなくなるためです。
これがストレスになってしまったり、モチベーションが下がってしまったりするケースがあります。
一方で、まだスキルの低いエンジニアが多いプロジェクトにとってはコーディングの記述をそろえることは、大きな有益性があります。
十分なスキルがないエンジニアが自由にコーディングすると、品質が落ちる、プログラムの保守性が悪くなるといった危険性があるからです。
高い技術力を持つエンジニアが集まっている場合のタスクやプロジェクトは、コーディング規約のコーディング記述に制約を設けない。
一方で、まだ十分なスキルがないエンジニアや、エンジニアのレベルにばらつきのある大きなプロジェクトの場合はコーディングの規約を制限的なものにする、というように、エンジニアやプロジェクトの規模に応じたコーディング規約を設けるのも一つの手段です。
【事例】C言語におけるコーディング規約の必要性
プログラミング言語のなかでも、C言語はフリーフォーマットの言語のためコーディングの自由度が高い特徴があります。
プロジェクトの規模が大きくなると、複数人のエンジニアがプログラミングを行い、開発後も改修が行われることも多いです。
そのためC言語では、可読性・保守性を高めたりデバッグを効率的に行うためにコーディング規約をしっかり定める必要があります。
C言語の場合は、コーディング規約によってあらかじめコーティングの記述を限定または制限しておくことで、保守性を高められます。
C言語のコーディング規約の例(一部)
C言語におけるif文の例には以下のものがあります。
・インデントとタブは半角スペース4つ分とする。
/* 正しい例 */ |
・if、for,、while,、switchなどの制御文では、カッコの前後にスペースを入れる。
/* 正しい例 */ for (a = 0; a < 10; a++) { if (a < 5) { printf ("aは5より小さい\n"); } else if (a == 5) { printf ("aは5と等しい\n"); } else { printf ("aは5より大きい\n"); } } /* 間違った例(カッコ前後にスペースがない) */ for(a = 0; a < 10; a++){ if(a < 5){ printf("aは5より小さい\n"); }else if(a == 5){ printf("aは5と等しい\n"); }else{ printf("aは5より大きい\n"); } } |
・if文や、if文のelse節、while文などは必ず改行する。
/* 正しい例 */ if (a > b) { c = a + b; } else { c = b – a; } /* 間違った例(改行されていないため、読みにくい) */ if (a > b) { c = a + b;} else { c = b – a;} |
・制御文のカッコの位置は次の通りとする。
/* 正しい例 */ if (a > b) { printf ("aはbより大きい\n"); } /* 間違った例(最後の中カッコの前に半角スペースがある)*/ if (a > b) { printf ("aはbより大きい\n"); } |
・制御文が実行するコードが1行だけのときも中カッコでくくる。
/* 正しい例 */ if (a > b) { printf ("aはbより大きい\n"); } /* 間違った例(中カッコを省略している)*/ |
・複雑な条件式は、可読性を高めるため意味のかたまりごとにカッコでくくる。
/* 正しい例 */ if ( (a < b) || (c < d) ) { printf (“正しい書き方です。”); } /* 間違った例(条件式の優先順位がわかりにくい)*/ |
・修正または削除を行う場合、コメントアウトではなくツールなどで残す。
/* 間違った例(コメントで削除や修正の履歴を残さない)*/
/* 以下は確認後に削除 |
コーディング規約のサンプル
エンジニアのレベルやプロジェクトの規模によって、コーディング規約を適切な内容にしなければいけません。
ところが、コーディング規約の策定に時間をかけてしまうと、タスクやプロジェクトの進行に支障が出てしまいます。
コーディング規約は、すでに提唱されているものを参考にするのも有効です。
そのまま転用してしまっても問題ありません。
公開されているコーディング規約で、参考になるものの事例を紹介します。
Java
汎用性の高い言語であるJavaは、すでに多くのコーディング規約が公表されています。
・Code Conventions for the Java Programming Language
・オブジェクト倶楽部Javaコーディング標準
・Google Java Style Guide
・非公式日本語版
PHP
WordPressの構築やプラグインの導入、デザインカスタマイズなどで多く使われているのがPHPです。
フリー言語のため幅広いツールなどにも応用されています。
・PSR-2 Coding Style Guide
・CakePHPコーディング規約
・Symfonyコーディング規約
・WordPressコーディング規約
・FuelPHPコーディング規約
関連記事:PHPの資格や勉強方法、難易度、資格取得のメリットを紹介
Python
Pythonでは以下のコーディング規約があります。
・Google Python スタイル
・PEP8
Google Python スタイルは初心者でも理解しやすい内容となっています。PEP8はソースコードスタイルのチェックも可能です。
関連記事:【Python】コードが劇的に読みやすくなる「クラス」の使い方を徹底解説
C
フリースタイル言語であるC言語のコーディング規約には「The International Obfuscated C Code Contest」の入賞コードが参考になります。
関連記事:C言語の資格一覧!試験内容や難易度、参考書を使ったおすすめ勉強法も紹介
まとめ
今回はコーディング規約を作る目的や具体的にコーディング規約で示すべき項目、そして作る際の注意点を解説してきました。
コーディング規約は、参画するプロジェクトによって異なるケースもあるため、さまざまな案件に入る可能性や、豊富な経験を基にコーディング規約を作る側に回る可能性があるフリーランスエンジニアは、より理解を深めておいた方が良い内容とも言えます。
そして、これからさらに多くの案件を獲得し、より活躍していきたいと考える場合には、当社が運営するフリーランスITエンジニア専門のエージェントサービスである「HiPro Tech」を、活用してみてください。
当サービスでは、月額報酬が80~100万円といった高単価の案件や非公開案件を取り扱っています。
ぜひ無料会員登録してみてください。
記事監修
2006年に株式会社インテリジェンス(パーソルキャリア株式会社)へに入社。 アルバイト領域の法人営業や新規求人広告サービスの立ち上げ、転職サービス「doda」の求人広告営業のゼネラルマネジャーを歴任。 2021年11月からIT・テクノロジー領域特化型エージェントサービス「HiPro Tech」に携わり、現在サービス責任者を務める。 「一人ひとりが求めるはたらき方や案件との出会いを増やし、キャリアをデザインできるインフラを提供する」ことを自らのミッションとして掲げ、サービス運営を行う。