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

14
Copyright © DeNA Co.,Ltd. All Rights Reserved. iOS Test Night #2 2017/01/19(Thu) 平平平平 @DeNA 平平平平平平平平平平平平 平平平平平平平平平平平平平平

Upload: toshiyuki-hirata

Post on 14-Apr-2017

3.500 views

Category:

Technology


0 download

TRANSCRIPT

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

iOS Test Night #22017/01/19(Thu)平田敏之 @DeNA

バージョンアップの対応を

軽減するためのサービスの構築

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

自己紹介

平田 敏之 @DeNA⁃ 経歴• GW の開発 → ホムペサービスの開発、 iOS アプリの開発 → SWET

⁃ SWET (Software Engineer in Test)• 事業サポートチーム / テスト基盤チーム

• ミッション⁃ DeNA サービス全般の品質向上

⁃ DeNA エンジニアの開発生産性向上

⁃ 私がやっていること ( の一部 )• クライアントアプリ周りのテスト戦略、自動テストの開発

• CI/CD 環境整備

• テスト基盤環境の開発

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

今日の発表の流れ

はじめに 問題点:バージョンアップでありがちなこと バージョンアップにかかるコストの軽減 システム構成

⁃ やっていること おわりに 今後の予定

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

はじめに

アプリを開発する上では様々なバージョンと共に生きていく必要がある

アプリを開発する上で意識するバージョン⁃ iOS• 年に 1 回はメジャーアップデート

⁃ Xcode• 年に 1 回はメジャーアップデート

⁃ 開発の関係上、 iOS と同時ではあるがこの前一度ずれましたね ..⁃ ライブラリ• CocoaPods• Gem

⁃ アプリ• 自分たちがコントロール

⁃ リリースのたびに increment されている

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

問題点:バージョンアップでありがちなこと

新バージョンへの移行時のコスト見積もりが難しい⁃ Xcode ではビルドすら通らないこともある• 関連する fastlane/gym などでは…

⁃ セマンティックバージョニングとは限らない• メジャーアップデートで後方互換制が無くなるとは限らないし、マイナー

アップデートで後方互換性が無くなることもあったり ..⁃ → 作業タイミングがなかなか難しい ( しかしリミットがあったりする )

バージョンの固定化!⁃ → 気づいたら指定バージョンが使えなくなっていた• ( 例 )Apple 側の改修により使用不可に (fastlane/spaceship とか )

いつバージョンがあがるか ( あがったか ) は分からない⁃ バージョンアップに気づいたらの対応になりがち

⁃ 問題が起きたらバージョンアップとかになりがち

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

バージョンアップにかかるコストの軽減

新バージョンが出たことを知りたい⁃ → バージョンを定期的にチェックし slack( など ) へ通知

新バージョンを組み込んで問題無いかを知りたい⁃ → 新バージョンを組み込んで動作確認をおこなう• その実行結果を通知

Pull 型から Push 型に変更

最初の一手 ( 簡単な動作確認 ) を自動でやってもらう

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

システム構成

サンプルアプリ(Swift2.3)

バージョンチェックシステム

1) 新バージョン通知1 日 1 回チェック

CocoaPodsGem

Xcode

Rundeck

2) ライブラリに応じて動作確認

3) 動作確認結果を通知

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

バージョンアップチェック対象と確認方法

現時点でバージョンのチェックをおこなっているのは以下⁃ Gem( の一部 )• チェック先: https://rubygems.org/gems

⁃ CocoaPods( の一部 )• チェック先: https://trunk.cocoapods.org/api/v1/pods

⁃ Xcode• チェックはおこなって通知はしているが、自動でビルド環境にセットアッ

プし、動作確認をするまでは完成していない ( 近日対応予定 )• チェック方法: fastlane/spaceship の利用

⁃ 変更予定

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

サンプルアプリの簡単な説明

用途:⁃ 各ライブラリの動作チェック用⁃ テスティングフレームワークのテスト用

言語: Swift 2.3 ビルド周り:

⁃ fastlane 自動テスト:

⁃ 現状は UI テストのみ ( 全て同じテストケースをおこなっている )• XCUITest• EarlGrey• Appium

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

バージョンアップ時の動作確認のフロー

最新のバージョンで動作確認

結果

1 つ前のバージョンで

動作確認

最新のバージョンに更新

成功

失敗

対象ライブラリに応じて動作確認が変わる

失敗 → 原因を特定したい

前のバージョンで動作確認成功

→ このバージョンアップに何かあるかもしれない失敗

→ このバージョンアップとは別の原因があるかもしれない

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

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)

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

( 現時点での ) 結果表示

slack

Jenkins

fastlane 2.8.0 での動作確認が終わっ

たことの通知

fastlane 2.6.0 が問題なかったことの表示

行った動作確認内容

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

さいごに

バージョンアップで苦労した経験から ( 荒削りながら ) 作ってみました。⁃ この手のことにかかるコストは少なくし、アプリのメインのとこ

ろに力を入れていきたい。

まだまだ課題はたくさんなので今後に期待!!⁃ そして今後やることは ..?

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

今後の予定 ( の一部 )

動作確認内容の拡大⁃ 確認すること、利用するライブラリを増やしていく

エラー時の処理の改良⁃ 失敗したときの原因がどこにあるのかを更に調査しやすくする⁃ ログ ( エラー時に限らず ) をうまいこと解析できないかを検討中

versioneye導入⁃ オープンソース化したこともあり組み合わせて利用する予定

対応範囲の拡大⁃ Android⁃ Unity

既存アプリへの利用⁃ 自身の Podfile/Gemfile から推奨バージョンを教えてくれる等