【UE4】UE4を用いたインディーズゲーム開発で、どのようなバージョン管理を選択したか

# 最初に

 この記事はUE4でインディーズゲーム開発をしている際に、どのようなバージョン管理を選択したか、という経緯と結果を記したものとなります。間違いや更に良い方法があった場合にはそっとTwitter( [@ろっさむ](https://twitter.com/4_mio_11) )やコメント、修正リクエストなどでお知らせ頂けるととても有難いです。 



# 作業環境

記事内で使用する作業環境は以下の通りとなります。

- Unreal Engine：4.23.1
- Visual Studio：Community 2017 or Community 2017 for Mac or Enterprise 2019



# 結論

先に結論を言ってしまうと現在は、プロジェクト自体（C++コード含む）はGitHubのパブリックリポジトリで管理していますが、アセットはGitLabのプライベートリポジトリで管理し、パブリックリポジトリ側からプライベートリポジトリをサブモジュール化して使用しています。



# 前提

金がありません！！

もうとにもかくにも金がありません！！！

なので、極力を金を使わない方向性で話を進めました。

特に今回のプロジェクトの場合、3Dモデルやシナリオ、コンセプトアートなどは外注となります。できればアセット方面で金を使っていくように考えています。



私自身の方で進めている趣味プロジェクトの実稼働人数は以下の通りになっています（変動あり）。

| ポジション                                         | 人数          |
| -------------------------------------------------- | ------------- |
| プロジェクトリーダー                               | 僕です（1人） |
| プランナー                                         | 1人           |
| シナリオ（世界観詰め）　兼　キャラクターデザイナー | 2人           |
| シェーダー周りリサーチエンジニア                   | 1人           |
| インフラ周りリサーチエンジニア                     | 1人           |
| クライアントエンジニア                             | 5人           |
| サウンドエンジニア                                 | 1人           |
| サウンドクリエイター                               | 2人           |
| SEクリエイター　兼　3Dモデラー                     | 1人           |
| レベルデザイン　兼　3Dモデラー                     | 1人           |



このメンバーでまかないきれない、キャラクター3Dモデルやシナリオ部分が外注費として消えていきます。



# 最初の流れ（GitHub & One Drive）

まず、最初はUnreal Engine4自体のコードを持ってきて、それをVisualStudioでビルドを行いつつ、エンジンコードも含めたプロジェクト自体をGitHubのパブリックリポジトリで管理しようとしてました。

ここで、有料アセット系の管理に悩み、一旦MSMVPでOne Driveがめちゃくちゃ容量使えるっていう理由で、OneDriveにアセットをアップロードして、それを落としてきてもらっていました。

この方法は、GitHubでのコードを含めたリポジトリ管理自体はいいんですが、アセット管理がめっっっっちゃくちゃ面倒くさくて、途中で挫けました。UE4のアセット同士の依存関係も考慮しながら毎回毎回アップロードして、それをダウンロードして持ってきてもらって確認してもらうのって凄い手間になります。

しかもこの場合だと二人が同じアセットを弄っていた場合は、確実にどっちかの変更が上書きされたり、ローカルのいらないファイルも上がってしまったり、問題点が山積みとなります。



# 次の流れ（GitHub & TortoiseSVN）



ではアセット管理を重点的に考えていこうといった時に、GitHub側で管理していたエンジンのコードをビルドするエンジニア環境の方で色々問題が発生しました。

各エンジニアの方に手元で環境構築とビルドを行ってもらっていたのですが…、以下の問題点が発生しました。

1. そもそも`GenerateProjectFiles.bat`がうまくいかない（大体は`.NET Frameworks`をバージョン指定して入れないといけなかったり`.NET デスクトップ開発`を入れないといけなかったり、というもの）.
2. メモリ足りないぃぃぃぃ
3. ビルドできなぃぃぃぃ（ビルド構成が想定していた物と異なる）
4. ビルドめちゃくちゃ時間かかるぅぅぅぅ（数時間以上）
5. エンジン側のバグでエラーがぁぁぁ（`typeinfo.h`が開けない、` PLATFORM_ENABLE_VECTORINTRINSIC `を`0`にしないと通らない…など）

これらの問題が発生したため、エンジンコードを落としてきてカスタムすることを諦めました（作業が全く進まないため）。

いよいよアセット管理、という話になりましたが、ここで`TortoiseSVN`という選択肢が現れました。確かにバイナリファイルを管理するのには良い選択肢かもと思ったのですが、じゃあサーバどうする？という話になるわけです。ここで誰か一人のPCをサーバ扱いにするのも、その人が管理できなくなった時が怖いのであまりやりたくなく…かといってVPSを借りるのもお金がかかります。できれば誰かが負担する形にはしたくないなと思い、考え直すことになりました。本当は！Perforceとか！使いたいです！！



# 現在の流れ（GitHub & GitLab）

アセット群をプライベートリポジトリで管理できないかと、いくつかのホスティングサービスを比較していたのですが、どこも5ユーザー以上で使おうとすると料金が発生します。使いたいです、でも金がないのです。そこで見つけたのがプライベートリポジトリを無料で作成し、ユーザー数も無制限で使えるGitLabでした。

GitHubでコード管理用のパブリックリポジトリを作成し、GitLabでアセット管理用のプライベートリポジトリを作成し、パブリックリポジトリからプライベートリポジトリをSubmoduleとして扱うことで一旦は進めていく方針となりました。

ただロック機能がLFSにあるとはいえ、そのままだと使い勝手もちょっと悪いのでここはなんとか改良していければと思います。また、サブモジュール化したのに伴って、Content側で変更があった際に叩くバッチなどもデザイナーさん向けに用意していきたいところです。

このGitHubとGitLabを用いた環境構築は以下の記事で紹介しているので、興味があれば見てみてください。



- [【UE4】アセット管理のためにGitLabに登録し、使用する]( https://qiita.com/4_mio_11/private/2957739123f2db9e9db6 )
- [【UE4】無料で出来る！コードとアセットを、異なるアクセス権を持つリポジトリで管理し、連携させる方法]( https://qiita.com/4_mio_11/private/a07ab6ada4e6aad34eda )