文系プログラマによるTIPSブログ

文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。

gmailで一定時間経過したら自動削除するスクリプトを定期実行してメール数を減らそう!

メール数を少なくすると、imapによるメール同期が軽くなったり検索が高速になったりするのでオススメです〜


f:id:treeapps:20160102020833p:plain

新年あけましておめでとうございます。今年も文系プログラマによるTIPSブログとtreeをよろしくお願いします。


さて、新年1発目のお題は「メールの世代管理」です。

プログラマな皆さんなら各種ログはcron等で世代管理していたりしますよね。では、gmailのメールはちゃんと世代管理していますか?会社のメールならともかく、個人メールだと乱雑に不要なメールが溜まりがちです。これを機にメールの世代管理もしましょう!

世代管理は以下のようなメールに有効に機能します。

  • セール情報のメール
  • 電気代やクレジットカード等の請求メール
  • 佐川やヤマトの配達通知メール
  • twitterやfacebookの通知メール

一定期間過ぎてしまうと無意味になってしまうメール、セキュリティ的に長期間保存しておきたくないもの、各種通知系等が主な世代管理対象になります。

では早速やってみましょう。

gmailを開く

まずは対象のgmailをwebブラウザで開きます。

f:id:treeapps:20160102012822p:plain

世代管理用のラベルを作成する

世代管理専用のラベルを作成します。ここでは「30日で削除」という名前でラベルを作ります。

f:id:treeapps:20160102012918p:plain

世代管理したいメールをフィルタで「30日で削除」ラベルに振り分ける

世代管理したいメールのフィルタを作成し、前述で作成したラベルに振り分け設定をします。

f:id:treeapps:20160102013001p:plain

Googleドライブを開く

先ほど作成したフィルタに対して、Apps Scriptを作成・適用したいので、Googleドライブを開きます。

f:id:treeapps:20160102013110p:plain

Googleスプレッドシートを新規作成する

Apps Scriptを作成するのにGoogleスプレッドシートが必要なので、新規作成します。

f:id:treeapps:20160102013208p:plain

スプレッドシートのファイル名を付ける

初期状態だと「無題のドキュメント」となっているので、適当にファイル名をつけます。

f:id:treeapps:20160102034829p:plain

スクリプトエディタを開く

メニューバー → ツール → スクリプトエディタ と開きます。

f:id:treeapps:20160102013339p:plain

スクリプトエディタが開く

スクリプトエディタを開くと、以下のような画面になります。既に雛形のメソッド「MyFunction」がありますが、これは使いません。

f:id:treeapps:20160102013432p:plain

スクリプトを編集して保存する

f:id:treeapps:20160102013523p:plain

以下のスクリプトをコピペして貼り付けて下さい。

function expire30days() {
  var day = 30;
  var label = '30日で削除';
  var threads = GmailApp.search('older_than:' + day + 'd -is:starred label:' + label);
  for (var i = 0; i < threads.length; i++) {
    threads[i].moveToTrash();
  }
}

もし「30日で削除」というラベル名にしなかった場合は任意に「var label = 'xxx'」の部分を編集して下さい。

編集できたら「保存」ボタンをクリックします。

プロジェクト名を設定して保存

プロジェクト名の入力を求められるので、適当に「gmail」と入力してOKボタンをクリックします。

f:id:treeapps:20160102013727p:plain

スクリプトを実行してみる

作成したスクリプトを早速実行してみましょう。▶ボタンをクリックするとスクリプトを実行できます。

f:id:treeapps:20160102013817p:plain

実行権限を付与する

Apps Scriptからgmailを操作するには、gmailに対して「Apps scriptで操作される事を許可する」必要があります。

f:id:treeapps:20160102013904p:plain

実行を許可する

「許可」ボタンをクリックして許可します。

f:id:treeapps:20160102014011p:plain

スクリプトが実行される

許可ボタン押下後、元のスクリプト画面に戻り、自動的にスクリプトが実行されます。「30日で削除」ラベルに沢山メールがある場合、削除に時間がかかります。

f:id:treeapps:20160102014040p:plain

2016/01/02時点ではApps Scriptは6分までしか実行できないようです。スクリプトを実行してから6分経過すると強制的にスクリプトが停止します。
Quotas for Google Services  |  Apps Script  |  Google Developers

トリガーを作成する

作成したApps Scriptを定期的に自動実行して欲しいので、トリガー(cronみたいなの)を作成します。

f:id:treeapps:20160102014644p:plain

トリガーを追加する

初期状態だとトリガーが空っぽなので、リンク部分をクリックしてトリガーを追加します。

f:id:treeapps:20160102014733p:plain

トリガーを作成して完了

どのメソッドを、どんなタイミングで定期実行するかを決める事ができます。日タイマーを選択すると、毎日自動実行してくれます。

f:id:treeapps:20160102014820p:plain

これでgmailに作成した「30日で削除」ラベルに振り分けられたメールを、expire30daysメソッドを毎日定時実行して削除する世代管理が設定できました。

雑感

会社の場合は使用するメールアドレスが1個の場合がほとんどだと思いますが、個人で使うメアドは複数の場合が多いですよね。すると必然的にMail.appやThunderbird等のメーラーを使う機会が増えます。

最近だと大抵imapでメールを同期すると思いますが、メール数が多いと同期に時間がかかったりしてPCが重くなったりする事もあります。なので、可能な限り不要なメールは削除していく事をオススメします。

少ないメールアカウントで少ないメール数なのが理想なのですが、私の場合は個人で使うメールアドレスが5アカウントもあるので、大量のメールをimapで同期しています。これが最近メールの掃除をしていなかったせいか、Mail.appが非常に重く困っていました。(メモリは32GByte搭載)そこで今回メールの大掃除をするべく、この記事を書いたわけです。

正直gmailが正式にマルチアカウントの同時表示に対応してくれれば、もうローカルでメーラーを起動する機会もなくなるので、対応して欲しいですね。