【Tech Blog】Unity Build Automationを試してみた
Unityを使った開発をする上で、課題の一つになっているのが、バイナリの自動ビルド環境の構築です。
現在では、Jenkins や CircleCI などの CI / CD ツールを用いて構築するのも珍しくありません。
ただ、CI / CD 環境をクラウド上に構築しても、実際にビルドを行うのは Slave としてサーバーに接続している実機マシンであることがほとんどではないでしょうか。
本記事では、Unity Build Automation を使用してスマートフォンバイナリのビルドを行うまでの工程を、解説します。
■ Unity Build Automation を採用した理由
現在、私の関わっているプロジェクトでも Unity のバイナリ自動ビルド環境の構築を進めており、Jenkins などの CI / CD ツールも候補に上がりました。
しかし、リモート作業が多くなっている昨今の作業環境では、実機マシンにトラブルがあった際、メンテナーが出社しておらず、マシンのメンテナンスがすぐにできないといった問題が発生することがあります。
そういったトラブルによるリスクを軽減するために、Unity が提供している「 Unity Build Automation 」を使用して CI 環境構築をトライしてみることにしました。
■ Unity Build Automation でできること
Unity Build Automation は、2023 年に「 Unity Cloud Build 」から名称が変更されました。
簡単にまとめると Unity Build Automation では、下記のような事ができます。
Unityビルドの自動化
ビルドのスケジューリング
バージョン管理との連携
ビルドしたバイナリの配信
今回の記事では、基本的な構築とこれらの項目について軽く触れていきたいと思います。
■ ビルド環境構築とビルド
Project を作成する
まずは、Unity Gaming Services の Dashboard 上で、自動ビルドを行うための Project を作成します。
Unity Gaming Services の Project と Link する
Project と Unity プロジェクトをリンクします。
ここで言う「 Project 」は Unity Developer Dashboard に設定されている Project を指し、Unityプロジェクトは実際に開発を行っているプログラムを含んだプロジェクトの事を指します。
Link することで、Unity 上から任意 Build を実行したり、バイナリをアップロードすることができるようになります。
※このキャプチャはプロジェクトをリンクして、ビルドを作成した場合の見た目です。
Services ビューを開く
Project と Link するには、Project Settings > Services > Cloud Build の項目を選択します。
「 Use an existing Unity project ID 」をクリックして、作成済みの Project と紐付けます。
このタイミングで新規作成する場合は、Unity にログインしているアカウントに紐づく、Organization を選択してプロジェクトIDを作成します。
ProjectSettings / ProjectSettings.asset をコミットしておく
ProjectSettings.asset に、Link した Project の ID 情報などが含まれるので、忘れずにコミットしておきましょう。
このタイミングでハマったこと
なかなか Organization や Project が表示されず、試行錯誤しましたが、Unity Hub から一度サインアウトして、Return Lisence をしたあとで、再度アクティベートすることで、Organization と Project の情報が同期されました。
Git の設定を行う
ビルドの作成を行う前に、Gitとの連携を行います。
Dashboard の DevOps をクリックします。
Git の設定は Build AutomationのSettings > Source control から行います。
ssh 鍵が生成されるので、git サーバー側に設定をして設定完了です。
Github や Gitlab にプロジェクトがあるのであれば、PersonalAccessToken などを設定することで認証を通すことが出来ますが、当社のプロジェクトは自社の Git サーバーを使用しているため、Manual で設定を行いました。
Manual 設定で注意すべきことは、ssh でないとアクセス出来ないほか、Git サーバーに IP アクセス制限をかけている場合は、Build Automation の IP を許可する必要があるため、IP を Unity のサービスデスクに問い合わせて把握しておく必要があります。
Build を作成する
では、Build Autmation のジョブを作成していきます。
Build Automation の Configurations をクリックします。
Quick Target setup をクリックし、ビルドをするプラットフォームを選択します。
今回は、Android プラットフォームでの設定を行います。
Build の設定を行う
1. Basic Info
基本情報の設定を行います。
-Target name
Build ジョブの一覧に表示される名前を設定します。
-Branch
ビルドを行うブランチを設定します。
Git 認証がうまく行っている場合、プルダウンでブランチを選択出来ます。
-Project subfolder path (optional)
Git clone した際に Assets フォルダが Root に存在しない場合には、Asset までのパスを指定します。
-Unity version
ビルドを行う Unity バージョンを指定します。
常に最新のバージョンを使う設定だけではなく、マイナーバージョンの指定も可能です。
-Builder operating system (OS)
Mac か Windows から選択してビルドすることが出来ます。
選択する OS によって、金額が異なるので、注意し2. Credentialsてください。
今回は Android ビルドなので、Windows を選択しています。
2. Credentials
証明書の設定を行います。
よくある Android の Keystore の設定です。
ローカルで作成した Keystore をアップロードして、必要な情報を登録します。
一度、登録した Keystore は別の Build ジョブ作成時に流用することが出来ます。git リポジトリに keystore ファイルをコミットしておく必要が無いので、セキュアに管理出来ます。
iOS ビルドの場合は、p12 や mobileprovision を設定することが出来ます。
3. Scheduling
自動ビルドのスケジュールの設定を行います。
今回は設定をしないので、割愛しますが、Git の更新タイミングや日時ベースでの自動ビルドスケジュールを組むことが可能です。
ここまでの3点の設定が完了したら、設定を保存します。
-Advanced settings
もう少し、カスタマイズした設定を行うことも可能です。
一部ではありますが、設定を紹介させていただきます。
-Build output
バイナリ出力設定です。
Build Settings や Player Settings で設定できる一部の項目がここで設定できます。
-ビルドマシンのセッティング
Ruby のバージョンや、Android ビルドの設定を行います。
-Addressables
AddressableAssets のビルド設定などを行います。
-Caching 設定
Settings に Caching に関する設定があるので、ビルド時間短縮のため Library はキャッシュするように設定します。
ビルドする
Configurations の Build ボタンを押すと、ビルドするジョブを選択して実行することが出来ます。
実行中はBuild History で進捗確認を確認することが出来ます。
実行中のビルドのログを簡単に確認することができるので、問題が発生しても原因の調査がしやすいです。
ビルドしたバイナリの配布
ビルドしたバイナリは apk を直接ダウンロードできます。
また、ダウンロードする URL を Share することができ、ダウンロードページには QR コードがあるため、パソコンへの接続をせずに、バイナリをインストールすることが出来ます。
■ メリットとデメリット
メリット
環境構築の事前準備が少ない
Jenkins で構築をする場合、Jenkins やプラグインのインストールやビルド用実機マシンの準備、その他にも必要に応じて項目は変わってきますが、ビルド環境を構築するまでに様々な準備が必要になります。
Build Automation では、ビルド用のマシンや Unity のインストールの必要がなく、CI 環境もすでに構築されているため、簡単な設定で構築をすることが出来ます。
バイナリの配布が容易
テスト用のバイナリの配布環境が整っているので、配布ページの用意をおこなう必要がなく、ビルドが完了すると同時に、配布準備も完了します。
また、ローカルでビルドしたバイナリをアップロードすることも可能です。
設定の変更ログが残る
設定変更のログが残るので、どういう経緯で設定を変更したかなどを追うことができる。
デメリット
ビルドが有料
Build Automation のビルド時間1分毎に数円単位で料金が発生します。
気軽にどんどん回すというのがしにくい印象です。
並列ビルドができない
正確には、復数ジョブを並列ビルドするためには、別途料金が発生します。
ストレージに料金が発生する
Unity DevOps 内でのストレージ料金が発生します。
ストレージの使用量が増えれば増えるほど料金が多く発生してしまいます。
bash や python などほかの言語を用いた Pipeline の構築がしにくい
UnityProject の C# コードを呼び出す仕組みになっているので、今まで既存の CI / CD ツールでやっていたような事前処理・事後処理を Unity のプロジェクトに組み込む必要があります。
ゲームプロジェクトとビルド関連処理を別で管理したい場合などには、工夫が必要だと感じました。
■ おわりに
今回は、Unity Build Automation( 旧 Unity Cloud Build )についての記事でしたが、いかがでしたでしょうか?
Unity Build Automation は、使用するストレージ容量の追加や、並列ビルドの実行などに別途料金が発生するため、大規模開発でバイナリやアセットバンドルのビルドが多く発生するようなプロジェクトの場合は、実機マシンを用意して構築した方が適しているかもしれません。
しかし、プロトタイプ開発で構築にあまり手間をかけたくない場合や、小規模開発でバイナリビルドや配布環境を素早く構築したい場合などは、ビルド用のマシンの手配や CI の環境構築、配布用のサービスの準備などの手間が省け、ジョブ作成も Unity に最適化されていて簡単に行えるため、Unity Build Automation 利用に適していると感じました。
この記事を通して、Build Automation に興味を持った方は、ぜひ使ってみてはいかがでしょうか?
執筆:山路 裕也|株式会社セガ エックスディー
セガ エックスディーで、ゲーム開発で培った技術やノウハウを活かして、サービス開発や支援を行っています。
■ SEGA XD HP:https://segaxd.co.jp/
■ SEGA XD 公式 Twitter:https://twitter.com/SEGAXD_PR
■ SEGA XD 公式 Facebook:https://www.facebook.com/segaxd.fb/
■ CX School 公式 Youtube:https://www.youtube.com/@cxschool