この物語はフィクションです。
非プログラマー 「なんかバグってる!直して!」
プログラマー 「どれどれ?バージョンは?」
非プログラマー 「えーっと、ちょっと前のやつ!」
プログラマー (ちょっと前っていつのだよ?何回ビルドしたと思ってんだよ!?)
はじめに
先ほどの物語はフィクションではありますが、モバイルゲームアプリの開発現場において、このような不幸な経験がある方も多いのではないでしょうか?
チーム内にゲームを配布していると、チームメンバーから「バグ報告」や「要望」をもらうことがあります。この時、問題になるのがチームメンバーが「どのバージョンの・どのビルド設定のバイナリを使っているのか?」です。頻繁に更新・修正・配布しているプロジェクトでは、古いバージョンを使い続けて、直っているバグを報告してしまうこともありえます。また、ビルド設定が複数あるプロジェクトでは、想定と違ったビルド設定をチームメンバーが使っていて、バグの原因特定に苦戦することもありえます。
もしこのような課題を抱えていて、かつ、あなたがUnity Cloud Buildを使っているのであれば、ぜひ私が作った、CloudBuildManifestを用いて、ビルドターゲットとビルド番号をアプリ内に表記してみませんか?
この投稿では、私の作ったCloudBuildManifestを紹介します。
ソースコードはこちら : https://github.com/RyotaMurohoshi/CloudBuildManifest
CloudBuildManifestの使い方
Unity Package Managerが使えるUnity、そしてGitがインストールされている環境で、導入したいUnityプロジェクトのPackages/manifest.jsonファイルのdependenciesセクションに次の一行を追加して下さい。TAG_YOU_WANT_TO_USE
には、使いたいCloudBuildManifestのバージョンを指定してください。
"com.ryotamurohoshi.cloudbuildmanifest": "https://github.com/RyotaMurohoshi/CloudBuildManifest.git#TAG_YOU_WANT_TO_USE",
次のようなコードを使うことで、ビルド情報を取得することができます。私のおすすめは、次のようにCloudBuildTargetName
とBuildNumber
を併記してゲームアプリ内に表示する方法です。
string buildInfoText;
if (BuildManifest.HasBuildManifest())
{
var buildManifest = BuildManifest.Load();
buildInfoText = $"{buildManifest.CloudBuildTargetName} #{buildManifest.BuildNumber}";
}
else
{
buildInfoText = "Not Cloud Build";
}
ちなみにUnity Cloud Buildでビルドしていない場合、たとえばローカルのUnity Editorで実行した場合、BuildManifest.Load()
はnullを返します。
BuildManifestクラスが持っているメンバーは次の通りです。
- ScmCommitId: Unity Cloud Build によってビルドされた commit、または changelist
- ScmBranch: ビルドされたブランチ名
- BuildNumber: このビルドに関連する Unity Cloud Build 番号
- BuildStartTime: ビルドプロセスが始まったときの UTC timestamp
- ProjectId: Unity Cloud Build プロジェクト識別子
- BundleId: (iOS/Androidのみ) bundleIdentifier は Unity Cloud Build 内で設定されます
- UnityVersion: Unity Cloud Build がビルド作成に使用した Unity のバージョン
- XcodeVersion: (iOS のみ) ビルドに使用される XCode のバージョン
- CloudBuildTargetName: ビルドされたプロジェクトビルドターゲットの名前。
CloudBuildManifestの内部のこと
内部がどのようになっているかを説明します。Unity Cloud Build
を行うと、Assets/UnityCloud/Resources
以下にUnityCloudBuildManifest.json
というJSON形式のテキストファイルが自動で置かれます。この生成されるJSON(CloudBuildManifest)の要素には、次のようなビルドしたコミットのリビジョン、ビルドに使ったUnityやXcodeのバージョン、ビルド設定であるビルドターゲット名が入ります。
{
"scmCommitId":"abcdefghijklmnopqrstuvwxwz01234567890123",
"scmBranch":"master",
"buildNumber":"3",
"buildStartTime":"1/1/2017 11:11:11 PM",
"projectId":"cloud_build_example",
"bundleId":"com.teammurosta.cloud_build_example",
"unityVersion":"5.5.0f3",
"xcodeVersion":"6.3.1",
"cloudBuildTargetName":"default-ios",
}
そのAssets/UnityCloud/Resources
以下に生成された、ファイルをResourcesクラスを使い読み
まとめ
CloudManifestを使えば、ビルドしたバージョンや設定などのビルド情報をアプリ内で表示することができます。ぜひ、Unity Cloud Buildを使ってみてください!
そして気に入ったら、GitHubのCloudManifestリポジトリにStarをください!テンション・モチベーションが上がります!
補足
この記事は、以下の自分の記事を再構成・合成し、編集・加筆したものです。