Github Actionを利用したゲーム向けの自動テスト/自動ビルド環境を提供するGame CIを紹介
実装したコードが正しく動作しているか検証するためのテストや、制作物がちゃんとビルド可能な状態であるかなどを検証するための自動ビルド環境は、現代のソフトウェア開発では普遍的に用いられているものです。定期的にテストを実行することで「どこの更新でバグが起こったのか」「どこまでは正常だったのか」を把握しやすくするというメリットは開発者人生で一度でも「なんか知らんうちにプロジェクトが壊れた」経験をしたことがある人には魅力的でしょう。最近はjenkinsなどのの他にも、無料枠が存在しgithub内部で完結するgithub actionなど個人開発でも気軽に利用可能なCI環境が登場しています。
UnityにもTest Runnerと呼ばれるテスト環境が存在しますが、これをGithub Actions上で自動実行したり、各プラットフォーム向けの実行ファイルを自動ビルドしたりしようとすると、たくさんのworkflowを用意する必要があり、個人規模の開発だと中々厳しいところがあります。
今回紹介するのはUnityにおけるテスト環境を簡単に実現できるようにしてくれる「Game CI」です。
GameCIはgithub ActionsでUnityプロジェクトの自動テスト、自動ビルドを回すためのworkflow集です。使い方は簡単で、githubのmarketplaceから必要なActionsを取ってきて自分のリポジトリのgithub actionsに導入し、GameCIを呼び出すためのworkflowをいくらか書くだけです。
今回はサンプルとしてgithubにpushされたUnityプロジェクトを自動的にビルドするUnity-Builderを使ってみましょう。
Unityの空プロジェクトを作成し、リポジトリを作成、それをgithubにpushします。
今回のゴールはこのプロジェクトをgithub上でビルドすることです。
次にgithub actionsの設定をします。githubリポジトリのActionsタブをクリックして「set up a workflow yourself」をクリックします。
するとエディタのような物が出てきます。github actionsではこのエディタで作成する.ymlファイルを利用してactionsを設定していきます。
Unityプロジェクトから実行可能なファイルをビルドするにはgithubにUnityのライセンス情報を渡してあげる必要があります。このライセンスの発行の一部もgithub actionsで行うことができます。activation.ymlを作成して、game CIの公式ドキュメントを参考に次のようにコードを入力します。
name: Acquire activation file
on:
workflow_dispatch: {}
jobs:
activation:
name: Request manual activation file 🔑
runs-on: ubuntu-latest
steps:
# Request manual activation file
- name: Request manual activation file
id: getManualLicenseFile
uses: game-ci/unity-request-activation-file@v2
# Upload artifact (Unity_v20XX.X.XXXX.alf)
- name: Expose as artifact
uses: actions/upload-artifact@v2
with:
name: ${{ steps.getManualLicenseFile.outputs.filePath }}
path: ${{ steps.getManualLicenseFile.outputs.filePath }}
文法などに関する詳しい話はhttps://docs.github.com/ja/actions/reference/workflow-syntax-for-github-actionsなどを参考にして頂くとして、簡単に紹介するとuses: game-ci/unity-request-activation-file@v2の部分でgithub marketplaceに登録されたGame CIのシステムを呼び出し、ライセンス認証要求用のファイルを生成し、次のuses: actions/upload-artifact@v2で生成したファイルをダウンロード可能な状態にしています。
入力が終わったらStartCommitを押してリポジトリにworkflowを登録します。(ちなみに登録したworkflowは.github/workflows/activation.ymlに置かれるので、それをIDEなどを用いてローカルで編集することでもworkflowを編集することができます。)
コミットが終わったあとgithub actionsを確認すると、先ほど登録したworkflowが存在しているのがわかります。Run Workflowと書かれたボタンを押すとライセンスの発行要請がスタートします。
workflowが正常に動作したあと、workflowを確認すると、artifactの部分に.alfファイルが生成されているのを確認することができると思います。これはライセンスの登録を要求するファイルで、これをUnityで読み込み、設定を行うことでgithub actionsで利用可能なライセンス用のファイルを入手することができます。
先ほどの.alfファイルをダウンロードして、Unityのマニュアルライセンスアクティベーション用のサイト(https://license.unity3d.com/manual)にアップロードします。
アクティベーション用のサイトではライセンスに関するいくつかの質問をされたあと、.ulfファイルをダウンロードできるようになります。
ライセンス情報は周囲に知られたくないので、githubのsecrets機能を使いましょう。githubのsecrets機能を利用するとリポジトリを閲覧した他人に知られたくないような秘密の情報を用いた処理をgithub actionsで行うことができるようになります。喩えば、何らかのパスワードをsecretsに登録して何らかのサービスにログインしたり、今回の例のようにライセンス情報を渡してプロダクトをビルドすることができるようになります。
リポジトリのSettings->Secretsを開いて、先ほどの.ulfファイルの中身の文字列をコピペします。この際、YOUR_SECRET_NAMEの部分をUNITY_LICENSEとします。これはsecretsにおける変数名のような物で、github actionsからデータを呼び出す際に必要となるユニークな文字列を指定します。
お待たせしました。これでgithub上でビルドすることができるようになりました。
再びgithub actionsを開いてnew workflowをクリックします。main.ymlファイルを作成してGame CIの公式ドキュメントを参考に次のように入力します。
name: Actions 😎
on: [push, pull_request]
jobs:
build:
name: Build my project ✨
runs-on: ubuntu-latest
steps:
# Checkout
- name: Checkout repository
uses: actions/checkout@v2
with:
lfs: true
# Cache
- uses: actions/cache@v2
with:
path: Library
key: Library-${{ hashFiles('Assets/**', 'Packages/**', 'ProjectSettings/**') }}
restore-keys: |
Library-
# Build
- name: Build project
uses: game-ci/unity-builder@v2
env:
UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
with:
targetPlatform: WebGL
# Output
- uses: actions/upload-artifact@v2
with:
name: Build
path: build
上の設定だと、push,PRの時に自動的にビルドが走るようになっています。上のworkflowをmasterブランチにpushした際にこのworkflow自身が動作するはずなので、確認してみましょう。
10分ほど寝かせるとビルドが完了し、artifactの部分にビルドデータが吐き出されているのが確認できました。試しにダウンロードして実行してみると無事実行できることが確認できました。
どうだったでしょうか?ライセンス周りの処理が少し面倒に感じたかもしれませんが、1プロジェクトにつき1回セットアップしてしまえば差分が発生する度にビルドを走らせてくれてその間手元のUnityで実装を進めることができたり、ビルドテストを怠っていていつの間にかビルドが失敗するようになっている、なんてことも防げるので中規模以上のプロジェクトだと長い目でみると非常に大きなアドバンテージがあることがわかっていただけると思います。
GameCIではGithubActions上でUnityに様々な操作をさせることが可能で、例えば今回紹介した自動的にビルドを実行する「Unity – Builder」の他にも、エディタを開いてプレイモードに入れるかどうかを確認したり、プロジェクト内のテストを自動的に実行したりできる「Unity – Test runner」などが存在します。
公式サイトはこちら→https://game.ci/