はじめに

これは ドリコム Advent Calendar 2019の3日目です。
2日目は Smith さんによる、 Inside Tech Inside Drecom です。

自己紹介

DRIP エンジニアの広井淳貴です。
DRIP は Drecom Invention Project の略称で、ドリコムが発明を産み続けるためのプロジェクトです。

今年は AR とトークンエコノミーをメイン領域として活動しています。
その中でわたしは 3Dリアルマップの研究開発を行っています。「AROW」というプロジェクトで過去記事はこちらです。

【CEDEC 2018 フォローアップ】3Dリアルマップを用いたモバイルゲーム開発における課題とその解決方法
モバイルゲーム開発で必要になるのは、なんといっても iOS, Android ビルドです。 ゲームエディタで動くゲームを作るだけでは、ユーザに届けることはできないです。ビルドしてユーザが遊べるようにする必要があります。 そして、ユーザに正しいものを届けることをしたいです。そのためには、ビルドする環境を整える必要があります。 現在自前でビルド環境をメンテナンスしているのですが、アップデートへの対応などで手間があるので、ビルド環境を定義できるクラウドビルドのサービスを利用してみたいと思いました。 今回は iOS, Android の実機向けビルドをクラウド環境で行ったため、その状況についてまとめます。

記事の内容

記事の内容
今回は Cocos2d-x というクロスプラットフォームのゲームエンジンのサンプルゲームをそれぞれ Android, iOS でビルドします。
  • Cocos2d-x のサンプルゲームの用意
    • Android ビルド
      • Android ビルドに必要なこと
      • Android ビルド環境の用意
      • ビルドコマンドを実行する
      • Android ビルドまとめ
    • iOS ビルド
      • iOS ビルドに必要なこと
      • iOS ビルド環境の用意
      • ビルドコマンドを実行する
      • iOS ビルドまとめ
  • まとめ

Cocos2d-x のサンプルゲームの用意

Cosos2d-x ではプロジェクトを新規作成すると、画面にロゴが出てくるシンプルなゲームのプロジェクトができます。これをリポジトリの initial commit にしました。Cocos2d-x のバージョンは v3 を利用しています。 今回は、このリポジトリにそれぞれクラウドビルドする設定を加えていきます。

Android ビルド(AWS CodeBuild の利用)

Android ビルドの手順

Cocos2d-x で Android ビルドをするには以下を行います。
  • 1. Android ビルド環境を用意する。
  • 2. ビルドコマンド(proj.android で gradle) を実行する。
ドリコムでは社内開発・テストの用途で AWS の各サービスを自由に利用できるよう開放されています。今回はその中の CodeBuild を利用してみました。

Android ビルド環境を作成する。

CodeBuild ではリポジトリ内の buildspec.yml を参照して、環境構築やビルドを行います。 以下のドキュメントより、CodeBuild に用意されている標準イメージには Android のビルド環境を用意されています。buildspec.yml の runtime-versions セクションに利用するランタイムを指定するだけで Android ビルド環境ができます。 Android ビルド環境についてはこの3行の設定のみです。
https://github.com/junjanjon/MyGame-public/blob/master/buildspec.yml#L5-L7
runtime-versions: 
java: openjdk8
android: 29

ビルドコマンドを実行する

Android は gradle コマンドだけで apk 生成まで行います。build セクションで gradle コマンドを実行するよう設定します。
https://github.com/junjanjon/MyGame-public/blob/master/buildspec.yml#L5-L7
commands:
- cd proj.android && ./gradlew assembleDebug
AWS CodeBuild の実行方法は記事下部の URL をご参照ください。

Android ビルドまとめ

CodeBuild 結果画面
Android ビルドができました。

artifacts の設定により、ビルドごとに apk が s3 に保存されています。ダウンロードして利用してもいいし、apk を deploy gate や AppCenter に送ることも可能です。

今回 CPU 2、メモリ 4GB の CodeBuild リソースを利用しました。ビルド時間は 15分ほどでした。CodeBuild はキャッシュ機能を提供しているので、工夫すれば 2度目以降のビルド時間を短くできそうです。

iOS ビルド(Circle CI の利用)

iOS ビルドの手順

Cocos2d-x で iOS ビルドをするには以下を行います。

  • 1. iOS ビルド環境を用意する。
  • 2. ビルドコマンド(proj.ios_mac で xcodebuild) を実行する。

2について、iOS アプリを実機向けにビルドするには開発者証明書の用意が必要なので、今回は Xcode の操作などを自動化する fastlane を利用します。
macOS が利用可能な CI サービスを検討したところ、利用した経験がある Circle CI がありました。そのため今回は Circle CI を利用しました。

iOS ビルド環境を作成する

Circle CI ではリポジトリ内の .circleci/config.yml を参照して、環境構築やビルドを行います。 以下のドキュメントより、Circle CI には macOS ビルドイメージが用意されています。.circleci/config.yml に利用する Xcode を指定するだけで iOS ビルド環境を用意できます。
iOS ビルド環境についてはこの2行の設定のみです。
https://github.com/junjanjon/MyGame-public/blob/master/.circleci/config.yml#L4-L5
macos:       
xcode: "11.2.0"

ビルドをする

iOS は fastlane コマンドでアプリビルドを行うようにしました。run セクションでコマンド実行ができるので、以下のように実行するよう設定しました。

https://github.com/junjanjon/MyGame-public/blob/master/.circleci/config.yml#L12-L13
- run: cd proj.ios_mac && bundle install --path=vendor/bundle
- run: cd proj.ios_mac && bundle exec fastlane beta
Circle CI の実行方法は記事下部の URL をご参照ください。

fastlane 内の処理、証明書関連について

以下の fastlane 以下の Fastfile にビルドコマンドが書かれています。AppFile, MatchFile はそれぞれ設定が書かれています。
https://github.com/junjanjon/MyGame-public/tree/master/proj.ios_mac/fastlane
FastFile の match 部分が証明書関連を行っています。
match(type: "development", readonly: true)
この中の処理では、別のリポジトリに保存してある証明書をダウンロードしてきて利用するということを行っています。 readonly: true を設定しているため読み込みのみです。間違っても勝手に証明書を作ることはないです。(間違って勝手に証明書をたくさん作ってしまった経験があります。。)
開発用証明書を暗号化したリポジトリ
fastlane の match で利用する開発用証明書を暗号化したリポジトリです。リポジトリの作り方は記事下部のURLをご参照ください。 作られた Identifier や Profile はそれぞれ match 機能で作られたことがわかるよう名前がついています。
match 機能で作られた Identifier
match 機能で作られた Profile

iOS ビルドまとめ

Circle CI 結果画面
iOS ビルドができました。 ビルド結果は deploygate に上げています。fastlane は結果物のアップロード先として testflight、AppCenter も対応しています。 Circle CI が提供する macOS の Medium というものを利用して、ビルド時間は 12 分ほどでした。

まとめ

AWS CodeBuild と Circle CI を利用してクラウドビルドを試してみました。それぞれのサービスについて感じたことをまとめます。
CodeBuild は、コンピューティングリソースを気軽に切り替えることができることが魅力だと感じました。ビルド時間でネックになっている部分を探すのにも利用できそうです。また、今回は利用していませんが AWS の開発者用ツールとして CodeCommit、CodeDeploy、CodePipeline なども提供されており、連携して利用してみたいです。
Circle CI は、fastlane の利用方法など iOS プロジェクトをビルドするための情報が豊富であると感じました。macOS を利用できるサービスは多くないので、とてもありがたかったです。
クラウドビルドで利用できるサービスはほかにも GCP Cloud Build だったり、AWS ec2 をビルド用にセットアップしたり、mac OS が利用できる Travis CI だったりなどがあると思っています。今後利用してみたいです。
クラウドビルドは社内で Jenkins などの CI 環境や PC 自体をメンテナンスする負担が少なくなるため、利用できるところを検討していきたいです。

参考記事

さいごに

明日は yomogiMK2 さんの記事です。