Androidの個人開発でアプリをグロースさせるためにやった方がいいこと

こんにちわ。 [bowyer-app](https://github.com/bowyer-app)です。

[弓道のアプリ 採点簿 for Android](https://goo.gl/PvBMuj)のアプリを個人でリリースしています。

今回は、新しく以下のアプリを出しました。
[弓道のアプリ 採点簿 for チーム](https://play.google.com/store/apps/details?id=com.bowyer.app.android.kyudoscoreteam&hl=ja)

以前のアプリの反省点を活かし、効率よく開発しグロースさせるためにやったことを備忘録として紹介したいと思います。

こちらに、僕のアプリのソースを一部公開していますので、よかったらスターお願いします。
[PlayerManage](https://github.com/bowyer-app/PlayerManage)

個人開発においてやったほうがいいことは以下だと思います。

- 開発の効率化
    - ビルドの自動化（Circle CIの導入）
    - テスト体制（Fabricの導入）
- クラッシュの分析
- アプリの分析
- アプリのグロース
    - アプリの継続率アップ（Pushの導入）
    - ストアのレビュー向上（レビュー訴求の導入）
    - ASO対策

です。１つ１つの記事説明が長くなりそうなので、この記事ではポイントだけ書きます。

# 開発の効率化
### ビルドを自動化する
まずはじめに、Githubと[CircleCI](https://circleci.com/)をつかってビルドを自動化しました。
こちらのPRに詳細のコードがあります
[add yml](https://github.com/bowyer-app/PlayerManage/pull/13/files)
CircleCIでビルドするために、circle.ymlを追加します。
今回はapkを定期的に作成するのが目的なので、testはスキップしました。

```yaml
test:
   override:
     - echo "Nothing to do here"
```
上記でテストをスキップしてくれます。

```yaml
deployment:
  apk:
      branch: /^(hotfix|release|develop).*/
      commands:
        - ./gradlew assembleDevelop assembleRelease crashlyticsUploadDistributionDevelop -PpreDexEnable=false -Pcom.android.build.threadPoolSize=1 -Dorg.gradle.parallel=false -Dorg.gradle.jvmargs="-Xms512m -Xmx512m" -Dorg.gradle.daemon=false
        - cp -R ./app/build/outputs/apk/*.apk $CIRCLE_ARTIFACTS
```
apkをビルドし成果物を以下に吐き出してくれます。
[成果物はこちら](https://circleci.com/gh/bowyer-app/PlayerManage/34#artifacts)

### テスト体制を整える
[Fabric](https://fabric.io)を導入し、BetaTesterにリリースビルドのapkを配布しました。
こちらのPRに詳細があります
[add fabric](https://github.com/bowyer-app/PlayerManage/pull/12/files)

```groovy
develop {
      applicationIdSuffix ".develop"
      zipAlignEnabled true
      debuggable true
      signingConfig signingConfigs.develop
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
      def releaseNotes = 'git log --pretty=format:"%s" --since "yesterday"'.execute([],
          project.rootDir).text.trim()
      ext {
        betaDistributionGroupAliases = "beta_tester"
        betaDistributionReleaseNotes = releaseNotes
      }
    }
```
FabricのTask`crashlyticsUploadDistributionDevelop` を実行すると、beta_testerグループに所属するTesterにapkを配布出来るようになります。
![スクリーンショット 2016-05-14 18.06.33.png](https://qiita-image-store.s3.amazonaws.com/0/92349/a632a0ca-070e-7dd2-4008-3bb9a8b5a5bc.png)

先ほどCIのコマンドにいれてあるので
`- ./gradlew assembleDevelop assembleRelease crashlyticsUploadDistributionDevelop`
develop,release,hotfixのprefixがついたブランチに変更があると自動的にテスターにapkを配布してくれます。
いちいち自分でapkをビルドしてメールで送信する手間が省けるので便利です。


### クラッシュの分析
こちらはFabricを導入していると自動的に収集してくれます。
![スクリーンショット 2016-05-14 18.12.29.png](https://qiita-image-store.s3.amazonaws.com/0/92349/9b18361c-8695-fed5-6576-7052788aed48.png)
テスト期間中はこれをみてクラッシュに対応していました。
リリース後も活用できるので便利です。

### アプリの分析
[GoogleAnalytics](https://www.google.com/intl/ja_JP/analytics/)を導入しました。
導入のPRはこちらです。Daggerも入れているので少し読みにくいですが、ご了承ください。
[add GoogleAnalytics and Dagger](https://github.com/bowyer-app/PlayerManage/pull/16/files)
本番とDevelopでログを分けたかったので2つ用意しました。
[Developの設定](https://github.com/bowyer-app/PlayerManage/blob/7bfcc982411d9f059ba0d2a7a7843c42be724e46/app/build.gradle#L50)

[本番の設定](https://github.com/bowyer-app/PlayerManage/blob/7bfcc982411d9f059ba0d2a7a7843c42be724e46/app/build.gradle#L73)

## アプリのグロース
### Pushの導入
ユーザーの呼び戻しを図ったり、DAUをアップするためによくPushを使うと思います。
個人ではサーバー立てるの大変でなかなか利用するのは厳しいです。
そんな中、フリーでPushを送信してくれるサービスがあります。
[GrowthPush](Growthpush.com)

GrowthPush導入のPRはこちら
[add Growth Push](https://github.com/bowyer-app/PlayerManage/pull/17/files)
細かい説明は後ほど記事にします。

### ストアのレビュー向上
アプリをグロースさせるには、ストアレビューを向上させないといけないです。
詳しいことはこちらの記事に書いています。
[Androidアプリでレビュー訴求の実装とレビュー荒れ防止の対策について](http://qiita.com/bowyer-app/items/5877eae40b1d0d7926fd)

レビューする訴求のPRはこちら
[ask review](https://github.com/bowyer-app/PlayerManage/pull/26/files)

定期的にレビュー訴求することで、ユーザーにレビューしてもらう機会を増やしています。
また、レビューの他にもユーザーからの意見を吸い上げるためアンケート動線も用意しています
[アンケート動線のコード](https://github.com/bowyer-app/PlayerManage/blob/4ea2ff7de7f55020fc01a0c783d4370bfc732ff3/app/src/main/java/com/bowyer/app/playermanage/ui/dialog/ReviewDialogFragment.java#L59)
こうすることで、より多くの意見を集めつつ、レビューもアップできます。

同時にASO対策にはGoogle+1ボタンを集めることが重要なので
詳しいことはこちらの記事に書いてます。
[Androidアプリに+1ボタンを設置したらストアのランキングは上がるのか？](http://qiita.com/bowyer-app/items/af3d35e84bc6ed5b689b)

Google+1ボタンの訴求も入れてみました。
[GooglePlusDialogFragment.java
](https://github.com/bowyer-app/PlayerManage/blob/4ea2ff7de7f55020fc01a0c783d4370bfc732ff3/app/src/main/java/com/bowyer/app/playermanage/ui/dialog/GooglePlusDialogFragment.java)

このアプリは2016/05/14にリリースしたのでまだどうなるかわかりませんが、[弓道のアプリ 採点簿 for Android](https://goo.gl/PvBMuj)で培ったノウハウを初めから入れてみたので楽しみです。

後日、この記事の補足を書きます。
クドいですが、僕のアプリのソースを一部公開していますので、よかったらスターお願いします。
[PlayerManage](https://github.com/bowyer-app/PlayerManage)