Your SlideShare is downloading. ×
iOSアプリケーションの継続的デリバリー
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

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

5,261
views

Published on

2014/2/14に目黒雅叙園で行われたデブサミ2014の資料です …

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

Published in: Technology

0 Comments
27 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,261
On Slideshare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
73
Comments
0
Likes
27
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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