GASでGメールを自動削除する

#はじめに
Gメール削除する際に、件数が多くて削除に時間がかかったり、不要・必要をいちいち目grepで選択したりと面倒が多かったのでGAS([Google Apps Script](https://developers.google.com/apps-script/))で改善しました。

毎日チャットツールやタスク管理ツールのバックアップとしてメールが飛んでくるため、Gドライブの容量があっという間に食いつぶされていました。
ラベルをつけても見ないメールが多く、業務に関係ないメールは削除した方が精神衛生上良いと判断しました。

現在は、Gドライブの容量を心配したり、わざわざ自分でメールを消す必要がなくなったので、とてもハッピーです👲

GASの詳細な解説やもっと良いコードは他の方が紹介していると思いますので、ここでは私が使っているGASの紹介と、GASのトリガー登録までやっていきたいと思います。

#GASの作成
GASはJS(JavaScript)で記述・作成します。
私は実務でJSを利用した経験がありませんでしたが、ネットで拾ったサンプルコードと削除対象のメールを検索する条件が分かれば簡単に作成できました。

メールの検索窓に入れる条件をそのままGASに移植できるので、必要な条件文が合っているかすぐに確認できるのが良いところです。

・検索条件例：1か月前　かつ　スターのないメール 
<img width="662" alt="gmail.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133277/b4056082-8e9a-b4b8-e974-4656320d6d6d.png">

コードに転記する場合、条件文（文字列）を連結させるため、検索演算子の前か後に`スペース`を入れておく必要があります。

`GmailApp.search('older_than:1m' +' -is:starred');`
→ 条件文は`older_than:1m -is:starred`になる

[Gmail で使用できる検索演算子](https://support.google.com/mail/answer/7190?hl=ja)が分かりやすかったので、参照をお勧めします。

##ひな形のコード

＃for文よりも良いコードがあれば採用したい

```deleteMail.gs
function deleteOldMail() {
  //検索条件を指定
  var deleteThreads = GmailApp.search(検索条件);

  //検索条件に合致するメールをゴミ箱に移動
  for (var i = 0; i < deleteThreads.length; i++) {
    deleteThreads[i].moveToTrash();
  }
}
```

##例1：1か月前に受信した、スターなしメールを削除
```deleteOldMail.gs
function deleteOldMail() {
  //検索条件：受信日が1か月前 && ☆スターなし
  var delayDays = "1m";
  var deleteThreads = GmailApp.search('older_than:'+delayDays+' -is:starred');

  //検索条件に合致するメールをゴミ箱に移動
  for (var i = 0; i < deleteThreads.length; i++) {
    deleteThreads[i].moveToTrash();
  }
}
```

##例2：受信日が14日前でスターなし、ラベル"alert"のメールを削除
```deleteAlertMail.gs
function deleteAlertMail() {
  ///検索条件：受信日が14日前　&&　alertラベル　&&　☆スターなし
  var deleteSubject = "alert" 
  var delayDays = "14d";
  var deleteThreads = GmailApp.search('older_than:'+delayDays+' subject:'+deleteSubject+' -is:starred');

  //検索条件に合致するメールをゴミ箱に移動
  for (var i = 0; i < deleteThreads.length; i++) {
    deleteThreads[i].moveToTrash();
  }
}
```


#トリガーにGASを登録

作成したコードを確認し、トリガーに登録します。

- 例：1か月前に受信したスターなしメールを削除するdeleteOldMail.gsを登録

##1. 時計マーク（赤枠）をクリックし、トリガー一覧に移動
<img width="588" alt="gmail2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133277/a7d4cf29-02cb-7d9d-9a4b-e8bc3e1dd9cf.png">
##2. トリガーを追加（赤枠）を押下
<img width="903" alt="gmail4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133277/586a157d-2d0a-ff86-1baa-b5ea9d4e95e6.png">
##3. トリガーを設定し、保存を押下

| 設定項目名|設定|補足|
|:-----------------|:------------------|:------------------|
| 実行する関数を選択|deleteOldMail|実行するGAS|
| 実行するデプロイを選択|Head|デフォルトはHead|
| イベントのソースを選択|時間主導型|カレンダーも可|
|時間ベースのトリガーのタイプを選択|時間ベースのタイマー|日週月など細かく選択可能|
|時間の間隔を選択（時間）|1時間おき|トリガーのタイプによって項目が異なる|
|エラー通知設定|毎日通知を受け取る|実行失敗すると通知|

<img width="429" alt="gmail5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133277/a1c52eda-b319-d188-2922-8152332b0e18.png">
##4. 設定されていることを確認
<img width="905" alt="gmail6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133277/50090338-04e6-cac7-89a8-83457ff06d78.png">
##5. 定刻に実行されていることを確認
テストのため手動で確認しても良い
<img width="901" alt="gmail7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133277/9b49621e-4043-05fd-e64b-ff8f01f16e51.png">

#まとめ
GASでGメールを自動削除する方法を列挙しました。
コードは稚拙ですが、運用がかなり楽になりました。
簡単なプログラミング経験があれば実装も容易ですし、他にもいろいろ自動化できることが多そうです。また何かあれば取り組んでいきたいですね。

#参考
1. [Gmailの受信トレイ内のメールを自動削除するやり方](https://qiita.com/kobaboy/items/bbdc6ceb1904947866d2)
2. [Gmailのフィルタ機能のこうやれば簡単にできる](https://qiita.com/hirohiro77/items/1e00c66525bc7cd0a904)