Unity Cloud Buildで自動ビルド環境を手に入れる

# はじめに
皆様明けましておめでとうございます！

本業はフロントエンドエンジニアですが、趣味ではサークルでゲームを作ったりしてまして、最近は[こんな](https://ringoku98.thebase.in/items/24584354)ゲームを作ったりしてました。
このゲームは私(プランニング、プログラミング担当)ともう一人(グラフィック、サウンド担当)で作ったんですが、開発時に修正チェックなどでお互いの環境でビルドして動作確認するのが煩雑だなーと感じていました。
次回作を作るにあたり、このめんどくささを解消したいなと考え、調べた結果、Unity公式がUnity Cloud Buildというサービスを提供しており、今やりたいこととマッチしていたので実際に試してみました

# 実現したいこと
1. GitHubで管理しているリポジトリに変更が加わる
2. 自動的にビルドが行われる
3. ビルド完了通知がSlackに送られる（ビルド生成物のダウンロードもできる)

# Unity Team Advanced
Unity Cloud Buildの公式ページは[こちら](https://unity3d.com/jp/unity/features/cloud-build)です。
![キャプチャ１.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240148/3ce6ebbd-9ef8-e2e0-480c-c7f9d1f35ee6.png)

公式ページを見ればわかる通り今回実現したいことを実現するためには[Unity Team Advanced](https://unity3d.com/jp/get-teams)を手に入れている必要があります。

![キャプチャ２.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240148/0e1c2e5c-c1dc-2c31-4245-d8492c80061e.png)

ひと月あたり$9～(チーム人数によって変動)かかりますが、1か月は無料で使うことができるので、試してみて快適だなと感じたら課金しましょう。
Cloud Buildが使える以外にもBasicプランに比べていろいろパワーアップしています！

# Unity Cloud Build

## プロジェクト作成

Unity Team Advancedアカウントを作ってUnity Cloud Buildにログインするとこんな管理画面にアクセスできます
(私はすでにプロジェクトを作っているので一つだけプロジェクトがありますが無視してください)
![キャプチャ3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240148/26301726-6e88-3605-4649-4a09917eef28.png)
まずプロジェクトを作りましょう
右上の「CREATE NEW PROJECT」という青いボタンを押します。
![キャプチャ４.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240148/ecc9ff1f-731b-18a5-546c-f52ae7265922.png)
任意のプロジェクト名を入力し、先ほど作成したUnity Team Advancedアカウントを組織で選択します。

作成ボタンを押下すると以下のようなプロジェクト管理画面に遷移します。
![キャプチャ５.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240148/777cba3d-8b0a-4f03-bccb-796e68f44c20.png)

## GitHub連携
GitHubと連携して、ビルドを自動化しましょう。
左のメニューから「Cloud Build」　→ 「Config」と進みます
![キャプチャ6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240148/238358e2-efd7-a949-55a4-17016964614f.png)
ここから「Souce Control Setting」をEditします。
![キャプチャ７.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240148/836092fc-77f1-b094-9d20-9b67515a7766.png)
連携できるサービスが表示されます。
現状GitHub、Bitbucket、GitLabが選択できます。
ここでは「GitHub」を選択します。

GitHub側の認証を求めるので許可すると、以下のようなリポジトリを選択する画面に遷移します。
![キャプチャ8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240148/f83b8b42-1e94-dd4d-571f-414fc0f5e257.png)
ここでビルドしたいUnityプロジェクトのリポジトリを選択して、「NEXT: TARGET SETUP」を押下します。
![キャプチャ９.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240148/ae41346c-964f-30f3-a842-33f63e89de71.png)

すると元のConfig画面に戻るのでSource Control SettingsのところにGitHubのSSH Keyが設定されているのを確認しつつ「SETUP NEW TARGET」を押下します
![キャプチャ１０.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240148/b94b5629-4812-ee5b-2e91-9be5fb12d562.png)
どのプラットフォーム用のビルドをするか聞かれるのでお好きなものを選択してください。

![キャプチャ１１.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240148/4b2af3c7-3b2c-ecff-b524-ed83fc8f1aee.png)

次の画面ではビルドの設定を行うことができます。
設定できる項目としては以下の通りです

| 項目 |内容|
|:-----------------|-------------------|
| ラベル| ラベル名称。実行ファイル名になるみたいです(Windows 64bitで確認)。アルファベットとハイフンとスペースのみ使用可能              |
| branch| ビルド対象Branch            |
| Project Subfolder| rootフォルダ以外のところに資産が置いてある場合はここで指定します            |
| Auto Detect Version| ONにするとプロジェクト設定(ProjectSettings/ProjectVersion.txt)からUnityバージョンを自動検出するかどうか             |
| Unity Version| Auto Detect VersionがOFFの場合はUnityバージョンを明示的に指定します           |
| Build with closest version| Auto Detect VersionがONの場合で、検出したUnityバージョンがCloud Build上で使えない場合は、最も近いバージョンを使うことを許可するか          |
| Auto-build| リポジトリに変更があった場合に自動でビルドするかどうか          |

ビルドするプロジェクトや好みに応じてお好きに設定してください。
（今回やりたいことをやるためにはAuto-buildのONは必須です）

設定が終わったら「NEXT」を押下しましょう。

するとこんな感じでビルドヒストリーを見られる画面に遷移します。
この画面で右上の「BUILD DEFAULT～」という青いボタンを押せば、手動ビルドすることも可能です。
![キャプチャ１２.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240148/2db8a442-03e3-b479-dfea-0d039a328c2d.png)

これでリポジトリに変更が加われば自動的にビルドが行われるようになりました！

## Slack連携
ただこれではビルドは自動で行ってくれるのですが、いつ完了するのかは都度この画面で確認する必要があって面倒です（今回作ったゲームで試したところビルド時間はそこそこかかった）。
終わったら教えてくれるのが理想ですね。
現状平時の連絡はSlackで行っているので、終わったらSlackに通知してくれるようにしましょう。
連携の口はCloud Buildが提供してくれているので、設定を行うだけで連携完了します。
![キャプチャ１３.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240148/9b81423f-9460-2175-3b81-0bd9e553809e.png)

左のメニューから「Settings」→「Integrations」を選択します。
「NEW INTEGRATION」を押下して連携設定を新規作成しましょう。
![キャプチャ１４.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240148/66b743a3-83d5-11e1-b2e0-8e51c2e18f0b.png)

選べるサービスもいくつかありますが、今回はSlackを選択します。
（最近流行ってるコミュニケーションツールは大体揃ってる印象ですね）
![キャプチャ１５.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240148/07d3fe7d-4dba-a707-693d-e28222a040a0.png)
次の画面ではどのアクションをSlack側に通知するかを選べます。
この辺りは好みに応じてお好きにどうぞ。
（個人的にはCloud Build全てとCollaborateを選択していますが、とりあえず全部チェックしといて邪魔だったら消すでいいとも思います）
設定完了後、「NEXT」を押下するとUnity Serviceに許可する情報と通知が投稿されるチャンネルを指定すれば連携完了です。

## 連携完了後
連携完了後に指定したリポジトリのブランチに変更を加えると以下のような形でSlackに通知が投稿されます！
![キャプチャ１６.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240148/69a7a067-a3f5-613c-30e8-dc86fa5e1140.png)

Downloadリンクをクリックすればビルドされたゲームの実行フォルダがダウンロードできます

管理画面ではリアルタイムにログを確認することもできます
![キャプチャ１７.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240148/c0370745-cccc-9e0a-2bca-8510a1b3a43e.png)

## おわりに
~~こんなことしてるから肝心のゲーム開発本体が進まない説~~