Unityのビルドといえば、長らくMac + JenkinsなどのCIツールという印象でした。昨年、Unity Cloud Buildの存在を知ってはいたものの、いまいちという印象で回避してきました。
改めて触ってみるとGit連携、ビルド状況の把握、ユーザーのダウンロードフロー、コントリビュートなど機能がそろっており、非常に使いやすいことがわかりまます。
今回はUnity Cloud BuildをAPI経由で触ってみましょう。
なぜ API が必要なのか
UnityはBetaリリースやPatchリリースが頻繁で週1回のペースで更新されます。更に、対象プラットフォームに合わせて多くのビルド構成が必要になります。
特にアセットとしては様々な環境に対応するため、Unityバージョン × プラットフォーム分だけビルドを回す必要があります。
手作業で、ビルドターゲットをポチポチ作るのは10個までは我慢できてもそれ以上はむりでしょう。そこで、APIを使って自動構成、自動ビルド、任意のビルド、ChatOpsを実現することで人間の生活を送れます。

API Document
Unity Cloud Build APIはSwaggerベースになっています。
Swaggerは強力無比なAPI基盤です。ここから直接APIを叩くこともできますしcurlの実行サンプル、レスポンスJSONサンプルまで表示されています。

Unity Cloud BuildのAPI Document最高ですね。Visual Studio Team ServiceもこれぐらいAPIをわかりやすく公開してほしいものです。
クライアント生成
APIを叩くのにクライアント生成する時代は、Swaggerによって劇的に変化します。
SwaggerでAPIを構成すると、そのAPI構成がjsonで自動的に吐き出されます。
クライアント URL : https://build-api.cloud.unity3d.com/api/v1/api.json
利用者は、そのjsonをSwaggerのクライアントコード生成に投げつけることで、クライアントコードが自動生成されるのです。もはや書かなくていいに等しいぐらいい十分なものができます。
GeneratorページのPOST /gen/clients/{language}に以下を入れることでクラインとコードが生成され、レスポンスのlinkからダウンロードできるようになります。
language:csharp
body:
{
"spec": {},
"options": {},
"swaggerUrl": "https://build-api.cloud.unity3d.com/api/v1/api.json",
"securityDefinition": {
"description": "string",
"type": "string"
}
}

あとは、生成されたコードをソースに埋めて、生成コードが依存している次のNuGet Packageをプロジェクトにいれるだけです。
Install-Package RestSharp Install-Package Newtonsoft.Json
Base64Encode メソッドの追加
とはいえ、実はクライアントコード生成が腐っているため、Base64Encode()メソッドが存在しません。追加してあげましょう。
staticメソッドとして追加して、各クラスでusing staticしてあげるのが素早く簡潔な対応です。
using System; using System.IO; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using RestSharp; using UnityCloudBuildApi.IO.Swagger.Client; using UnityCloudBuildApi.IO.Swagger.Model; using static UnityCloudBuildApi.Encode; namespace UnityCloudBuildApi.IO.Swagger.Api { .... }
これらの対応 + サンプルを足したUnityCloudbuildApiをGitHubで公開しています。
では、作成したクライアントコードを使って、API経由でUnity Cloud Buildを操作してみましょう。
事前準備
認証
APIを叩くためには、Unity Cloud Buildの認証を取る必要があります。
Unity Cloud BuildのマイページにアクセスするとAPI Keyを取得できます。

パス一覧
ドキュメントがSwaggerとともに公開されているのでみてみるといいでしょう。
API 実行
サンプルプロジェクトをソリューションにいれておきました。
LinqPadで見てみましょう。
config 生成
Apiに仕込む認証をconfigにセットして使いまわします。併せてOrganizationIdや対象の既存プロジェクトIdもあるなら用意してもいいでしょう。
プロジェクト API
各Api処理がそれぞれ用意されています。ProjectsApi(config)から、プロジェクトに関するApiが自在に叩けます。
プロジェクト追加は、GUIの追加処理とほぼ同じです。直感的に扱えるので困ることもないでしょう。



ビルドターゲット API
ビルドターゲット、つまりターゲットプラットフォームやUnityバージョンの組み合わせです。最も増えるのでAPIで操作したい候補ですね。


ビルド API
ビルドを実行したりするにはこのAPIを使います。ビルド状態の取得から、開始、停止まで自由に行えるので非常にいい感じです。
まとめ
その他にもUserやOrganization、Billing、ConfigのAPIもありますが紹介はここまでにします。
Unityのビルド環境をクラウドサービスでできることは、とてもメリットが大きいのでぜひぜひUnity Cloud Buildに期待したいですね!
iOSなどのスマホから、ビルド結果を直接インストールするのも容易です。最高ですね!
