BLOGブログ

2023.12.27UE5UE/ Debug

[UE5] パッケージビルド時のコマンドライン引数で .Target.cs の処理を分岐する

執筆バージョン: Unreal Engine 5.2

こんにちは! とりわけプロジェクト後半になると、こんなことを考える機会が増えてきます
「Shipping パッケージだけで起きるバグがあるな~ Shipping でもログを出したいな~」
Shipping パッケージでログをだすには、こちらの記事にもあるように ○○.Target.cs で以下のような記述をすることで実現できます。

ところで、この Shipping ログ出力処理。 最終的にリリースされるパッケージには含めたくありません。
じゃあ、バージョン管理ソフトのリポジトリには、こんな風にコメントアウトした状態でコミットして…

ローカル環境ではコメントアウトを書き戻して作業するか。
ローカルだけだから!コミットしなければセーフだから!
→ しばし試行錯誤
→ ローカルでファイル書き換えてることを忘れる
→ バージョン管理ソフトで他のファイルに紛れてうっかりコミット!
→ 誰も気づかずそのままリリース
…ああ、そんな事故は起こしたくないものです。自分で書いてて胃が痛くなってきました。
というわけでこれを「パッケージビルド時のコマンドライン引数」で切り替えられるようにしましょう!
○○.Target.cs で、パッケージビルド時のコマンドライン引数を取得するには、Target.Arguments を利用します。

ここのコードは、パッケージビルドのいくつかのプロセスで呼び出されます。
Target.Arguments が存在しないプロセスからも呼び出されますので、エラー回避のため null チェックを忘れずに。
さて、それでは、パッケージビルドのコマンドライン引数で、”-UseLoggingInShipping” を指定してみましょう。
○○.Target.cs で受け取るコマンドライン引数は、”-UBTArgs=” で指定します。

Shipping パッケージの場合、ログファイルはデフォルトでは以下の場所に作られます:

エクスプローラなどで開くときは、%localappdata% を使うとラクチンです:

ところで、”bUseLoggingInShipping” という名前ではありますが、 Shipping 版だけではなく
「Test 版でログを出力を有効にする」場合も bUseLoggingInShipping を true にすることで実現できます。
例えば、最適化調査のため「ログあり UnrealInsights 調査用 Test 版パッケージ」を作る時は
UnrealInsights で見られる情報を増やすためbUseLoggingInShipping を有効化したり
define マクロ “FORCE_USE_STATS” を 1 にしたりします。
FORCE_USE_STATS についても bUseLoggingInShipping と同様にコマンドラインオプションを用意して
○○.Target.cs 内で分岐することもできますが、 define マクロはシンプルにコマンドライン引数から指定することが可能です:

Jenkins でパッケージ作成する場合にも、コマンドライン引数であれば安全かつ切り替えやすいかと思います。 是非ご活用ください!