iOSアプリケーションの継続的デリバリー

7,255 views

Published on

2014/2/14に目黒雅叙園で行われたデブサミ2014の資料です
【14-D-5】
iOSアプリケーションの継続的デリバリー ~エンタープライズ品質のiOSアプリケーションを目指して~
http://event.shoeisha.jp/devsumi/20140213/session/430/

Published in: Technology

iOSアプリケーションの継続的デリバリー

  1. 1. iOSアプリケーションの 継続的デリバリー 〜エンタープライズ品質のiOSアプリケーションを目指して〜 梅原 直樹 Naoki UMEHARA 14/2/2014 Developers Summit 2014 [14-D-5]
  2. 2. 僕たちは 価値のあるソフトウェアを 早く継続的にデリバリーし お客様を満足させなくては ならない
  3. 3. 梅原 直樹 うめはら なおき Twitter:@numeha http://numeha.hatenablog.com/ #devsumiD
  4. 4. Developers Summit 2013 http://www.slideshare.net/numeha/ricoh-ucs-for-ipad
  5. 5. ACTION!
  6. 6. 一年間ネタを探しながら一生懸命働く http://www.flickr.com/photos/davefayram/5909547615
  7. 7. http://event.shoeisha.jp/devsumi
  8. 8. ß http://event.shoeisha.jp/devsumi
  9. 9. 株式会社 リコー
  10. 10. 新規事業を生み出すために クラウド関連とiOS関連の ソフトウェア開発を しています
  11. 11. よろしくお願いします
  12. 12. STORY!
  13. 13. 2012年6月 とあるiOS開発プロジェクトL に立候補 俺に任せろ
  14. 14. iOSの開発経験がない (利用経験もない。むしろAndroid派) そもそもチームがいない 仕様もない なぜかそこに納期 だけがあった http://free-pictograms.com/14-life/261-life.html
  15. 15. プレイングマネージャとして 活動した約1年半 何からどうやれば http://free-pictograms.com/14-life/261-life.html
  16. 16. STORY! 1. Background UCS & iOS & Enterprise 2. Practice 価値のあるソフトウェアを作るチーム形成 継続的デリバリーの取り組み 実機を利用した自動テストのテクニック
  17. 17. RICOH UCS (Unified Communication System) 2011年8月22日 ビデオ会議市場に新規参入
  18. 18. 簡単さ・使いやすさを追求した 少人数(約5名)向けの ポータブル型のビデオ会議システム P3000 http://www.ricoh.co.jp/ucs
  19. 19. 各拠点間 新たなビジネス・コミュニケーション を提供するiOSプロジェクト
  20. 20. 当日はムービーを流しました
  21. 21. iPhone版 (2013/9/10 Release) iPad版 iPad版 (2013/1/31 Release) http://www.apple.com/ipad-mini/overview/
  22. 22. iOSアプリにとって クラウドはなくてはならない存在 クラウド ♥ クラウドをどう作る/使うのか どこにビジネス価値を与えるのか
  23. 23. (M)BaaS等によりクラウド利用が身近に http://www.kinvey.com/backend-as-a-service
  24. 24. ビジネスに直結したコミュニケーション手段 お客様のビジネスを止めるようなことはあってはならない クラウド ♥ 品質を追求することによるビジネス価値
  25. 25. それはお客様のビジネスに なくてはならないものに なっているか このような状態に早く出来るのか。そしてその状態を維持できるのか
  26. 26. iOSアプリケーションの 継続的デリバリー 〜エンタープライズ品質のiOSアプリケーションを目指して〜
  27. 27. 僕たちは 価値のあるソフトウェアを 早く継続的にデリバリーし お客様を満足させなくては ならない
  28. 28. 僕たちは 価値のあるソフトウェアを 早く継続的にデリバリーし お客様を満足させなくては ならない
  29. 29. ソフトウェアは、価値がある限り 開発し続けなければならない http://www.flickr.com/photos/seanhobson/4272482225
  30. 30. 価値のあるソフトウェアは 人間しか作れない/わからない
  31. 31. 価値を生み出せる チーム(ワーク)が価値である
  32. 32. Team Leader Test Engineer Developer Test EngineerとDeveloperは別の職業 製品の品質について責任を持つ 製品価値を考えながら、 コードの品質について責任を持つ 製品価値の高いものから開発する 受け入れテストを自動化する
  33. 33. 役割は違うけれども向いているゴールは同じ Test Engineer 協力する Developer 価値のある ソフトウェア
  34. 34. 価値のあるソフトウェアを開発するパイプライン Feature 概要 Test Engineer 設計 Developer Feature シナリオ/ ステップ 受け入れ テスト 実装 開発者 テスト
  35. 35. 価値のある ソフトウェアを考える Feature 概要 Test Engineer 設計 Developer Feature シナリオ/ ステップ 受け入れ テスト 実装 開発者 テスト
  36. 36. 僕たちは 最小限の機能で市場価値 を生み出せるのか いまやるべきなのか後でもいいのかを意識する
  37. 37. MMF Minimum Marketable Feature
  38. 38. お客様に提供する 価値の優先度 Feature 1 Feature 2 Feature 3 Feature 4 Feature 5 Feature 6 Feature 7 Feature 8 これが MMF これだけで市場価値を生むことが出来るのか
  39. 39. RICOH UCS for iOSのMMF モバイルユーザとして、 開催中のP3000 の会議に途中参加して 映像と音声で相手とコミュニケーションしたい、 それは会議の開催場所でなくても参加したいからだ 最初に書いたラフスケッチ
  40. 40. お客様に聞いて価値を確かめる
  41. 41. お客様に提供する 価値の優先度 Feature 1 Feature 2 Feature 3 Feature 4 ここでダメならそこで終了 > 実装の優先度 Feature 5 Feature 6 Feature 7 Feature 8 どこで 1st release するかはビジネス判断
  42. 42. 小さく設計して 小さく実装することで 手戻りを最小化する
  43. 43. 大きく育てる
  44. 44. Feature 概要 Test Engineer 設計 Developer Feature シナリオ/ ステップ 受け入れ テスト 実装 開発者 テスト
  45. 45. テストをしながら仕様を決める Feature 概要 Test Engineer Feature シナリオ/ ステップ お客様に価値を与える シナリオを自然言語で作る 設計 Developer 実装 受け入れ テスト 実機で動くテスト コードを書く 開発者 テスト
  46. 46. Feature Feature 受け入れ シナリオ/ 概要 テスト 1つのFeatureを実現 ステップ 受け入れテストでは実現でき Test Engineer ない内部ロジックのテスト する実装をする 設計 実装 開発者 テスト Developer Featureを確認しながら実装する
  47. 47. 例 Feature シナリオ/ ステップ Background: Given the following contacts exist: | device | another_device | subscription | ask | ios1 | ios2 | both | | And "ios1" go to contactlist view And "ios2" go to contactlist view | iOS1とiOS2の 2台のデバイスが コンタクトリスト画面 にいる お客様への価値を自然言語で確認でき 自動で動くコードにもなる Scenario: "ios1" can join conference iOS3のデバイスが Given "ios3" go to contactlist view コンタクトリスト画面 And the following accounts start conference: にいて | device | iOS2とiOS3が会議を | ios2 | 始める | ios3 | Then "ios1" should see the presence of "meeting" within row of "ios2" iOS1からiOS2は When "ios1" touch the row of "ios2" 会議中にみえ Then "ios1" should be on video view iOS1がiOS2をタッチす And "ios1" should see 3 participants ると会議に参加する And "ios1" should not see the private meeting image
  48. 48. 当日はムービーを流しました
  49. 49. Feature 概要 Test Engineer Feature シナリオ/ ステップ 受け入れ テスト 仕様/テスト/実装を平行して行うことで 正しい製品・コードに近づく 設計 Developer 実装 開発者 テスト
  50. 50. 1つのFeature開発が終わった時に リリース可能な状態になる
  51. 51. 僕たちは 価値のあるソフトウェアを 早く継続的にデリバリーし お客様を満足させなくては ならない
  52. 52. 僕たちは 価値のあるソフトウェアを 早く継続的にデリバリーし お客様を満足させなくては ならない
  53. 53. ソフトウェアは、価値がある限り 開発し続けなければならない http://www.flickr.com/photos/seanhobson/4272482225
  54. 54. 継続的改善で 1secでも早く
  55. 55. iOSアプリはどのくらいの スピードでリリース可能なのか
  56. 56. iOS 最高でも 1ヶ月で約4回リリース XCode or Application Loader Cloud App Review Package Submit iTunes Connect 7days Ave: Install App Store 無限大にリリース可能 クラウド
  57. 57. (App Reviewのボトルネックはあるが) クラウドと同様に 継続的にデリバリーが可能な 仕組みを作らなければならない
  58. 58. RICOH UCS for iOSのリリース 2013年 1 2 3 ★ 1.0.0 ★ 1.0.1 4 ★ 1.1.0 5 6 ★ ★ 1.2.0 1.3.0 7 8 9 10 ★ ★ 1.5.0 2.0.0 ★ 1.1.1 ★ 2.1.0 11 12 ★ 2.2.0 ★ 2.0.1 (機能UP&不具合修正で) 1年間で12回のリリース ★ 2.3.0
  59. 59. これが多いか少ないかは 置いておいて リリースのリズムを作る http://www.flickr.com/photos/odolphie/2397582359
  60. 60. http://www.amazon.co.jp/gp/product/images/4048707876/ref=dp_image_text_0?ie=UTF8&n=465392&s=books
  61. 61. http://www.allaboutagile.com/7-reasons-why-continuous-delivery-needs-to-be-a-business-initiative/ ビジネスの主導権を得るために
  62. 62. ユーザを早期に獲得し 競争力あるプロダクトを早く実現する http://www.flickr.com/photos/56155476@N08/6660135637
  63. 63. リリースまでのパイプライン コードのコミットをしてからミスなく自動的に早くリリースしたい ビルド テスト デプロイ リリース 自動化 小さく繰り返す お客様に価値を継続的にデリバリーする唯一の方法
  64. 64. 徹底的に自動化する ( App申請だけは手動) http://cdn.morguefile.com/imageData/public/files/m/mconnors/preview/fldr_2003_06_18/file0002046882848.jpg
  65. 65. 継続的デリバリーするパイプライン 繰り返しやることは全て自動化する リリース ビルド デプロイ on Simulator 単体/結合 テスト コード品質のパイプライン 受け入れ ビルド デプロイ on iPhone/iPad 製品品質のパイプライン リリース 受け入れ テスト
  66. 66. リリース ビルド デプロイ on Simulator 単体/結合 テスト コード品質のパイプライン コードの内部状態を徹底的に可視化する 受け入れ ビルド デプロイ on iPhone/iPad 製品品質のパイプライン 受け入れ テスト リリース
  67. 67. ビルドを壊していないか。コードは健全なのか Installed Jenkins Plugins リリース ビルド 受け入れ ビルド 1. デプロイ -> Git コード取得 単体/結合 on 2. ビルド -> Xcode テスト 3.Simulator -> SLOCCount コード行数 4. 重複コード -> DRY 5. 警告 -> Warnings デプロイ on iPhone/iPad 製品品質のパイプライン 受け入れ テスト リリース
  68. 68. 書いたコードが正しくテストされているか リリース ビルド デプロイ on Simulator 単体/結合 テスト 1. テスト実行 (GHUnit) リリース > ios-sim launch xxx.app --family {$DEVICE} 2. カバレッジデプロイ 受け入れ > gcovr {$BUILD_DIR} ビルド cobertura plugin on iPhone/iPad 3. テスト集計 製品品質のパイプライン 受け入れ テスト
  69. 69. リリース ビルド デプロイ on Simulator 単体/結合 テスト 製品品質のパイプライン リリース 実機を利用した自動テストを重視する/徹底的に行う 受け入れ ビルド デプロイ on iPhone/iPad 受け入れ テスト
  70. 70. iOSアプリケーションの 受け入れ自動テストの テクニック
  71. 71. テストフレームワークを同梱してビルド リリース http ビルド デプロイ 単体/結合 Test Framework on テスト Simulator 操作 Application 受け入れ ビルド デプロイ on iPhone/iPad 受け入れ テスト リリース
  72. 72. 自動でipaファイル作成 複数のデバイスに自動でインストール リリース ビルド デプロイ ビルドサーバ 単体/結合 on fruitstrap テスト Simulator or instruments 受け入れ ビルド デプロイ on iPhone/iPad 受け入れ テスト リリース
  73. 73. リリース ビルド デプロイ on Simulator 単体/結合 テスト 実に奥が深い... リリース 受け入れ ビルド デプロイ on iPhone/iPad 受け入れ テスト
  74. 74. HTTPで外部から複数台のiOS端末を操作 Frank Frank Frank Application Application Application
  75. 75. しかしiOS7からTouch等の操作API禁止 Frank Frank Frank Application Application Application
  76. 76. iOS7は instruments経由 で操作 Test Framework Calabash iOS Frank Application iOS6はHTTP経由 ビルドマシン一台につきiOS一台しか操作できない...
  77. 77. Test Framework Calabash Test Framework Frank iOS Calabash Test Framework Frank iOS Calabash Frank iOS VM1 VM2 Application Application Application VMを複数動かし VM間でアプリ操作コマンドのやりとりを独自実装
  78. 78. iOS6でもiOS7でも 複数台のiOS端末の操作を実現!! Test Framework Calabash Frank iOS Test Framework Calabash Frank iOS Test Framework Calabash Frank iOS Application Application Application
  79. 79. デプロイ リリース on ビルド 異なるiOS Simulator 単体/結合 テスト 、異なる デバイス OS、 異なるネットワーク環境リリース で受け入れテストを常に実行 受け入れ ビルド デプロイ on iPhone/iPad 受け入れ テスト
  80. 80. 24時間365日、テストは走り続ける 〜ここまでやってエンタープライズ品質〜 デバイス iPad, iPhone, iPod Touch OS × iOS6, iOS7 ネットワーク 環境 × Proxy, Low Bandwidth, etc ※ お客様の様々なネットワーク環境を想定する
  81. 81. iPad iPhone iPod Touch iOS6 & 7 ビルドサーバ
  82. 82. 当日はムービーを流しました
  83. 83.  しかし、 テストはFeatureが増えるに つれて必ず遅くなる
  84. 84. 空き端末を探して、 テストを並列実行させる仕組みで高速化 増え続けるFeature テスト振り分けProxy
  85. 85. Calabash-iOS 0.9.162 October 27, 2013 -> 0.9.163 January 7, 2014 Fantastic Speedup!!!
  86. 86. 継続的改善で 1secでも早く
  87. 87. 僕たちは 価値のあるソフトウェアを 早く継続的にデリバリーし お客様を満足させなくては ならない
  88. 88. 価値のあるソフトウェアを開発するパイプライン Feature 概要 Test Engineer 設計 Developer Feature シナリオ/ ステップ 受け入れ テスト 実装 開発者 テスト
  89. 89. 継続的デリバリーするパイプライン 繰り返しやることは全て自動化する リリース ビルド デプロイ on Simulator 単体/結合 テスト コード品質のパイプライン 受け入れ ビルド デプロイ on iPhone/iPad 製品品質のパイプライン リリース 受け入れ テスト
  90. 90. Feature 概要 Test Engineer 設計 Feature シナリオ/ ステップ 実装 受け入れ テスト 価値のある ソフトウェアを 開発者 テスト Developer 早く継続的に デリバリー リリース ビルド デプロイ on Simulator 単体/結合 テスト リリース 受け入れ ビルド デプロイ on iPhone/ 受け入れ テスト
  91. 91. 僕たちははじめにリリースまでの パイプラインを作った http://www.flickr.com/photos/49547334@N02/4725090871
  92. 92. 2012 5 6 7 8 ● プロジェクト 開始 9 10 11 12 2013 1 2 ★ 1.0.0 ★ 1.0.1 3 4 5 6 ★ ★ ★ 1.1.0 1.2.0 1.3.0 ★ 1.1.1 7 8 9 10 ★ ★ ★ 1.5.0 2.0.0 2.1.0 ★ 2.0.1 11 12 ★ ★ 2.2.0 2.3.0 プロジェクト開始時に ものがなくても仕組みを作る 1stリリースまで パイプラインのテストがされ アップデートのリズム ができる
  93. 93. Feature 概要 Test Engineer 設計 Feature シナリオ/ ステップ 実装 受け入れ テスト 価値のある ソフトウェアを 開発者 テスト これを繰り返す Developer 早く継続的に デリバリー リリース ビルド デプロイ on Simulator 単体/結合 テスト リリース 受け入れ ビルド デプロイ on iPhone/ 受け入れ テスト
  94. 94. 0.1リリース 0.2リリース 0.3リリース 0.4リリース
  95. 95. そのリズムが継続的な デリバリーを可能にする http://www.flickr.com/photos/seanhobson/4272482225
  96. 96. iOSアプリケーションの 継続的デリバリー は一日にしてならず
  97. 97. まとめ
  98. 98. 僕たちは 価値のあるソフトウェアを 早く継続的にデリバリーし お客様を満足させなくては ならない
  99. 99. ソフトウェアは、価値がある限り 開発し続けなければならない http://www.flickr.com/photos/seanhobson/4272482225
  100. 100. Team Leader Test Engineer Developer Test EngineerとDeveloperは別の職業 製品の品質について責任を持つ 製品価値を考えながら、 受け入れテストを自動化する コードの品質について責任を持つ 製品価値の高いものから開発する
  101. 101. 役割は違うけれども向いているゴールは同じ Test Engineer 協力する Developer 価値のある ソフトウェア
  102. 102. MMF Minimum Marketable Feature
  103. 103. Feature 概要 Test Engineer Feature シナリオ/ ステップ 受け入れ テスト 仕様/テスト/実装を平行して行うことで 正しい製品・コードに近づく 設計 Developer 実装 開発者 テスト
  104. 104. (App Reviewのボトルネックはあるが) クラウドと同様に 継続的にデリバリーが可能な 仕組みを作らなければならない
  105. 105. リリースのリズムを作る http://www.flickr.com/photos/odolphie/2397582359
  106. 106. 徹底的に自動化する ( App申請だけは手動) http://cdn.morguefile.com/imageData/public/files/m/mconnors/preview/fldr_2003_06_18/file0002046882848.jpg
  107. 107. 継続的デリバリーするパイプライン 繰り返しやることは全て自動化する リリース ビルド デプロイ on Simulator 単体/結合 テスト コード品質のパイプライン 受け入れ ビルド デプロイ on iPhone/iPad 製品品質のパイプライン リリース 受け入れ テスト
  108. 108. iOS6でもiOS7でも 複数台のiOS端末の操作を実現!! Test Framework Calabash Frank iOS Test Framework Calabash Frank iOS Test Framework Calabash Frank iOS Application Application Application
  109. 109. iPad iPhone iPod Touch iOS6 & 7 ビルドサーバ
  110. 110. 24時間365日、テストは走り続ける 〜ここまでやってエンタープライズ品質〜 デバイス iPad, iPhone, iPod Touch OS × iOS6, iOS7 ネットワーク 環境 × Proxy, Low Bandwidth, etc ※ お客様の様々なネットワーク環境を想定する
  111. 111. 継続的改善で 1secでも早く
  112. 112. Feature 概要 Test Engineer 設計 Feature シナリオ/ ステップ 実装 受け入れ テスト 価値のある ソフトウェアを 開発者 テスト Developer 早く継続的に デリバリー リリース ビルド デプロイ on Simulator 単体/結合 テスト リリース 受け入れ ビルド デプロイ on iPhone/ 受け入れ テスト
  113. 113. 僕たちははじめにリリースまでの パイプラインを作った http://www.flickr.com/photos/49547334@N02/4725090871
  114. 114. Feature 概要 Test Engineer 設計 Feature シナリオ/ ステップ 実装 受け入れ テスト 価値のある ソフトウェアを 開発者 テスト これを繰り返す Developer 早く継続的に デリバリー リリース ビルド デプロイ on Simulator 単体/結合 テスト リリース 受け入れ ビルド デプロイ on iPhone/ 受け入れ テスト
  115. 115. そのリズムが継続的な デリバリーを可能にする http://www.flickr.com/photos/seanhobson/4272482225
  116. 116. iOSアプリケーションの 継続的デリバリー ご清聴 〜エンタープライズ品質のiOSアプリケーションを目指して〜 ありがとうございました 梅原 直樹 Naoki UMEHARA 14/2/2014 Developers Summit 2014 [14-D-5]

×