Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
2017年の
iOSアプリ開発におけるCI事情
2017/09/17(Sun) @ iOSDC JAPAN 2017
平田敏之(@tarappo)
自己紹介
平田 敏之@DeNA / SWET (Software Engineer in Test)
ミッション
DeNAサービス全般の品質向上
DeNAエンジニアの開発生産性向上
私がやっていること(の一部)
クライアントアプリ周りのテスト戦...
(時間的に)本発表で話さないこと
興味がある項目があれば別の機会で是非
• CIについての話
• CIの導入タイミング
• CIの導入を妨げるもの
• プロセスをCIに乗せるための手順
• CIで誤解されやすいこと
• CIでやること(の例)
...
本発表で話すこと
(5分)
• CIとは?
• CIの価値
• iOSアプリ開発で使えるCI
• 各CIの比較
• 選定例
CIとは?
CI(continuous integration):継続的インテグレーション
• ビルドを継続的に行いフィードバックを早期に受け取るための仕組み
• ビルド:アプリのビルド、自動テスト、インスペクション、ドキュメント生成 etc
...
CIの価値(の一部)
• リスクの軽減
• 問題の早期発見につながる
• 自分の環境以外で動かすことで開発環境についての思い込みを減らせる
• 開発者の生産性を向上
• 繰り返しの多い手作業の削減による労力の節約
• その結果、より思考力を必要...
iOSアプリ開発で使えるCI
iOSアプリ開発における代表的なCIサービス
• Jenkins(オンプレミス)
• ※最近はJenkins以外も色々あります※
• Bitrise
• CircleCI 1.0
• Travis CI
• NEV...
各CIの特徴
Bitrise CircleCI 1.0 Travis CI NEVERCODE buddybuild Jenkins
FREEプラン o x x OSSならFree o o -
お試し期間 x
2 weeks
$249/moのプ...
選定をするにあたって
• 利用するCIサービスは1つじゃないとダメというわけではない
• 用途に応じて使い分けるのも1つの手です
• 最近のクラウドCIサービスは(簡単に)出来ることが増えている
• アプリバージョンのインクリメントやiTune...
選定例
• OSS
• Travis CI(無料) / CircleCI(割引有)
• 個人:アプリ
• Bitrise / NEVERCODE / buddybuild (free plan) / Jenkins(オンプレミス)
• 会社:ア...
おわり
素敵なCIライフを
WE’RE HIRING!
おまけ資料
(時間的に)本発表で話さなかったこと
• CIについての話
• CIの導入タイミング
• CIの導入を妨げるもの
• プロセスをCIに乗せるための手順
• CIで誤解されやすいこと
• CIでやること(の例)
• CIの比較
• 料金による比較
CIの導入タイミング
• (出来れば)プロジェクトの初期から導入
• 後半になってくると導入コストが初期に比べ高くなってしまう
• 初期以外のタイミングでの導入の場合
• ※人は変化に抵抗する傾向がある※
• 小規模に導入し、徐々に機能を追加し...
CIの導入を妨げるもの
よくある不安・疑問
• 「費用、維持コストが高いのでは?」
• 人にかけているコスト(等)に比べたら安い
• アプリのビルドなどにより奪われた時間などを計測すると良い
• 「これまでのやり方が変わるのではないか?」
• ...
プロセスをCIに乗せるための手順
• (1) 特定:自動化を必要とするプロセスを特定
• 何度も動かす意味のあるもの
• (2) ビルド:スクリプトを作成する
• 便利なライブラリがあることが多い
• (3) 共有:バージョン管理システムで誰も...
誤解されやすいこと
• 開発者が1人ならCIを利用する必要はない
• 1人でもメリットがあります(仕事を任せられるパートナーになります)
• Jenkinsを使ったらJenkinsおじさんが生まれてしまう
• (場合によっては)他のCIサービス...
CIでやること(の例)
• アプリのビルド
• インスペクション
• ドキュメント生成
• アプリの配布(DeployGate / TestFlight etc)
• アプリの自動テスト
• 単体テスト
• UIテスト
• 新バージョンでのテス...
各CIの特徴
Bitrise CircleCI Travis CI NEVERCODE buddybuild Jenkins
ビルド時間(平均)
試行回数: 7
82.9 sec 77.43 sec 137.43 sec 102.43 sec ...
料金による比較
(4) (5) (1) (2) (4) (1) (1) (3) (4) (1) (5)
値段($/月) 0 0 0 39 43 45 45 69 71 90 114
並列数 1 1 1 2 1 1 2 1 1 3 1
ビルド上限...
Upcoming SlideShare
Loading in …5
×

2017年のiOSアプリ開発におけるCI事情

4,863 views

Published on

iOSDC JAPAN 2017 9/17(日)のLT枠(5分)での発表資料

Published in: Technology
  • Be the first to comment

2017年のiOSアプリ開発におけるCI事情

  1. 1. 2017年の iOSアプリ開発におけるCI事情 2017/09/17(Sun) @ iOSDC JAPAN 2017 平田敏之(@tarappo)
  2. 2. 自己紹介 平田 敏之@DeNA / SWET (Software Engineer in Test) ミッション DeNAサービス全般の品質向上 DeNAエンジニアの開発生産性向上 私がやっていること(の一部) クライアントアプリ周りのテスト戦略、自動テストの開発 CI/CD環境整備 テスト基盤環境の開発(マスティフ、ダルメシアン etc) iOS / Android Test Night 主宰
  3. 3. (時間的に)本発表で話さないこと 興味がある項目があれば別の機会で是非 • CIについての話 • CIの導入タイミング • CIの導入を妨げるもの • プロセスをCIに乗せるための手順 • CIで誤解されやすいこと • CIでやること(の例) • CIの比較 • 料金による比較
  4. 4. 本発表で話すこと (5分) • CIとは? • CIの価値 • iOSアプリ開発で使えるCI • 各CIの比較 • 選定例
  5. 5. CIとは? CI(continuous integration):継続的インテグレーション • ビルドを継続的に行いフィードバックを早期に受け取るための仕組み • ビルド:アプリのビルド、自動テスト、インスペクション、ドキュメント生成 etc • 継続的:(基本的には)コードに変更が加わった時点で常に実行 • フィードバック:ビルドの成功、失敗(なにで失敗したか)、ビルドにかかった時間 etc • CIサービスで情報を見せるか、それ以外で見せるか • フィードバックを元に改善していくのが大事 • 早期:(出来れば)10分以内にフィードバックを受け取るのが良い
  6. 6. CIの価値(の一部) • リスクの軽減 • 問題の早期発見につながる • 自分の環境以外で動かすことで開発環境についての思い込みを減らせる • 開発者の生産性を向上 • 繰り返しの多い手作業の削減による労力の節約 • その結果、より思考力を必要とする仕事に時間をさける • プロジェクトの見える化 • ソフトウェアの状態が見えるため何かが起きたときに気づきやすい • プロダクトへの自信 • 常にCIが動いていれば、プロダクトに対する安心をえられ、それが自信につながる これらにより高頻度リリースを支えてくれる
  7. 7. iOSアプリ開発で使えるCI iOSアプリ開発における代表的なCIサービス • Jenkins(オンプレミス) • ※最近はJenkins以外も色々あります※ • Bitrise • CircleCI 1.0 • Travis CI • NEVERCODE • buddybuild https://github.com/tarappo/ci-sample-ios
  8. 8. 各CIの特徴 Bitrise CircleCI 1.0 Travis CI NEVERCODE buddybuild Jenkins FREEプラン o x x OSSならFree o o - お試し期間 x 2 weeks $249/moのプラン 100ビルドまで 14 days 全機能利用可能 21 days プランはどれでもOK - 割引等 BitriseのOSSツール に貢献すると割引有 OSSの場合 割引有 OSSの場合 無料 ビルドフロー workflow circle.yml CircleCI 2.0 まであと.. .travis.yml workflowは $265/mo以上 のプラン buddybuild_postclone.sh buddybuild_prebuild.sh buddybuild_postbuild.sh 色々有 Jenkinsfile / .travis.yml / シェルスクリプト etc SIGNING周り web サポートツール有り web スクリプト web web plugin スクリプト その他 ビルド上限時間/回 ビルド上限時間/月 crash report SDK 自由
  9. 9. 選定をするにあたって • 利用するCIサービスは1つじゃないとダメというわけではない • 用途に応じて使い分けるのも1つの手です • 最近のクラウドCIサービスは(簡単に)出来ることが増えている • アプリバージョンのインクリメントやiTunesConnectへのアプリのアップロードなどなど • 「複雑なこと」「細かいこと」をやろうとするとJenkins(オンプレミス)が良い事が多い • 何でも出来るが…
  10. 10. 選定例 • OSS • Travis CI(無料) / CircleCI(割引有) • 個人:アプリ • Bitrise / NEVERCODE / buddybuild (free plan) / Jenkins(オンプレミス) • 会社:アプリ (導入するプロジェクト次第) • プロジェクトの規模 / メンバー数 / CIの導入状況 / CIに対する慣れ / やりたいこと etc • 一度、お試し期間(or free plan)で触ってみるのが良い • ※お試し期間中はfree planより良いplanになる点に注意※
  11. 11. おわり 素敵なCIライフを WE’RE HIRING!
  12. 12. おまけ資料
  13. 13. (時間的に)本発表で話さなかったこと • CIについての話 • CIの導入タイミング • CIの導入を妨げるもの • プロセスをCIに乗せるための手順 • CIで誤解されやすいこと • CIでやること(の例) • CIの比較 • 料金による比較
  14. 14. CIの導入タイミング • (出来れば)プロジェクトの初期から導入 • 後半になってくると導入コストが初期に比べ高くなってしまう • 初期以外のタイミングでの導入の場合 • ※人は変化に抵抗する傾向がある※ • 小規模に導入し、徐々に機能を追加していくのが良い • まずは小さく小さく • 「やること」:アプリのビルド • 「動くタイミング」:1日1回niglty単位(など)
  15. 15. CIの導入を妨げるもの よくある不安・疑問 • 「費用、維持コストが高いのでは?」 • 人にかけているコスト(等)に比べたら安い • アプリのビルドなどにより奪われた時間などを計測すると良い • 「これまでのやり方が変わるのではないか?」 • 本来はプロセスなどはより良い姿に変えていくべきであるが、変えることに不安があるのは普通 • がらりと変えずに少しずつ導入するのが良い • 「ビルドエラーがたくさん出てしまうのではないか?」 • 手作業であっても(フィードバックが遅い状態で)同等の結果になる • 「開発者がやるのと違いがないのではないか?」 • より効率良く、より確実に、専用の環境を使って実行している • 新たなメンバーが加わったときにも効果を発揮する
  16. 16. プロセスをCIに乗せるための手順 • (1) 特定:自動化を必要とするプロセスを特定 • 何度も動かす意味のあるもの • (2) ビルド:スクリプトを作成する • 便利なライブラリがあることが多い • (3) 共有:バージョン管理システムで誰もが使えるようにする • 特定の個人またはCI環境でのみ動くという状況にはしない • (4) 継続化:CI環境で動くようにする
  17. 17. 誤解されやすいこと • 開発者が1人ならCIを利用する必要はない • 1人でもメリットがあります(仕事を任せられるパートナーになります) • Jenkinsを使ったらJenkinsおじさんが生まれてしまう • (場合によっては)他のCIサービスでも生まれます • iOS / Android / Webと全て同じCIを使ったほうが良い • (やりたいこと次第ですが)使うCIを縛られるよりもあったものを利用するのが良いです
  18. 18. CIでやること(の例) • アプリのビルド • インスペクション • ドキュメント生成 • アプリの配布(DeployGate / TestFlight etc) • アプリの自動テスト • 単体テスト • UIテスト • 新バージョンでのテスト • 旧バージョンでのテスト • iTunesConnectのデータ更新 • アプリを審査に出す デバイスファーム UIテストの高速化
  19. 19. 各CIの特徴 Bitrise CircleCI Travis CI NEVERCODE buddybuild Jenkins ビルド時間(平均) 試行回数: 7 82.9 sec 77.43 sec 137.43 sec 102.43 sec 127.00 sec マシンスペック依存 上記のプラン Freeプラン お試し期間 $249/moと同じ Free(OSS) Freeプラン Freeプラン - FREEプラン o x x OSSならFree o o - お試し期間 x 2 weeks 100ビルドまで 14 days 21 days - Free(or お試し期間含)で出来るプランの場合 (注)実行開始してからの時間
  20. 20. 料金による比較 (4) (5) (1) (2) (4) (1) (1) (3) (4) (1) (5) 値段($/月) 0 0 0 39 43 45 45 69 71 90 114 並列数 1 1 1 2 1 1 2 1 1 3 1 ビルド上限時間 /回 - 20 10 - - 45 60 - - 75 - ビルド上限時間 /月 - - - 500 - - - - - - - (1)Bitrise (2)CircleCI (3)Travis CI (4)NEVERCODE (5)buddybuild ※注意※ 各サイトに記載されている料金を元に一覧を作っています(カスタムプランや並列数を増やした時の料金は出していません) 年間払いがある場合は年間払いの金額を記載しています (2) (3) (4) (5) (2) (3) (4) (5) (2) (3) (4) (5) 値段($/月) 129 129 149 245 249 249 263 429 449 489 571 1,037 並列数 5 2 3 3 7 5 6 5 12 10 11 10 ビルド上限時 間/回 - - - - - - - - - - - - ビルド上限時 間/月 1,800 - - - 5,000 - - - 25,000 - - - ビルド回数 200回/月

×