Visual Studio App Centerで
Android開発にCI/CDを
導入しよう
2018/08/02
shibuya.apk #27
NTTテクノクロス株式会社 中島進也
Profile
• 名前:なかしょ(中島 進也)
• 所属:NTTテクノクロス株式会社
• Twitter:@nakasho_dev
• ブログ:なかしょの技術日誌
http://nakasho-dev.hatenablog.jp/
• 最近の興味
TDD、アジャイル開発、Xamarin、Chatbot、Tizen
• 主な参加コミュニティ
JXUG、.NETラボ、Cogbot、TestNight
※本資料は私個人の意見であり、所属企業・部門見解を代表するもの
ではありません。
2
継続的インテグレーション(CI)
継続的デリバリー(CD)
導入していますか?
なぜ、CI/CD環境が必要か
• 対象機種の全OS、画面サイズのパターンのテストをCI環境で
実施し、開発者は実装にかける時間を確保したい
• 開発者の開発環境の差異によるバグを防ぎたい
• PMやUI/UXデザイナに素早く提供したい
• 手作業でのミスをなくしたい
4
CI/CD環境の構築例(オンプレミス)
5
Git
リポジトリ
Ubuntu サーバ
TeamCity Server
Build Agent2
Build Agent3
Mac mini
TeamCity
Build Agent1
iPhone
Android
検証サーバ
商用サーバ
CIモニタ
CI/CD環境をオンプレミスで構築すると
• CI/CD環境の
ハードウェア費用
ソフトウェア費用
監視費用
維持メンテ費用
テスト端末費用
6
CI/CDの運用方法によっては、オ
ンプレミスよりもクラウドサービ
スを利用したほうがコストも安く、
開発者にも負担がかからない環境
が作れるのではないか。
7
Visual Studio App Center
主な機能
8
自動ビルド・単体テスト
実機デバイスでUIテストを自動化
テスターやストアへのアプリ配布
クラッシュログの収集
使用状況の分析
プッシュ通知
対応プラットフォーム
9
Android
Java/Kotlin
ReactNative
Cordova(Preview)
Xamarin
iOS
Objective-C/Swift
ReactNative
Cordova(Preview)
Xamarin
Windows
UWP
macOS(Preview)
Objective-C/Swift
SDKの組み込み
10https://docs.microsoft.com/ja-jp/appcenter/sdk/
dependencies {
def appCenterSdkVersion = '1.5.1’
compile "com.microsoft.appcenter:appcenter-analytics:${appCenterSdkVersion}“
compile "com.microsoft.appcenter:appcenter-crashes:${appCenterSdkVersion}“
compile "com.microsoft.appcenter:appcenter-push:${appCenterSdkVersion}"
}
app/build.gradle
import com.microsoft.appcenter.AppCenter;
import com.microsoft.appcenter.analytics.Analytics;
import com.microsoft.appcenter.crashes.Crashes;
import com.microsoft.appcenter.push.Push;
・・・・・・・・・・中略・・・・・・・・・・・・・・
AppCenter.start(getApplication(), " xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ",
Analytics.class, Crashes.class , Push.class);
起動時のActivityのonCreate
VSAppCenterのプロジェクト
作成時に払い出されたAPI-KEY
を使用する。
Pushを送信するにはFirebase
のSender IDを管理画面から登
録する。
対応アカウント
• 以下のアカウントが使用可能
GitHub
Microsoft
Facebook
Google
11https://appcenter.ms/create-account
12
対応リポジトリ
13
Build – ビルド設定(1/2)
• Android Module
• Build Variant
• Build Script
 固定名のファイルを含めることで有効と
なる
• Build frequency
 Pushごとにビルドするか否か
• Automatically increment build number
 ビルドごとにビルド番号を増加させるか否か
• Run unit tests
 ビルド時に単体テストをおこなうか否か
• Lint source code
 コードの静的解析(Lint)をおこなうか否か
14https://docs.microsoft.com/ja-jp/appcenter/build/android/first-build
Build – ビルド設定(2/2)
• Environment variables
 環境変数を設定しビルドに反映できる
 リポジトリに含められないものはここ
で管理すべき
• Sign builds
 ビルド時に署名を付与するか否か
• Test on a real device
 実機テストを実施するか否か
• Distribute builds
 ビルドを配信するか否か
• Advanced
 ビルドステータスバッジの有無
15https://docs.microsoft.com/ja-jp/appcenter/build/android/first-build
Build – ビルド状態表示
16https://docs.microsoft.com/ja-jp/appcenter/build/android/
• 設定後、ビルドを走らせると以下のようにビルド状態を表示
Downloadボタンから以下
がダウンロード可能
・Build
・logs
App Center GitHub App
17
https://github.com/marketplace/app-center
App Centerと連携後のPull Request画面例
18
Pull Requestに対してApp Centerが
ビルドやテストを実行する。
その状況が表示される。
App Centerのビルドやテストが終
わったら結果が表示される。
「Details」のリンクから詳細画面に
遷移できる。
この連携はGitHubのChecks APIによ
るもの。
Checks API とは
• 現在はパブリックβ
• サード・パーティCIツールとのより深い連携を実現する新機能
従来はインテグレーション実施後にビルドの成功/失敗ステータスだ
けが表示されていた。
本APIによりステータスの詳細が表示され、必要に応じてビルドプロ
セスの再実行もGitHubのユーザーインターフェイス内で完結する。
• GitHub Appsが使用可能
Visual Studio AppCenter、Travis CIが対応。CircleCIが対応予定。
• 今後はOutlookの受信ボックスから直接Issueへコメントしたり、
Pull Requestをマージできるようになる。
19
https://developer.github.com/v3/checks/
https://blog.github.com/jp/2018-05-11-introducing-checks-api/
20
Test – 端末の選択
• 機種×OSで数千台の
実機デバイスが用意さ
れている。
• いわゆるガラパゴスス
マフォは用意されてい
ない。
• OSバージョンはv2.2.1か
らv8.1.0まで用意されてい
る。(2018/07/31時点)
21https://docs.microsoft.com/ja-jp/appcenter/test-cloud/core-concepts
Test – 設定
• Test Framework
 Appium
 Calabash
 Espresso
 Xamarin.UITest
22https://docs.microsoft.com/ja-jp/appcenter/test-cloud/supported-frameworks
Test – 結果
23
Test – 結果
• DEVICE LOGS
• TEST LOGS
• STACK TRACE
24
25
Distribute
• Androidの配信方法は3つ
グループ配信
App Centerによる配信
登録したユーザにメールで通知、HockeyAppアプリでも管理できる
未登録のユーザにも配布できるリンクが作成可能
GooglePlayによる配信
API接続用のセキュリティトークンが必要
α、βテスト用の配信
Production用の配信
Intune Company Portal用の配信
IntuneはMicrosoftが提供するエンタープライズ モビリティ管理
(EMM)サービス
26https://docs.microsoft.com/ja-jp/appcenter/distribution/
Distribute – Group配信
27https://docs.microsoft.com/ja-jp/appcenter/distribution/
届いたメールの
Accept Invitaionを
クリック
Downloadをクリッ
ク
警告が出てもOK この警告が出た際は
セキュリティの設定
を変更して再度イン
ストール
アプリ
起動
HockeyAppアプリ
28https://play.google.com/store/apps/details?id=com.microsoft.hockeyapp.testerapp&hl=ja
VSAppCenterに登
録されているアプ
リが他のOSも含め
て表示される。
過去のバージョンも
選択してインストー
ルできる
29
Diagnostics – クラッシュ情報取得
30https://docs.microsoft.com/ja-jp/appcenter/crashes/android
スタックトレース
を閲覧可能
レポートを取得可能
クラッシュ情報が
AppCenterに送信され
るのはアプリ再起動後
Bug Tracker Integration
• 以下のTrackerと連携し、Crash時に自動でTicketを起票
Visual Studio Team Services
GitHub
Jira
31https://docs.microsoft.com/ja-jp/appcenter/dashboard/bugtracker/
32
Analytics - Overview
• Active Users
Monthly、Weekly、Daily
• Engagement
• Devices and OS
• Countries and Languages
• Active Users per Version
33https://docs.microsoft.com/ja-jp/appcenter/analytics/overview
Analytics – Custom Events
• Event Page
Count、Trend、Users、User change、Per user
• Detail event view
Users、Count、Count per user、Count per session
34https://docs.microsoft.com/ja-jp/appcenter/analytics/event-metrics
Analytics – Log Flow
35https://docs.microsoft.com/ja-jp/appcenter/analytics/log-flow
Analytics – Export
• Azure の以下の機能にExport可能
Blob Storage
Application Insights
36https://docs.microsoft.com/ja-jp/appcenter/analytics/export
37
Push – 通知情報を登録
38
https://docs.microsoft.com/ja-jp/appcenter/push/
管理用のキャンペー
ン名を登録
サイレントPushにす
るか否か
タイトルとメッセー
ジを入力
アプリ側に渡すデー
タを登録
以下の3つから通知対象を選
択
・すべての登録デバイス
・デバイスリストから選択
・オーディエンス
Push – オーディエンスについて
• オーディエンスは以下の属性から選択可能
App Version
Country
MobileCarrier
Language
DeviceModel
OEM
Device OS Version
Screen Size
39https://docs.microsoft.com/ja-jp/appcenter/push/
App Versionはアプリの
バージョンアップ時に、
旧バージョンを使っている
ユーザへアップデートを促
す際に非常に有効
Push – 送信
• 各画面で登録した情報が表示
• 確認して「Send notification」
をクリック
40https://docs.microsoft.com/ja-jp/appcenter/push/
Push – 履歴一覧
• 送信状況が一覧で確認できる
41https://docs.microsoft.com/ja-jp/appcenter/push/
その他
42
その他 – Webhook
• 以下のTriggerに対してWebHookが可能
New crash group is created
New app version is available
43https://docs.microsoft.com/ja-jp/appcenter/dashboard/webhooks/
その他 – Slack App
• Slack App として以下の機能が用意されている
/appcenter login : One time setup, allowing App Center
access via Slack
/appcenter logout : Clean up authorization info
/appcenter build : Trigger a new app build
/appcenter analytics : View Analytics information
/appcenter invite : Invite a new app tester
/appcenter crashes : View Crash information
/appcenter help : View all App Center commands
44https://docs.microsoft.com/ja-jp/appcenter/dashboard/slack/
その他 – App Center Client (Preview)
45https://openapi.appcenter.ms/
Infrastructure
as Codeを
実現
その他 – VSCode App Center Tools
46
https://github.com/Microsoft/vscode-appcenter
https://marketplace.visualstudio.com/items?itemName=vsmobile.vscode-appcenter
その他 – App Center fastlane plugin
47https://github.com/Microsoft/fastlane-plugin-appcenter
48http://www.itmedia.co.jp/pcuser/articles/1801/17/news001_2.html
参考サイト
• Visual Studio App Center Docs
https://docs.microsoft.com/ja-jp/appcenter/
• Visual Studio App Center Blog
https://blogs.msdn.microsoft.com/vsappcenter/
• Advice and Answers App Center
https://intercom.help/appcenter/
• JXUGC #24 春の App Center 祭り
https://jxug.connpass.com/event/72491/
• 最新ツールとVisual Studioサブスクリプションで変わ
る開発環境
http://www.itmedia.co.jp/pcuser/articles/1801/17/news00
1.html
49
まとめ
• Visual Studio App CenterはCI/CDに必要な機能が揃っている
• Pull Requestの検証を速くするためにはCIとの連携が必須
Github AppのCIツールを活用しよう
• クラッシュ情報はBug Trackerと連携して素早く対処しよう
• RestAPIやWebHookなどを使って色々なサービスと連携しよう
50
ご清聴ありがとうございました。
なかしょ(中島 進也)
@nakasho_dev
51

Visual Studio App CenterでAndroid開発にCI/CDを導入しよう