リンドくんたなべ先生、ゲーム開発を始めたんですけど、プロジェクトのフォルダがぐちゃぐちゃになっちゃって...
どこに何を置けばいいのかわからないんです。
たなべあるある!実は自分も最初はそうだったよ。
でもね、最初にしっかりとしたフォルダ構成を作っておくと、後々の開発がものすごく楽になるんだ。今日はその秘訣を教えるね。
ゲーム開発におけるフォルダ構成の重要性
ゲーム開発を始めたばかりの方が最初につまずくポイントの一つが、プロジェクトのフォルダ構成です。
最初は小さなプロジェクトでも、開発が進むにつれてファイルは増え続け、気づけば「あのスクリプトどこだっけ?」「このテクスチャはどこに保存したっけ?」という状況に陥りがちです。
プロフェッショナルなゲーム開発現場では、プロジェクト開始時にフォルダ構成のルールをチーム全体で統一することが当たり前になっています。
なぜなら、適切なフォルダ構成には以下のような大きなメリットがあるからです。
- 開発効率の向上 - 必要なファイルをすぐに見つけられる
- チーム開発の円滑化 - メンバー全員が同じルールで作業できる
- 保守性の向上 - 後から見返したときに理解しやすい
- バグの発見が容易 - 関連ファイルが整理されているため原因追及がスムーズ
- プロジェクト規模の拡大に対応 - 新機能追加時も混乱しない
この記事では、ゲーム開発初心者の方でもすぐに実践できる、プロジェクト作成時のフォルダ構成のベストプラクティスを詳しく解説していきます。
なぜフォルダ構成が重要なのか
リンドくんでも先生、とりあえず動けばいいじゃないですか?
フォルダの整理って後回しでもいいような...
たなべその気持ちはわかるよ!でもね、後回しにすると必ず痛い目に遭うんだ。
自分も学生時代に「後で整理すればいいや」って思ってたら、提出前日に大パニックになったことがあるよ(笑)
プロジェクトが大きくなると起こる問題
ゲーム開発では、プロジェクトが進むにつれて以下のような問題が発生しがちです。
ファイルの所在がわからなくなる
例えば、「プレイヤーの移動スクリプト」を修正したいとき、PlayerController.csがどこにあるか分からず、フォルダを何十個も探し回る...なんてことが起こります。これは貴重な開発時間の無駄遣いです。
似たようなファイルが重複する
整理されていないプロジェクトでは、「あれ、このキャラクターのテクスチャ、前にも作ったような...」と、同じようなアセットを何度も作ってしまうことがあります。これはストレージ容量の無駄にもつながります。
チームメンバーとの連携が困難になる
複数人で開発する場合、各自が好き勝手な場所にファイルを置くと、「誰がどこに何を置いたのか」が把握できなくなり、コミュニケーションコストが跳ね上がります。
バグの原因究明に時間がかかる
関連するファイルがバラバラに配置されていると、バグが発生したときに「どのファイルが関連しているのか」を追跡するのが非常に困難になります。
整理されたフォルダ構成のメリット
一方、最初からしっかりとしたフォルダ構成を作っておくと、以下のようなメリットがあります。
- 作業効率が飛躍的に向上する - 「探す時間」が劇的に減少します
- 新機能の追加が容易になる - どこに何を追加すればいいかが明確です
- プロジェクトの全体像が把握しやすい - フォルダ構成を見るだけで、ゲームの構造が理解できます
- リファクタリングがしやすい - コードの改善作業がスムーズに進みます
- 他の開発者が参加しやすい - 新しいメンバーがプロジェクトを理解しやすくなります
フォルダ構成は、まさにゲーム開発の土台なのです。土台がしっかりしていれば、その上に建てる建物(ゲーム)も安定します。
基本的なフォルダ構成の考え方
リンドくんわかりました!じゃあ、どんなフォルダを作ればいいんですか?
たなべ基本的な考え方としては、「種類別」「機能別」「シーン別」の3つの軸で整理するといいんだ。順番に見ていこう。
種類別の整理
最も基本的なのが、ファイルの種類ごとにフォルダを分ける方法です。これはどんなゲームエンジンでも使える普遍的な考え方です。
Project/
├── Scripts/ # すべてのプログラムコード
├── Textures/ # 画像ファイル(テクスチャ)
├── Models/ # 3Dモデル
├── Audio/ # 音声・音楽ファイル
├── Animations/ # アニメーションファイル
├── Prefabs/ # 再利用可能なオブジェクト(Unityの場合)
├── Materials/ # マテリアルファイル
├── Scenes/ # ゲームのシーン
└── UIResources/ # UIに関連するファイル
この構成のメリットは、「スクリプトを探すときはScriptsフォルダを見る」というように、ファイルの種類で直感的に探せる点です。小規模なプロジェクトでは、これだけでも十分機能します。
機能別の整理
プロジェクトが大きくなってきたら、機能やシステムごとにフォルダを分けるのが効果的です。
Project/
├── Player/
│ ├── Scripts/
│ ├── Animations/
│ └── Models/
├── Enemy/
│ ├── Scripts/
│ ├── Animations/
│ └── Models/
├── UI/
│ ├── Scripts/
│ ├── Textures/
│ └── Prefabs/
├── Environment/
│ ├── Models/
│ ├── Textures/
│ └── Materials/
└── Systems/
├── GameManager/
├── AudioManager/
└── SaveSystem/
この構成では、関連するファイルが一箇所にまとまるため、特定の機能を修正・改善する際に非常に便利です。例えば、プレイヤー関連の処理を変更したいときは、Player/フォルダ内だけを見れば済みます。
シーン別の整理
ステージやレベルが複数あるゲームでは、シーンごとにフォルダを分けることも有効です。
Project/
├── Scenes/
│ ├── TitleScreen/
│ ├── Stage1/
│ ├── Stage2/
│ └── BossStage/
└── Common/ # 全シーンで共通のアセット
├── Scripts/
├── Audio/
└── UI/
この方法は、ステージ固有のアセットと共通アセットを明確に分けられるのが利点です。
ハイブリッド構成(推奨)
実際のプロジェクトでは、これら3つの考え方を組み合わせるのがベストプラクティスです。
Project/
├── _Project/ # プロジェクト固有のアセット
│ ├── Scripts/
│ │ ├── Player/
│ │ ├── Enemy/
│ │ ├── UI/
│ │ └── Systems/
│ ├── Art/
│ │ ├── Characters/
│ │ ├── Environment/
│ │ └── UI/
│ ├── Audio/
│ │ ├── Music/
│ │ └── SFX/
│ └── Scenes/
│ ├── MainMenu/
│ └── Gameplay/
├── Plugins/ # サードパーティのアセット
└── Resources/ # 動的ロードするリソース
この構成では、まず大きく「プロジェクト固有」「外部プラグイン」「リソース」に分け、その中で種類別・機能別に整理しています。これにより、スケーラビリティと可読性を両立できます。
Unity特有のフォルダ構成のポイント
リンドくん先生、Unityを使ってるんですけど、Unity特有の注意点ってありますか?
たなべあるよ!Unityには特別な意味を持つフォルダ名があるんだ。これを知らないと思わぬトラブルに遭うから、しっかり覚えておこう。
Unityの特殊フォルダ
Unityでは、特定の名前のフォルダに特別な機能が割り当てられています。
Resourcesフォルダ
Resources/フォルダに置いたアセットは、Resources.Load()を使ってコードから動的にロードできます。
// Resourcesフォルダから音楽ファイルをロード
AudioClip bgm = Resources.Load<AudioClip>("Audio/BGM/MainTheme");ただし、このフォルダの使用は最小限にすべきです。なぜなら、Resourcesフォルダ内のアセットはすべてビルドに含まれ、起動時間やメモリ使用量に影響するからです。
Editorフォルダ
Editor/フォルダに置いたスクリプトは、Unityエディタ上でのみ動作し、ビルドには含まれません。カスタムエディタツールやインスペクタ拡張を作る際に使用します。
Project/
├── Scripts/
│ ├── Editor/ # エディタ拡張スクリプト
│ │ └── CustomInspector.cs
│ └── Runtime/ # 実行時のスクリプト
│ └── PlayerController.cs
Pluginsフォルダ
Plugins/フォルダは、外部ライブラリやネイティブプラグインを配置する場所です。C++で書かれたネイティブコードなどをここに置きます。
StreamingAssetsフォルダ
StreamingAssets/フォルダに置いたファイルは、そのままの形でビルドに含まれ、実行時にファイルパスでアクセスできます。動画ファイルや設定ファイルなどを配置します。
Unity推奨のフォルダ構成例
Unityの公式ドキュメントやコミュニティで推奨されている構成の一例です。
Assets/
├── _Project/
│ ├── Scenes/
│ │ ├── _Boot/ # 初期化シーン
│ │ ├── MainMenu/
│ │ └── Gameplay/
│ ├── Scripts/
│ │ ├── Runtime/
│ │ │ ├── Player/
│ │ │ ├── Enemy/
│ │ │ ├── UI/
│ │ │ └── Utilities/
│ │ └── Editor/
│ ├── Art/
│ │ ├── Materials/
│ │ ├── Models/
│ │ └── Textures/
│ ├── Prefabs/
│ │ ├── Characters/
│ │ ├── Environment/
│ │ └── UI/
│ ├── Audio/
│ │ ├── Music/
│ │ └── SFX/
│ └── Animation/
│ ├── Controllers/
│ └── Clips/
├── Plugins/
│ └── ThirdParty/
├── Resources/ # 最小限の使用に留める
└── StreamingAssets/
この構成のポイントは、プロジェクト固有のアセットを_Project/フォルダにまとめている点です。アンダースコアをつけることで、Asset Storeからインポートした外部アセットと明確に区別できます。
フォルダ構成のベストプラクティス
リンドくん構成の考え方はわかってきました!でも、実際に運用するときのコツってありますか?
たなべ理論だけじゃなくて、実践的なテクニックもたくさんあるんだ。現場で使われている工夫を紹介するよ。
命名規則の統一
フォルダ構成と同じくらい重要なのが、ファイルやフォルダの命名規則です。
推奨される命名ルール
- PascalCase(パスカルケース):
PlayerController,EnemySpawner- クラス名、スクリプト名に使用
- camelCase(キャメルケース):
playerHealth,currentScore- 変数名、メソッド名に使用
- kebab-case(ケバブケース):
main-menu,game-over- シーン名、プレハブ名に使用可能
- 接頭辞・接尾辞の活用:
Player_Idle,Enemy_Attack,UI_Button- 関連ファイルをまとめて表示できる
避けるべき命名
- 日本語のファイル名(問題が起きる可能性があるので避けてください)
- スペースを含む名前(
My Script.csではなくMyScript.cs) - 曖昧な名前(
temp,test,newなど)
READMEファイルの活用
各主要フォルダにREADME.mdファイルを置くと、そのフォルダの目的や使い方を明確にできます。
Scripts/
├── README.md
├── Player/
│ ├── README.md
│ └── PlayerController.cs
└── Systems/
├── README.md
└── GameManager.cs
README.mdの例:
# Player Scripts
プレイヤー関連のすべてのスクリプトを管理します。
## ファイル構成
- `PlayerController.cs` - プレイヤーの移動と入力処理
- `PlayerHealth.cs` - HP管理とダメージ処理
- `PlayerAnimation.cs` - アニメーション制御
## 使用方法
新しいプレイヤー機能を追加する場合は、このフォルダ内に配置してください。バージョン管理との連携
Gitなどのバージョン管理システムを使う場合、.gitignoreファイルで不要なファイルを除外することが重要です。
GitHubで公開されているUnity用の.gitignoreも参考にしてください。
これにより、チームメンバー間で必要なファイルだけを共有でき、リポジトリサイズも小さく保てます。
フォルダ階層の深さ
フォルダ階層は深すぎず浅すぎずが理想です。
悪い例(深すぎる)Assets/Project/Scripts/Characters/Player/Movement/Ground/Walk/PlayerWalk.cs
Assets/Project/Scripts/Player/PlayerWalk.cs
一般的に、3〜5階層程度が適切とされています。それ以上深くなると、ファイルへのアクセスが面倒になります。
プレハブの整理術
Unityのプレハブは数が増えやすいため、特に整理が重要です。
Prefabs/
├── Characters/
│ ├── Player/
│ │ ├── Player_Base.prefab
│ │ └── Player_Variants/
│ │ ├── Player_Warrior.prefab
│ │ └── Player_Mage.prefab
│ └── Enemies/
│ ├── Enemy_Slime.prefab
│ └── Enemy_Dragon.prefab
├── Environment/
│ ├── Buildings/
│ └── Nature/
└── UI/
├── Buttons/
└── Panels/
プレハブバリアント機能を活用すると、基本となるプレハブから派生バリエーションを作成でき、共通の変更を一括で反映できます。
チーム開発でのフォルダ構成管理
リンドくん友達と一緒にゲームを作ることになったんですけど、何か気をつけることはありますか?
たなべチーム開発ではルールの統一が何より大切だよ!
みんなが好き勝手にファイルを置くと、すぐにカオスになっちゃうからね。
プロジェクト開始時の取り決め
チーム開発では、プロジェクト開始時に以下を明文化することが重要です。
- フォルダ構成のルール - どこに何を置くかの明確な基準
- 命名規則 - ファイル名やフォルダ名のルール
- コーディング規約 - スクリプトの書き方の統一
- コミットメッセージのルール - Gitでの変更履歴の書き方
これらをCONTRIBUTING.mdやProjectGuidelines.mdといったドキュメントにまとめ、チーム全員が参照できるようにしましょう。
コンフリクト回避のテクニック
複数人で同じプロジェクトを編集すると、コンフリクト(競合)が発生することがあります。これを避けるためのテクニックです。
シーンの分割
大きなシーンを複数人で編集すると、高確率でコンフリクトが発生します。そのため、シーンを機能ごとに分割することが推奨されます。
Scenes/
├── MainScene.unity # 統合用のメインシーン
├── Environment.unity # 環境担当者用
├── Player.unity # プレイヤー担当者用
└── UI.unity # UI担当者用
実行時にこれらのシーンをAdditive(加算的)にロードすることで、一つのゲームとして動作させられます。
// 追加でシーンをロード
SceneManager.LoadScene("Environment", LoadSceneMode.Additive);
SceneManager.LoadScene("Player", LoadSceneMode.Additive);
SceneManager.LoadScene("UI", LoadSceneMode.Additive);担当領域の明確化
各メンバーの担当フォルダを明確にすることで、不要な干渉を避けられます。
Assets/_Project/
├── Scripts/
│ ├── Player/ # 担当: Aさん
│ ├── Enemy/ # 担当: Bさん
│ └── UI/ # 担当: Cさん
コードレビューとフォルダ構成
プルリクエスト時に、フォルダ構成のルールが守られているかもレビューポイントに含めましょう。
レビューチェックリスト例:
- ファイルは適切なフォルダに配置されているか
- 命名規則に従っているか
- 新しいフォルダを作った場合、READMEがあるか
- 不要なファイルがコミットされていないか
よくある失敗例と対処法
リンドくん先生、やっぱり失敗しちゃいそうで不安です...
たなべ大丈夫!誰でも最初は失敗するものだよ。
よくある失敗パターンを知っておけば、同じ轍を踏まずに済むからね。
失敗例① すべてをルートフォルダに置く
問題点: ファイル数が増えるとスクロールが大変で、目的のファイルを見つけるのに時間がかかる
対処法: 最低限、種類別にフォルダを分ける
Assets/
├── Scripts/
├── Textures/
├── Models/
└── Audio/
失敗例② フォルダ名が曖昧
問題点: Stuff/, Misc/, Other/といった曖昧なフォルダ名を使うと、何を入れるべきか分からなくなる
対処法: 具体的で説明的な名前をつける
Stuff/→UtilityScripts/またはSharedAssets/Misc/→ 該当する具体的なカテゴリに分類
失敗例③ 日付や番号でバージョン管理
問題点: PlayerController_v1.cs, PlayerController_v2_final.cs, PlayerController_v2_final_REAL.csのようなファイル名
対処法: Gitなどのバージョン管理システムを使う。ファイル名でバージョン管理しない
失敗例④ テストファイルの放置
問題点: Test.cs, NewScript.cs, Temp.unityといった一時ファイルがプロジェクトに残る
対処法:
- テスト用の専用フォルダ
_Tests/を作る - 定期的にクリーンアップする
.gitignoreで除外する
失敗例⑤ 大きすぎるファイル
問題点: 1つのスクリプトに何百行もコードを書いてしまう
対処法:
- 単一責任の原則に従い、1つのクラスは1つの責任を持つ
- 大きなクラスは複数の小さなクラスに分割
- ファイル間の依存関係を明確にする
まとめ
リンドくんなるほど!フォルダ構成って、思ったより奥が深いんですね。
たなべそうなんだよ!最初にしっかり設計しておけば、後の開発がとても楽になるんだ。
プロのゲーム開発者も、みんな最初にこの部分を丁寧に作り込んでいるんだよ。
この記事では、ゲーム開発におけるプロジェクト作成とフォルダ構成のベストプラクティスについて解説してきました。
最後に、重要なポイントをまとめておきましょう。
押さえておくべきポイント
- フォルダ構成は開発効率を左右する - 適切な構成により、ファイル検索時間を大幅に削減できます
- 種類別・機能別・シーン別の3軸で考える - プロジェクトの規模や性質に応じて最適な構成を選択
- 命名規則の統一が重要 - チーム全体で統一されたルールに従うことで、混乱を防げます
- Unity特有のフォルダに注意 -
Resources/,Editor/,Plugins/などの特殊フォルダの役割を理解する - チーム開発ではルールの明文化が必須 - ドキュメントとして残し、全員が参照できるようにする
- 失敗例から学ぶ - よくある失敗パターンを知っておけば、同じ過ちを避けられます
今日から始められるアクション
まずは小さなプロジェクトから実践してみましょう。以下のステップで始めるのがおすすめです。
- 基本的なフォルダ構成を作る - Scripts, Textures, Audio, Scenesの4つから始める
- 命名規則を決める - PascalCaseやcamelCaseなど、自分なりのルールを決める
- READMEファイルを書いてみる - 各フォルダの目的を簡単に説明する
- 定期的に見直す - プロジェクトの成長に合わせて構成を改善する
フォルダ構成は一度作ったら終わりではありません。プロジェクトが成長するにつれて、継続的に改善していくことが大切です。
この記事で紹介した内容は、あくまで基本的なベストプラクティスです。
より高度なプロジェクト管理手法や、大規模プロジェクト特有の課題については、実際に開発を進めながら学んでいくことになります。
ゲーム開発は楽しいものです。しかし、プロジェクトが混乱していると、その楽しさが半減してしまいます。
適切なフォルダ構成で、ストレスのない開発環境を整え、ゲーム制作を心から楽しんでください!





