BuildGraph はスクリプト ベースのビルド自動化システムです。Unreal Engine (UE) のプロジェクトに共通のビルディング ブロックのグラフを特徴とします。BuildGraph は UnrealBuildTool、 AutomationTool、および エディタ と統合し、プロジェクトに応じて拡張したり、カスタマイズすることができます。
BuildGraph スクリプトは XML で記述され、ユーザー定義のノードのグラフをその依存関係と共に指定します。各ノードは何らかの出力を生成するためにシーケンスで実行されるタスクで構成されます (例、プロジェクトをコンパイルしてからクックし、テストを実行するなど)。ターゲット (つまり、ノードまたは名前付けされた出力) をビルドするように求められると BuildGraph は、ビルドが起こるために必要なグラフ内のすべてのノードを実行します。
他のビルド ツールとは異なり、BuildGraph は makefile のようなスクリプティング言語とビルド ファームのコンフィギュレーション スクリプトとをステップが実行されると想定されるマシンのタイプに対するアノテーションを可能にし、ステップが失敗した場合に失敗通知の受取者のリスト、および明示的なユーザーのトリガー後にのみ実行されるグループ ノードを提供します。ステップが実行されると想定されるマシンのタイプに対するアノテーションを可能にし、ステップが失敗した場合に失敗通知の受取者のリスト、および明示的なユーザーのトリガー後にのみ実行されるグループ ノードを提供します。
エピックでは BuildGraph を使って、Unreal Engine のバイナリ リリースの準備、マーケットプレイスのサンプルのパッケージ化をはじめ、特に自分たちのゲームのパイプラインの実装を行っています。いくつかの BuildGraph のサンプル スクリプトは、「[Unreal Engine Root Directory]/Engine/Build/Graph/Examples
」ディレクトリでご覧いただけます。 UE 配布のバイナリを作成するためのスクリプトは、「[Unreal Engine Root Directory]/Engine/Build/InstalledEngineBuild.xml
」にあります。
Visual Studio でスクリプトを開くと、[Unreal Engine Root Directory]/Engine/Build/Graph/Schema.xsd
にあるスキーマを使用し、編集中に豊富なツールチップ、バリデーション、インテリセンス機能を提供します。
BuildGraph スクリプトを記述する
BuildGraph スクリプトの記述方法を学びたい場合は、グラフを構成する様々な部分のことを知ると役立ちます。グラフは以下のエレメントで作成されます。
-
Tasks: ビルド プロセスの一部として実行されるアクション (コンパイル、クックなど) です。
-
Nodes: 出力を生成するために実行される順序付けされたタスクに対して名前付けされたシーケンスです。他のノードが先にタスクを実行して初めて実行することができます。
-
Agents: 同じマシンで実行される (ビルド システムの一部として実行している場合) 複数のノードのグループです。ローカルでビルドする場合、エージェントは何も効果を及ぼしません。
-
Triggers: 手動で介入後に限り実行するグループのためのコンテナです。
-
Aggregates: 単一の名前で参照可能なノードのグループと名前付けされた出力です。
スクリプトでは通常、再利用可能または条件付きで定義される値のプロパティを頻繁に使用します。スクリプトでは通常、再利用可能または条件付きで定義される値のプロパティを頻繁に使用します。プロパティは、<Property>
エレメントで宣言され、最初の宣言のポイントにスコープが適用されます。<Option>
の表記法で参照されるプロパティは、すべての属性文字列内で有効であり、スクリプトが読み出されるときに展開されます。環境変数は <EnvVar>
エレメントを使ってプロパティにインポートすることができます。
"If" 属性でどのようなエレメントでも条件付きで定義することができます。条件式のシンタックスについては、以下をご覧ください。
BuildGraph は通常、パッケージ化されたゲームで使用されます。そのため、フィルタリングとファイルの操作はネイティブにサポートされます。ファイルの一覧をアクセプトする属性があれば、Perforce スタイルのワイルドカード (どの場所でも ...
、*
、?
のパターンにいくつでもマッチ)、フルパス名、タグ付けされたファイル コレクションへの参照で構成されます。属性は、 #
の文字のプレフィックスを付けて表します。<Tag>
タスクを使ってタグ セットにファイルを追加することができます。これにより、結合 / 差分スタイルの演算を行うことができます。各ノードは、名前付けされたタグの一覧という形式で複数の出力を宣言することができます。こうしたタグに、他のノードが依存することができます。
ビルド システムの一部としてグラフを並行して実行することができます。ビルド システムの一部としてグラフを並行して実行することができます。これを行うには、最初のグラフ設定は、-Export=<Filename>
引数を実行することによって生成されます (実行するノードと従属関係を一覧表示する JSON ファイルを生成します)。参加する各エージェントは、同じチェンジリストに同期し、AutomationTool (UAT) は適切な-SingleNode=<Name>
引数で再実行するようにします。々なノードからの出力は共有ストレージを介して (通常は、ネットワークで共有) エージェント間で転送されます。このストレージへのパスは -SharedStorageDir=<Path>
引数を使ってコマンドラインで指定することができます。マシンの割り当て (およびマシン間の調整) は、外部システムによる管理を前提にしていることにご注意ください。
BuildGraph の構成要素を定義するために使うエレメントのシンタックスは、以下のセクションに一覧表示されています。