こんにちは、プログラマのHです。
今回はプログラマにとって大切なコーディング規約について触れてみたいと思います。ゲーム開発で主に使用されるC++
を中心にお話しします。
目次
コーディング規約とは?
コーディング規約はスタイルガイドと呼ばれることもある、「コードを書く上での一定のルールや指針を定めたもの」です。ゲーム開発のプロジェクトに参加したときにはそのプロジェクト固有の規約が定められていることが多いです。
プログラマそれぞれが自分なりの正解でコーディングしてしまうと、コードを読む際に混乱のもとになり全体の可読性が下がってしまいます。プロジェクト独自の文化で決められたコーディング規約を各プログラマが守ることで他のプログラマと一貫性を保つことができ、開発効率を高めることができます。
コーディング規約は命名規則
やヘッダの記述の基準
、クラスの構成基準
などから始まり、細かいところまで行くとコメントの記載基準
やコードフォーマット
まで定めるものもあります。
参考になるコーディング規約の紹介
どこまで細かく決めるかはプロジェクト次第ですが、例えばC++
を書く上ではGoogleが公開しているスタイルガイドが非常に参考になる情報です。ありがたいことに日本語全訳してくださっているリンク もあります。
また、UnityやUnrealEngineを用いている場合はエンジン独自のルールが存在しますので、エンジンのコーディング規約を参考にするとよいでしょう。
- Unreal Engine における Epic の C++ コーディング規約 | Unreal Engine 5.5 ドキュメンテーション | Epic Developer Community | Epic Developer Commnity
- UnityでのC#スクリプティングのための命名とコードスタイルのヒント
大事なこと
このように様々なコーディング規約がありますが、全てを取り入れてしまうと縛りが多すぎて開発効率が下がってしまったりプロジェクトに合わないということもあるかと思います。例えばトイロジックのUEのプロジェクトではUEのコーディング規約に習いつつも以下のように抜粋してさらにコーディングのルールを定めていました。
- ヘッダのインクルードで相対パスは禁止
- 派生するvirtual関数には必ずoverrideの記載を行うようにする
- BPへの公開する変数名、関数名は_(アンダーバー)は禁止しパスカルケースで記述
- タブ/スペースはタブで統一
- autoキーワードは必ず&か*をつけるように
ヘッダのインクルードで相対パスは禁止
//修正前
#include "../Runtime/Engine/Classes/Kismet/KismetMathLibrary.h"
//修正後
#include "Kismet/KismetMathLibrary.h"
派生するvirtual関数には必ずoverrideの記載を行うようにする
//修正前
virtual void OnDeadByDrowning();
virtual void DrowningTimerUpdate();
//修正後
virtual void OnDeadByDrowning() override;
virtual void DrowningTimerUpdate() override;
BPへの公開する変数名、関数名は_(アンダーバー)は禁止しパスカルケースで記述※エディタ上でスペースに置き換わり可読性が悪くなるため
UPROPERTY(EditAnywhere)
int32 TestProp;
タブ/スペースはタブで統一
autoキーワードは必ず&か*をつけるように
場合によって値渡しとなってしまうケースが発生する恐れがあるため
for(auto String : MyStrings ) // NG
関数の戻り値が値となっているものについてはautoではなく型名を指定
int32 Pow(int32 X){
return X * X;
}
auto Value1 = Pow(10); // NG
int32 Value2 = Pow(10); // OK
etc...
この他にもファイルの命名規則やソースコードファイルのエンコードなども統一するのが良いです。
大事なのはチームで共有のコーディング規約があることです。たとえ各々がより良い、慣れ親しんでいると思ったコードであっても、他の方からは違和感を覚えるコードと映ることもあります。チーム開発ではこうした点を特に意識することが重要です。
これは個人開発でも同様です。自分が読み手としてコードを見返す場合や、誰かにコードをレビューしてもらう機会がある場合、一貫性が保たれたコードはスムーズに確認できるでしょう。また、時とともに新しいコーディングスタイルが登場することもありますので、必要に応じてそれらを取り入れていくこともよいでしょう。
最後に
いかがでしたでしょうか。今回は少し堅苦しい内容だったかもしれませんが、コーディング規約はプログラマにとって切っても切り離せない重要な要素だと思います。
まずは、どのようなコーディング規約があるか調べてみることが、日々のコーディングの品質を向上させる一つの良い方法かもしれませんね。