App Store Connectの審査にいち早く反応したい

#はじめに
Studioz Advent Calendar 4日目の記事です！

最近美味しかったハンバーグは「[福よし六本木店](https://www.hotpepper.jp/strJ001232025/)」のとろけるハンバーグです
表面を軽く焼いたレアな状態から、鉄板で好みの焼き加減まで熱してからいただくハンバーグは
少しわさびをつけると良質な脂の甘みが広がりつつも引き締まり、食べるほどに胃が活発に動くような本能に訴えかける味でした
店内はおしゃれな雰囲気でしたが、気取らずに美味しいものを思う存分食べられる素敵なお店です
気さくな店員さんは天下一品のチャーハン大盛はコスパが良くて最高に旨いんだと教えてくれました
みなさんも六本木にいらした際は是非行ってみて下さい、天下一品に:ramen:

という訳で、今回はAppStoreConnectの審査通過を検知するために
メールを自動で確認して通知を飛ばそうと思います！

#通知はGASでChatworkに飛ばそうかな
どこに通知が来たら気付きやすいかは人それぞれかと思うのですが
弊社はGSuiteやChatworkを使っているので
今回はGoogleAppsScriptを使ってChatworkへの通知をしてみます！

#Gmailに届いたメールを自動で確認する
GAS(GoogleAppsScript)でやりたい事はこんな感じです

1. AppStoreConnectから届いたメールを自動で確認する
2. 審査に関わるメールが届いていたら、内容から審査進捗を判定する
3. 審査進捗に応じてChatworkAPIにメッセージをpostする
4. 一度チェックしたメールをもうチェックしないように目印をつける

▼コードにすると大体こんな感じ▼

```js
  var LABEL_NAME = "審査通過チェック済み"; // メールが確認済みである事を示すラベル名(なんでもいい)
  var APP_APPLE_ID = 111111111; // App Apple ID

  // AppAppleIDと"App Store Connect"を含むが、確認済みラベルがついていないメールを探す(1)
  var strTerms = 'label:(-' + LABEL_NAME + ')'
  + '(' + APP_APPLE_ID + ' AND '
  + '"App Store Connect")';
  var myThreads = GmailApp.search(strTerms, 0, 50);
  var myMsgs = GmailApp.getMessagesForThreads(myThreads);
  var messages = [];
  var body = "";
  var needTo = false;
  
  // 今回の用途では順番は重要じゃないし、スレッドの二次元配列のままでは使いにくいので配列にする
  for(var i = 0; i < myMsgs.length; i++){
    for(var j = 0; j < myMsgs[i].length; j++){
      messages.push(myMsgs[i][j]);
    }
  }
  
  // 審査進捗マスタ(後述)
  var master = SearchStateMaster();

  // 審査進捗に応じてChatworkへ渡す文言を作りつつ、通知が必要かどうか判定(2)
  for(var i = 0; i < messages.length; i++){
    var messageBody = messages[i].getBody();
    if(messageBody.indexOf(appId) >= 0 &&
       messages[i].getTo().indexOf(receiverAddress) >= 0){
      var subject = messages[i].getSubject();
      for(var j = 0; j < master.length; j++){
        if(subject.indexOf(master[j]["search_word"]) >= 0){
          body += "[info][title]";
          body += Utilities.formatDate(messages[i].getDate(), "JST", "YYYY'年'MM'月'dd'日 'HH:mm");
          body += "[/title]";
          body += master[j]["description"];
          body += "[/info]";
          if(master[j]["need_to"] == true){
            needTo = true;
          }
          break;
        }
      }
    }
  }
  
  // 本文があればChatworkにメッセージを送る(3)
  if(body != ""){
    sendMessage(body, needTo);
  }
  
  // myThreadsすべてにチェック済みのラベルを追加(4)
  for(var i=0;i < myThreads.length;i++){
    myThreads[i].addLabel(checkedLabel);
  }
```

#審査進捗マスタって何ですか
せっかくGASを使っているので、
configっぽい値やマスタっぽい情報はスプレッドシートで管理すると後々の調整が楽です！
▼みたいなシートで進捗の判定に使うワード、Chatworkへのメッセージに使う文言、通知(ChatworkでのTOの必要可否)を管理しています
![ScreenShot 2019-12-03 17.25.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510903/624d73c1-f6dc-fee5-61f5-426c49a08a9c.png)
ちなみに上から

- 審査提出時
- 審査開始時
- 審査通過時(手動リリース設定)
- 審査に問題がありメッセージが届いている時:warning:

の設定です！

#そして…
![IMG_0589.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510903/067a43e3-9a37-4b6b-84a5-2dbe8f0355e4.jpeg)
やったー！通過しました:tada::tada::tada:
以上です！

#おわりに
メールの自動確認と通知は用途の幅が広い！
普段プライベートのメールをあまり確認しないものぐさな私でも
通知先をLINE Notifyにして、ガラケー使いのばあちゃんから届いたメールに早く気付く事だって可能です
<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510903/dfa4d017-579b-2221-b0ac-ade7a30f4639.jpeg">
ばあちゃん…:relaxed: