バージョンアップの対応を軽減するためのサービスの構築
TRANSCRIPT
Copyright © DeNA Co.,Ltd. All Rights Reserved.
iOS Test Night #22017/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 回チェック
CocoaPodsGem
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 から推奨バージョンを教えてくれる等