はじめに
以前、【Unity】GameCIとGithubActionsを使ってクラウドビルド環境を構築する で、GameCI と GitHub Actions を使った Unity のクラウドビルドを紹介しました。
あれから GameCI 側の仕組みが大きく変わり、2026年9月に unity-builder v6.0.0 がリリースされています。この記事はその続きとして、既存の workflow を v6 に合わせるときに何が変わるかをまとめます。
サンプルは前回と同じリポジトリです。
- サンプル: tkada/gameci_sample
- GameCI 公式: https://game.ci/
公式ドキュメントの Getting Started はまだ @v4 の例が多いですが、Action 本体の最新メジャーは v6 です。この記事では実プロジェクトで動かした内容を優先しています。
GameCI のおさらい
GameCI は、ゲーム向けの CI/CD をオープンソースで提供しているプロジェクトです。Unity 向けには Docker イメージと GitHub Actions が中心で、GitLab CI や CircleCI にも対応しています。
GitHub 上では game-ci 配下に、ビルド用の unity-builder、テスト用の unity-test-runner、Docker イメージ、そして v6 の実体になる cli などが並んでいます。
前回の記事では、おおまかに次の流れでビルドしていました。
- Unity プロジェクトを GitHub に置く
- ライセンスを GitHub Secrets に登録する
-
.github/workflowsに YAML を書く - Actions からビルドを実行する
この骨格は v6 でも同じです。変わるのは Action の中身 と、それに合わせて直す YAML です。
v6 で何が変わったか
unity-builder v6.0.0 の要点は次のとおりです。
- Action は独自の Docker 制御をやめ、
game-ci/cliの薄いラッパーになった - 入力・Secrets・プロジェクト構成は v5 からほぼそのまま使える
- ローカルで
game-ciCLI を叩いたときと、CI 上の Action が同じ経路になる
前回記事の @v4 から一気に飛ばすと、見た目の YAML は似ていても裏側が別物です。v6 では cliVersion という入力が増え、ここで CLI 本体のタグを指定します。
公式の Builder ドキュメント では、unityVersion のデフォルトは auto です。ProjectSettings/ProjectVersion.txt から Unity バージョンを読むので、エディタを上げたときに YAML を直し忘れる事故を減らせます。
workflow の差分(前回記事 → v6)
前回の Windows ビルドは、だいたいこんな指定でした。
uses: game-ci/unity-builder@v4
env:
UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
with:
targetPlatform: StandaloneWindows64
unityVersion: 2022.3.0f1
今回サンプルを動かした構成は次のとおりです。他のパッケージに関しても最新にアップデートしています。
| 項目 | 前回(記事時点) | 今回 |
|---|---|---|
unity-builder |
@v4 |
@v6 |
| Unity バージョン指定 |
2022.3.0f1 を直書き |
auto(ProjectVersion.txt) |
| CLI | なし |
cliVersion: v0.1.69 にピン留め |
| Personal ライセンス |
UNITY_LICENSE + メール + パスワード |
メール + パスワード(後述) |
完成形の build.yml
サンプルの Windows ビルドは次の内容です。LFS キャッシュの考え方は、公式の Getting started にある「Simple example with Git LFS」と同じです。
name: Run the Windows build
on:
workflow_dispatch: {}
jobs:
build:
name: Run the Windows build
runs-on: ubuntu-latest
steps:
- name: Check out my unity project.
uses: actions/checkout@v7
- name: Create LFS file list
run: git lfs ls-files -l | cut -d' ' -f1 | sort > .lfs-assets-id
- name: Restore LFS cache
uses: actions/cache@v6
id: lfs-cache
with:
path: .git/lfs
key: ${{ runner.os }}-lfs-${{ hashFiles('.lfs-assets-id') }}
- name: Git LFS Pull
run: |
git lfs pull
git add .
git reset --hard
- name: Set outputs
id: vars
run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
- uses: actions/cache@v6
with:
path: Library
key: Library-${{ hashFiles('Assets/**', 'Packages/**', 'ProjectSettings/**') }}
restore-keys: |
Library-
- name: Run the Windows build
uses: game-ci/unity-builder@v6
env:
UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
with:
targetPlatform: StandaloneWindows64
unityVersion: auto
cliVersion: v0.1.69
- name: Upload the Windows Build
uses: actions/upload-artifact@v7
with:
name: Build-${{ steps.vars.outputs.sha_short }}
path: build
ポイントだけ補足します。
unityVersion: auto
Builder の unityVersion は、デフォルトが auto です。プロジェクトの ProjectSettings/ProjectVersion.txt を読むので、Unity 6(例: 6000.3.9f1)に上げても YAML を触らずに済みます。
明示的にバージョンを書く場合は、Hub に出る文字列そのものが必要です。2022.3.16 のように末尾の f1 を落とすと解決できません。v6 ではこの指定が CLI の --engineVersion に渡ります。
cliVersion はピン留めする
v6 は実行時に game-ci/cli のバイナリを落とします。未指定だと Action 側が入れる CLI が古いままになり、前回記事の @v4 から @v6 に上げただけではビルドが落ちます。実際に cliVersion を書かずに動かしたところ、CLI v0.1.64 が入り、次のように失敗しました。
Installing game-ci CLI v0.1.64 via https://raw.githubusercontent.com/game-ci/cli/v0.1.64/scripts/install.sh
...
/tmp/game-ci-cli-cache/v0.1.64/game-ci build --targetPlatform=StandaloneWindows64 --engineVersion=6000.3.9f1 ...
...
[ERROR] Error: There was an error building the project. Please read the logs for details.
Error: Build failed with exit code 1
cliVersion に新しいタグを明示すると通ります。本稿執筆時点の最新は v0.1.69 でした。CLI 側の Releases を見て更新してください。
ライセンス:公式手順と、v6 で実際に起きたこと
公式の Activation では、ライセンス種別ごとに Secrets が分かれています。
-
Personal:
UNITY_LICENSE(.ulfの中身)+UNITY_EMAIL+UNITY_PASSWORD -
Professional:
UNITY_SERIAL+UNITY_EMAIL+UNITY_PASSWORD -
License Server:
unityLicensingServerにサーバー URL
GameCI はメールやパスワードを保管しません。ビルド/テストのたびに Unity をアクティベートするために使います。パスワードに記号が入っていると失敗しやすい、という注意も Builder にあります。
前回記事でも書いたとおり、Personal は Manual Activation で .ulf を取れなくなっています。公式も Unity Hub で Personal を追加し、OS ごとのパスから .ulf を拾う手順です。
Windows: C:\ProgramData\Unity\Unity_lic.ulf
Mac: /Library/Application Support/Unity/Unity_lic.ulf
Linux: ~/.local/share/unity3d/Unity/Unity_lic.ulf
ここからが v6 で実測した差分です。手元の Hub で作った .ulf を UNITY_LICENSE に入れると、GitHub-hosted runner(Docker)では次のようなログが出ます。
The license file's machine binding doesn't match this machine - falling back to activating with the Unity account (UNITY_EMAIL/UNITY_PASSWORD) instead.
.ulf は発行したマシンの ID に紐づきます。CI のコンテナとは ID が違うため、ファイルは無視してアカウント認証に落ちる動きです。今回のサンプルでは、このフォールバック後にビルドが通ったので、UNITY_LICENSE を外して UNITY_EMAIL / UNITY_PASSWORD だけに揃えました。
ただし公式ドキュメントは、Personal でも UNITY_LICENSE を残す前提のままです。2FA やエディタ版、ライセンス種別によってはアカウント認証だけでは失敗します。Pro ならもともと UNITY_SERIAL が本筋です。
「公式どおり残す」か「今回のようにメール/パスワードだけにする」かは、自分のアカウントで一度通してから決めるのが安全です。
応用:任意のビルド関数はこれまでどおり
前回の応用編(Builder.Build に -message を渡す)は、v6 でも同じ入力です。
- name: Run the Windows build
uses: game-ci/unity-builder@v6
env:
UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
with:
targetPlatform: StandaloneWindows64
unityVersion: auto
cliVersion: v0.1.69
buildMethod: Builder.Build
customParameters: -message MyCustomParameters
buildMethod は Assets/Editor 配下(または Editor Assembly)の static メソッドを指します。環境変数は Unity 側に届かないので、値を渡すなら customParameters を使います。詳細は Builder の configuration options です。
つまずきやすいところ
-
公式サイトのバージョン表記
game.ci のドキュメント切替がまだ v4 を current としていることがあります。Action の最新は GitHub の unity-builder Releases を見てください。 -
workflow が見えない
前回と同じく、GitHub Actions はデフォルトブランチ前提です。別ブランチだけで YAML を足すと、Actions タブに出ないことがあります。 -
IL2CPP
公式の Getting Started にあるとおり、IL2CPP はビルド対象と runner OS を揃える必要があります。Linux runner から Windows IL2CPP を出す、といった組み合わせは別途確認してください。 -
Linux 成果物の拡張子
v5 以降、StandaloneLinux64はデフォルトで.x86_64が付きます。以前の拡張子なしに戻すならlinux64RemoveExecutableExtension: trueです。
うまくいかないときは、公式の Common issues と、Discord 経由のコミュニティが近道です。
まとめ
前回の「GameCI + GitHub Actions でクラウドビルド」は、v6 でも十分使えます。ただし Action は CLI のラッパーになったので、次を合わせておくと安心です。
-
game-ci/unity-builder@v6にする -
unityVersion: autoにする -
cliVersionを CLI のリリースタグに固定する - ライセンスは公式手順を読んだうえで、自分の環境で
.ulfが本当に使われているかログを見る
GameCI 自体は MIT のオープンソースで、ドキュメントやイメージ、Action が github.com/game-ci にまとまっています。バージョンが飛びやすい領域なので、YAML をコピーするときはドキュメントの @v4 例をそのまま使わず、Release のタグを確認してください。