読者です 読者をやめる 読者になる 読者になる

WonderPlanet DEVELOPER BLOG

ワンダープラネットの開発者ブログです。モバイルゲーム開発情報を発信。

Unityプロジェクトのビルド環境改善

Jenkins Unity Xcode

アプリエンジニアの山下です。 プロダクト自体の改善はもちろんですが、開発環境を改善していくこともエンジニアの重要な仕事だと思います。

今回はUnityプロジェクトをビルドしストア提出用アプリ(ipa/apk)を作る上で 起こった問題とその解消方法についてまとめてみました。

ビルド作成時の問題

開発を進めていく上で、現行プロジェクトをビルドしてQAや開発に関わっているメンバーに配布することは多々あります。 しかし開発が進むにつれプロジェクトが膨らんでいき、ビルド手順の複雑化とビルド時間の増大が問題になってきました。

特に手順の複雑化は属人性を高め、ビルド職人がいないとビルドを作れない事態にまで及びました。 一時期ビルド手順書が作られましたが、日々の開発による手順の変化に対応できず、属人化を避けることはできませんでした。

Jenkins の導入

まず属人化解消のため、Jenkinsによる自動ビルド環境を構築しました。

特筆する点としては、作成されるapk/ipaの用途に応じて、デバッグモード有効・無効、サーバの向き先などを予め指定したジョブを複数用意しています。 一例を挙げると以下の通りです。

f:id:wp-yamas:20170203112251p:plain

  • Beta-Build (デバッグ機能有効・開発サーバ)
  • RC-Build (デバッグ機能無効・ステージングサーバ)
  • Release-Build (ストア提出用・本番サーバ)

これにより、最低限のパラメータを設定すれば、後はビルド実行をポチるだけという状態にまで落とし込みました。

またジョブは行程ごとに細分化されており、ジョブ間の連携はパラメータと成果物の受け渡しで行っています。 パラメータの受け渡しはParameterized Trigger Pluginを使用しています。

Parameterized Trigger Plugin
https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Plugin

同じ工程は一つのジョブに集約できるため、メンテナンス性を向上しています。

f:id:wp-yamas:20170202122808p:plain

これで属人化は大きく解消できたと思います。

Mac Pro の導入

これまでビルドサーバには以下の構成のMac miniを使用していました。

Mac mini (Late 2014)
2.6 GHz Intel Core i5
16 GB 1600 MHz DDR3
Intel Iris 1536 MB
1TB HDD

そしてビルドに要していた時間がこちらです。 おおよそ1時間かかっていました。

Mac mini
    iOS … 61分41秒
    Android … 52分01秒

そのため期限が迫っているときのビルドはちょっとしたバグやオペレーションミスが命取りでした。 ビルド時間は細かい改善箇所はあれど、マシンスペックによる要因がとにかく大きいと判断したため、ここは一旦スペックの高いMac Proの導入で改善しました。

Mac Pro (Late 2013)
2.7 GHz 12-Core Intel Xeon E5
64 GB 1866 MHz DDR3
AMD FirePro D500 3072 MB
1TB SSD

6コアモデルのMac ProからCPU、RAM、SSDをそれぞれアップグレードしています。 そして実際に同じビルドを走らせた結果がこちらです。

Mac Pro
    iOS … 61分41秒 → 13分55秒
    Android … 52分01秒 → 10分52秒

ビルド時間が大きく短縮されました。

特にiOSのXcodeビルドは、IDEBuildOperationMaxNumberOfConcurrentCompileTasksオプションの指定をすることにより、並列処理する数を上げており、12コアCPUのパフォーマンスをより発揮できるようになります。

xcodebuild archive \
       CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" \
       PROVISIONING_PROFILE="${PROVISIONING_PROFILE}" \
       -scheme Unity-iPhone \
       -archivePath Project.xcarchive \
       -IDEBuildOperationMaxNumberOfConcurrentCompileTasks=12

まとめ

今回はJenkinsとMac Proの導入によりビルド環境の改善を行いましたが、開発環境の問題は他にもまだまだ存在しています。 日々の改善でよりよい開発環境を実現したいと思います。