読者です 読者をやめる 読者になる 読者になる

Intelligent Technology's Technical Blog

株式会社インテリジェントテクノロジーの技術情報ブログです。

DeployGate使ってみました

Android

こんにちは、間藤です。

以前、Fabric CrashlyticsKitについての記事を書きましたが、今回DeployGateのアプリ配信機能を試す機会がありましたので、利用してわかったことなどをまとめてみようと思います。
今回はAndroidアプリの配信を試します。(iOSは試してません。いつも中途半端で申し訳ないです。。。)

DeployGateとは

Fablicと同様、AndroidやiOSのネイティブアプリをベータ配信してくれるサービスです。もともとはミクシィの社内ツールだったそうです。

engineer.typemag.jp

料金プランには、個人用と組織・チーム開発用と選択肢がありますが、今回は個人用のFreeプランを使いました。チーム用だと複数の開発者が共同作業するための機能も提供されるようなのですが、実際どんな機能が提供されるのかは、ざっと見たところ確認できませんでした。ただ、組織・チーム開発向けプランでも、30日間無料で試せるそうですので、事前に確認することはできると思います。

アカウント作成〜アプリ登録

まずはアカウントを作成するところからですが、特に説明は不要と思います。何はともあれ配信するアプリを登録する必要がありますが、手っ取り早く試すのであれば、サンプルアプリが用意されています。(助かります)

f:id:IntelligentTechnology:20150626191624j:plain

Androidのサンプルを登録してみます。すると、ダッシュボードに登録したアプリが表示されるようになります。

f:id:IntelligentTechnology:20150629092458j:plain

次にアプリを配信する端末にDeployGateアプリをインストールしておきます。DeployGateアプリを利用して配信されたアプリをインストールする方法はいくつかあるのですが、まずは作成したアカウントでログインしてみます。すると、登録したアプリが「利用可能」の一覧に表示されるので、これを選択してインスールを行います。

f:id:IntelligentTechnology:20150629100510j:plain:h450

インストールすると、ダッシュボード上の端末一覧にも表示されるようになります。

f:id:IntelligentTechnology:20150629113101j:plain

なお、このサンプルアプリですが、ソースコードがGitHubに公開されていました。

DeployGate/deploygate-android-sdk-sample · GitHub

こちらは、DeployGate SDKのサンプルにもなっていますので、その意味でも確認する価値があると思います。以降では、これを利用して、アプリを更新してみたいと思います。

アプリ配信

実際の運用では、複数のテスターに向けてアプリを配信することになります。私の理解に間違いがなければ、2つの配信パターンがあります。

  • DeployGateの別アカウントをテスターとして招待する
  • 配布ページを作成してテスターに配布する

別アカウントをテスターとして招待

ダッシュボードから登録したアプリを選択すると、画面右にテスターを登録するためのインターフェースが表示されます。

f:id:IntelligentTechnology:20150629101454j:plain

ここにDeployGateのユーザ名か、メールアドレスを入力して、テスターとして招待します。メールアドレスを入力した場合、そのメールアドレスがDeployGateに登録済みでなければ、テスター登録は完了しません。招待メールが送信されるので、それを受け取った相手がDeployGateのアカウント登録することで、テスターとして認識されます。

f:id:IntelligentTechnology:20150629102434j:plain

つまり、この方法で配信する場合は、テスターすべてがDeployGateのアカウントを持っている必要があります。
テスター登録されると、一覧に表示されるようになります。また、招待されたテスターは、DeployGateアプリで対象のアプリをインストールできるようになります。

f:id:IntelligentTechnology:20150629103601j:plain

配布ページによる配布

テスターの方すべてにDeployGateのアカウント登録してもらうのが難しい場合もあるでしょう。その場合は、配布ページを用意します。

f:id:IntelligentTechnology:20150629104447j:plain

配布ページを作成すると、インストール用URLが割り当てられるので、それをメール等でテスターに知らせます。テスターはそのURLにがアクセスすることでアプリをインストールすることができます。但し、DeployGateアプリをインストールしておく必要があります。
「配布ページの設定」では、テスターに合言葉を求めるように設定することも可能です。

f:id:IntelligentTechnology:20150629105734j:plain

配布ページにアクセスすると、合言葉の入力を求められるようになります。

f:id:IntelligentTechnology:20150629115019j:plain:h300

インストールすると、配布ページの端末一覧に表示されるようになります。

f:id:IntelligentTechnology:20150629115300j:plain

アプリ更新

次に、アプリを更新してみます。GitHubからサンプルをcloneするなりして、ローカル環境でビルドします。更新されたことがわかるように、versionNameとversionCodeを変更しておきます。(GitHubのサンプルはADT用ですが、Android Studio用にマイグレーションしてビルドしています)

    defaultConfig {
        applicationId "com.deploygate.sample"
        minSdkVersion 15
        targetSdkVersion 21
        versionCode 3
        versionName '1.1'
    }

また、画面にもバージョン表示されるようにしておきます。そして、ビルドしたapkファイルをアップロードします。

f:id:IntelligentTechnology:20150629112211j:plain

DeployGateアプリでテスターのアカウントでログインしている状態だと、アプリが更新されたことがプッシュ通知されますので、テスターはアプリ更新があったことに気付くことができます。アプリの更新も、DeployGateアプリから行うことができます。

テスターが行った操作は、ダッシュボードから確認できますので、配信したアプリをテスターがインストールしてくれたかも一目瞭然です。

f:id:IntelligentTechnology:20150629113708j:plain

配布ページで配信している場合、アプリ更新は自動的に反映されません。配布ページには、特定バージョンが紐づくようになっているからです。最新のバージョンを配信するには、設定画面で配布バージョンを変更します。

f:id:IntelligentTechnology:20150629120228j:plain

変更すると、やはりテスターの端末にプッシュ通知されます。また、テスターがアプリをインストールすると、配布ページのアクティビティ上に表示されます。

f:id:IntelligentTechnology:20150629120801j:plain

以下、更新後のキャプチャです。

f:id:IntelligentTechnology:20150629121445p:plain:h450

画面(右端/中央やや上)にバージョンが表示されています。アプリ更新が反映されていることが確認できました。

DeployGate SDK

今回利用したサンプルアプリは、DeployGate SDKの利用サンプルにもなっています。せっかくなので、動作確認してみます。もし、ご自分のアプリにSDKを組み込むのであれば、以下に詳しく利用方法が記載されています。

DeployGate SDK for Android

なお、ドキュメントには、リリースビルド(android:debuggable="false")では、DeployGate SDK の機能は自動的に無効化されると記載されています。アプリ配信してテストを行う際は、Proguardを適用するのではないかと思います。そして、大抵の場合、リリースビルド時にProguardを適用することになると思います。リリースビルドでもDeployGate SDK の機能を有効にするには、SDKの初期化メソッドを以下のように書き換える必要があります。(installメソッドの第3引数にtrueを渡す)

    //DeployGate.install(this);
    DeployGate.install(this, null, true);

1つ注意が必要なのが、Proguardの設定です。DeployGate SDK内部でbindServiceしている箇所がありますが、以下の設定を書いておかないと、サービスにバインドできなくなってしまいました。今回利用しているサンプルアプリでは、この設定がされています。

-keep class * extends android.os.IInterface

また、Google Playにアプリを公開する際は、SDKを利用しないようにするのであれば、以前このブログに書いたようにFlavorを追加して、Staging用にだけ依存関係を設定すればよいでしょう。もちろん、この場合はdevelopとproductionでビルドエラーにならないように、DeployGate SDKのラッパークラスを用意するなど、もう一手間必要になります。

dependencies {
・・・(略)
    stagingCompile 'com.deploygate:sdk:3.1'
}

クラッシュ

サンプルサプリの一番下に配置されているボタンをタップすると、アプリがクラッシュするようになっているので、実際にクラッシュさせてみます。すると、アクティビティにクラッシュしたことが表示されます。以下は、配信ページから配信している場合の画面キャプチャです。別アカウントユーザに配信している場合は、ダッシュボードの更新情報にクラッシュ情報が表示されます。

f:id:IntelligentTechnology:20150629131209j:plain

また、リンクを辿るとクラッシュログも確認できます。

f:id:IntelligentTechnology:20150629131430j:plain

ログ送信

使い所が限られるのかもしれませんが、DeployGate向けにログ出力を埋め込んでおけば、テスターの操作をさらに詳しく取得することも可能です。

f:id:IntelligentTechnology:20150629191524j:plain

この機能を利用すれば、クラッシュ時の情報をさらに詳細に得られるように工夫することもできるでしょう。

この他にもSDKが提供する機能がありますので、サンプルでいろいろ試してみてください。

その他

アプリのビルドをJenkins等で自動化しているなら、DeployGateへのアプリアップロードも自動化したいでしょう。アプリをアップロードするためのコマンドラインツールや、Web API、Gradleのプラグインも用意されています。これらを利用することで、ビルド〜アプリ配信までを簡単に実現できると思います。また、公式ではないようですが、Jenkins用のプラグインもあります。

jenkinsにDeployGateと連携するためのPlugin – DeployGate Feedback & Customer Support


本格的に利用したわけではないですが(iOSのほうは確認できてませんし)、個人的な感想としては、かなり使いやすいサービスになっているなと感じました。皆さんも是非お試しください。