# バージョン管理でファイルを編成する

Git、SVN、Perforce Helix などのバージョン管理システムを使用して、プロジェクトの変更履歴を保存することをお勧めします。

ファイルの編成方法と共有方法は開発者が決められますが、注意すべきことがいくつかあります。

## バージョン管理に追加してはならないファイル

###［Bin］フォルダーと［obj］フォルダー

［Bin］フォルダーまたは［obj］フォルダーはバージョン管理に追加しないことをお勧めします。Game Studio はゲームを実行するたびにこれらのフォルダーを作成するので、これらの履歴を残しておく必要はありません。これらのフォルダーは、場所を取り、バージョン管理の同期を遅くし、特定のコミットで生成元のソース ファイルと一致するかどうかは確認できません。

同様に、Visual Studio は各コード フォルダー内に追加の［.obj］フォルダーを作成します。同じ理由から、これらをバージョン管理に追加することもお勧めしません。

### リソース ファイル

リソース ファイルは、Game Studio にインポートされてアセットによって使用されるファイルです。画像ファイル (.png、.jpg など)、オーディオ ファイル (.mp3、.wav など)、モデル (.fbx など) といったものがこれに当たります。これらのファイルは、プロジェクト フォルダーの［Resources］フォルダーに保存することをお勧めします。

リソース ファイルを［Asset］フォルダーに保存することはお勧めしません。Unity® ではリソース ファイルとアセット ファイルを同じフォルダーに置く必要があるので、Unity® を使用している場合はこのような方法でファイルを整理するのに慣れているかもしれません。Stride ではその必要はなく、これを行うことにはむしろデメリットがいくつかあります。

たとえば、アーティストが 10 GB のテクスチャを編集して、ソース管理にコミットするものとします。同時に、デザイナーはアセットを急いで編集する必要があります。そのために、デザイナーは最新バージョンのアセットをソース管理から取得します。しかし、アセットとリソース ファイルが同じフォルダーにあるため、デザイナーは 10 GB のファイルを一緒に取得しなければならず、時間がかかります。一方、ファイルが異なるフォルダーに格納されていれば、デザイナーは必要なフォルダーだけを取得できます。さらに、アセット ファイルはリソース ファイルよりはるかに小さいので、専用のアセット フォルダーにあればアセットの履歴をすばやく移動することができます。

### コンテンツ作成ファイル

コンテンツ作成ファイルとは、.psd ファイル (Photoshop) や .max ファイル (3D Studio Max) など、外部のコンテンツ作成ツールで作成されるファイルです。

コンテンツ作成ファイルをプロジェクト フォルダーに保存することはお勧めしません。これらのファイルは大きいことが多く、プロジェクトで直接使用されることはないためです。代わりに、異なるバージョン管理リポジトリにファイルを保存するか、または、お使いのバージョン管理システムが部分チェックアウトをサポートしている場合は (SVN や Perforce など)、異なるルート フォルダーにファイルを保存することをお勧めします。そうすれば、チーム メンバーは必要なファイルだけを取得できます。

## 推奨されるディレクトリ構造

以上の推奨事項に従った場合のフォルダー構造の例は、次のようになります。

```cs
- MyGame
    - Assets
        - texture.sdtex
    - Bin
    - MyGame.Game
    - MyGame.Platform
    - obj
    - Resources
        - texture.png
- ContentCreationFiles
    - texture.psd
  ```

コンテンツ作成ファイルの種類ごとに異なるフォルダーを作成することもできます。

  ```cs
- MyGame
    - Assets
        - texture.sdtex
        - model.sdtex
    - Bin
    - MyGame.Game
    - MyGame.Platform
    - obj
    - Resources
        - texture.png
        - model.fbx
- PhotoshopProjects
    - texture.psd
- MayaProjects
     - model.mb
  ```

## 例

2 人のプログラマー、2 人の 2D アーティスト、2 人の 3D アーティストからなるチームについて考えます。

* プログラマーは、コード、アセット、リソースが格納されている［MyGame］プロジェクト フォルダーをチェックアウトします。
* 2D アーティストは、ゲーム プロジェクトと、.psd ファイルが格納されている［PhotoshopProjects］フォルダーをチェックアウトします。
* 3D アーティストは、ゲーム プロジェクトと、.mb (Maya プロジェクト) ファイルが格納されている［MayaProjects］フォルダーをチェックアウトします。

2D アーティストの 1 人が複数の .psd ファイルを変更し、2 GB の変更をバージョン管理にコミットする場合を想像してください。2D アーティストのみが［PhotoshopProjects］フォルダーをチェックアウトしているので、他の 2D アーティストだけがこの変更を取得します。他のチームメンバーは必要ありません。これはプロジェクト間でファイルを共有する非常に効率的な方法です。

## 関連項目

* [プロジェクトの構造](project-structure.md)
* [ゲームを配布する](distribute-a-game.md)
