App StoreのレビューをGASを使って毎日Slackに通知してみた

# 概要
毎日Slackに「前日に投稿されたApp Storeのレビュー」を投稿するBotを作成しました！
GoogleAppScriptで動かせるため、非エンジニアの方でもどなたでも簡単に利用することができます。
また、GASを使っているのでおまけ程度にスプレッドシートに記録もされます。
<img width="667" alt="スクリーンショット 2019-12-07 20.03.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187334/ca2178d7-8661-d7aa-6631-d2cd1619b831.png">
<img width="1036" alt="スクリーンショット 2019-12-07 20.29.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187334/5bf9e992-d3c2-9036-3a51-8fe1ff9ade39.png">

# 使用方法
1. Google Driveにスプレッドシートを作成し、見出し列を記入します
<img width="580" alt="スクリーンショット 2019-12-08 16.51.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187334/6e24e5c5-5f7e-f365-2f03-b5b0ac639315.png">


2. メニューの `ツール` から `スクリプトエディタ` を開きます
<img width="671" alt="スクリーンショット 2019-12-08 16.51.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187334/957ce69d-a25e-dccb-875a-936b3b876c76.png">

3. 以下のページのコードを貼り付けて、各種変数を変更します
https://gist.github.com/saikei718/254d959c0878f3335acae4d0a75d0912

    ```javascript:変更箇所
    // App ID 設定
    var appID = 123456789;
    
    // Slack 設定
    var slackWebhookURL = "https://hooks.slack.com/services/xxx/xxxxxx";
    var slackChannel = "#bot-AppReview";
    var slackUsername = "アプリレビューお知らせBot";
    var slackIcon = ":robot_face:";
    ```
  - **appID** : アプリに割り当てられた`アプリ固有ID`  
    （参考：[iOSアプリのURLを知る方法](https://qiita.com/macoril/items/48125b2a0a48339b3693)）
  - **slackWebhookURL** : Slackに投稿するための`Incoming WebhookのURL`  
    （参考：[Slack でのIncoming Webhook の利用](https://slack.com/intl/ja-jp/help/articles/115005265063)）
  - **slackChannel** : レビューを投稿したい`#Slackのチャンネル名`
  - **slackUsername** : レビューを投稿する`Botの表示名`   
  - **slackIcon** : レビューを投稿するBotのアイコンに使いたい`Slack内の絵文字`  
      （補足：ワークスペース内に存在するカスタム絵文字も利用可能）

    
4. `ファイル` から `保存` を開き、任意の名前をつけて保存します。
<img width="578" alt="スクリーンショット 2019-12-07 23.01.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187334/fe206c22-14ea-17b3-d403-e76394bd62c4.png">
<img width="508" alt="スクリーンショット 2019-12-07 23.01.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187334/72223844-5189-24cb-72a7-74140edce2d8.png">

5. `関数を選択` から`getAppStoreReview` を選択し、左の `再生ボタン ▶︎` を選択
<img width="544" alt="スクリーンショット 2019-12-07 23.01.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187334/7d49b19a-4b4f-894b-04d9-41b793a0cf30.png">

6. GASからスプレッドシートにアクセスするために許可の設定をするため `許可を確認` を選択
<img width="571" alt="スクリーンショット 2019-12-07 23.02.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187334/8211affb-9034-3188-424d-e6698dd2f9dc.png">

7. 「このアプリは確認されていません」と表示されたら `詳細を表示` から `{設定した名前}（安全ではないページ）に移動` を選択
<img width="719" alt="スクリーンショット 2019-12-07 23.02.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187334/b1ccc3e6-403e-d54c-b322-f4e9862eed21.png">

8. 「ログイン中のアカウントの「スプレッドシート」の利用許可確認画面が出てくるので `許可` を選択
<img width="494" alt="スクリーンショット 2019-12-07 23.02.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187334/6bb3edf9-6e37-4f96-eeea-dbe215d73efe.png">

9. Slackに前日分のレビューが投稿されたはずです！
<img width="667" alt="スクリーンショット 2019-12-07 20.03.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187334/3c2be2c2-5bf8-278c-ef3e-6cb8f5919380.png">

10. お疲れ様です！一度設定を行ったら、今後は5で行った `getAppStoreReview ` を実行するだけでSlackに投稿される様になりました！

**注意点**
RSSの仕様だと思うのですが、ユーザーの投稿から一定時間経過しないとRSSに表示されない場合があります
*（例：12月1日23時のレビューは12月2日3時の時点で取得できない可能性あり）*
定期的に実行を行う際はその点を考慮して設定することをお勧めします。（8時の時点で全件取れてることを確認済み）

# 定期実行の設定
先ほどの状態では毎日実行ボタンを押さなくてはいけませんが、GASのトリガーを利用することで「毎日自動的に実行する」事ができる様になります。

1. スクリプトエディタを開き `編集` から `現在のプロジェクトのトリガー` を選択
<img width="603" alt="スクリーンショット 2019-12-08 17.00.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187334/83d810f2-2087-d3be-ff24-a62c68464cc7.png">

2. 右下の `トリガーを追加` を選択
<img width="1169" alt="スクリーンショット 2019-12-08 17.01.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187334/53fe9df1-4bfd-fb8a-a2ee-f7ae7c632015.png">

3. トリガーの設定が開くので画像の通りに設定し保存します（時間はお好みで）
<img width="741" alt="スクリーンショット 2019-12-08 17.03.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187334/5d1bc8d1-b470-5d07-f919-3b3688d5613e.png">

4. 作成したトリガーが1行増えていることを確認します
<img width="1163" alt="スクリーンショット 2019-12-08 17.06.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187334/29b74c28-8a22-599a-213a-ce6d590d8e2f.png">

5. トリガーの設定は終了です！あとは翌日しっかり実行されるかを確認してください

GASの仕様上 **日毎の定期実行のトリガーで設定できるのは1時間単位** になります。
画像の様に「午前8時〜午前9時」で設定した場合はその間のどこかのタイミングで実行されます。
**「どうしても8時丁度に実行したい！」** という場合は下記の記事を参考に設定を追加してください。
参考：[Google Apps Scriptの日毎のトリガーで時間をもっと細かく設定する
](https://qiita.com/sumi-engraphia/items/465dd027e17f44da4d6a)

# 解説
## App Storeのレビューを取得する
App Storeのレビューはrssで配信されているため、以下のURLからxml形式で取得できます。
`https://itunes.apple.com/jp/rss/customerreviews/id={アプリのID}/sortBy=mostRecent/xml`

**例（Twitterアプリ）**
https://itunes.apple.com/jp/rss/customerreviews/id=333903271/sortBy=mostRecent/xml

（※ xmlをjsonにすることでjson形式取れるのですが、アプリによって取れたり取れなかったりするのでxmlデータを利用しています）

## Slack投稿
`Attachments` が非推奨になったため `Blocks` で作成しています。
参考：[Block Kitを使用したSlackメッセージ作成&送信 (必要最低限)
](https://qiita.com/yoichiwo7/items/295fa5cf389f9d236c35)

注意点は `blocks` のみの場合通知が表示されないため、通知用に `text` を設定する必要があります。
※ このtextはSlackの投稿には表示されません。あくまで通知用です。

```javascript
// payloadを作成
var postMessage = {
  "channel": slackChannel,
  "username": slackUsername,
  "icon_emoji": slackIcon,
  "text": ":star: 昨日（" + yesterdayStr + "）新たに " + length + "件 のレビューが投稿されました",
  "blocks": postMessageBlocks
}
return postMessage;
```
![IMG_2394.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187334/77e792ab-6829-da68-1129-6fc62391b830.jpeg)

## レーディング表示
App StoreのレビューRSSからはレートが `数値` で渡されるため、表示用に★に変換する処理を行っています。

```javascript:convertRating
function convertRating(rating) {
  switch (rating) {
  case '1':
    return '★☆☆☆☆';
  case '2':
    return '★★☆☆☆';
  case '3':
    return '★★★☆☆';
  case '4':
    return '★★★★★';
  case '5':
    return '★★★★★';
  default:
    return '-';
  }
}
```

# さいごに
GASを使うことで比較的簡単にやりたいことを実現することができました。
毎日App Storeなどからレビューを確認するのは大変ですが、Slackであれば `毎朝出社後にチャンネルを開くだけ` で良いので気軽に確認できますね！
アプリをより良くするためにはユーザーの声に耳を傾けることが重要になってくると思うので、定期的にレビューに目を通してみると良いかもしれません。

今回はスプレッドシートへの記載はおまけ程度なので重複チェックなどもなく「同じ日に複数回実行すると同じレビューが追加される」状態になっています。
もしスプレッドシートも活用したい場合は良き様に弄ってください。

##### 参考にさせていただいたページ
[iOS App Storeの評価コメントをGASで取得してSpreadsheetに突っ込む](https://qiita.com/ikutani41/items/d4cb620f50172e5832c1)