Copyright © DeNA Co.,Ltd. All Rights Reserved.
iOS Test Night #2
2017/01/19(Thu)
平田敏之@DeNA
バージョンアップの対応を
軽減するためのサービスの構築
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自己紹介
 平田 敏之@DeNA
⁃ 経歴
• GWの開発 → ホムペサービスの開発、iOSアプリの開発 → SWET
⁃ SWET (Software Engineer in Test)
• 事業サポートチーム / テスト基盤チーム
• ミッション
⁃ DeNAサービス全般の品質向上
⁃ DeNAエンジニアの開発生産性向上
⁃ 私がやっていること(の一部)
• クライアントアプリ周りのテスト戦略、自動テストの開発
• CI/CD環境整備
• テスト基盤環境の開発
Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日の発表の流れ
 はじめに
 問題点:バージョンアップでありがちなこと
 バージョンアップにかかるコストの軽減
 システム構成
⁃ やっていること
 おわりに
 今後の予定
Copyright © DeNA Co.,Ltd. All Rights Reserved.
はじめに
 アプリを開発する上では様々なバージョンと共に生きていく必要がある
 アプリを開発する上で意識するバージョン
⁃ iOS
• 年に1回はメジャーアップデート
⁃ Xcode
• 年に1回はメジャーアップデート
⁃ 開発の関係上、iOSと同時ではあるがこの前一度ずれましたね..
⁃ ライブラリ
• CocoaPods
• Gem
⁃ アプリ
• 自分たちがコントロール
⁃ リリースのたびにincrementされている
Copyright © DeNA Co.,Ltd. All Rights Reserved.
問題点:バージョンアップでありがちなこと
 新バージョンへの移行時のコスト見積もりが難しい
⁃ Xcodeではビルドすら通らないこともある
• 関連するfastlane/gymなどでは…
⁃ セマンティックバージョニングとは限らない
• メジャーアップデートで後方互換制が無くなるとは限らないし、マイナー
アップデートで後方互換性が無くなることもあったり..
⁃ → 作業タイミングがなかなか難しい(しかしリミットがあったりする)
 バージョンの固定化!
⁃ → 気づいたら指定バージョンが使えなくなっていた
• (例)Apple側の改修により使用不可に (fastlane/spaceshipとか)
 いつバージョンがあがるか(あがったか)は分からない
⁃ バージョンアップに気づいたらの対応になりがち
⁃ 問題が起きたらバージョンアップとかになりがち
Copyright © DeNA Co.,Ltd. All Rights Reserved.
バージョンアップにかかるコストの軽減
 新バージョンが出たことを知りたい
⁃ → バージョンを定期的にチェックしslack(など)へ通知
 新バージョンを組み込んで問題無いかを知りたい
⁃ → 新バージョンを組み込んで動作確認をおこなう
• その実行結果を通知
Pull型からPush型に変更
最初の一手(簡単な動作確認)を自動でやってもらう
Copyright © DeNA Co.,Ltd. All Rights Reserved.
システム構成
サンプルアプリ
(Swift2.3)
バージョンチェック
システム
1) 新バージョン通知
1日1回チェック
CocoaPods
Gem
Xcode
Rundeck
2) ライブラリに応じて動作確認
3) 動作確認結果を通知
Copyright © DeNA Co.,Ltd. All Rights Reserved.
バージョンアップチェック対象と確認方法
 現時点でバージョンのチェックをおこなっているのは以下
⁃ Gem(の一部)
• チェック先:https://rubygems.org/gems
⁃ CocoaPods(の一部)
• チェック先:https://trunk.cocoapods.org/api/v1/pods
⁃ Xcode
• チェックはおこなって通知はしているが、自動でビルド環境にセットアッ
プし、動作確認をするまでは完成していない(近日対応予定)
• チェック方法:fastlane/spaceshipの利用
⁃ 変更予定
Copyright © DeNA Co.,Ltd. All Rights Reserved.
サンプルアプリの簡単な説明
 用途:
⁃ 各ライブラリの動作チェック用
⁃ テスティングフレームワークのテスト用
 言語:Swift 2.3
 ビルド周り:
⁃ fastlane
 自動テスト:
⁃ 現状はUIテストのみ(全て同じテストケースをおこなっている)
• XCUITest
• EarlGrey
• Appium
Copyright © DeNA Co.,Ltd. All Rights Reserved.
バージョンアップ時の動作確認のフロー
最新のバージョンで
動作確認
結果
1つ前のバージョンで
動作確認
最新のバージョンに
更新
成功
失敗
対象ライブラリに応じて
動作確認が変わる
失敗 → 原因を特定したい
前のバージョンで動作確認
成功
→ このバージョンアップに何かあるかもしれない
失敗
→ このバージョンアップとは別の原因があるかもしれない
Copyright © DeNA Co.,Ltd. All Rights Reserved.
動作確認の内容
 やっていること
⁃ バージョンアップしたライブラリに応じてやることが決まる
• ライブラリとおこなうべきアクション(fastlaneのlane)の定義書がある
⁃ 今の設定例
• Gem / fastlane
⁃ 1) アプリのビルド
⁃ 2) iTunesConnectのメタデータの更新
• Gem / spaceship
⁃ 1) iTunesConnectのメタデータの更新
• Gem / scan
⁃ 1) 自動テスト(w / XCTest)
• Pod / EarlGrey
⁃ 2) UIの自動テスト(w/ EarlGrey)
Copyright © DeNA Co.,Ltd. All Rights Reserved.
(現時点での)結果表示
slack
Jenkins
fastlane 2.8.0での動
作確認が終わった
ことの通知
fastlane 2.6.0が
問題なかったことの表示
行った
動作確認内容
Copyright © DeNA Co.,Ltd. All Rights Reserved.
さいごに
 バージョンアップで苦労した経験から(荒削りながら)作ってみました。
⁃ この手のことにかかるコストは少なくし、アプリのメインのところ
に力を入れていきたい。
 まだまだ課題はたくさんなので今後に期待!!
⁃ そして今後やることは..?
Copyright © DeNA Co.,Ltd. All Rights Reserved.
今後の予定(の一部)
 動作確認内容の拡大
⁃ 確認すること、利用するライブラリを増やしていく
 エラー時の処理の改良
⁃ 失敗したときの原因がどこにあるのかを更に調査しやすくする
⁃ ログ(エラー時に限らず)をうまいこと解析できないかを検討中
 versioneye導入
⁃ オープンソース化したこともあり組み合わせて利用する予定
 対応範囲の拡大
⁃ Android
⁃ Unity
 既存アプリへの利用
⁃ 自身のPodfile/Gemfileから推奨バージョンを教えてくれる等

バージョンアップの対応を軽減するためのサービスの構築

  • 1.
    Copyright © DeNACo.,Ltd. All Rights Reserved. iOS Test Night #2 2017/01/19(Thu) 平田敏之@DeNA バージョンアップの対応を 軽減するためのサービスの構築
  • 2.
    Copyright © DeNACo.,Ltd. All Rights Reserved. 自己紹介  平田 敏之@DeNA ⁃ 経歴 • GWの開発 → ホムペサービスの開発、iOSアプリの開発 → SWET ⁃ SWET (Software Engineer in Test) • 事業サポートチーム / テスト基盤チーム • ミッション ⁃ DeNAサービス全般の品質向上 ⁃ DeNAエンジニアの開発生産性向上 ⁃ 私がやっていること(の一部) • クライアントアプリ周りのテスト戦略、自動テストの開発 • CI/CD環境整備 • テスト基盤環境の開発
  • 3.
    Copyright © DeNACo.,Ltd. All Rights Reserved. 今日の発表の流れ  はじめに  問題点:バージョンアップでありがちなこと  バージョンアップにかかるコストの軽減  システム構成 ⁃ やっていること  おわりに  今後の予定
  • 4.
    Copyright © DeNACo.,Ltd. All Rights Reserved. はじめに  アプリを開発する上では様々なバージョンと共に生きていく必要がある  アプリを開発する上で意識するバージョン ⁃ iOS • 年に1回はメジャーアップデート ⁃ Xcode • 年に1回はメジャーアップデート ⁃ 開発の関係上、iOSと同時ではあるがこの前一度ずれましたね.. ⁃ ライブラリ • CocoaPods • Gem ⁃ アプリ • 自分たちがコントロール ⁃ リリースのたびにincrementされている
  • 5.
    Copyright © DeNACo.,Ltd. All Rights Reserved. 問題点:バージョンアップでありがちなこと  新バージョンへの移行時のコスト見積もりが難しい ⁃ Xcodeではビルドすら通らないこともある • 関連するfastlane/gymなどでは… ⁃ セマンティックバージョニングとは限らない • メジャーアップデートで後方互換制が無くなるとは限らないし、マイナー アップデートで後方互換性が無くなることもあったり.. ⁃ → 作業タイミングがなかなか難しい(しかしリミットがあったりする)  バージョンの固定化! ⁃ → 気づいたら指定バージョンが使えなくなっていた • (例)Apple側の改修により使用不可に (fastlane/spaceshipとか)  いつバージョンがあがるか(あがったか)は分からない ⁃ バージョンアップに気づいたらの対応になりがち ⁃ 問題が起きたらバージョンアップとかになりがち
  • 6.
    Copyright © DeNACo.,Ltd. All Rights Reserved. バージョンアップにかかるコストの軽減  新バージョンが出たことを知りたい ⁃ → バージョンを定期的にチェックしslack(など)へ通知  新バージョンを組み込んで問題無いかを知りたい ⁃ → 新バージョンを組み込んで動作確認をおこなう • その実行結果を通知 Pull型からPush型に変更 最初の一手(簡単な動作確認)を自動でやってもらう
  • 7.
    Copyright © DeNACo.,Ltd. All Rights Reserved. システム構成 サンプルアプリ (Swift2.3) バージョンチェック システム 1) 新バージョン通知 1日1回チェック CocoaPods Gem Xcode Rundeck 2) ライブラリに応じて動作確認 3) 動作確認結果を通知
  • 8.
    Copyright © DeNACo.,Ltd. All Rights Reserved. バージョンアップチェック対象と確認方法  現時点でバージョンのチェックをおこなっているのは以下 ⁃ Gem(の一部) • チェック先:https://rubygems.org/gems ⁃ CocoaPods(の一部) • チェック先:https://trunk.cocoapods.org/api/v1/pods ⁃ Xcode • チェックはおこなって通知はしているが、自動でビルド環境にセットアッ プし、動作確認をするまでは完成していない(近日対応予定) • チェック方法:fastlane/spaceshipの利用 ⁃ 変更予定
  • 9.
    Copyright © DeNACo.,Ltd. All Rights Reserved. サンプルアプリの簡単な説明  用途: ⁃ 各ライブラリの動作チェック用 ⁃ テスティングフレームワークのテスト用  言語:Swift 2.3  ビルド周り: ⁃ fastlane  自動テスト: ⁃ 現状はUIテストのみ(全て同じテストケースをおこなっている) • XCUITest • EarlGrey • Appium
  • 10.
    Copyright © DeNACo.,Ltd. All Rights Reserved. バージョンアップ時の動作確認のフロー 最新のバージョンで 動作確認 結果 1つ前のバージョンで 動作確認 最新のバージョンに 更新 成功 失敗 対象ライブラリに応じて 動作確認が変わる 失敗 → 原因を特定したい 前のバージョンで動作確認 成功 → このバージョンアップに何かあるかもしれない 失敗 → このバージョンアップとは別の原因があるかもしれない
  • 11.
    Copyright © DeNACo.,Ltd. All Rights Reserved. 動作確認の内容  やっていること ⁃ バージョンアップしたライブラリに応じてやることが決まる • ライブラリとおこなうべきアクション(fastlaneのlane)の定義書がある ⁃ 今の設定例 • Gem / fastlane ⁃ 1) アプリのビルド ⁃ 2) iTunesConnectのメタデータの更新 • Gem / spaceship ⁃ 1) iTunesConnectのメタデータの更新 • Gem / scan ⁃ 1) 自動テスト(w / XCTest) • Pod / EarlGrey ⁃ 2) UIの自動テスト(w/ EarlGrey)
  • 12.
    Copyright © DeNACo.,Ltd. All Rights Reserved. (現時点での)結果表示 slack Jenkins fastlane 2.8.0での動 作確認が終わった ことの通知 fastlane 2.6.0が 問題なかったことの表示 行った 動作確認内容
  • 13.
    Copyright © DeNACo.,Ltd. All Rights Reserved. さいごに  バージョンアップで苦労した経験から(荒削りながら)作ってみました。 ⁃ この手のことにかかるコストは少なくし、アプリのメインのところ に力を入れていきたい。  まだまだ課題はたくさんなので今後に期待!! ⁃ そして今後やることは..?
  • 14.
    Copyright © DeNACo.,Ltd. All Rights Reserved. 今後の予定(の一部)  動作確認内容の拡大 ⁃ 確認すること、利用するライブラリを増やしていく  エラー時の処理の改良 ⁃ 失敗したときの原因がどこにあるのかを更に調査しやすくする ⁃ ログ(エラー時に限らず)をうまいこと解析できないかを検討中  versioneye導入 ⁃ オープンソース化したこともあり組み合わせて利用する予定  対応範囲の拡大 ⁃ Android ⁃ Unity  既存アプリへの利用 ⁃ 自身のPodfile/Gemfileから推奨バージョンを教えてくれる等