Unity Cloud Buildのビルド番号などをゲーム中で取得するライブラリ、CloudBuildManifestを作った！

この物語はフィクションです。

非プログラマー　「なんかバグってる！直して！」

プログラマー　　「どれどれ？バージョンは？」

非プログラマー　「えーっと、ちょっと前のやつ！」

プログラマー　　（ちょっと前っていつのだよ？何回ビルドしたと思ってんだよ！？）

# はじめに

先ほどの物語はフィクションではありますが、モバイルゲームアプリの開発現場において、このような不幸な経験がある方も多いのではないでしょうか？

チーム内にゲームを配布していると、チームメンバーから「バグ報告」や「要望」をもらうことがあります。この時、問題になるのがチームメンバーが「どのバージョンの・どのビルド設定のバイナリを使っているのか？」です。頻繁に更新・修正・配布しているプロジェクトでは、古いバージョンを使い続けて、直っているバグを報告してしまうこともありえます。また、ビルド設定が複数あるプロジェクトでは、想定と違ったビルド設定をチームメンバーが使っていて、バグの原因特定に苦戦することもありえます。

もしこのような課題を抱えていて、かつ、あなたが[Unity Cloud Build](https://unity3d.com/jp/services/cloud-build)を使っているのであれば、ぜひ私が作った、[CloudBuildManifest](https://github.com/RyotaMurohoshi/CloudBuildManifest)を用いて、ビルドターゲットとビルド番号をアプリ内に表記してみませんか？

この投稿では、私の作った[CloudBuildManifest](https://github.com/RyotaMurohoshi/CloudBuildManifest)を紹介します。

ソースコードはこちら : https://github.com/RyotaMurohoshi/CloudBuildManifest

# CloudBuildManifestの使い方

Unity Package Managerが使えるUnity、そしてGitがインストールされている環境で、導入したいUnityプロジェクトのPackages/manifest.jsonファイルのdependenciesセクションに次の一行を追加して下さい。`TAG_YOU_WANT_TO_USE`には、使いたいCloudBuildManifestのバージョンを指定してください。

```json
"com.ryotamurohoshi.cloudbuildmanifest": "https://github.com/RyotaMurohoshi/CloudBuildManifest.git#TAG_YOU_WANT_TO_USE",
```

次のようなコードを使うことで、ビルド情報を取得することができます。私のおすすめは、次のように`CloudBuildTargetName`と`BuildNumber`を併記してゲームアプリ内に表示する方法です。

```csharp
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のバージョン、ビルド設定であるビルドターゲット名が入ります。

```json
{
    "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](https://github.com/RyotaMurohoshi/CloudBuildManifest)を使えば、ビルドしたバージョンや設定などのビルド情報をアプリ内で表示することができます。ぜひ、Unity Cloud Buildを使ってみてください！

そして気に入ったら、GitHubの[CloudManifest](https://github.com/RyotaMurohoshi/CloudBuildManifest)リポジトリにStarをください！テンション・モチベーションが上がります！

# 補足

この記事は、以下の自分の記事を再構成・合成し、編集・加筆したものです。

* [BuildManifestでUnity Cloud Buildのビルド情報を上手に管理しよう！](https://qiita.com/RyotaMurohoshi/items/bb5ba4339dc8a1186290)
* [Unity Cloud Buildでビルド番号とかをゲーム中で取得するCloudBuildManifestを作った！使ってみてね！](https://mrstar-logs.hatenablog.com/entry/2020/10/03/153408)