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

5,208 views

Published on

2014年07月31日に行われた「第23回 Unity 勉強会」にて発表した資料です。

Published in: Engineering

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

  1. 1. モバイルプラットフォーム
 ビルド自動化のおはなし 2014.07.31 (Thu) / Unity 勉強会 vol.23 株式会社キッズスター システムデベロプメントチーム リーダー 森 哲哉
  2. 2. こんばんは!
  3. 3. 毎度お馴染み (?)
 もんりぃです。
  4. 4. エンジニアとは
  5. 5. 「傲慢」 「短気」 「怠惰」 (順不同)
  6. 6. である。
  7. 7. と、いうわけで 「怠惰」に関する おはなしです。
  8. 8. おしながき
  9. 9. おしながき • 自己紹介 • 前置き • ビルド自動化の概要 • ビルド自動化の詳細 • ビルド自動化のデモ (時間余れば)
  10. 10. 自己紹介
  11. 11. $ whoami • 森 哲哉 と申します。 • a.k.a: もんりぃ / T: @monry / F: monry84 • 29歳 / ♂ / O型 / 天 座 / 既婚 • 趣味は「お酒」と「合唱」です。
  12. 12. $ whoami • 大学を (自主的に) 卒業後、ベンチャーを転々。 • Web のフロントエンド、サーバサイドが得意。 • ようやく Unity 歴 1 年チョイになりました。 • AWS とキャッキャウフフするのも好きです。 • 何故か社内インフラも やらされ… やってます。 • 近頃は Backbone.js (と CoffeeScript と SASS) と戯れてます。
  13. 13. $ jobs • 株式会社キッズスター って会社で働いてます。 • 未就学児∼小学生のお子さまをお持ちの
 ファミリーをターゲットにした、知育/教育に
 関わるアプリ・サービスを展開しております。 • お陰様で EdTech な知育分野に於いて
 No.1 規模で展開しております!(当社調べw)
  14. 14. $ ls -la apps/ 森のえほん館 なりきり!! ごっこランド パズル&テイルズ
 おかしのくにを つくるのじゃ!! なりきり!! アイスクリーム 屋さんごっこ なりきり!! ママごっこ お弁当をつくろう! こえほん おかしの家を つくろう! ハンバーガー やさんごっこ 飛行機を 組み立てよう! i18n i18n i18n i18n Work in Progress
  15. 15. 前置き
  16. 16. 環境 • Unity: 4.3.4f1 • Platform: iOS, Android • Development: Mac, Windows • Dimension: (主に) 2D • Language: C#
  17. 17. 環境 • Homebrew (じゃなくても良いけど) • Xcode / Command Line Tools • gradle (brew install gradle) • DeployGate (optional) • ChatWork (optional)
  18. 18. 本題
  19. 19. おおまかな流れ • Unity からプロジェクト出力 • コマンドラインからビルド・パッケージング • (任意) 何らかのデプロイサービスに配信 • (任意) 何らかの手段で配信結果を関係者に通知
  20. 20. Export Project • 素直に Unity の機能使う • が、標準のビルドウィンドウは使わない • 例えば弊社の場合: →
  21. 21. Export Project • 各種設定値とかを事前チェックしたい • 理想とする出力形式に調整し易い • APK にはせずに Android Studio 出力とか • ビルド後に Finder 開くのがウザい • Keystore Password 入れるのがダルい
  22. 22. 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
 );
  23. 23. Export Project • Xcode / Android Studio 出力するには
 BuildOptions.AcceptExternalModificationsToPlayer • Development Build にするには
 BuildOptions.Development • その他色々あるけど、詳しくはマニュアル参照
  24. 24. Export Project • あと、あまりオススメできないけど、
 Keystore Password もコードから指定可能 PlayerSettings.Android.keystoreName = "path/to/keystore";
 PlayerSettings.Android.keystorePass = "hogehoge";
 PlayerSettings.Android.keyaliasName = "fugafuga";
 PlayerSettings.Android.keyaliasPass = "piyopiyo";
  25. 25. Build / Packaging • 本日のメインディッシュ • 出力完了後に実行する必要あり • Jenkins / grunt / maven / etc… • PostProcessBuild でも実行可能 • PPB にするとプログレスバーとか制御し易い • PostProcessBuild についてはコチラ (ステマ)
  26. 26. Build / Packaging
 (iOS) • 使うコマンドは xcodebuild, xcrun の二つ • CLT 入れてたら /usr/bin の下に居るハズ • xcodebuild  でビルドしてから、
 xcrun で .ipa ファイル (AdHoc ビルド)
 の生成を行う
  27. 27. 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$"
  28. 28. Build / Packaging (iOS / xcrun) • xcrun コマンドの引数は以下のような感じ -sdk iphoneos ! PackageApplication "path/to/built.app" ! -o "path/to/output.ipa" ! --embed "$ProvisioningProfileID$.mobileprovision"
  29. 29. Build/Packaging (Android) • 使うコマンドは gradle だけ! • 出力先ディレクトリ直下に build.gradle などを
 配置しておく必要あり • この辺も頑張って PostProcessBuild で配置 すると幸せになれる • ぶっちゃけ一筋縄ではいかない (いかなかった)
  30. 30. Build/Packaging (Android / gradle) • build.gradle はこんな感じ • 多少 Gradle (てか Groovy) の知識必要かも • unity-classes.jar をローカルの Maven リポジトリに食わ せる必要があったり • 特に Facebook SDK for Unity 使う場合、たぶん必須 • gradle.properties が必要だったり • 色々面倒ですw
  31. 31. そろそろ疲れて
 きたでしょ?
  32. 32. もうちょっとだけ 続くんじゃ。
  33. 33. Deployment • 折角ビルドしたモノは検証しないとね! • ちょっと前だったら TestFlight が有力だった • Android が使えなくなっちゃいました(́・ω・`) • 今は DeployGate かな? • Crashlytics とかもありますね。
  34. 34. Deployment • まぁ、好きなの使えば良いんじゃね? • ウチでは DeployGate 使ってます。 • コマンドラインツールがシンプルで良い。 dgate push path/to/apk! dgate push path/to/ipa
  35. 35. Deployment • 選定ポイントとしては… • iOS / Android 両対応 • Provisioning 周りを巧いコトやってくれる • 配布ページとかも生成できると尚良し • 受託とかやってる場合、お客さんに
 直接インストールしてもらえれば楽かも?
  36. 36. Announcement • 最後は「お知らせ」 • ウチでは ChatWork にビルド結果通知専用
 のルームを作って、そこに結果を通知してます • これも PostProcessBuild で頑張ってる • ChatWork API をキックするライブラリは
 割と巧く書けてるから、AssetStore とかで
 販売してみようかしらw
  37. 37. Announcement • まぁ、伝われば何でも良いと思うので
 「メール」「APNs/GCM」「口頭」
 「伝書鳩」「矢文」「テレパシー」etc…
 を駆使して伝えるべき人に伝えましょう。 • 伝える内容としては、「アプリ名」「バージョン」 「ビルド種別 (Dev?Prod?)」辺りは
 最低限必要かな?
  38. 38. Demo
  39. 39. Any Questions ?
  40. 40. Thank you for
 your attention !

×