[UBT]ビルドイベントで自動ローカルバックアップ環境を作る

今回はUE4でビルドイベントを使う方法を紹介します。

はじめに

UE4プロジェクトの構成プロパティは少し特殊で、UBT(UnrealBuildTool)を使う都合上なのか、図1のように、設定できるプロパティが隠蔽されています(実際にはUBTを通して設定している、ということだと思われます)。
図1 プロジェクトの構成プロパティ(左:UE4プロジェクト、右:普通のC++プロジェクト)

ここで、図1の右側には「ビルドイベント」や「カスタムビルドステップ」というものが確認できます。これは文字通りビルド前や後に、任意のコマンドを実行できる機能です。何に使うべきかイマイチ思いつきませんが、かなり昔、実行ファイルに必要なdllのコピーに使った記憶があります。
図1の左側にはこの項目が存在せず、機能として利用できないように見えますが、調べてみると、使用する方法が提供されていることがわかりました。今回は、これをUE4上で使用してみます。

Pre/Post build step in UBT

プロジェクト全てをコピーするビルド後イベントを追加するによって、自動でローカルバックアップを作成してくれる環境を整備してみます。
.uprojectを次のようにしました。
Moduleの[]の後ろにカンマを置き、"PostBuildSteps"以下を実装しただけ(17~22行目)です。
コマンドは、UE4のプロジェクトをDドライブのUE4Project_LocalBackupディレクトリに丸ごとコピーする、といったことをしています。
詳細を少しまとめます。
まずxcopyコマンドですが、これはファイルをディレクトリ構造ごとコピーするコマンドです。詳しくは、こちらを参照してください。これにプロジェクトのパスを指定することで、プロジェクト内の全てのファイルをディレクトリごとコピーしようというアイデアです。
次に、ソースとして指定している$(ProjectDir)ですが、これはプロジェクトのディレクトリへのパスを表すマクロ(もしくはPATH、環境変数? 正しい名称はわかりません……)です。このように書くと、実行時に$(ProjectDir)の部分がプロジェクトへの絶対パスに置き換わります。使用可能なマクロはUE4のソースコード上に書いてあります。
ターゲットには、DドライブのUE4Project_LocalBackupディレクトリを指定しました。このディレクトリはコマンド実行時に存在しなくても、オプションで「ディレクトリが無ければ新規作成」されるように指定したので、予めディレクトリを作成しておく必要はありません。
最後にコマンドのオプションですが、重要なのは/dだけかと思います。/dは「コピー先に同名のファイルが存在する場合に更新日が新しいファイルのみコピーする」です。このコマンドを入れないと、ビルド毎に不要なコピー処理が行われてしまい、時間がかかってしまいます。

このように実装した上でビルドしてみると、Dドライブ上にローカルバックアップが作成されます。

おわりに

このような環境は、バージョン管理システムによって実現されるべきですが、そういったものを使えない、といった場合には、気休め程度に使うと多少安心できるかもしれません。
また、ビルドイベントはxcopy以外のコマンドも使えるので、他にも便利な応用ができるかもしれません。


この記事は次のバージョンで作成されました。
Microsoft Visual Studio Community 2017 Version 15.1 (26403.7)

コメント