tech.guitarrapc.cóm

Technical updates

Unity Cloud Build を API で操作しよう

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ベースになっています。

Unity Cloud Build API

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のクライアントコード生成に投げつけることで、クライアントコードが自動生成されるのです。もはや書かなくていいに等しいぐらいい十分なものができます。

https://generator.swagger.io/

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()メソッドが存在しません。追加してあげましょう。

https://gist.github.com/guitarrapc/6218ac211f7cffe2c083

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で公開しています。

https://github.com/guitarrapc/UnityCloudbuildApi

では、作成したクライアントコードを使って、API経由でUnity Cloud Buildを操作してみましょう。

事前準備

認証

APIを叩くためには、Unity Cloud Buildの認証を取る必要があります。

Unity Cloud BuildのマイページにアクセスするとAPI Keyを取得できます。

https://build.cloud.unity3d.com/login/me/

パス一覧

ドキュメントがSwaggerとともに公開されているのでみてみるといいでしょう。

https://build-api.cloud.unity3d.com/docs/1.0.0/index.html

API 実行

サンプルプロジェクトをソリューションにいれておきました。

LinqPadで見てみましょう。

https://gist.github.com/guitarrapc/f1d0c936a7ff7eab5673

config 生成

Apiに仕込む認証をconfigにセットして使いまわします。併せてOrganizationIdや対象の既存プロジェクトIdもあるなら用意してもいいでしょう。

https://gist.github.com/guitarrapc/7017b756c96eb6100a82

プロジェクト API

各Api処理がそれぞれ用意されています。ProjectsApi(config)から、プロジェクトに関するApiが自在に叩けます。

https://gist.github.com/guitarrapc/7d705846341a17cc1b38

プロジェクト追加は、GUIの追加処理とほぼ同じです。直感的に扱えるので困ることもないでしょう。

ビルドターゲット API

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

https://gist.github.com/guitarrapc/e9000e9f45410a82fa9f

ビルド API

ビルドを実行したりするにはこのAPIを使います。ビルド状態の取得から、開始、停止まで自由に行えるので非常にいい感じです。

https://gist.github.com/guitarrapc/51fa6e6b269d83b7610d

まとめ

その他にもUserやOrganization、Billing、ConfigのAPIもありますが紹介はここまでにします。

Unityのビルド環境をクラウドサービスでできることは、とてもメリットが大きいのでぜひぜひUnity Cloud Buildに期待したいですね!

iOSなどのスマホから、ビルド結果を直接インストールするのも容易です。最高ですね!