Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9309

UnityCloudBuildでDev/Stg/Prodの実行環境を切り替えてビルドする

$
0
0

概要

Dev/Stg/Prod で実行環境を分けている Unity プロジェクトで、git ブランチごとに実行環境を切り替えてクラウドビルドしたかったが、参考になりそうな記事が見つからなかったのでメモしておく。

Services - Cloud Build - Unity

環境

  • Unity 2018.4.22f1

環境を分ける意味

Unity プロジェクトが外部サーバーと通信する際に、開発/検証/本番で API サーバ等のエンドポイントを切り替えることで開発を安全かつ迅速に行うことが出来るようになる。詳細はすでに多くの記事で解説されているので下記の記事等を参照。

ステージング環境とは?開発環境、検証環境との違いと役割 | WWWクリエイターズ

弊社では API サーバと Firebase のエンドポイント切替が対象で、下記のように手動で環境を切り替えていた。

// 実行環境の列挙publicenumEnvironmentType{Dev,// 開発環境Stg,// 検証環境Prod// 本番環境}// 実行環境の定義publicstaticclassEnvironment{// TODO: これをビルドのたびに手動で切り替えるpublicstaticreadonlyEnvironmentTypeType=EnvironmentType.Dev;}// APIのエンドポイント取得箇所(別クラス)publicstaticstringUrl(){switch(Enviroment.Type){caseEnviromentType.Dev:returnDevUrl;caseEnviromentType.Stg:returnStgUrl;caseEnviromentType.Prod:returnProdUrl;default:Debug.Log("実行環境が未設定です");return"";}}

この場合、ローカルで各種環境をビルドする際は問題にならないが、Unity CloudBuild を利用した場合は少し面倒になる。CloudBuild 用のブランチで毎回実行環境を変更してコミットしなければならないからだ。

可能であれば CloudBuild の設定から自動で切り替えが出来ればと思って調べていたが、有用な記事に出会えなかった。(CloudBuild の環境変数はビルド時にしか参照出来ないので、実行時に環境を切り替えるのには向かなかった)

しかし、Unity のドキュメントを見ていると下記の記事を見つけた。

カスタムスクリプト #define ディレクティブ - Unity マニュアル

環境ごとの #defineを予め CloudBuild のコンフィグに設定しておけば環境ごとの切り替えが出来そう?と思って最小プロジェクトで検証したところ無事に成功したので、この方針で実行環境切り替えを行うことにした。

CloudBuildで環境切り替え

Dev のビルドはローカルで行うので、今回は Stg と Prod 環境のみ作成。
下記のカスタム定義を CloudBuild -> Config -> Advanced Options からそれぞれ設定した。

  • #define ENV_STG
  • #define ENV_PROD

実際に作成した TARGET は下記の通り。PROD は production ブランチを参照し、STG は staging ブランチを参照している。(左が PROD, 右が STG)

image.png

環境自動切り替え用のコードは下記の通り。

publicenumEnvironmentType{Dev,// 開発環境Stg,// 検証環境Prod// 本番環境}publicstaticclassEnvironment{#if ENV_STG        
publicstaticreadonlyEnvironmentTypeType=EnvironmentType.Stg;#elif ENV_PROD
publicstaticreadonlyEnvironmentTypeType=EnvironmentType.Prod;#else
publicstaticreadonlyEnvironmentTypeType=EnvironmentType.Dev;#endif
}

あとは STG と PROD でそれぞれ CloudBuild を走らせるだけ。
CloudBuild はローカルビルドより時間が掛かるので、Slack に通知を飛ばすと便利。

Unity Cloud Buildのビルド結果をSlackに通知するには - Qiita

ちなみに CloudBuild は Addressables にも対応しているのでとても良い。
FYI: Cloud build supports addressable now. - Unity Forum

まとめ

リリースのたびに毎回手元で全環境ビルドしていたのでリリースコストがかなり高く検証にも物凄く手間が掛かっていたが、本記事の対応でサポートしている全てのプラットフォームのSTG/PRODビルドがまとめて行えるようになったので、リリースのサイクルは大幅に改善出来るのではないかと思う。

同じように、API サーバ等の外部サービスを環境ごとに切り替える Unity プロジェクトを開発している人の力になれればと思う。(特に Unity CloudBuild の記事はあまり数が多くないので)


Viewing all articles
Browse latest Browse all 9309