今回のチュートリアルでは、GameCI と CircleCI を利用して、Unity を使ったモバイルゲーム CI/CD 環境をクラウドネイティブ化する方法についてわかりやすく紹介します。

Unity とは

Unity は、Unity Technologies が開発・販売しているゲーム開発プラットフォームです。

主に C# を用いて、下記のようなクロスプラットフォーム 向けにゲーム開発を行うことができます。

  • PCゲーム(Windows / macOS)
  • モバイルゲーム(iOS / Android)
  • 家庭用ゲーム(PlayStation / Xbox / Nintendo Switch)

また Unity には Unity アセットストアが用意されており、ゲーム開発を効率的に行うことができます。

Unity は様々な規模のゲーム開発環境として採用されており、特にモバイルゲームにおいては高いシェアを持っています。

GameCI と CircleCI を利用して、モバイルゲーム CI/CD パイプラインを実現する

品質の高いゲーム開発を継続的に行っていくためには、Web アプリケーションやモバイルアプリケーション同様、CI/CD(継続的インテグレーション・継続的デリバリー)の導入が欠かせません。

特にモバイルゲームはリリース更新頻度が高く、ユーザー数も多いため、高性能な CI/CD ツールが必要になります。

しかし、Unity をはじめとしたモバイルゲームの CI/CD パイプラインは下記のような要件があるため、1から構築するのは難易度が高くなりがちです。

  • ビルド環境の準備(特に iOS プラットフォームビルドのための macOS 環境)
  • Unity Editor のインストール
  • ライセンスのアクティベート
  • ビルドスクリプトの準備

そのため、下記のような開発生産性の低い環境で運用しているケースが多いです。

  • ローカル開発環境上で手動でビルド・テストを行っている
  • Jenkins などのスケールしづらい環境で運用している

これらのモバイルゲーム CI/CD の課題になる部分を解決するために作られたのが、GameCI と呼ばれるオープンソースのツールです。

GameCI · The fastest and easiest way to automatically test and build your game projects

GameCI は下記の機能が提供されています。

  • Unity Editor がインストールされた環境の提供(Docker イメージ)
  • ライセンスのアクティベート
  • 任意のプラットフォームビルドの実行

GameCI は CircleCI に対応しており、下記の Orb を使うことで特別なビルドスクリプトを用意せずとも簡単に Unity の CI/CD パイプラインを作成することが可能です。

今回は以下のサンプルを利用して、CircleCI と GameCI を利用したモバイルゲーム CI/CD パイプラインを紹介します。

GitHub - tadashi0713/circleci-demo-mobile-unity: Demo for mobile game CI/CD pipeline of Unity using CircleCI.

Unity ライセンスをアクティベートする

Unity プロジェクトのテスト・ビルドを行うためには、事前に Unity ライセンスをアクティベートする必要があります。

GameCI を使って Unity ライセンスをアクティベートすることが可能ですが、使用するライセンスによってアクティベーション方法が異なるため、詳細は下記のドキュメントを参考にしてください。

Activation GameCI

今回は Personal ライセンスを利用したアクティベーション方法を紹介します。

まず、アクティベーションファイルを取得するために、下記の設定ファイル(.circleci/config.yml)を記載し、CircleCI で実行します。

circleci-config.yml

実行が完了すると ARTIFACTS タブからアクティベーションファイル(Unity.alf)をダウンロードすることができます。

unity.alfをダウンロード

このアクティベーションファイルを、こちらのページにアップロードしてアクティベーションを行います。

アクティベーションファイル

アクティベーションが完了するとライセンスファイル(Unity_v20XX.x.ulf)をダウンロードすることができます。

最後にライセンスファイルなどを CircleCI で利用するために Context を用意します。

  • UNITY_ENCODED_LICENSE(先ほどのライセンスファイルをbase64でエンコードしたもの)
  • UNITY_USERNAME
  • UNITY_PASSWORD

    Android プラットフォームへのビルド・配布を行う

Unity ライセンスのアクティベートが完了したら、実際に CircleCI を使って各プラットフォームへのビルドを行います。

まずはじめに Android プラットフォームへのビルド(build-android)を行います。

build-android

executor では Unity Orb を利用して実行環境を指定しています。

resource_class は下記に記載されている Docker リソースクラスから選んでいただくことが可能です。

CircleCI のリソース クラス - CircleCI

Unity プロジェクトのビルドにはスペックの高いマシン(CPU・RAM)が必要なケースが多いのですが、CircleCI のリソースクラスによってオンデマンドに用意することができます。

また、CPU・RAM使用率もグラフで確認することができるため、簡単に最適なリソースクラスを選択することができます。

CPU・RAM使用率

step (ビルド手順) では以下を行っています。

  • ソースコードのチェックアウト(checkout)
  • Context に保存してあるライセンスファイルなどの用意(unity/prepare-env)
  • Android プラットフォーム向けのビルド(unity/build)

これによって、Android 向けのバイナリ(apk)が作成されます。

この apk をそのまま Google Play Store にアップロードしてリリースすることも可能ですし、Firebase App Distribution などに配布することもできます。

今回は fastlane を利用して、Firebase App Distribution に配布します

fastlane

Firebase App Distribution

iOS プラットフォームへのビルド・配布

次に iOS プラットフォームへのビルドを行います。

iOS プラットフォームへのビルド

export-ios では Android と同じ unity/build を使っています。

しかし注意点として、iOS の unity/build では Android と違いバイナリ(ipa)の作成まで行われません。

実際には以下のような Xcode プロジェクトが生成されます。

Xcode プロジェクトが生成

この Xcode プロジェクトを macOS 環境で署名・ビルドすることによってバイナリ(ipa)を作成することができます。

Unity によって生成された Xcode プロジェクトをビルドするジョブ(build-and-beta-ios)はこちらです。

build-and-beta-ios

こちらは macOS 環境で行う必要があるため、CircleCI の macOS VM を利用しています。

そして、fastlane を利用して以下を行っています。

  • fastlane match を利用したコード署名
  • Xcode プロジェクトのビルド
  • Firebase App Distribution への配布

ゲーム開発チュートリアル

おわりに

この記事では、GameCI と CircleCI を活用して、Unity を使ったモバイルゲームCI/CD環境をクラウドネイティブ化する方法について紹介しました。

このソリューションには以下のメリットがあります。

  • macOS 環境を含め、Unity を使ったモバイルゲーム CI/CD 環境をクラウドネイティブ化することによって、開発生産性の高いスケーラブルな環境を用意できる
  • GameCI(Orb) によって、特別なビルドスクリプトを用意せずとも モバイルゲーム CI/CD パイプラインを作成することができる
  • スペックの高いマシン(CPU・RAM)が必要なモバイルゲーム CI/CD においても、CircleCI のリソースクラスによってオンデマンドに用意することができる

現在新しいモバイルゲームの CI/CD 環境を検討している、あるいは既存のモバイルゲーム CI/CD 環境に課題を感じている方は参考にしていただければと思います。

関連記事