今回は、GodotEngineで作業を開始する前に押さえておきたいベストプラクティスや注意事項を、公式ドキュメントを基にまとめていきます。
- Godot Engineで作業をするときに気を付けることは?
 - Godot Engineで効率的なデータ整理やプログラミングを行うにはどうすればいい?
 - Godot Engineで推奨される命名規則やセオリーを確認したい
 
この記事では、各項目の重要度/使用頻度を以下の形式で表示しています。
 ・【★★★】:重要でよく使うもの。初心者,スピード重視の方はここだけ覚えれば十分。
 ・【★★】:覚えておくと便利 or やや難めかつ習得が必須でない内容
 ・【★】:あまり使わない or 上級者向け機能
命名規則【★★★】
Godot Engineでは以下のような命名規則が推奨されています。
- フォルダ/ファイル名:snake_case
 - ノード名:PascalCase
 
フォルダ・ファイル名のsnake_caseは、GodotスクリプトがPythonベースであることや動作環境(OS)による大文字・小文字の際による不具合防止、ノード名のPascalCaseは組み込みノードシーケンス仕様との整合性確保といった理由で上記の形が推奨されているようです。
フォルダ構成【★★★】
Godotはシーンベースでプロジェクトを構成し、標準のファイルシステムをそのまま利用可能です。
また、Godot Engineの設計思想として、「どんな小さな単位でもできる限りシーン化する」という志向があります。プロジェクトフォルダ群を構成する際は、以下のポイントを押さえておきましょう。
- プロジェクトファイルの構成は、可能な限りシーン単位でまとめる。
→あるシーンを構成するために必要なものは、その単位フォルダ内にそろっている状況 - サードパーティーのリソースは原則*として最上位フォルダへ配置する。(addons/)
*ただし、上述の“シーン単位”にて依存関係がある場合は適宜調整 
フォルダ構成例
Godot推奨例:(シーン単位で分類)
root
├ project.godot
├ addons
│ └ sample_assets
├ characters
│ ├ player
│ │ ├ player.tscn
│ │ ├ player.gd
│ │ ├ sprite_player.png
│ │ └ model_player.dae
│ ├ enemies 
│ │ ├ slime
│ │ │ ├ slime.tscn
│ │ │ ├ slime.gd
│ │ │ ├ sprite_slime.png
│ │ │ └ model_slime.dae
│ │ └ goblin
│ │   ├ goblin.tscn
│ │   ├ goblin.gd
│ │   ├ sprite_goblin.png
│ │   └ model_goblin.dae
│ └ npcs  
└ levels  
  └ stage1
    ├ stage1.tscn
    └ stage1.scn一般的な構成:
root
├ project.godot
├ addons
│ └ sample_assets
└ assets
 ├ gd
 │ ├ player.gd
 │ ├ slime.gd
 │ └ goblin.gd
 ├ sprite
 │ ├ sprite_player.png
 │ ├ sprite_slime.png
 │ └ sprite_goblin.png 
 ├ scene  
 │ ├ stage1.tscn
 │ ├ player.tscn
 │ ├ slime.tscn
 │ └ goblin.tscn
 ├ model
 │ ├ model_player.dae
 │ ├ model_slime.dae
 │ └ model_goblin.dae
 └ scn 
   └ stage1.scnフォルダを構成していく際には、各シーン間で共依存関係が発生しないように留意することが、保守性を高めるために重要です。
こうしておくことで、例えば敵キャラクターやプレイヤーのパーツを別プロジェクト等で流用したい場合にフォルダごと移動するだけで対応できます。
ここで説明した内容は、公式ドキュメント内にある以下ページからも確認できます。
補足:シーン(ルートノード)とクラスの役割
シーン(ルートノード)≒クラスのような単位とも考えられ、以下を定義する役割を持ちます。
- ノード構成・スクリプトで使用できるノード種別
 - 各種初期化
 - シグナル接続
 
hiramame最適なフォルダ構成は使用するゲームエンジンや開発環境、開発者の管理方法などによって様々です。Godot以外では別の形式が適合する場合がありますのでご留意ください。
特定のフォルダをGodotインポートから除外する【★】
Godotでは、あるフォルダ内に[.gdignore]という空ファイルを作成することで、そのフォルダをGodotで読み込まないようにすることができます。





不要なファイルの読み込みをなくすことで、インポートの高速化に加えて、編集操作のミスによるデータの破損などを防ぐことができます。
Godotスクリプトスタイルガイド【★★】
GodotのスクリプトはPythonライクであることから、基本的な考え方はPEP8スタイルガイドに準じます。
この項では、公式ドキュメントの内容を踏まえ、何点かのポイントをまとめていきます。
(より詳細な規則や応用例は各サイトをご参照ください)
- ファイル名・クラス名は以下のように適宜変換を行う(クラス・ノード名はPascalCase)
ファイル名:player_controller.gd ⇔ クラス名:PlayerController - クラスをロード(変数/定数へ格納)する時、PascalCaseで命名する
例)const Item = preload(“res://item.gd”) - オーバーライドが必要な仮想メソッド・プライベート関数/変数は先頭に「_」を付与する:
例)var _counter = 0
func _recalculate_path(): - シグナル名はsnake_caseの過去形で命名する
 - 定数はCONSTANT_CASEで表記する
 - 列挙型の名前はPascalCase、メンバはCONSTANT_CASEで表記する
→enumはクラス・ノード、そのメンバは定数の扱いであるため - ブール演算子は「&&」,「||」ではなく、「and」,「or」表記を使う
 - 大きい数値は「_」(アンダースコア)区切りで見やすく整形する:
例)「1234567890」→「1_234_567_890」(適用の基準は7桁以上から) - 引用符は極力「”」(ダブルクォート)を使用する
→エスケープ処理をしたいときに「’」(シングルクォート)を使えるようにするため - 16進数を使用するときはすべて文字で表記する:〇「0xff」・×「0XFF」
 - 各所にはコメントを挿入する(コメント化/コメントアウトショートカット:Ctrl+K)
 



スタイルガイドはあくまで可読性を高めることが目的です。ここに記載の内容にとらわれず、どのような書き方が自身の作業にとってプラスになるかで適宜カスタマイズしていきましょう。
参考サイト
この記事はGodotEngine公式ドキュメントを参考にまとめさせていただきました。
最新情報やより詳細な解説を得たい場合は以下公式ページをぜひご参照ください。
<日本語翻訳版>
<英版>
