UnityのAndroidビルドをGitHub Actionsで自動ビルドしてFirebase App Distributionに自動配布する

初めに

スマホ向けのゲーム開発やアプリ開発を行う際に、Unityエンジニア(ここではローカルでビルドして端末にインストールできる人)以外にバイナリーを触ってもらう際の方法として Firebase App Distributionから最新のバイナリーを触ってもらうための自動化についての方法です

以下にてリポジトリを公開しています

github.com

開発環境

  • Unity 6000.0.38f1(Personal)
  • Firebase App Distribution

テスト配布サービスの調査

2025/3/06時点でテスト配布サービスは以下のようなものがあります

この中で使いやすいものの一つとして今回はFirebase App Distributionで Androidの配布を行っていきます

Unityプロジェクトの作成

新規で適当に作るだけで問題ないです。こちらを GitHubにpushします。

UNITY_LICENSEの取得

現時点でUNITY_LICENSE(Personal)は特殊な方法でしか取得できないみたいです

過去に以下の記事を書いていますが、今回うまくいかなかったので別の方法で取得しました

ayousanz.hatenadiary.jp

以下のパスにある人は ulf取得までスキップしてください

Windows: C:\ProgramData\Unity\Unity_lic.ulf

Mac: /Library/Application Support/Unity/Unity_lic.ulf

Linux: ~/.local/share/unity3d/Unity/Unity_lic.ulf

まずは Unity HubからUnity_lic.alfを取得します。UnityHubの Preferencesから Licensesを開きます。

Addボタンを押して、Activate with license request を押します。

1.でUnity_lic.alfをダウンロードします。

2でmanual ページ ( https://license.unity3d.com/manual )を開きます。alfを選択して次の画面に遷移します。

以下のシリアルナンバーを入れる画面にて、Developerツールを開きます。

Elementsからoption-personal clearを探して、Styles内でdisplay:noneのチェックをオフにします。

その後 I don’t use Unity in a professional capacity. を選択して、licenseファイルをダウンロードします。

GitHub Repository secretsにUnityに関するKeyの登録

この時点で、Unityに関するSecret Keyを登録します。

  • メールアドレス
  • パスワード
  • license(先ほどダウンロードしたテキストの中身)

GitHub ActionsでUnityのAndroidビルドを行う

この時点でGitHub Actionsを使ったAndroidビルドができる状態になっています。

.github/workflows/firebase_distribute.yaml に以下のような yamlファイルを作成して、GitHub Actionsでビルドを回してビルドが正常に完了するかを確認します。

name: Unity Build and Distribute (Android Only)

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
  workflow_dispatch:

jobs:
  build:
    name: Build Unity Project (Android)
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4.2.2

      - name: Cache Unity Library
        uses: actions/cache@v4.2.0
        with:
          path: Library
          key: Library-${{ hashFiles('Assets/**', 'Packages/**', 'ProjectSettings/**') }}
          restore-keys: |
            Library-

      - name: Run the build for Android
        uses: game-ci/unity-builder@v4.3.0
        env:
          UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
          UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
          UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
        with:
          targetPlatform: Android           # ビルド対象プラットフォーム
          buildsPath: build                 # 出力フォルダ(小文字の "build" を使用)
          buildName: MyAndroidApp           # ビルド名(生成されるファイル名は MyAndroidApp.apk)
          androidExportType: androidPackage # 出力形式: APKをビルド
          unityVersion: '6000.0.38f1'       # 実際のUnityバージョンに合わせて変更

      - name: Upload the Build for Android
        uses: actions/upload-artifact@v4.6.0
        with:
          name: Build-Android
          path: build/Android/MyAndroidApp.apk

Firebaseプロジェクトの作成

Firebase TOPから新規プロジェクトを作成します。

作成後にApp Distributionを選択して、Androidのアプリを追加します。

Android アプリへの Firebase の追加の設定を行います。

こちらでリリースにて apk もしくはaabを手動でドラッグをすると配布できるようになります。

GitHub Repository secretsにFirebaseに関するKeyの登録

GitHubからFirebase App Distributionにアップロードする際には以下のキーが必要になります

  • アプリID
  • Google Cloudのサービスアカウントキー

まずは Firebaseの プロジェクトの設定を開きます。

下の方に アプリのIDは以下のところに記載されています。

次にサービスアカウントを発行します。コンソールのサイドメニューから IAMと管理サービスアカウント を選択します。

サービスアカウントの作成を行い、ロールに Firebase App Distribution Dmin SDKサービスエージェント を選択します。

鍵のタブを選択して、キーを追加します。このときにキータイプは JSONを選択します。

ダウンロードしたjsonファイルを以下のコマンドで変換します。

[Convert]::ToBase64String([System.IO.File]::ReadAllBytes("full path"))

変換をするとターミナルに以下のような文字が出てきます

ewogICJ0eXBlIjogInNlcnZpY2VfYWNjb3VudCIsCiAgInByb2plY3RfaWQiOiAidW5pdHktYXBwLWRpc3RyaWJ1dGlvbiIsCiAgInByaXZhdGVfa2V5X2lkIjogImY2ZTVlOGYwZjdkMjk5NzU0MWRkNWNi ..... 

こちらを 以下のように Secret Keyに登録します

GitHub ActionsからFirebase App DistributionにAPKをアップロードする

以下の内容をyamlに追加して、ビルドしたAPKをアップロードする処理を追加します。

      # 2) Google Cloud SDK (gcloud) をインストール
      - name: Install Google Cloud SDK
        run: |
          sudo apt-get update
          sudo apt-get install -y apt-transport-https ca-certificates gnupg curl
          echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" \
            | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
          curl https://packages.cloud.google.com/apt/doc/apt-key.gpg \
            | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -
          sudo apt-get update
          sudo apt-get install -y google-cloud-sdk

      # 3) Firebase CLI インストール (standalone)
      - name: Install Firebase CLI
        run: |
          curl -sL https://firebase.tools | bash
          firebase --version
          
      - name: Setup Service Account & Distribute
        run: |
          # 1) JSON を復元
          echo "${{ secrets.GCP_SA_KEY }}" | base64 --decode > service_account.json
          echo "Service Account JSON size: $(stat -c %s service_account.json) bytes"
          
          # 2) 変数をエクスポート (これでこのステップのシェルで認識される)
          export GOOGLE_APPLICATION_CREDENTIALS="$(pwd)/service_account.json"
          
          # 3) Firebase CLI を使ってアップロード
          firebase appdistribution:distribute build/Android/MyAndroidApp.apk \
            --app ${{ secrets.FIREBASE_ANDROID_APP_ID }} \
            --groups "testers" \
            --release-notes "Release from GitHub Actions" \

ビルド結果

ビルドすると以下のように アーティファクトに apkのアップロードがされて、その内容がFADにもアップロードされます。

github.com

参考記事

zenn.dev