Unityプロジェクトを個人で開発していると、ビルドと申請に費やす時間が地味に重くのしかかってきます。「iOSとAndroid両方のビルドを出すと半日が消える」「App Storeの申請作業がルーティンなのに毎回ミスする」——これは実際に多くの個人開発者が感じている問題です。
GameCIとGitHub Actionsを組み合わせると、コードをpushした瞬間からビルド・テスト・TestFlightへのアップロードまでが自動で走る環境が構築できます。そしてそのワークフローYAMLを書く作業こそ、Antigravityがもっとも得意とするところです。
GitHub Actions + GameCI が個人開発者に最適な理由
Unityのビルド自動化ツールはいくつか存在しますが、GitHub Actions + GameCI の組み合わせを個人開発者に勧める理由が明確にあります。
コスト面: GitHub ActionsはLinuxランナーが無料枠(月2,000分)で使えます。Unityのテスト実行や一般的なビルドは15〜30分程度なので、月に60〜100回の実行が無料枠内に収まります。iOSビルドが必要な場合はmacOSランナーが必要ですが、mainブランチへのマージ時だけに限定すれば現実的なコストになります。
設定のシンプルさ: GameCIはUnityビルド専用のDockerイメージを提供しており、Unityのインストールやライセンスのアクティベーションを自動化してくれます。自分でDockerfileを書く必要はありません。
Antigravityとの相性の良さ: YAMLの構文エラー、シークレット名の不一致、Unity固有の設定ミスをAntigravityが対話形式で指摘してくれます。エラーログを貼り付けるだけで解決策が返ってくるので、ドキュメントを往復する手間が大幅に減ります。
Unity Test Runnerでのテスト自動化については、Antigravity×GitHub ActionsのCI/CDパイプライン構築ガイドも参考になります。
最初の30分でできる基本ワークフロー
まずはUnityのPlayModeテストを自動実行するだけのシンプルなワークフローから始めます。Antigravityにプロジェクト構成を伝えて「GameCIを使ったUnity PlayModeテストのGitHub Actionsワークフローを生成してください」と依頼すると、以下に近いYAMLが出力されます。
# .github/workflows/unity-ci.yml
name: Unity CI
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
test:
name: Unity Test Runner
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
lfs: true
- name: Cache Unity Library
uses: actions/cache@v4
with:
path: Library
key: Library-${{ hashFiles('Assets/**', 'Packages/**', 'ProjectSettings/**') }}
restore-keys: |
Library-
- name: Run PlayMode Tests
uses: game-ci/unity-test-runner@v4
env:
UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
with:
projectPath: .
testMode: PlayMode
artifactsPath: test-results
githubToken: ${{ secrets.GITHUB_TOKEN }}
checkName: Unity PlayMode Test Results
- name: Upload Test Results
uses: actions/upload-artifact@v4
if: always()
with:
name: test-results-${{ github.run_number }}
path: test-resultsこのYAMLで最初につまずくのがUNITY_LICENSEシークレットの取得です。「UNITY_LICENSEシークレットに設定する値の取得方法を教えてください」とAntigravityに聞くと、Unity Personalの場合はGameCI公式のアクティベーション手順(ローカルでライセンスファイルを生成してBase64エンコードする方法)を丁寧に案内してくれます。
Antigravityでワークフローを生成・デバッグするコツ
実際に使ってみて分かった効果的な使い方をまとめます。
エラーログをそのまま貼り付ける: GitHub Actionsが失敗した場合、エラーログをAntigravityに貼り付けてください。「YAML構文エラー」「シークレット名の不一致」「GameCIのバージョン指定ミス」といった原因を即座に特定してくれます。エラーメッセージの意味を調べてから質問する必要はありません。
段階的に機能を追加する: 「テスト→ビルド→デプロイ」の順番で機能を追加していくのが安全です。全部を一度に書こうとすると、どの設定が問題かの特定が困難になります。Antigravityに「テストのステップだけが通ったので、次にAndroidビルドを追加してください」と段階的に依頼するほうが確実です。
ProjectSettingsディレクトリをコンテキストに含める: チャットにプロジェクトのディレクトリ構造やProjectSettings/ProjectSettings.assetの内容を貼り付けると、Bundle ID、ターゲットプラットフォーム、最低SDKバージョンなどを考慮した設定を生成してくれます。汎用的なテンプレートではなく、自分のプロジェクトに合ったYAMLが生成される点が大きな違いです。
iOSビルドの自動化とコスト管理
iOSビルドはmacOSランナーが必要で、GitHub Actionsの無料枠ではLinuxの10倍のコストがかかります。個人開発者向けの現実的な戦略を紹介します。
コスト最適化のポイントは以下のとおりです。
on: push: branches: [main]のみiOSビルドを実行し、PR時は実行しないneeds: testでテストジョブが通った場合のみビルドジョブを実行する- UnityのLibraryディレクトリをキャッシュして毎回のフルビルドを回避する
build-ios:
name: iOS Build
runs-on: macos-latest
needs: test # testジョブ成功後のみ実行
if: github.ref == 'refs/heads/main' # mainブランチのみ
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
lfs: true
- name: Cache Unity Library (iOS)
uses: actions/cache@v4
with:
path: Library
key: Library-iOS-${{ hashFiles('Assets/**', 'Packages/**', 'ProjectSettings/**') }}
restore-keys: |
Library-iOS-
Library-
- name: Build iOS Xcode Project
uses: game-ci/unity-builder@v4
env:
UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
with:
targetPlatform: iOS
buildName: MyGame
buildsPath: build
- name: Upload iOS Build Artifact
uses: actions/upload-artifact@v4
with:
name: ios-build-${{ github.run_number }}
path: build/iOS生成されたXcodeプロジェクトをそのままIPAにしてTestFlightに投げるには、別途コード署名の設定が必要です。このあたりはFastlane × Antigravityを使ったApp Storeへの自動提出ガイドで詳しく解説していますので、合わせて参照してみてください。
TestFlightへの自動アップロードをFastlaneで実装する
GameCIでXcodeプロジェクトが生成されたら、Fastlaneを使ってそのままTestFlightに投げることができます。App Store Connect APIキーを用意しておくと、パスワード認証不要で安全に自動化できます。
- name: Sign and Upload to TestFlight
env:
ASC_KEY_CONTENT: ${{ secrets.ASC_KEY_CONTENT }}
ASC_KEY_ID: ${{ secrets.ASC_KEY_ID }}
ASC_ISSUER_ID: ${{ secrets.ASC_ISSUER_ID }}
CERTIFICATE_P12: ${{ secrets.CERTIFICATE_P12 }}
CERTIFICATE_PASSWORD: ${{ secrets.CERTIFICATE_PASSWORD }}
PROVISIONING_PROFILE: ${{ secrets.PROVISIONING_PROFILE }}
run: |
gem install fastlane --no-document
fastlane ios beta対応するFastfileはAntigravityに「App Store Connect APIキーを使ってUnityのXcodeプロジェクトからIPAをビルドしてTestFlightにアップロードするFastfileを書いてください」と依頼するだけで生成されます。必要なシークレットのリストも同時に出力してくれるので、GitHub Secretsに何を設定すればよいかが一目で分かります。
コードの設計と自動化の関係を整理するうえで、今でも手元に置いておきたい一冊です。
ビルドが自動化されると開発のリズムが変わる
このパイプラインを組んで最初に気づいたことは、「ビルドが通るかどうかを待つ時間」の使い方が変わったことでした。以前はローカルでビルドが走っている間、中途半端に待つしかありませんでした。CI/CDに任せてしまうと、pushしてAntigravityで次の実装の相談をしている間にビルドが終わっています。
まず試すなら、今日紹介した基本ワークフロー(テストのみ)から始めてください。ビルドやデプロイは後から追加できます。テストだけ自動化するだけでも、「手動でテストし忘れてバグをコミットする」という失敗が確実に減ります。
Unityの開発フローをAntigravityで高速化するその他の方法については、Unity × Antigravity 高速開発ガイドも参考にしてみてください。