pushしたら自動でUnityビルドが走る環境を手に入れる

はじめに

まだ手元の作業用マシンでUnityビルドを回してませんか?
Unity2021でIL2CPPビルドが早くなったとはいえ、結構な時間のロスです。
何よりも「手元のマシンが一時的に使えなくなり作業が中断する」というのが最悪な体験です。

GitHub(←ここは何でも良い)にコードをpushしたら自動的にビルドをしてくれる。
それが2021年における最低限の開発環境だと考えているため、簡単に方法を紹介していきます。

でも高いんじゃないの?とお思い方、なんとGitHub Actionsは無料枠があります。
詳細は後述しますが、小さいプロジェクトなら毎月200回程度は無料でビルドすることが出来ちゃいます!

私事ですが、インディーゲーム開発者向けの開発効率化コンサルみたいな仕事を始めようと思っているので
「ビルド環境の構築もっと詳しく教えて」とか「こういう作業無駄だと思ってるんだけど自動化出来ない?」みたいな相談もどんどんお寄せください!
メッセージフォーム

今回の記事で話さないこと!

GitHub Actionsについて

GitHub Actionsについては、解説記事が無限にあるのでググってください。

Game CIについて

Game CIとは、GitHub Actionsで使用できるUnityビルド用workflowをまとめてくれているリポジトリです。
今回紹介する方法では、基本的にGame CIを使用するのでもっと細かい設定がしたい!と思ったらこちらのドキュメントをご参照ください。
https://game.ci/docs/github/getting-started

セットアップ

まずUnityのライセンスをGitHub Actionsで使えるようにする必要があります。
https://game.ci/docs/github/activation

DevelopmentBuild

mainブランチにpushされたらビルドする。
以下のコードでWebGLとStandaloneWindows64のビルドが同時に走ります。

# .github/workflows/development-build.yml

name: Development build

on:
  push:
    branches:
      - main

jobs:
  build:
    name: Build ${{ matrix.targetPlatform }}
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        targetPlatform:
          - WebGL
          - StandaloneWindows64

    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      - uses: actions/cache@v2
        with:
          path: Unity/Library
          key: Library-${{ matrix.targetPlatform }}
          restore-keys: |
            Library-

      - name: Build
        uses: game-ci/unity-builder@v2
        env:
          UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
        with:
          projectPath: Unity
          targetPlatform: ${{ matrix.targetPlatform }}

      - uses: actions/upload-artifact@v2
        with:
          name: Build-${{ matrix.targetPlatform }}
          path: build/${{ matrix.targetPlatform }}

PullRequestのテスト

PullRequestが出たら、テストコードを走らせます。

name: PullRequest test

on: [pull_request]

jobs:
  build:
    name: Unity Test
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      - uses: actions/cache@v2
        with:
          path: Library
          key: Library

      - name: Run tests
        uses: game-ci/unity-test-runner@v2
        env:
          UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
        with:
          projectPath: Unity
          githubToken: ${{ secrets.GITHUB_TOKEN }}

注意点

無料枠について

GitHub Actionsには無料枠が2000分/月ついてます。
1回のビルドに10分かかるとして、200回ビルド出来ます。
1日6回計算ですね。これで十分だと感じるかは人によると思いますが。
https://docs.github.com/ja/billing/managing-billing-for-github-actions/about-billing-for-github-actions

超えても初期設定ではビルドが走らなくなるだけで勝手に課金されることはないので安心してください。
課金する場合は、Linuxは$0.008/分なので、1ビルド(=10分)、9円ぐらいです。

もっとハードに使うならセルフホストランナーという仕組みにより、自前のマシンでActionsを実行する方法も取れます。

最初は軽く無料枠で使っておきながら、将来的にハードに使うことになったときにも課金する or セルフホストランナーを準備する、という選択肢が取れるのがGitHub Actionsの良いところですね。