アプリをリリースする前にチェックしておきたい10のポイント

業務でも個人でもAndroidアプリをいくつかリリースしてきて、リリース前にやっておいた方がいいチェック項目が定型化してきたので共有したいと思います。

#1. エラーが起こった場合、それを知る方法はあるか
![Fabric.png](https://qiita-image-store.s3.amazonaws.com/0/15267/56a41963-a940-3199-e40a-8f221a603942.png "Fabric.png")

アプリをリリースすると、何かしらエラーが発生します。特にAndroidの場合は端末依存によるバグもあるので、リリース前に全てを確認することはほぼ不可能です。そのため、エラーの状況を把握できるツールの導入は必須です。
[Crashlytics(Fabric)](https://fabric.io/)や[MINTexpress(旧Bugsense)](https://mint.splunk.com/)など色々ツールはありますが、最近はCrashlyticsが一番使われていて安定している印象です。

導入も簡単なので、リリース前に入れておくことをオススメします。


#2. GoogleAnalyticsは導入しているか
![analytics.png](https://qiita-image-store.s3.amazonaws.com/0/15267/1d13ab80-0537-931c-c140-78b4971635ae.png "analytics.png")

もはや定番の[GoogleAnalytics](https://developers.google.com/analytics/devguides/collection/android/v4/)は導入しておきましょう。ユーザー数やスクリーンビュー数などを無料でトラッキングしてくれます。最近では、コホート分析という項目で新規ユーザーの継続率まで見ることができます。

後から導入しても導入前のデータは取得できないので、最初から入れておくことをオススメします。

アプリの速度も詳しくトラッキングしたい場合は[NewRelicMobile](https://docs.newrelic.com/docs/mobile-monitoring/mobile-sdk-api/new-relic-mobile-sdk-api/working-android-sdk-api)が使えるかもしれませんが、これはリリース前じゃなくてもいいと思うので今回は省きました。


#3. Android2をサポートする場合、基本動作は問題ないか
AndroidのAPIは結構ドラスティックに変わっているので、Android4で動くのにAndroid2で動かない、ということはザラにあります。リリース直前に必ず一度は確認しておきましょう。

例えば、`ArrayAdapter#addAll()`メソッドはAPI11未満では存在しないのでNoSuchMethodErrorで落ちます。

```
ERROR/AndroidRuntime(27326): FATAL EXCEPTION: main
        java.lang.NoSuchMethodError: com.konifar.views.adapters.CharactersAdapter.addAll
```

特に大きめのアプリの場合、Android2だとビルド、インストールすらできない問題にハマることがあるので、リリース直前と言わず開発中からチェックしておくことをオススメします。
参考 : [Androidでメソッド数が65536を超えた時の対処方法](http://qiita.com/konifar/items/d98c78facbaae63badca)


#4. Pushの仕組みを入れているか
![Push_Notifications___Parse.png](https://qiita-image-store.s3.amazonaws.com/0/15267/00bf7f91-095f-63e2-4758-46eebad98575.png "Push_Notifications___Parse.png")

PushNotificationの仕組みは最初から入れておいた方がいいと思います。
少し運用の話になりますが、PushNotificationによる通知はユーザーの継続率に絶大な影響を与えるからです。あまり通知を出しすぎるとうざいので通知のタイミングや運用方法は考えなければいけませんが、仕組み自体は最初から入れておくことをオススメします。

独自で実装するのが面倒なら、[ParsePush](https://parse.com/docs/android_guide#push)を導入するのがいいかもしれません。

#5. Adを入れたい場合、最初から入れているか
もしアプリ内に広告を入れるのであれば、最初から入れておいた方がいいです。
後から入れようと思えば入れられるのですが、[Admob](https://www.google.co.jp/ads/admob/)や[Inmobi](http://japan.inmobi.com/)、[MoPub](http://www.mopub.com/)といった広告は大体たくさんのpermissionをAndroidManifestに追加しなければなりません。
permissionを追加するとGooglePlayStoreからの自動更新がかからないので、ユーザーのアップデート浸透率がなかなかあがりません。

Adを入れる予定であれば、最初から入れておくことをオススメします。複数の広告を最適化していきたいのであれば、[ADMOB メディエーション](https://support.google.com/admob/answer/3063564?hl=ja)の導入を検討してもいいかもしれません。

#6. Proguardを導入しているか
ProGuardは、ソースコードコンパイル時に処理を最適化したり、変数やメソッドを意味のない文字列に置き換え、逆コンパイルされた際に処理の中身をわかりにくくする、いわゆる難読化を行うツールです。

アプリサイズも節約できて、動作も少し速くなるので、リリース前に導入してProguardを使ってビルドしておくことをオススメします。

ちなみに色々なライブラリを使っているとProguardの設定するのは結構めんどくさいのですが、[ProGuard設定まとめ](http://qiita.com/tsuyosh/items/52567da0b40680d398f6)などを参考にしながら地道にやっていくしかなさそうです。


#7. 評価の導線を作ってあるか
![10941844_726752584106174_2232420580683821698_n_jpg.png](https://qiita-image-store.s3.amazonaws.com/0/15267/5c2eb57f-b934-d8ba-3580-08f0a5e6f3cb.png "10941844_726752584106174_2232420580683821698_n_jpg.png")

GooglePlayStoreの評価はかなり大事なので、評価してもらう導線は入れておいた方がいいです。さらに言うと、GooglePlayStoreでは高評価をつけてもらうよりもいかに★１をつけられないようにするかということが大事なので、そういう仕組みを入れておくとなおよしです。

例えばTwitterの場合、まず自前の評価ダイアログを表示して、そこで高い評価をつけてくれたユーザーのみGooglePlayStoreの評価ページに誘導するようにしています。
また、★１をつけられるのはバグに対する不満であることが多いので、評価誘導とは別にわかりやすくバグ報告への導線を作っておくのも有効みたいです。


#8. タブレット、横向きの対応はできているか
Googleの中の人からよく言われることとして、タブレット・横向きの対応をきちんとしていると印象いいらしいです。

後から対応でもいいのですが、タブレット・横向きを想定した構造になっていないものを後から直してテストしてリリースまで持っていくのは地味に大変です。（自分は今苦しんでます・・・）
また海外ユーザーを対象にしている場合、横向きで使うユーザーも多いので最初から対応しておくことをオススメします。


#9. バージョンアップ通知の仕組みを入れているか
ユーザーにバージョンアップを促す、あるいはバージョンアップを強制する仕組みはいれておいた方がいいです。5の項目とも被りますが、自動アップデートがかからない場合、ユーザーにちゃんと伝えてあげないとなかなかアップデートしてくれないことがあるからです。

例えば[クラッシュ・オブ・クラン](https://play.google.com/store/apps/details?id=com.supercell.clashofclans&hl=ja)の場合は、アップデートが必要な場合はアプデートしないとゲームができないようになっています。


#10. メンテナンスモードを用意しているか
サーバーと通信するアプリの場合、メンテナンスモードでユーザーがアプリを使えない状態にできる必要があります。これは後から入れるとメンテナンスモードにならないユーザーが出てきてしまうので、サーバー側も含めて最初から対応しておきましょう。

----

以上です。アプリによって対応すべき項目は違うと思いますが、ご参考までに！