こんにちは、プログラマのOです。
今回はUnreal Engine 4(以降、UE4)においてC++を利用して開発を行うプロジェクトで、エディタのバイナリファイルのバージョン管理をする際に起きる問題とその解決法についてご紹介したいと思います。
なお、本記事では UE 4.27 での環境のお話となっております。

バージョン管理システムとは

UE4のお話の前に、まずはバージョン管理のお話から。

ゲーム開発の現場ではバージョン管理システムというものが導入されることがほとんどです。バージョン管理システムとは、各ファイルについての変更履歴を記録することで、どのファイルに対して「誰が」「いつ」「どのように」変更を加えたかなどがすぐに判別できるシステムのことです。変更履歴から、ファイルを過去の状態に復元することができます。

例えば、誤ってファイルを上書きしてしまった場合や、バグを残したコードで上書きしてしまってアプリが動かなくなってしまった場合など、それを取り消すことでアプリが安定していたバージョンに戻すことができます。ファイルの変更が多くなる大規模な開発になればなるほど重要なシステムです。

ゲーム開発で主に利用されているシステムは GitSubversionPerforce などですね。

UE4でのバージョン管理にはソースコントロールというシステムが存在します。
これは Subversion または Perforce と(β版ではありますが Git とも)連携して、エディタ内でファイルをバージョン管理する機能です。エディタ内だけで操作を完結できるため手軽に扱いやすい機能です。

参考:ソースコントロール(公式ドキュメント)

エディタバイナリファイルと、そのバージョン管理の問題点

UE4エディタを起動するためには、dllファイル等のエディタのバイナリファイルが必要です。C++を利用したUE4プロジェクトでは、ソースコードをコンパイル・ビルドすることでバイナリファイルが生成されます。これらのファイルはUE4を利用する作業者全員に必要なファイルであり、本来であればバージョン管理する必要があります。

エディタのバイナリファイルを更新する必要があるのは、ソースコードを編集してビルドしたときです。つまり、そのファイルを生成・管理するのはプログラマとなります。その際の流れは下記の通りです。

  1. ソースコードを編集し、ビルドしてバイナリファイル生成
  2. ファイルをバージョン管理システムにコミット
  3. 他の作業者がバージョン管理システムから更新(ファイルを取得)

ごく一般的なバージョン管理システムの利用方法なのですが、この流れですと、プログラマのローカルでは、自分の生成したバイナリファイルと更新して取得してきた別のプログラマが生成したバイナリファイルとで競合(コンフリクト)が発生してしまいます。競合とは、バージョン管理システム上で管理されているファイルとローカルでのファイルにマージできない差が生じて上手く更新できない現象です。これが生じると、ローカルで競合を解決しなければいけません。毎回これが発生するといちいち競合を解決しなければならずイテレーションに時間がかかってしまいます。これが問題点となります。

問題点の解決方法

上記の解決にはいくつか方法がありますので、順にご紹介していきます。

UGSによるバージョン管理(オススメ度 ★★★)

一つ目はUnrealGameSync(以降、UGS)を利用する方法です。UGSとはUE4のツールの一つであり、バージョン管理システムの延長ともいえるシステムです。これを用いることで、ソースコードとバイナリファイルのズレが無く、安全にエディタを更新することができます。

実際にトイロジック内の一部のプロジェクトでは、プリコンパイル済みバイナリを利用したUGSを使用していました。
UGSはバージョン管理システムで Perforce を使用している時のみ利用可能です。導入する際は下記の公式ドキュメントを熟読することをお勧めします。

参考:UnrealGameSync (UGS)(公式ドキュメント)
 

Jenkinsによる自動ビルド(オススメ度 ★★)

二つ目はJenkinsを使用する方法です。JenkinsとはCIツールの一つで、開発現場においてよく自動ビルドなどに利用されています。ビルドとファイルのコミットを Jenkins に任せることによって、プログラマ以外の作業者は Jenkins がコミットしたものを使用し、プログラマはローカルでビルドしたファイルを使用するようにすれば、競合を回避することができます。

 

作業者全員にビルドできる環境を配布(オススメ度 ★)

三つ目は力技ともいえます。作業者全員にVisual Studio等のビルドできる環境を配布し、それぞれがローカルでエディタをビルドするという方法です。確かに表題となる問題は解決はできるのですが、これはこれでビルド環境の配布に予算がかかる、プログラマ以外にもビルド時間が発生してしまうなどの問題が生じてきます。ごく短期間・少人数で開発するのであれば選択肢にあがってきますが、あまりオススメはできない方法です。

まとめ

本記事では、UE4プロジェクトにおいて、エディタのバイナリファイルのバージョン管理をする際に起きる問題とその解決法についてご紹介させていただきました。

少し地味な問題だったかもしれませんが、開発の現場ではこのような問題は往々にして起きるものです。その際、特に今回のような開発のワークフローが決まってしまうような部分の場合には、適切な解決方法を取捨選択していきたいですね。

以上、最後まで読んでいただきありがとうございました!

著者紹介 Y.O
2018年にトイロジックに新卒入社。プログラマーとしてUE4を用いたプロジェクトに携わる。UI、ギミック、開発環境整備(Jenkins等)などを担当。最近はよくVTuberの配信を見ている。

トイロジックでは現在、一緒に働くプログラマーを募集しています。

不明点などもお気軽にお問い合わせくださいフルリモート採用も行っております、ご応募お待ちしております!