モバイルプラットフォーム

ビルド自動化のおはなし
2014.07.31 (Thu) / Unity 勉強会 vol.23
株式会社キッズスター
システムデベロプメントチーム リーダー
森 哲哉
こんばんは!
毎度お馴染み (?)

もんりぃです。
エンジニアとは
「傲慢」
「短気」
「怠惰」
(順不同)
である。
と、いうわけで
「怠惰」に関する
おはなしです。
おしながき
おしながき
• 自己紹介
• 前置き
• ビルド自動化の概要
• ビルド自動化の詳細
• ビルド自動化のデモ (時間余れば)
自己紹介
$ whoami
• 森 哲哉 と申します。
• a.k.a: もんりぃ / T: @monry / F: monry84
• 29歳 / ♂ / O型 / 天 座 / 既婚
• 趣味は「お酒」と「合唱」です。
$ whoami
• 大学を (自主的に) 卒業後、ベンチャーを転々。
• Web のフロントエンド、サーバサイドが得意。
• ようやく Unity 歴 1 年チョイになりました。
• AWS とキャッキャウフフするのも好きです。
• 何故か社内インフラも やらされ… やってます。
• 近頃は Backbone.js (と CoffeeScript と SASS) と戯れてます。
$ jobs
• 株式会社キッズスター って会社で働いてます。
• 未就学児∼小学生のお子さまをお持ちの

ファミリーをターゲットにした、知育/教育に

関わるアプリ・サービスを展開しております。
• お陰様で EdTech な知育分野に於いて

No.1 規模で展開しております!(当社調べw)
$ ls -la apps/
森のえほん館 なりきり!!
ごっこランド
パズル&テイルズ

おかしのくにを
つくるのじゃ!!
なりきり!!
アイスクリーム
屋さんごっこ
なりきり!!
ママごっこ
お弁当をつくろう!
こえほん おかしの家を
つくろう!
ハンバーガー
やさんごっこ
飛行機を
組み立てよう!
i18n i18n
i18n i18n
Work in
Progress
前置き
環境
• Unity: 4.3.4f1
• Platform: iOS, Android
• Development: Mac, Windows
• Dimension: (主に) 2D
• Language: C#
環境
• Homebrew (じゃなくても良いけど)
• Xcode / Command Line Tools
• gradle (brew install gradle)
• DeployGate (optional)
• ChatWork (optional)
本題
おおまかな流れ
• Unity からプロジェクト出力
• コマンドラインからビルド・パッケージング
• (任意) 何らかのデプロイサービスに配信
• (任意) 何らかの手段で配信結果を関係者に通知
Export Project
• 素直に Unity の機能使う
• が、標準のビルドウィンドウは使わない
• 例えば弊社の場合: →
Export Project
• 各種設定値とかを事前チェックしたい
• 理想とする出力形式に調整し易い
• APK にはせずに Android Studio 出力とか
• ビルド後に Finder 開くのがウザい
• Keystore Password 入れるのがダルい
Export Project
• UnityEditor.BuildPipeline.BuildPlayer()
• Scene ファイルパスの配列
• 出力先のパス
• ビルド対象プラットフォーム
• 何かオプション (ないなら BuildOption.None でおk)
BuildPipeline.BuildPlayer(

new string[] {

"path/to/scene1",

"path/to/scene2",

// ...

},

"path/to/output",

BuildTarget.Android,

BuildOptions.Development | BuildOptions.AcceptExternalModificationsToPlayer

);
Export Project
• Xcode / Android Studio 出力するには

BuildOptions.AcceptExternalModificationsToPlayer
• Development Build にするには

BuildOptions.Development
• その他色々あるけど、詳しくはマニュアル参照
Export Project
• あと、あまりオススメできないけど、

Keystore Password もコードから指定可能
PlayerSettings.Android.keystoreName = "path/to/keystore";

PlayerSettings.Android.keystorePass = "hogehoge";

PlayerSettings.Android.keyaliasName = "fugafuga";

PlayerSettings.Android.keyaliasPass = "piyopiyo";
Build / Packaging
• 本日のメインディッシュ
• 出力完了後に実行する必要あり
• Jenkins / grunt / maven / etc…
• PostProcessBuild でも実行可能
• PPB にするとプログレスバーとか制御し易い
• PostProcessBuild についてはコチラ (ステマ)
Build / Packaging

(iOS)
• 使うコマンドは xcodebuild, xcrun の二つ
• CLT 入れてたら /usr/bin の下に居るハズ
• xcodebuild	
  でビルドしてから、

xcrun で .ipa ファイル (AdHoc ビルド)

の生成を行う
Build / Packaging
(iOS / xcodebuild)
• xcodebuild コマンドの引数は以下のような感じ

(環境依存あるかもね。)
-project "path/to/Unity-iPhone.xcodeproj" !
-sdk iphoneos !
-target "Unity-iPhone" !
-configuration Release !
clean build !
CODE_SIGN_IDENTITY="iPhone Distribution" !
PROVISIONING_PROFILE="$ProvisioningProfileID$"
Build / Packaging
(iOS / xcrun)
• xcrun コマンドの引数は以下のような感じ
-sdk iphoneos !
PackageApplication "path/to/built.app" !
-o "path/to/output.ipa" !
--embed "$ProvisioningProfileID$.mobileprovision"
Build/Packaging
(Android)
• 使うコマンドは gradle だけ!
• 出力先ディレクトリ直下に build.gradle などを

配置しておく必要あり
• この辺も頑張って PostProcessBuild で配置
すると幸せになれる
• ぶっちゃけ一筋縄ではいかない (いかなかった)
Build/Packaging
(Android / gradle)
• build.gradle はこんな感じ
• 多少 Gradle (てか Groovy) の知識必要かも
• unity-classes.jar をローカルの Maven リポジトリに食わ
せる必要があったり
• 特に Facebook SDK for Unity 使う場合、たぶん必須
• gradle.properties が必要だったり
• 色々面倒ですw
そろそろ疲れて

きたでしょ?
もうちょっとだけ
続くんじゃ。
Deployment
• 折角ビルドしたモノは検証しないとね!
• ちょっと前だったら TestFlight が有力だった
• Android が使えなくなっちゃいました(́・ω・`)
• 今は DeployGate かな?
• Crashlytics とかもありますね。
Deployment
• まぁ、好きなの使えば良いんじゃね?
• ウチでは DeployGate 使ってます。
• コマンドラインツールがシンプルで良い。
dgate push path/to/apk!
dgate push path/to/ipa
Deployment
• 選定ポイントとしては…
• iOS / Android 両対応
• Provisioning 周りを巧いコトやってくれる
• 配布ページとかも生成できると尚良し
• 受託とかやってる場合、お客さんに

直接インストールしてもらえれば楽かも?
Announcement
• 最後は「お知らせ」
• ウチでは ChatWork にビルド結果通知専用

のルームを作って、そこに結果を通知してます
• これも PostProcessBuild で頑張ってる
• ChatWork API をキックするライブラリは

割と巧く書けてるから、AssetStore とかで

販売してみようかしらw
Announcement
• まぁ、伝われば何でも良いと思うので

「メール」「APNs/GCM」「口頭」

「伝書鳩」「矢文」「テレパシー」etc…

を駆使して伝えるべき人に伝えましょう。
• 伝える内容としては、「アプリ名」「バージョン」
「ビルド種別 (Dev?Prod?)」辺りは

最低限必要かな?
Demo
Any Questions ?
Thank you for

your attention !

Unity に於けるモバイルプラットフォーム向けビルド自動化のおはなし