UnityプロジェクトでGitHub Actionsを用いたCI/CDパイプラインを構築するための詳細な手順


前提条件

  • GitHubアカウント:リポジトリを管理するために必要です。
  • Unityプロジェクト:GitHubにプッシュ可能な状態であること。
  • Unityライセンス:Personal版でもCIでのビルドにはライセンスのアクティベーションが必要です。

ステップ1:UnityプロジェクトをGitHubにプッシュ

Gitの初期化

  • プロジェクトフォルダでターミナル(またはコマンドプロンプト)を開き、git initを実行してGitリポジトリを初期化します。

.gitignoreの設定

  • Unity用の.gitignoreファイルを作成します。以下の内容を含めることを推奨します。
    /Library/ /Temp/ /Obj/ /Build/ /Builds/ /Logs/ /UserSettings/
  • これは不要なファイルや大容量のファイルをリポジトリに含めないようにするためです。

リポジトリへのプッシュ

  • GitHub上で新しいリポジトリを作成します。
  • ローカルリポジトリをリモートリポジトリに接続します。
    bash git remote add origin https://github.com/あなたのユーザー名/リポジトリ名.git
  • 変更をコミットしてプッシュします。
    bash git add . git commit -m "初回コミット" git push -u origin main

ステップ2:GitHub Actionsのセットアップ

Actionsタブの確認

  • GitHubリポジトリの「Actions」タブに移動します。
  • 「Set up a workflow yourself」を選択します。

ワークフローファイルの作成

  • .github/workflows/ディレクトリにunity-ci.ymlという名前でワークフローファイルを作成します。

ステップ3:ワークフローファイルの記述

以下はUnityプロジェクトをビルドするための基本的なワークフローの例です。

name: Unity CI

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        unityVersion: ['2021.3.0f1'] # 使用するUnityのバージョン
        targetPlatform: ['StandaloneWindows64'] # ビルドターゲット
    steps:
      - name: リポジトリをチェックアウト
        uses: actions/checkout@v3

      - name: Unityのセットアップ
        uses: game-ci/unity-setup@v2
        with:
          unityVersion: ${{ matrix.unityVersion }}
          activationLicense: ${{ secrets.UNITY_LICENSE }} # 後述するライセンス

      - name: ビルド実行
        uses: game-ci/unity-builder@v2
        with:
          unityVersion: ${{ matrix.unityVersion }}
          targetPlatform: ${{ matrix.targetPlatform }}

      - name: ビルド成果物のアップロード
        uses: actions/upload-artifact@v3
        with:
          name: Build
          path: build/${{ matrix.targetPlatform }}

ステップ4:Unityライセンスのアクティベーション

1. Unityのライセンスリクエストファイルを生成

  • ローカルマシンで以下のコマンドを実行し、ライセンスリクエストファイルを生成します。
  "/Applications/Unity/Hub/Editor/2021.3.0f1/Unity.app/Contents/MacOS/Unity" \
  -batchmode \
  -createManualActivationFile \
  -logFile UnityLicenseFile.alf
  • Unityのインストールパスは環境によって異なりますので適宜変更してください。
  • UnityLicenseFile.alfというファイルが生成されます。

2. ライセンスファイルの取得

  • Unityのライセンス認証ページにアクセスします。
  • 「手動でライセンスをアクティベート」を選択し、先ほど生成したUnityLicenseFile.alfをアップロードします。
  • ライセンスファイル(Unity_v2021.x.ulf)がダウンロードされます。

3. ライセンスファイルをGitHubシークレットに登録

  • GitHubリポジトリの「Settings」>「Secrets and variables」>「Actions」から新しいシークレットを作成します。
  • シークレット名:UNITY_LICENSE
  • シークレット値:ライセンスファイルの内容をBase64エンコードしたもの
  • Base64エンコードは以下のコマンドで行えます。 base64 Unity_v2021.x.ulf

ステップ5:ワークフロー内でライセンスを使用

  • ワークフローファイル内で${{ secrets.UNITY_LICENSE }}としてライセンス情報を参照します。

ステップ6:自動テストの追加(任意)

  • テストを実行するステップを追加します。
- name: テストの実行
  uses: game-ci/unity-test-runner@v2
  with:
    unityVersion: ${{ matrix.unityVersion }}
    testMode: playmode # または editmode

ステップ7:ビルド成果物のデプロイ(任意)

  • ビルド成果物をGitHub Releasesや他のサーバーにデプロイすることも可能です。

GitHub Releasesへのデプロイ例

- name: リリースの作成
  uses: actions/create-release@v1
  with:
    tag_name: v${{ github.run_number }}
    release_name: Release ${{ github.run_number }}
    draft: false
    prerelease: false
    body: 自動ビルドによるリリース

- name: ビルド成果物のアップロード
  uses: actions/upload-release-asset@v1
  with:
    upload_url: ${{ steps.create_release.outputs.upload_url }}
    asset_path: build/${{ matrix.targetPlatform }}/ビルドファイル.exe
    asset_name: ビルドファイル.exe
    asset_content_type: application/octet-stream

ステップ8:ワークフローのコミットとプッシュ

  • .github/workflows/unity-ci.ymlファイルをコミットし、リポジトリにプッシュします。
git add .github/workflows/unity-ci.yml
git commit -m "Add Unity CI workflow"
git push

ステップ9:ワークフローの確認

  • GitHubリポジトリの「Actions」タブでワークフローが正しく実行されているか確認します。
  • エラーが発生した場合はログを確認し、必要に応じてワークフローを修正します。

補足情報

Unityビルドのカスタマイズ

  • ビルド設定を細かく制御したい場合、Unity内でビルドスクリプトを作成します。

ビルドスクリプトの例

  • Assets/Editor/BuildScript.csを作成し、以下の内容を記述します。
using UnityEditor;

public class BuildScript
{
    public static void BuildGame()
    {
        string[] scenes = {"Assets/Scene1.unity", "Assets/Scene2.unity"};
        BuildPipeline.BuildPlayer(scenes, "Builds/Windows/MyGame.exe", BuildTarget.StandaloneWindows64, BuildOptions.None);
    }
}

ワークフローでの実行

  • ワークフロー内で以下のようにビルドステップを変更します。
- name: ビルド実行
  run: |
    unity -projectPath . -quit -batchmode -executeMethod BuildScript.BuildGame -logFile -

キャッシュの利用

  • ビルド時間を短縮するために、ライブラリのキャッシュを利用することができます。
- name: キャッシュの復元
  uses: actions/cache@v3
  with:
    path: Library
    key: Library-${{ matrix.unityVersion }}

# ビルドステップの後
- name: キャッシュの保存
  uses: actions/cache@v3
  with:
    path: Library
    key: Library-${{ matrix.unityVersion }}

注意点

  • Unityバージョンの管理:ローカル環境とCI環境で同じUnityバージョンを使用することが重要です。
  • ライセンス情報のセキュリティ:ライセンスファイルは機密情報であり、公開リポジトリに含めないように注意してください。
  • Git LFSの使用:大容量のアセットがある場合、Git Large File Storage(LFS)の使用を検討してください。
  • ランナーのリソース制限:GitHub Actionsの無料プランでは実行時間やストレージに制限があります。

トラブルシューティング

  • ビルドが失敗する場合
    • ログを確認してエラーの原因を特定します。
    • ライセンスのアクティベーションが正しく行われているか確認します。
  • ライセンスエラー
    • シークレットに保存したライセンス情報が正しいか確認します。
    • ライセンスファイルのBase64エンコードが正しく行われているか確認します。
  • ビルド時間が長い
    • キャッシュを利用してビルド時間を短縮します。
    • 不要なシーンやアセットが含まれていないか確認します。

まとめ

以上がUnityプロジェクトでGitHub Actionsを用いたCI/CDパイプラインを構築するための詳細な手順です。自動化されたビルドとテストにより、開発プロセスを効率化し、プロジェクトの品質を向上させることができます。必要に応じてワークフローをカスタマイズし、チームのニーズに合わせて最適化してください。


参考リンク

Unity,チーム開発

Posted by hidepon