CD(継続的デリバリー)手法を用いたサーバシステム構築の自動化 - OpenStack最新情報セミナー(2016年12月)
iOSアプリケーションの継続的デリバリー
-
Upload
naoki-umehara -
Category
Technology
-
view
5.664 -
download
1
description
Transcript of iOSアプリケーションの継続的デリバリー
iOSアプリケーションの継続的デリバリー
〜エンタープライズ品質のiOSアプリケーションを目指して〜
梅原 直樹Naoki UMEHARA 14/2/2014
Developers Summit 2014 [14-D-5]
僕たちは価値のあるソフトウェアを早く継続的にデリバリーしお客様を満足させなくては
ならない
梅原 直樹うめはら なおき
Twitter:@numehahttp://numeha.hatenablog.com/
#devsumiD
http://www.slideshare.net/numeha/ricoh-ucs-for-ipad
Developers Summit 2013
ACTION!
一年間ネタを探しながら一生懸命働く
http://www.flickr.com/photos/davefayram/5909547615
ß
http://event.shoeisha.jp/devsumi
株式会社 リコー
新規事業を生み出すために
クラウド関連とiOS関連の
ソフトウェア開発をしています
よろしくお願いします
STORY!
2012年6月とあるiOS開発プロジェクトL
に立候補
俺に任せろ
http://free-pictograms.com/14-life/261-life.html
iOSの開発経験がない(利用経験もない。むしろAndroid派)
そもそもチームがいない
仕様もない
なぜかそこに納期だけがあった
プレイングマネージャとして活動した約1年半
http://free-pictograms.com/14-life/261-life.html
何からどうやれば
STORY!1. Background UCS & iOS & Enterprise
2. Practice 価値のあるソフトウェアを作るチーム形成 継続的デリバリーの取り組み 実機を利用した自動テストのテクニック
RICOH UCS(Unified Communication System)
2011年8月22日ビデオ会議市場に新規参入
簡単さ・使いやすさを追求した
少人数(約5名)向けの
ポータブル型のビデオ会議システム
P3000
http://www.ricoh.co.jp/ucs
各拠点間
新たなビジネス・コミュニケーションを提供するiOSプロジェクト
⚠当日はムービーを流しました
iPad版
http://www.apple.com/ipad-mini/overview/
iPad版(2013/1/31 Release)
iPhone版(2013/9/10 Release)
クラウド
iOSアプリにとってクラウドはなくてはならない存在
♥ クラウドをどう作る/使うのかどこにビジネス価値を与えるのか
(M)BaaS等によりクラウド利用が身近に
http://www.kinvey.com/backend-as-a-service
クラウド♥ビジネスに直結したコミュニケーション手段
お客様のビジネスを止めるようなことはあってはならない
品質を追求することによるビジネス価値
それはお客様のビジネスに
なくてはならないものになっているか
このような状態に早く出来るのか。そしてその状態を維持できるのか
iOSアプリケーションの継続的デリバリー
〜エンタープライズ品質のiOSアプリケーションを目指して〜
僕たちは価値のあるソフトウェアを早く継続的にデリバリーしお客様を満足させなくては
ならない
僕たちは
価値のあるソフトウェアを早く継続的にデリバリーしお客様を満足させなくては
ならない
http://www.flickr.com/photos/seanhobson/4272482225
ソフトウェアは、価値がある限り開発し続けなければならない
価値のあるソフトウェアは人間しか作れない/わからない
価値を生み出せるチーム(ワーク)が価値である
DeveloperTest Engineer
Leader
Team
Test EngineerとDeveloperは別の職業製品の品質について責任を持つ コードの品質について責任を持つ
製品価値の高いものから開発する製品価値を考えながら、 受け入れテストを自動化する
Developer
Test Engineer
協力する
役割は違うけれども向いているゴールは同じ
価値のあるソフトウェア
Feature概要
Featureシナリオ/ステップ
受け入れテスト
Developer
Test Engineer
設計 実装開発者テスト
価値のあるソフトウェアを開発するパイプライン
Feature概要
Featureシナリオ/ステップ
受け入れテスト
Developer
Test Engineer
設計 実装開発者テスト
価値のあるソフトウェアを考える
僕たちは
最小限の機能で市場価値を生み出せるのか
いまやるべきなのか後でもいいのかを意識する
MMFMinimum Marketable Feature
Feature1
Feature2
Feature3
Feature4
Feature5
Feature6
Feature7
Feature8
これが
MMF
お客様に提供する価値の優先度
これだけで市場価値を生むことが出来るのか
RICOH UCS for iOSのMMFモバイルユーザとして、
開催中のP3000 の会議に途中参加して映像と音声で相手とコミュニケーションしたい、
それは会議の開催場所でなくても参加したいからだ最初に書いたラフスケッチ
お客様に聞いて価値を確かめる
ここでダメならそこで終了
Feature1
Feature2
Feature3
Feature4
Feature5
Feature6
Feature7
Feature8
> 実装の優先度
どこで1st release
するかはビジネス判断
お客様に提供する価値の優先度
小さく設計して小さく実装することで手戻りを最小化する
大きく育てる大きく育てる
Feature概要
Featureシナリオ/ステップ
受け入れテスト
Developer
Test Engineer
設計 実装開発者テスト
Feature概要
Featureシナリオ/ステップ
受け入れテスト
Developer
Test Engineer
設計 実装開発者テスト
お客様に価値を与えるシナリオを自然言語で作る
実機で動くテストコードを書く
テストをしながら仕様を決める
Feature概要
Featureシナリオ/ステップ
受け入れテスト
Developer
Test Engineer
設計 実装開発者テスト
1つのFeatureを実現する実装をする
受け入れテストでは実現できない内部ロジックのテスト
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
Scenario: "ios1" can join conference Given "ios3" go to contactlist view And the following accounts start conference: | device | | ios2 | | ios3 | Then "ios1" should see the presence of "meeting" within row of "ios2" When "ios1" touch the row of "ios2" Then "ios1" should be on video view And "ios1" should see 3 participants And "ios1" should not see the private meeting image
iOS1とiOS2の2台のデバイスが
コンタクトリスト画面にいる
iOS3のデバイスがコンタクトリスト画面
にいてiOS2とiOS3が会議を
始める
iOS1からiOS2は会議中にみえ
iOS1がiOS2をタッチすると会議に参加する
Featureシナリオ/ステップ
例
お客様への価値を自然言語で確認でき自動で動くコードにもなる
⚠当日はムービーを流しました
Feature概要
Featureシナリオ/ステップ
受け入れテスト
Developer
Test Engineer
設計 実装開発者テスト
仕様/テスト/実装を平行して行うことで正しい製品・コードに近づく
1つのFeature開発が終わった時にリリース可能な状態になる
僕たちは価値のあるソフトウェアを早く継続的にデリバリーしお客様を満足させなくては
ならない
僕たちは価値のあるソフトウェアを
早く継続的にデリバリーしお客様を満足させなくては
ならない
http://www.flickr.com/photos/seanhobson/4272482225
ソフトウェアは、価値がある限り開発し続けなければならない
継続的改善で1secでも早く
iOSアプリはどのくらいのスピードでリリース可能なのか
XCodeor
Application LoaderiTunes Connect App Store
App Review
Ave:7daysPackageSubmit
iOS 最高でも
1ヶ月で約4回リリース
Cloud 無限大にリリース可能
クラウド
Install
(App Reviewのボトルネックはあるが)
クラウドと同様に継続的にデリバリーが可能な
仕組みを作らなければならない
★1.0.0
2013年 1 2 3 4 5 6 7 8 9 10 11 12
★1.0.1
★1.1.0
★1.1.1
★1.2.0
★1.3.0
★1.5.0
★2.0.0
★2.0.1
★2.1.0
★2.2.0
★2.3.0
RICOH UCS for iOSのリリース
(機能UP&不具合修正で)
1年間で12回のリリース
これが多いか少ないかは置いておいて
http://www.flickr.com/photos/odolphie/2397582359
リリースのリズムを作る
http://www.amazon.co.jp/gp/product/images/4048707876/ref=dp_image_text_0?ie=UTF8&n=465392&s=books
ビジネスの主導権を得るために
http://www.allaboutagile.com/7-reasons-why-continuous-delivery-needs-to-be-a-business-initiative/
http://www.flickr.com/photos/56155476@N08/6660135637
ユーザを早期に獲得し競争力あるプロダクトを早く実現する
ビルド デプロイ テスト リリース
小さく繰り返す
リリースまでのパイプラインコードのコミットをしてからミスなく自動的に早くリリースしたい
お客様に価値を継続的にデリバリーする唯一の方法
自動化
徹底的に自動化する(⚠App申請だけは手動)
http://cdn.morguefile.com/imageData/public/files/m/mconnors/preview/fldr_2003_06_18/file0002046882848.jpg
受け入れビルド
デプロイon
iPhone/iPad
受け入れテスト
リリースビルド
デプロイon
Simulator
単体/結合テスト
リリースコード品質のパイプライン
製品品質のパイプライン
継続的デリバリーするパイプライン繰り返しやることは全て自動化する
受け入れビルド
デプロイon
iPhone/iPad
受け入れテスト
リリースビルド
デプロイon
Simulator
単体/結合テスト
リリースコード品質のパイプラインコードの内部状態を徹底的に可視化する
製品品質のパイプライン
受け入れビルド
デプロイon
iPhone/iPad
受け入れテスト
リリースビルド
デプロイon
Simulator
単体/結合テスト
リリース
製品品質のパイプライン
Installed Jenkins Plugins1. コード取得 -> Git2. ビルド -> Xcode3. コード行数 -> SLOCCount4. 重複コード -> DRY5. 警告 -> Warnings
ビルドを壊していないか。コードは健全なのか
受け入れビルド
デプロイon
iPhone/iPad
受け入れテスト
リリースビルド
デプロイon
Simulator
単体/結合テスト
リリース
製品品質のパイプライン
1. テスト実行 (GHUnit) > ios-sim launch xxx.app --family {$DEVICE}
2. カバレッジ > gcovr {$BUILD_DIR}
cobertura plugin
3. テスト集計
書いたコードが正しくテストされているか
受け入れビルド
デプロイon
iPhone/iPad
受け入れテスト
リリースビルド
デプロイon
Simulator
単体/結合テスト
リリース製品品質のパイプライン実機を利用した自動テストを重視する/徹底的に行う
iOSアプリケーションの受け入れ自動テストの
テクニック
受け入れビルド
デプロイon
iPhone/iPad
受け入れテスト
リリースビルド
デプロイon
Simulator
単体/結合テスト
リリースApplication
Test Frameworkhttp
操作
テストフレームワークを同梱してビルド
受け入れビルド
デプロイon
iPhone/iPad
受け入れテスト
リリースビルド
デプロイon
Simulator
単体/結合テスト
リリース
自動でipaファイル作成複数のデバイスに自動でインストール
fruitstrapor
instruments
ビルドサーバ
受け入れビルド
デプロイon
iPhone/iPad
受け入れテスト
リリースビルド
デプロイon
Simulator
単体/結合テスト
リリース実に奥が深い...
Application
Frank
Application
Frank
Application
Frank
HTTPで外部から複数台のiOS端末を操作
Application
Frank
Application
Frank
Application
Frank
しかしiOS7からTouch等の操作API禁止
Application
Test FrameworkCalabash
iOSFrank
iOS7はinstruments経由
で操作iOS6はHTTP経由
⚠ビルドマシン一台につきiOS一台しか操作できない...
Application
Test FrameworkCalabash
iOSFrank
Application
Test FrameworkCalabash
iOSFrank
Application
Test FrameworkCalabash
iOSFrank
VM1
VM2
VMを複数動かしVM間でアプリ操作コマンドのやりとりを独自実装
Application
Frank
Application Application
CalabashiOS
Test Framework
FrankCalabashiOS
Test Framework
FrankCalabashiOS
Test Framework
iOS6でもiOS7でも複数台のiOS端末の操作を実現!!
受け入れビルド
デプロイon
iPhone/iPad
受け入れテスト
リリースビルド
デプロイon
Simulator
単体/結合テスト
リリース
異なるiOSデバイス、異なるOS、
異なるネットワーク環境で受け入れテストを常に実行
×
iPad, iPhone, iPod Touch
×iOS6, iOS7
Proxy, Low Bandwidth, etc※ お客様の様々なネットワーク環境を想定する
24時間365日、テストは走り続ける〜ここまでやってエンタープライズ品質〜
デバイス
OS
ネットワーク環境
ビルドサーバ
iPhone
iPod Touch
iPad
iOS6 & 7
⚠当日はムービーを流しました
しかし、テストはFeatureが増えるに
つれて必ず遅くなる
空き端末を探して、テストを並列実行させる仕組みで高速化
増え続けるFeature
テスト振り分けProxy
Calabash-iOS
0.9.162 -> 0.9.163October 27, 2013 January 7, 2014
Fantastic Speedup!!!
継続的改善で1secでも早く
僕たちは価値のあるソフトウェアを早く継続的にデリバリーしお客様を満足させなくては
ならない
Feature概要
Featureシナリオ/ステップ
受け入れテスト
Developer
Test Engineer
設計 実装開発者テスト
価値のあるソフトウェアを開発するパイプライン
受け入れビルド
デプロイon
iPhone/iPad
受け入れテスト
リリースビルド
デプロイon
Simulator
単体/結合テスト
リリースコード品質のパイプライン
製品品質のパイプライン
継続的デリバリーするパイプライン繰り返しやることは全て自動化する
受け入れビルド
デプロイon
iPhone/
受け入れテスト
リリースビルド
デプロイon
Simulator
単体/結合テスト
リリース
Feature概要
Featureシナリオ/ステップ
受け入れテスト
Developer
Test Engineer
設計 実装開発者テスト
価値のあるソフトウェアを
早く継続的にデリバリー
http://www.flickr.com/photos/49547334@N02/4725090871
僕たちははじめにリリースまでのパイプラインを作った
●プロジェクト
開始
★1.0.0
2012 2013 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12
★1.0.1
★1.1.0
★1.1.1
★1.2.0
★1.3.0
★1.5.0
★2.0.0
★2.0.1
★2.1.0
★2.2.0
★2.3.0
プロジェクト開始時にものがなくても仕組みを作る
1stリリースまでパイプラインのテストがされ
アップデートのリズムができる
受け入れビルド
デプロイon
iPhone/
受け入れテスト
リリースビルド
デプロイon
Simulator
単体/結合テスト
リリース
Feature概要
Featureシナリオ/ステップ
受け入れテスト
Developer
Test Engineer
設計 実装開発者テスト
価値のあるソフトウェアを
早く継続的にデリバリー
これを繰り返す
0.1リリース
0.2リリース
0.3リリース
0.4リリース
http://www.flickr.com/photos/seanhobson/4272482225
そのリズムが継続的なデリバリーを可能にする
iOSアプリケーションの継続的デリバリー
は一日にしてならず
まとめ
僕たちは価値のあるソフトウェアを早く継続的にデリバリーしお客様を満足させなくては
ならない
http://www.flickr.com/photos/seanhobson/4272482225
ソフトウェアは、価値がある限り開発し続けなければならない
DeveloperTest Engineer
Leader
Team
Test EngineerとDeveloperは別の職業
製品の品質について責任を持つ製品価値を考えながら、 受け入れテストを自動化する
コードの品質について責任を持つ
製品価値の高いものから開発する
Developer
Test Engineer
協力する
役割は違うけれども向いているゴールは同じ
価値のあるソフトウェア
MMFMinimum Marketable Feature
Feature概要
Featureシナリオ/ステップ
受け入れテスト
Developer
Test Engineer
設計 実装開発者テスト
仕様/テスト/実装を平行して行うことで正しい製品・コードに近づく
(App Reviewのボトルネックはあるが)
クラウドと同様に継続的にデリバリーが可能な
仕組みを作らなければならない
http://www.flickr.com/photos/odolphie/2397582359
リリースのリズムを作る
徹底的に自動化する(⚠App申請だけは手動)
http://cdn.morguefile.com/imageData/public/files/m/mconnors/preview/fldr_2003_06_18/file0002046882848.jpg
受け入れビルド
デプロイon
iPhone/iPad
受け入れテスト
リリースビルド
デプロイon
Simulator
単体/結合テスト
リリースコード品質のパイプライン
製品品質のパイプライン
継続的デリバリーするパイプライン繰り返しやることは全て自動化する
Application
Frank
Application Application
CalabashiOS
Test Framework
FrankCalabashiOS
Test Framework
FrankCalabashiOS
Test Framework
iOS6でもiOS7でも複数台のiOS端末の操作を実現!!
ビルドサーバ
iPhone
iPod Touch
iPad
iOS6 & 7
×
iPad, iPhone, iPod Touch
×iOS6, iOS7
Proxy, Low Bandwidth, etc※ お客様の様々なネットワーク環境を想定する
24時間365日、テストは走り続ける〜ここまでやってエンタープライズ品質〜
デバイス
OS
ネットワーク環境
継続的改善で1secでも早く
受け入れビルド
デプロイon
iPhone/
受け入れテスト
リリースビルド
デプロイon
Simulator
単体/結合テスト
リリース
Feature概要
Featureシナリオ/ステップ
受け入れテスト
Developer
Test Engineer
設計 実装開発者テスト
価値のあるソフトウェアを
早く継続的にデリバリー
http://www.flickr.com/photos/49547334@N02/4725090871
僕たちははじめにリリースまでのパイプラインを作った
受け入れビルド
デプロイon
iPhone/
受け入れテスト
リリースビルド
デプロイon
Simulator
単体/結合テスト
リリース
Feature概要
Featureシナリオ/ステップ
受け入れテスト
Developer
Test Engineer
設計 実装開発者テスト
価値のあるソフトウェアを
早く継続的にデリバリー
これを繰り返す
http://www.flickr.com/photos/seanhobson/4272482225
そのリズムが継続的なデリバリーを可能にする
iOSアプリケーションの継続的デリバリー
〜エンタープライズ品質のiOSアプリケーションを目指して〜
梅原 直樹Naoki UMEHARA 14/2/2014
Developers Summit 2014 [14-D-5]
ご 清 聴あ り が と う ご ざ い ま し た