Fabric Beta によるテストアプリの配信


Classi Advent Calendar 2016 - Qiita 6日目です。

Classi ネイティブアプリ担当の @kitaharamikiya です。

今回は、Twitter社が提供しているFabricの機能の一つ、
Crashlytics Beta Distribution によるテストアプリ配信で行うようにした経緯を記します。

1.導入前の状況

  • DeployGateによるテスト配信 + New Relicによるクラッシュレポート による運用

2.導入前の問題点

2-1. 運用、管理するネイティブアプリが増えてきた。
2-2. 各サービスによるクラッシュレポートの管理の二重管理
2-3. 各サービスのSDKを導入することにより、アプリ容量が大きくなる
2-4. メールでの配信のみで、クラッシュについて誰も気にしていない(重症)
2-5. 使われていないのに、運用費が掛かっている

3.対応策

Fabricを導入してみました

4.Fabric に決めた理由

4-1.運用、管理するネイティブアプリが増えてきた対策

  • DeployGate :グループ Businessプランに上げれば、20アプリまで登録できる
  • Fabric Beta:無料(2016/12/06現在)

4-2.各サービスによるクラッシュレポートの管理の二重管理対策

  • Fabric Crashlytics:いくつものレポートを見るより、まずCrashlyticsを覚える(学習コストの削減)

4-3.各サービスのSDKを導入することにより、アプリ容量が大きくなる 対策

  • Fabric SDKを導入するのみでOK

4-4. メールでの配信のみで、クラッシュについて誰も気にしていない対策

  • ツールよりも、人間の問題。。。アプリチームで話し合い、Fabricを採用。
  • Slackによる通知も導入しました。(New RericもSlack連携できると思います。)

4-5. 使われていないのに、運用費が掛かる対策

  • Classiは、良いツールに対しては対価を払う意思はあります
  • DeployGateや、New Rericも素晴らしいツールですが、使わないならもったいない(意識の問題)
  • Fabric が無料なので、浮いたお金で社内改善ができる!(かも)

5. 導入方法

5-1 Fabric アカウント登録編

  1. Fabric ホームにて、アカウントを登録する

5-2 Fabric 導入:Androidの場合

  1. Android Studio メニュー => Preferences... => Plugins を開く
  2. 検索窓に「Fabric」と入力する
  3. Fabric for Android Studio をインストールする
  4. Android Studio を再起動する
  5. Fabricのアイコンが表示されます

5-3 Fabric 導入:iOSの場合

  1. アカウントを登録後、IDEでXcodeを選択する
  2. Fabric のMacアプリをダウンロードします

5-4.アプリ側の設定

※ 本題ではないので、ドキュメントを添付します。(コメント下さい)

5-5.Beta配信をする

  1. テストチームをFabricに招待する
  2. 配信するアプリをビルドする
    • iOS版
      1. Mac アプリを起動する
      2. Archive する
    • Android版
      1. プロジェクトを選択して、apkファイルを作成する
      2. Android Studio => Fabricを選択する
      3. 配信したいアプリを選択する
      4. Betaのアイコンをクリックする
      5. apkファイルをアップロードする
  3. アプリを配信する
    1. Mac アプリ => 配信したいアプリ を選択
    2. 配信するバージョンのDistributeボタンを押下する
    3. 配信するメンバーを検索、選択する(事前にチームを作成するとラク)
    4. Release notesを記入する
    5. nextを押下すると、メール配信されます

※ 番外編:Gradle コマンドでapkファイルを配信する

1.ターミナルで、Androidアプリのプロジェクトルートに移動
2../gradlew tasksを実行:下記が表示される
 Incremental java compilation is an incubating feature.
:tasks
------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------
Android tasks
-------------
・・・
Other tasks
-----------
crashlyticsUploadDistributionDevDebug - Uploads an APK to Crashlytics for distribution.
crashlyticsUploadDistributionDevRelease - Uploads an APK to Crashlytics for distribution.
crashlyticsUploadDistributionProductDebug - Uploads an APK to Crashlytics for distribution.
crashlyticsUploadDistributionProductRelease - Uploads an APK to Crashlytics for distribution.
crashlyticsUploadDistributionStagingDebug - Uploads an APK to Crashlytics for distribution.
crashlyticsUploadDistributionStagingRelease - Uploads an APK to Crashlytics for distribution.

※ crashlytics を追加すると、Other tasksが追加されます。

3.app/build.config の buildTypes などに下記を追加する
buildTypes {
    debug {
        applicationIdSuffix ".debug"
        debuggable true
        //配信チームを設定
        ext.betaDistributionGroupAliases = "test_team"
        //リリースノートを記入
        ext.betaDistributionReleaseNotes = "Release Notes"
    }
    release {
     ・・・
    }
}

※ この場合は、デバッグビルドのときのテストアプリ配信グループとリリースノートを登録する
・チームは、あらかじめFabricで作成しておく
※ リリースノートは、外部ファイルの読み込みや、コミットログを登録することもできます

4../gradlew crashlyticsUploadDistributionStagingDebugをターミナルで実行

※ このコマンドは、staging debug 版apkを生成し、Betaに配信する


6. 感想

  • iOSアプリは、Archiveした時点で、Fabricに登録されるのはものすごいラク(Exportしなくていい)
  • DeployGateによる配信を伝達して、やっと慣れたときに方法を変えてしまったので、
    テストやリリース判定を行う部署には、学習コストを増やしてしまい、少し申し訳ないと思う
  • 情報が絞られているため、詳しくない人でも学習コストは低いと思う
    (New Redicは、情報がたくさんある分、テスト・企画チームには見て欲しいと言えなかった)

7. まとめ

  • 使用するツールは、正直何でも良いと思いますが、使うことが大切
  • チーム内でどのツールを使うのかを検討しあい、チームで決めたルールを尊守すること(重要)
  • チームが一丸となって、使いやすいアプリを提供しようとする気持ちをもつ(超重要)

8. TODO

  • Answersも使っているのでカスタムログを導入していきたい。(GAとの住み分けをどうするか)
  • 配信等、出来る限り自動化する(Github + Circle CI + Fabric)
  • クラッシュログを自動でチケット化する。(GitHub or Trello or JIRA)
  • fastlane を導入してみる。

明日は

hachi_eiji による「buildersconで知ったkuba-awsを触ってみた」です!