1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Unity の iOS / Android ビルド の CI / CD 環境を Free で構築する(Android編)

1
Last updated at Posted at 2025-09-28

iOS 編

最初は Android / iOS の内容で書こうと思っていたのですが
それぞれが かなり長くなってしまったので 2 記事に分けています

Android ではなく iOS の話を知りたいって方は下記リンクで iOS 編へ行けます
(ただ こちらに少し前提の話とかもあるので 斜め読みでも良いので一読して下さると)
Unity の iOS / Android ビルド の CI / CD 環境を Free で構築する(iOS編)

日時 2025年09月 の話

私が 常に WEB の情報で不満に思うのは
せっかく色々な方が情報を上げてくれるのに
IT サービス系の内容だったりは、そもそも内容が更新や変わってしまっていて
掲載されている内容と、微妙に違ったり または全然変わっていたりする点です
(まあ IT サービスは速度が命のは分かりますが)

今回は 言語などと違い 更新や変更が多い IT サービスの話になるので
少しでも上記の不満が解消されるべく ド頭に この記事の内容での日時を記します

今回の正義

  • モバイル端末にケーブルを繋げたアプリ インストールを行わない!
  • 開発マシン(PC)でローカル ビルドを行わない!

つまり ブラウザ上のボタンを 1 クリックして
しばらくすると 自分が開発中のアプリの最新のビルドが
iPhone / Android 端末にネットワーク経由で DL / インストール出来る事を
なるべく お金をかけず に目指します

それと CI / CD と言っていますが
テストなどには まったく言及しません! あしからず

まず絶対に Free に出来ないもの

  • Apple Developer Program のアカウント取得
    iOS アプリ ビルドの大前提 Bundle Identifier 等の取得に必要
    つまり iOS アプリを作るぞ、となったら初めから必要

後で必要

  • Google Play Developer のアカウント取得
    Android アプリはデバッグ ビルドなら、デバッグの Key Store や
    登録なしの Package Name(被るかは不明)でビルド可能
    リリースの目処が立ったり 必要になったら契約すれば大丈夫
    *むしろアプリを登録せず長期放置すると不正アカウント対策で
    無期限停止されるので注意
    (くらいました、同じメアドだと二度とアカウント作成できなくなります、、)

基本的に PC だったりインフラ(ネット環境)だったりには言及しません
が Mac PC だけは準(ほぼ)必須です

  • MacOS 環境(要は Mac PC)
    まあ、ともかく Apple というか iOS 開発はガチガチの固有固定の要求が多いんです
    Xcocd 然り 証明書関連 然り

各 サービス

概要

プラットフォーム クラウド ビルド環境 アップロード先
iOS Github Actions Test Flight
Android Unity Automation Build
(旧 Unity Cloud Build)
Firebase App Distribution

各 Free のサービスの解説です

Unity Account

Personal で Free です
(Personal ではライセンス違反になる一定以上の売り上げがある方は当てはまりません)

Unity ライセンス ファイル

2025/09 時点で確認しているのは
Personal ライセンスの場合 Unity Hub によるネットワーク認証のみになっており
シリアル キーを発行しない様になっています

そして後述する Github Actions のクラウド上での Unity Build(game-ci/unity-builder) で
ライセンス ファイルが必要になります
しかし このライセンス ファイルを作成する工程でシリアル キーが求められます

詰んでるじゃんと思いますよね?
ここで焦って Unity Pro 等にする必要はありません
(Pro だとシリアル キーが発行される)

Personal Account でライセンス ファイルを出力する方法があります
(知らないと分からない方法)
Github Actions の環境構築の説明で後述します

今 それだけ知りたい人は下記のリンク先の 黄色い caution 部分を読んで下さいな

Unity no longer supports manual activation of Personal licenses

Github Account

こちらも Free で行けます
ただし リポジトリの容量サイズだったり Actions の方に制約があります
(Actions の方は Github Pro にしても制約は変わらず)

Github Actions

Github Actions は Free の Github Account で使えます

しかし Private リポジトリに対して制約があります
(Public リポジトリに対しては無制限で使用できます)

Private リポジトリ 制約
仮想ランナー(ビルド環境だと思って下さい)の使用時間が 2000分 / 月 となります
2000 分もあれば十分! と思うでしょ?

ところが Mac ランナー(つまり iOS ビルド)の場合 x10 (倍の消費) のルールがあり
つまり 200分 / 月 となってしまいます

課金による仮想ランナーの使用

ちなみに 月の時間を使い切るとエラーになって Actions は失敗します
その場合、使用時間に応じた課金設定をしないと その月は動作出来ません
設定していない限り自動で課金される事は無いので安心を

そもそも Github の Free Account は
ビリング(支払い)情報 == クレジットカード情報を設定しなくとも
取得可能なので、意図的に課金設定をしなければ 知らない内に課金はあり得ません

Unity Automation Build(旧 Unity Cloud Build)

こちらも Free 枠で行けます
(Unity Personal Account == Unity ID(Account)がある を前提としています)

Github Actions で iOS と Android の両方のビルド環境を構築しちゃえば良いじゃん!
と思う方もいるでしょう

そこが 先ほど説明した
Github Actions の Mac ランナー の Private リポジトリ での使用時間が
200分 / 月 になる が関わってきます

要は Github Actions の Free で使える時間は 100% iOS に割り当てて
Android のビルドは Unity Automaion Build にやってもらおう と言う方針です

プラットフォーム クラウド ビルド環境 使用割合
iOS Github Actions 100% iOS ビルド
Android Unity Automation Build 100% Android ビルド

なので
Github に課金してでも Github Actions で統一ビルド環境が欲しいぜ!
iOS / Android 両方合わせても Free 枠内で収まるぜ!
(Public リポジトリとかでも)
と言う方は Android も Github Actions で構築しても OK
(そもそも課金するなら Unity Automation Build で統一でも OK)

Unity Automation Build の iOS ビルド

残念ならがら Mac 仮想環境の使用は 有料 のみ提供となります
逆に言えば Free では 100% Android に使う事しか出来ないので
今回の方針とは マッチしていると言えばマッチしているか?!

Test Flight

こちらは 厳密には無料ではないのですが
Apple Developer Program を契約すれば使える様になる付属機能です

大まかに言えば クラウド上に iOS アプリをアップロードして
iPhone に DL / インストール出来る機能です
(Android は使えません)

Firebase App Distribution

こちらも Free で利用できる Google のサービスです
Firebase とある通り Firebase の一機能となります

Android は こちらを利用して アップロードと DL / インストールを行います
(こちらは iOS アプリでも利用できます
機能を合わせたい方は Test Flight の替わりにしても良いかも)

今回は アップロード + DL / インストールが目的なので
Firebase Analytics / Crashlytics などはアプリに含めなくとも大丈夫です
(Firebase ドキュメントでは 普通にインプリメントしろって流れですが不要です)

まずは Android から

なぜなら iOS アプリは、ビルドを成功させるだけでも覚える事が超多いから

iOS / Android 共に、俺はビルドなんて出来るぜ!
CI / CD 環境の説明だけ聞きたいんだ!って方は読み飛ばして下さい

ちょっと Android ビルド 前提知識

  • Package Name

Android と iOS でアプリを全世界で一意に認識する文字列が必要になります

プラットフォーム 名称
Android Package Name
iOS Bundle Identifier

これ 前述していますが iOS は Apple Developer Program 契約して
App Connect でアプリを登録して Bundle Identifier を事前に決めておかないと
ビルドすら出来ません

EX)
com.oreoreinc.oreoregames
見たいなやつです

Android は デバッグ ビルドなら、登録は不要です
後で Google Play Developer 契約して登録でも OK

ただし、通常 iOS / Android アプリを開発している場合
Bundle Identifier と Package Name は合わせて同じ文字列にする事が多いです

つまり 後から Google Play Console でアプリ登録して
Package Name が誰かに使われていて登録出来なかったという可能性は
0 ではない、かも?!
(これはリバース ドメインという命名規則で回避するのが通常ですが)

  • Key Store

Android アプリに対しての署名の仕組み的なものです

本題からズレるので 余り詳しくは説明していきませんが
本番アプリをリリースするには、自身の手元で
これまた 一意の Key Store を作成し
(これ超大事、無くしたり 流出したりしない様に!!!)
その Key Store を使用して Android ビルドを行います

これ署名の仕組みと言っていますが、Google Play Console へのアプリ提出時に
アプリを認識するのにも使われいて、一度 アップロードしたアプリは
最初にアップロードしたアプリで使用した Key Store で署名していないと
更新などの再提出が出来なくなります

本題からズレると言いながら なぜ説明しているかと言うと
これまた 前述していますが デバッグ ビルドだと
Android のビルド システムが 勝手にデバッグ用の Key Store を作成してくれて
それで署名してビルドを進めてくれます
(つまり 開発初期やプロト段階では Key Store を意識しないで済む)

便利じゃん、何がいけないの? と言う貴方!

私は知っている

とあるプロジェクトの開発リードが リリース アプリとして Google Play Console に
リリースビルド設定でビルドしたアプリをアップロードしていたが
Key Store の事を失念していて リリースビルド設定でも
Key Store 切り替えを指定していなかった事を
(デバッグの Key Store で署名したアプリになっていた)

そして その方は転職して行ってしまった
しかし プロジェクトは終わる訳でもなく、暫くして急に更新が必要になった

すると どうなる?
引き継いだ人間が リリース用の Key Store で署名したアプリで
Google Play Console でアップデートをかけようとすると
違うアプリと認識されて弾かれるんだ!

ビルド設定関連のコードを見れば Key Store を変えていないのは直ぐに分かった
幸い デバッグ用の Key Store は、各 OS で特定の場所に作られるから
サルベージすれば 恰好は悪いが業務は進む

しかし あれ? その PC は何処だ?
、、XXXさんの開発 PC として (クリーン インストール後に) 貸与済です、、

これの解決エピソードを書くと、元部署の人間には分かってしまうので ココまで
(普通の会社では無理な解決方法w)

Key Store の知識は大事
それと 提出用ビルドは 個人ではやらない!
(もう 何十年 も前のエピソードですけどねw)

apkaab

これは Android のビルド後のフォーマット(拡張子)です

Google Play Console にアップロードするには
aab の拡張子にしなければ駄目なんですが、これは提出用で
サイドロード(直接バイナリをインストール)するのは
とても面倒なフォーマットなんです

apk はと言うと
Google が aab を要求する様になる以前の Android のフォーマットです
これはサイドロード(手元に apk があれば)が簡単で
実機端末に手軽にインストール出来ます
(adb install)

今回は apk 前提で話を進めます

で Unity なんですが
aab でビルドするか apk でビルドするか
ちゃんと チェックボックス の ビルド設定 があります

Android の説明しない前提

  • Gihhub にリポジトリとして Unity Project が存在する事

  • Unity の メニューから ビルド画面(Window)を開き
    手動でビルド(ビルド ボタン押し)を行って apk が出力される
    (要は Script エラーや ビルド エラーしないって事)
    Unity Project 状態であること

つまり
0 から全て説明はしませんよ、CI / CD 環境構築がメインですよ
って事です

2 つ目なんて簡単にしたつもりです
Unity のバッチモードで static メソッドから Script でビルドなんて不要です
って意味です

逆に 俺は ビルド Script からビルドしたいんじゃ!って方も大丈夫です
Unity Automation Build には、その設定もありますので

この前提の時点で

  • Unity Personal
  • Github

はクリアしているはずなので、次から CI / CD 環境の説明に入ります

Unity Automation Build 各設定

実は Unity Personal で使用している Unity ID の Account と同じで良いです
(寧ろ同じでなければ駄目なんです)

Unity Automation Build で使用するプロジェクトは
Unity ID でログインした側のダッシュボードからの
Unity Cloud で作成したプロジェクトを使うからです
(プロジェクトが無い場合 Unity Automation Build 側から作る事も出来ますが)

image.png

image.png

旧名 Unity Cloud Build

Unity Cloud Build -> Unity Automation Build

名称が変わっているんですよね
WEB では旧名称で情報がヒットしたりするので 適宜 脳内でコンバートしながら
情報を拾ったりしましょう

取り合えずは公式サイト

まずは Unity Automaion Build へ移動

Unity のダッシュボードのプロジェクト(無いなら自分で作る)から

image.png

  • DevOps

image.png

image.png

サービス タブ内の一番下の方にある DevOps 起動 をクリックします
すると Unity Automaion Build 側のダッシュボードに移動します

  • Build Automation
    -ビルド構成

に進み Configurations の Build targets タブで
source control の説明と共に Get started あるので
ここで Github との連携を設定していきます

image.png

実は

  • Build Automation
    -設定

の Build Automation Settings の Source control タブ
に飛ぶだけなんですけど

image.png

ここで Source control provider / SCM typeGitHub を選んで
Personal Access Token (PAT) を設定してきます

Personal Access Token (PAT)は Github 側のダッシュボードで作成するもので
2 年位前から Github に導入されたセキュリティの仕組みです

普段 SSH 接続している方は気が付きにくいかもですが
Https 接続している方だと、急にエラーになって PAT を設定しろ的な
英語のエラーメッセージを見た事あるんじゃないでしょうか?
(一度設定すると PAT の期限が切れるまでは再設定は不要になります)

Personal Access Token (PAT)

ですので、次は ビルドしたい Unity プロジェクトの
Github Settings 画面に移動します

そして Settings の左の項目の一番下の Developer settings を選び

image.png

Personal access tokensTokens (classic) から
Generate new token を選びます

Fine-grained tokens と言うのは、
新しい規格の PAT で権限を細かく設定出来るそうで現状の推奨らしいのですが、、
権限が細分化 & 名称が分かりずらい ので 何度か試したのですが
Unity Automation Build がリポジトリを操作する権限が良く分からなったので
classic の方で説明していきます
(そもそも Unity Automation Build 側の説明も classic の内容に見える)

image.png

image.png

  • Note
    PAT の名前で 作成後に先ほどの Generate した画面で一覧に出てくるものです
    何に使用しているか分かる名前がお勧めです

image.png

  • Expiration
    PAT の期限です
    No expiration(期限なし)も選べますが、選んだ時点で
    メッチャ警告出て面倒な操作になる感じ(普通に設定させてくれなさそう)
    なんで無難に 90 days とかすると良いのでは

ちなみに
PAT は期限が切れると、再作成 & 再設定 が基本らしいです

image.png

  • Select scopes
    PAT の権限です
    これは repo にチェックで OK です
    (Unity Automation Build 側の説明も そう書いてある)

image.png

その 3 つを設定したら
画面一番下の Generate token ボタンを押して作成します

image.png

すると 先ほど Generate new token を押した画面に戻り
緑のチェックマークと共に ランダムそうな文字列 が表示されています
(画像では ランダム文字列の部分に線を入れています)

  • 注意

この文字列が PAT の パスワード となり、この画面でしか表示されません!!!
(この画面を閉じると二度と表示されません)

画面のスクショなり、右側のコピーアイコンで文字列をコピーして
どこぞに保管するなりします

そして Unity Automation Build 側の PAT の項に設定するのが
このパスワードの文字列なのです

pat.png

再び Unity Automation Build の
Build Automation Settings の Source control タブに戻ります

Source control provider / SCM type で GitHub を選ぶと
Personal Access Token の欄が出現します

そこに先ほど作成した PAT のパスワードを入力し
右側の 緑の Authorize ボタンを押します
認証が通れば 画像の様に Reauthorize のボタンになるはずです

そうなれば、次は Repository
ビルド対象のリポジトリを選択できる様になります

image.png

そこまで設定すれば
Save ボタンが押せる様になるので保存します

image.png

ビルド構成

Github の設定が終われば 実際のビルドの設定を行っていきます

  • Build Automation
    -ビルド構成

の画面ですが、先程と違い 青いボタンが
Get Started から Quick target setup に代わっており
Source control の設定をうながす説明が無くっているはずです

  • Quick target setup

image.png

で、Quick target setup を押すとプラットフォームを聞かれるので
当然 Android を選びます

image.png

次に Basic info の必須のいくつかの設定をしていきます
自身の Unity 環境に合わせると良いと思います

  • Target name
    Unity Automation Build のビルド構成で表示される名前
  • Branch
    Github リポジトリ内のビルド対象のブランチ
  • Versioning
    ビルドに使用する Unity のバージョン
  • Build Operating System and Version
    ビルドの OS 環境
    ここだけ注意が必要です
    私の環境は Windows 11 なので それ前提で進めます
    (実際の私は ローカルビルド設定もリポジトリに上げているので)
    後述で ビルド の プリプロセス と ポストプロセス の シェル が出てくるのですが
    シェル環境上に構築された仮想 Windows 11 で動かす前提の シェル になります
    要はパス表記を変換する処理が入るのですが、それは理解出来る
    と言う方は MacOS にしても OK
  • Android SDK version
    Android ビルドの Target SDK

後は 特殊な Unity 設定をしていない限り optional 項目の設定は不要のはずです
Next ボタンをして次の画面へいきます

image.png

次の画面では ビルド仮想マシンの仕様を決めますが
Free で行いたいので STANDARD まま Nest ボタンで進んで OK です

image.png

次に Android アプリの Package Name
Bundle ID に設定します
え? Unity の設定に入力しているよ!? と思う方もいるかも知れませんが
合わせて設定しておきましょう

Credentials set
ここが 前述した小噺に出てくる Key Store の設定箇所です
(Key Store も Unity の設定で行っていても再度行います)

デバッグビルドで良いなら
Auto-generated debug keystore (for development only)
のままで OK

image.png

自身でアプリ用の Key Store を作成している方は
Add new provisioning credentials (for release)
を選び 必要な Key Store 情報を入力します
(自身で Key Store を作るレベルなら項目の説明は不要ですよね)

image.png

Next ボタンで次に進むと
Scheduling 設定が出てきて、これで最後です

今回は Unity Automation Build のダッシュボード画面で
手動のビルド開始を行いたいので 何もチェックは付けなくてよいです

逆に 特定のアクションタイミングで自動でビルド開始をしたければ
チェック内容を良く読んで 必要な箇所にチェックをして OK
(自動ビルドで Free 枠のビルド時間を使い切ってしまうのは自己責任で)

Save configuration ボタンを押せば 設定完了 です!

image.png

ビルド構成 の一覧に作成した内容が表れているはずで
右側に青の Build 部分があるのですが、、

これを押すと Android apk ビルドは出来ちゃうんです
さすが Unity 専用 簡単設定!!!

因みに
俺は 手動で apk を DL して、DL 先の PC からケーブル繋いで
adb install コマンドのインストールで十分!
と言う方は終了です

image.png

残り工程

Unity Automation Build で Android の apk が作成出来る様になりましたが
まだ 工程は 半分未満です

この apk を任意の端末にネットワーク経由で DL / インストール したいわけです
Unity Automation Build には 直接 アプリ インストールを行う機能は無いので

  • アプリを DL / インストールさせる機能を持つ 外部の他サービス を利用
  • そのサービスへの Unity Automation Build からの apk アップロード

が残っている工程です
具体的には

  • Firebase Account 取得
  • Firebase プロジェクト作成
  • Firebase App Distribution 設定
    テスター登録 や 認証の設定
  • Unity Automation Build でのシェル追加
    Firebase App Distribution への apk アップロード
  • 自身の Android 端末に App Tester アプリをインストール
    これは Firebase App Distribution 専用アプリ
    インストールせずとも 毎回 Firebase App Distribution サイトに
    アクセスして DL / インストールも可能だが、面倒なので専用アプリを使う

Firebase App Distribution

Apple だと Test Flight という有名なサービスがあります

逆に Apple に買収されたので Android では使えないです
昔は Test Flight Android 版(Beta)があったんですよ、、

なので Android で類似のサービスを利用しなければならないのですが
実は他にも要求を満たすサービスはあります

しかし 個人的に Google のサービスである事
Android だと何がしら必須になる事が多い Firebase の機能である事
などから Firebase App Distribution を選定しています

アカウント & プロジェクト 作成

まず Firebase のアカウントを作成して サインイン します
そして プロジェクトを作成します
(この辺はサクサクと行きます)

アナリティクスは将来必要になるかも知れませんし
有効にしておいて良い気がします
(実際のアプリには aar を含めなければ動作しませんし)

image.png

image.png

image.png

image.png

image.png

プロジェクトが作成出来たら、まずは アプリを登録します
プロジェクトの設定 から 全般 タブの マイアプリ で

  • Unity アイコンを選んで Android(+ iOS) アプリの情報を設定

image.png

image.png

画像は Unity アプリ 設定です
もし iOS アプリも App Distribution で対応したいなどの場合は
Apple アプリとして登録にもチェックを付けて設定を追加します

image.png

設定ファイルのダウンロード

今回は不要です

これは アプリに入れた 各 Firebase のライブラリ(Android だと aar)
と Firebase プロジェクトを結びつける設定の json の事です
(iOS は plist)

App Distribution を使うだけなら必要ありません

image.png

Unity アプリへの Firebase の追加

なので、これも必要ありません

もし アナリティクス や クラシュリティクス、AdMob(広告 SDK) など
Firebase のライブラリを使うなら、逆に必須になります

image.png

image.png

サービス アカウント

これは
Unity Automation Build 環境から Firebase App Distribution への
apk アップロードを行うのに Firebase CLI というツールを使うのですが
その認証用の設定です

トークン や API Key を使うなどの情報もありますが
この 3 つの方法で、現在 Google が推奨しているのが
サービス アカウントによる認証です

image.png

image.png
因みに Firebase のアカウントを作成した際にデフォルトで
firebase-adminsdk や ユーザー のサービス アカウントが出来るみたいですが
今回は 権限を App Distribution へのアップロードだけに限定した
サービスアカウントを新規で作成します

サービス アカウント権限の管理 から
Google Cloudサービス アカウント 画面へ飛び
+サービス アカウント作成 を押して 新しく作成します

image.png

サービス アカウント名 を設定すると
サービス アカウント ID(メールアドレス) は自動で決まります
サービス アカウントの説明 は自分で何に使う秘密鍵なのか分かる内容にします

IAM.png

作成して続行 から 権限(省略可) を設定してきます
これは Firebase プロバイダFirebase アプリ配布管理者 を選びます

さらりと説明していますが
Github の Personal Access Token の Classic の様に大雑把なロール設定とかがなく、
さんざん試して認証が通る権限を探したんですw

image.png

image.png

完了 を押すと、サービス アカウントが出来ているはずですが
キーIDキーがありません になっているはずなので
キーも作成します

image.png

一番右の 操作 のハンバーガーメニューより 鍵を管理 を選んで

image.png

キーを追加新しい鍵を作成

image.png

JSON を作成すると

image.png

PC のダウンロード設定されているディレクトリに
秘密鍵の json がダウンロードされます
(後で使用します)

秘密鍵 といっているので、分かると思いますが
重要なので Github のリポジトリにアップなどは避けるべきファイルです

image.png

Workload Identity 連携

余談も余談なんですが
サービス アカウントでの認証において
特定の環境であれば ADC という機能を使えば 自動で行ってくれる仕組みがあります

これは Google Cloud の内部での話なんで、外部サービスは利用できないんですが
Workload Identity 連携 という仕組みを使えば
小難しい話や仕組みを経て 外部サービスでも ADC を使える様になり
Google さんの推奨の認証方法らしいです

しかし Workload Identity 連携 の環境に
Unity Automation Build 環境は含まれていないので紹介だけとなります

Github 環境は Workload Identity 連携 の対象らしいので
Github Actions で Firebase App Distribution を利用する場合は
チャレンジしてみようと思います

テスター設定

次は Firebase App Distribution の テスター を設定して行きます
(この工程は サービス アカウント作成 と前後しても問題ないです)

Firebase App Distribution へサインインをします
Firebase アカウントを作成して プロジェクトを登録した時点でアカウントはあるはずです
(これが少し分かり辛い、Firebase のサインインと同じ画面に見えるが何か違う)

上手く Firebase App Distribution へサインインできない場合は
下記のドキュメント内のリンクから飛べます

始めてのサインインの場合は、開始 を押して始めます

image.png

テスターとグループ タブから

まず グループ を作成してから
その グループ に テスターを追加 していきます
(グループは アップロードする際に指定するので
グループ にテスターが属している必要があります)

適宜 グループ名 や どう運用するか考えて下さい
テスターは、メアドを登録します

image.png

  • サービス アカウント
  • テスター と グループ

の設定が終わったら、後は また Unity Automation Build 側で
プリプロセス と ポストプロセス のシェルを仕込めばフィニッシュです!

下記の App Distribution の リリース タブ に
アプリがアップロードされるのを楽しみに待ちます

image.png

Unity Automation Build の
プリプロセス と ポストプロセス のシェル

具体的に何をするのか

Unity Automation Build の 仮想 Windows 11 ビルド環境に
Firebase CLI と言うツールをインストールして
Unity ビルドの成果物 apk を Firebase App Distribution へアップロードする

その際の Firebase CLI が動作する設定や認証する設定をシェルで記述して行きます

シェルの設定場所

Build targets の構成の 右側 の ペンアイコン より

image.png

Adbanced settings タブ内の

image.png

Script hooks より行います

image.png

ドキュメント

プリプロセス のシェル

#!/usr/bin/env sh

## Source profile
. ~/.profile

## Install NVM modules and set version
nvm install lts
nvm use lts

## Output Node version used
node -v

exit 0

これは Node のバージョンを最新にするシェルです

Firebase CLI が apk をアップロードする動作をするには
Node のバージョンが 20 以上が必要みたいなのですが
現状の Unity Automation Build 環境では 16 らしく
エラーになって Firebase CLI が成功しません

そこで nvm(Node Version Manager) を使って
その環境での最新にする様にしてあげます

ここで嵌ったのは lts オプションに指定の仕方 です
(--lts との情報があるんですが、この環境?だと lts でした)

シェル を Unity Automation Build に設定する

このシェルを、適当な名前を付けて
Unity プロジェクト内の任意のディレクトリに置き
リポジトリに Push します


pre-build-uab.sh
を リポジトリの ルート に置いた場合

Pre-build scriot にシェル名を書けば良いだけ
(Unity プロジェクトからのパスになる)

下のチェックは
このシェルが失敗したら ビルド自体も失敗させるか
(その場合 exit コードが重要になります)
を決められます

image.png

ポストプロセス のシェル

#!/usr/bin/env sh

########################################
# create GOOGLE_APPLICATION_CREDENTIALS
########################################
# Create a temporary file
CREDENTIALS_FILE_CYGWIN=$(mktemp)
# Temporary file deletion reservation
trap 'rm -f "$CREDENTIALS_FILE_CYGWIN"' EXIT
# Decode base64 and write to file
echo "$FIREBASE_SERVICE_ACCOUNT" | base64 -d > "$CREDENTIALS_FILE_CYGWIN"
# json(shell ->windows)
# GOOGLE_APPLICATION_CREDENTIALS environment variable is automatically searched by the Firebase CLI
export GOOGLE_APPLICATION_CREDENTIALS=$(cygpath -w "$CREDENTIALS_FILE_CYGWIN")

########################################
# install Firebase CLI
########################################
npm install -g firebase-tools

########################################
# upload apk
########################################
# apk(shell ->windows)
apk_path=$(cygpath -w "$UNITY_PLAYER_PATH")

firebase appdistribution:distribute "$apk_path" --app "$FIREBASE_APP_ID" --groups "$FIREBASE_TESTER_GROUPS" --release-notes "$UCB_BUILD_NUMBER"

こちらは、やや複雑に見えますが 目的 はシンプルで
npm(Node Package Manager)Firebase CLI を グローバル インストール して
appdistribution:distribute コマンド で apk をアップロード したい
だけなんです

npm install -g firebase-tools

firebase appdistribution:distribute

ただ、ここに

  • Firebase CLI が Firebase App Distribution へアクセスする際の認証設定
  • パス表現を Windows 環境へ変換

と言う処理が入り、コードが増えているのです

Firebase CLI が
Frebase App Distribution へアクセスする際の認証設定

これは 先程 Firebase で新規作成した サービス トークン秘密鍵(json) を使用します

具体的なステップとしては

  • 秘密鍵の json を base64 でエンコードする
  • それを Adbanced settings タブ内の Environment variables に環境変数として登録する

image.png

  • シェル内で その環境変数の内容を base64 デコードして 一時ファイル として保存
  • その一時ファイルのパスを GOOGLE_APPLICATION_CREDENTIALS という固定名
    のシェルの環境変数へセット
    (この 環境変数名は Firebase CLI が認証自動で見てくれる)
  • cygpath -w コマンドを使用して、パス表現を Windows 環境に変換する
    シェルが動作するって事で Windows 環境では無い事は お分かりだと思いますが
    実際は 仮想 Windows 11 環境でビルドが行われています
    (前述した Build Operating System and VersionWindows 11 を指定した件)
    そこで Firebase CLI も Windows 環境のつもりで動作しているらしく
    パスを変換しないとエラーになります

次はコードの解説になります

# Create a temporary file
CREDENTIALS_FILE_CYGWIN=$(mktemp)

これは 一時的なテンポラリーファイル名を mktemp で作成して
CREDENTIALS_FILE_CYGWIN 変数へ格納しています

# Temporary file deletion reservation
trap 'rm -f "$CREDENTIALS_FILE_CYGWIN"' EXIT

これは 作成したテンポラリーファイルを
シェルの最後に消す処理を trap で予約します
(秘密鍵の内容なので)

# Decode base64 and write to file
echo "$FIREBASE_SERVICE_ACCOUNT" | base64 -d > "$CREDENTIALS_FILE_CYGWIN"

FIREBASE_SERVICE_ACCOUNT と言う Unity Automation Build の環境変数の値
(秘密鍵の json を base64 エンコードしてセットしている)
を base64 デコードして CREDENTIALS_FILE_CYGWIN のファイル名へ
リダイレクト して書き込みます

*因みに base64 のエンコードは Mac でやるのが一番簡単です
 (Unity Automation Build の環境変数用)

base64 -i <インプットファイル> -o <アウトプットファイル>

とするだけで base64 エンコードしてくれます

base64 エンコードする目的は
json などの複数行になる可能性があるファイルの内容を
一行の文字列表現にして 意図しない改行 で 処理が上手く行かない事
を無くすためが大きい気がします
(本来は セキュリティなんですかね?、、)

# json(shell ->windows)
# GOOGLE_APPLICATION_CREDENTIALS environment variable is automatically searched by the Firebase CLI
export GOOGLE_APPLICATION_CREDENTIALS=$(cygpath -w "$CREDENTIALS_FILE_CYGWIN")

CREDENTIALS_FILE_CYGWIN 変数のパスは シェルの世界のパス表現なので
cygpath -w で Windows 表現のパス表記に変換します

GOOGLE_APPLICATION_CREDENTIALS という シェルの環境変数 に
Firebase サービス アカウント の秘密鍵(json) のファイルパスを格納する様にします

この名前の環境変数は
Firebase CLI が 認証時に 自動で見に行ってくれるらしいです

npm install -g firebase-tools

Firebase CLI ツールのインストールです

apk_path=$(cygpath -w "$UNITY_PLAYER_PATH")

UNITY_PLAYER_PATH 環境変数は
Unity Automation Build の デフォルト環境変数で apk の出力先になります

これを 秘密鍵(json)ファイルと同じく
Windows 環境のパスに変換して apk_path という変数に格納します

firebase appdistribution:distribute "$apk_path" --app "$FIREBASE_APP_ID" --groups "$FIREBASE_TESTER_GROUPS" --release-notes "$UCB_BUILD_NUMBER"

これは 最低限のオプションを指定して
Firebase CLI から apk を Firebase App Distribution へアップロードする内容です
(結構 やっつけ のオプション指定とかります)

firebase appdistribution:distribute "$apk_path"

まず appdistribution:distribute で apk を指定します

--app "$FIREBASE_APP_ID"

--app で Firebase マイアプリ の アプリ ID を指定します
1:xxxxxxxxxxxxxxxxxxxxxxxxxxxx
見たいな値になる見たいです

私の場合は Unity Automation Build の環境変数
FIREBASE_APP_ID に設定しています

app_id.png

--groups "$FIREBASE_TESTER_GROUPS"

--groups で Firebase App Distribution の
テスターのグループ名(自分で設定した)を指定します
このグループに属しているテスターが アプリを DL / インストール 出来る様になります

私の場合は Unity Automation Build の環境変数
FIREBASE_TESTER_GROUPS に設定しています

--release-notes "$UCB_BUILD_NUMBER"

これが 最後で やっつけ指定です

--release-notes は Firebase App Distribution の
アプリ の リリースノート を指定します

が、これを シェルで 良い様に指定する方法が分からなかったので
何かしらビルド毎に ユニーク な値をセットしようと思い
Unity Automation Build の デフォルト環境変数 UCB_BUILD_NUMBER
ビルド番号が入るとのドキュメントをみて、これで良いか と適当に指定しています

シェル を Unity Automation Build に設定する

このシェルも、適当な名前を付けて
Unity プロジェクト内の任意のディレクトリに置き
リポジトリに Push します


post-build-uab.sh
を リポジトリの ルート に置いた場合

image.png

あと一歩

これで設定にミスが無く、Unity Automation Build サービスに変更など無ければ
完全クラウドで Android ビルドを行い Firebase App Distribution より
Android 端末へ ネット経由で ビルドしたアプリがインストールできるはずです!

Firebase App Distribution での リリース

apk がアップロードされて
Firebase App Distribution が承認すると
リリース となり テスターにメールが届きます

そのメールを Android 端末で開いて
リンク先の Firebase App Distribution から
アプリを DL / インストールするのですが
毎回 そのメールを開いてリンクを踏むのも面倒な場合があると思います

App Tester アプリ

Google Play Store に
Firebase App Distribution 用の アプリが存在します

これをインストールしておけば
アプリがリリースされる毎に Aoo tester アプリから
バージョン指定で DL / インストール が出来る様になり 便利です
(まあ、アプリインストール を迂闊にしたくないなら 無くても問題はないものです)

Unity Android の CI / CD 環境を Free で構築

駆け足でしたが、これにて フィニッシュ です
Android は Development ビルドなら、全て Free で構築できます

Unity iOS の CI / CD 環境を Free で構築

思ったより 長くなっているので iOS 環境の内容は
別の記事にして 相互リンク の形式にしようと思います
(しばし お待ちを!)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?