Android開発にCI/CDを導入する

中島進也氏:それでは、「Visual Studio APP CenterでAndroid開発にCI/CDを導入しよう」というタイトルでLTさせていただきます。

私は「なかしょ」というハンドルネームで活動してます。

NTTテクノクロスという会社にいます。そしてJapan Xamarin User Groupのスタッフや、MS系の勉強会によく出るんですが、業務ではMS系まったく触っておらず、AndroidはKotlin、iOSはSwift、サーバーサイドはSpring Bootな感じで、TDDでペアプロの開発してます。

さて、継続的インテグレーション(CI)、継続的デリバリー(CD)をされている方はどれくらいいますか?

(会場挙手)

あぁ、けっこうしてますよね。いろいろな理由があると思うんですけれども、なぜ必要かというのは、対象機種の全OSや画面サイズのパターンとか、全部開発者がやると大変だとか。あとは開発者の環境の差異でバグがでるのを防ぎたいとか、PMやUI/UXデザイナーに素早く提供したいだとか、手作業でのミスをなくしたいとか。いろいろあると思います。

CI/CDの構築例です。

これだとTeamCity使った例を出していますが、Build Agentを立てて、iOSはmacのほうで、それ以外はUbuntuでビルドするとか、そういうやり方があると思います。

ただ、オンプレミスで構築すると、環境のハードウェア費用、ソフトウェア費用とかいろいろあって、運用方法によってはオンプレミスよりもクラウドサービスを利用したほうが、コストも安く開発者にも負担がかからない環境が作れるのではないかと思います。

そこで今回紹介するのが、Visual Studio App Centerです。

主な機能として、自動ビルドや実機デバイスでのUIテストの自動化、テスターやストアへのアプリの配布や、クラッシュログの収集、使用状況の分析、プッシュ通知などがあります。

対応プラットフォームはAndroid、iOS、Windows、macOSにそれぞれ対応してます。

Visual Studio App Centerの概要

SDKの組み込みですが、build.gradleでライブラリ読み込むように設定して、メインのActivityのonCreate時に読み込むような感じにしてあげると、クラッシュを拾ってくれたり、プッシュ通知を受け取ったりといったことができるようになります。

対応アカウントは、Github、Microsoft、Facebook、Googleなどが使えます。

次はBuildですね。対応リポジトリはVisual Studio Team Serviceか、Githubか、Bitbucketが使えます。

ビルドの設定は、Android Module、Build Variantなど。

Build Script、これはクローンのあとや、ビルドの前後にスクリプトを噛ますといったことができます。あとはPushごとにビルドするかとか、単体テストを行うとかLintを行うかとか。環境変数をやるかとか。

環境変数はGithubのパブリックなところでやってると、シークレットキーとか埋め込んじゃいけないですよね。そういうところをこういうCIツールのほうから環境変数でやって、環境変数をビルドコンフィグのほうで拾ってあげて、ソースのほうで反映するというやり方がいいんじゃないかなと思います。

あとはサイニングや実機のテストとか、配信するかなどもあります。

そして、ビルドを走らせると、ビルドの状態がWeb画面から見ることが可能で、ビルド終わるとビルドしたAPKやログを取得することが可能です。

あとはGithub Appの中に、App Centerがあります。

これ使うとなにがいいかっていうと、App CenterとGithubが連携して、プルリクしたら勝手にビルドしてくれて、それで状態を常に、今ビルド状態なのかとかテストしてるのかとか、そういうものを取得することが可能になります。

この連携はGithubが5月に発表したCheks APIというものによるものなんですが、Cheks APIは現在はパブリックベータで、サードパーティーのCIツールとのより深い連携を実現する新機能です。

従来はインテグレーション実施後にビルドの成功/失敗ステータスだけが表示されていました。本APIによりステータスの詳細が表示され、必要に応じてビルドプロセスの再実行もGithubのユーザーインターフェース内で完結します。

Github Appsが使用可能なのは、今はVisual Studio APP CenterとTravis CIで、CircleCIは対応予定ということでまだ対応はしてないようです。今後はOutlookの受信ボックスから直接Issueへコメントしたり、プルリクをマージできるようになるらしいです。

テストと配信

次はTestです。テスト端末は機種×OSで数千台の実機デバイスが用意されているんですが、いわゆるガラパゴススマホは用意されていません。OSバージョンはv2.2.1からv8.1.1まで用意されているようです。

テストフレームワークは、AndroidはAppium、Calabash、Espresso、Xamarin.UITestが可能です。テスト設定するのが、GUIから全部テストできるのかと思ったらそうではなくて。コンソールからテストを起動させて実行する仕組みになっています。

テストを実行すると結果が表示されて、成功したか失敗したかだとか、そのときのデバイスログとかテストログとかスタックトレースとか、あとスクリーンキャプチャですね。そういうものを見ることが可能になります。

次に配信です。Androidの配信方法は3つあります。グループ配信、App Centerによる配信です。登録したユーザーにメールで通知したり、HockyAppアプリでも管理できます。未登録のユーザーにも配布できるリンクが作成可能です。

GooglePlayによる配信だとAPI接続用のセキュリティトークンが必要になるのは当たり前なんですけども、それでアルファ、ベータテストの配信や、Production用の配信が可能になります。

あとはみなさんあまりご存知ないかもしれませんが、Intune Company Portalという、Microsoftが提供してるエンタープライズモビリティ管理サービスにも配信が可能です。

Distribute。配信するとメールで来て、メールから起動して、「野良APK入れてもいい?」みたいな感じになって、それで入れるとアプリ起動、みたいな感じになります。

そのほかにHockeyAppアプリという……名前がVisual Studio APP Centerアプリとかじゃないんですが、もともとHockeyAppというサービスだったので。HockeyAppアプリをインストールすると、VSAppCenterに登録されているアプリがほかのOSも含めて表示されて、過去のバージョンも選択してインストールすることが可能になります。

クラッシュ情報の取得とアナリティクス

次がクラッシュ情報取得ですね。クラッシュに対してレポートを取得可能です。

クラッシュ情報がAppCenterに送信されるのは、アプリ再起動後。これはCrashlyticsと同じだと思っています。スタックトレースなども閲覧可能です。

「同じバグが何回発生したらトラッカーにチケットを起票する」とか、そういう連携も可能です。

今連携できるのはVisual Studio Team Serviceと、GithubとJiraに自動起票などができます。

Analyticsですね。

よくあるFirebase Analyticsと同じような感じで、どの地域から来てるかとか、何回アクセスがあるかとか、OSはなにかとか、そういうものがいろいろ見られます。

あとはカスタムイベントというかたちで、イベントを出すときにプロパティを渡すと、ユーザーがなにかを選択したときに、なにを選択したかとか。そんな統計も取ることが可能になります。

Analytics-Log Flowということで、今どういうログが出てるのか、ログの流れを見ることができます。

あとは通常のAppCenter Analyticsだけだとログの情報があまりイケてない部分もあるんですが、AzureのBlob Storageとか、Application Insightsにエクスポート可能です。これをやると、FirebaseのログをBigQueryで検索するような感じで、生データを検索していろんな解析が可能になります。

次にPushですね。Pushは、通知情報を登録して、管理用のキャンペーン名を登録したりサイレントプッシュにするかとか、タイトルとメッセージを入力、アプリ側に渡すデータを登録して、次に通知対象をすべての登録デバイスとかデバイスリストとか、あとオーディエンスとかで選択して送ることが可能です。

オーディエンスはApp VersionとかCountryだとか、言語とかそういうのを選んで送ることが可能になります。

選択したら送信を行うとプッシュ通知が行われて、送信状況が「何人に送ったか」「何人が受け取ったか」などが確認可能です。

その他に連携できるもの

その他として、Webhookですね。今のところ2つしかないんですが、新しいクラッシュグループがクリエイトされた場合とか、あとは新しいAppのバージョンが生成された場合とかに、Webhookでフックしたところに通知することが可能です。

あとはSlack Appが用意されてます。いろいろビルドとかアナリティクスだとか、そういう情報をSlack経由で取得することが可能です。

また、App Center Clientと言って、Slack側でAPIが用意されています。

けっこうGUIで設定したものを保存するのって面倒だとか、そういう人いらっしゃると思うんですけれども、だいたいGUIの操作ほとんどRest APIになってるので、全部その設定をコード化しておくということも可能になります。

あとはVSCodeのApp Center Toolsというものがあって、それを使うと先ほどのAPIなど簡単にVSCodeから叩いて操作することが可能になります。

ほかにも、App Center fastlane pluginというのも出ています。

ビルドしてfastlaneでDeployGateに上げて、DeployGateでいろんなバージョンを管理とか、そういう人はけっこういると思うんですけれども。そうした運用で、ビルドとテストはオンプレミスでやるけれども、チームに配信するのはなにかクラウドのを使いたいとか。そんな場合に、こうしたfastlaneのプラグインとかは役に立つんじゃないかなと思っています。

あとは無料レベルのサービス内容とかを、ちょっとここの資料に記述してみました。

まとめです。Visual Studio APP Centerは、CI/CDに必要な機能が揃っています。そして、プルリクエストの検証を早くするためにはCIとの連携が必須です。Github AppのCIツールを活用しましょう。クラッシュ情報はBug Trackerと連携して、素早く対処しましょう。RestAPIやWebhookなどを使って、いろいろなサービスと連携しよう。

ご清聴ありがとうございました、以上です。

(会場拍手)