Gmailの未読メールを自動でラベル分けする方法【スプレッドシート×GASで簡単整理】
Gmailの未読メールを自動でラベル分けする方法【スプレッドシート×GASで簡単整理】
はじめに(手動ラベル付けの課題)
Gmailで毎日届くメールにいちいち手動でラベルを付けるのは面倒ですよね。例えば仕事用やプライベート用に振り分けたい場合、手作業だとミスも起きがちです。また、Gmail標準のフィルタ機能も便利ですが、後から条件を変えたり増やしたりする柔軟な管理が難しいことがあります。
そこで本記事では、Googleスプレッドシートと**Google Apps Script(GAS)**を活用して、Gmailの未読メールを自動的にラベル分けする方法をご紹介します。スプレッドシートにキーワードとラベルの対応表を作り、GASのスクリプトで未読メールへラベルを付与します。手順に沿って設定すれば、プログラミング初心者の方でも簡単に導入できます。
スプレッドシートを使うメリット
メール振り分けのルールをスクリプト内ではなくスプレッドシート上で管理することで、次のようなメリットがあります。
- キーワードやルールの追加・編集が簡単: スプレッドシートに新しい行を追加したり、セルの値を変えるだけでルールを変更できます。コードを修正する必要がありません。
- 複数条件の柔軟な設定: Gmailの検索演算子(
from:○○
,subject:○○
など)を組み合わせた高度なキーワードもシートに書いておけば、その条件でメールを抽出してラベル付けできます。 (〖GAS〗GmailApp.searchの使い方)Gmailの検索ボックスと同じ形式で指定できるので直感的です。 - コードがシンプルになる: 振り分けロジックをシートのデータに任せることで、GASのコード側は「シートのルールを読み込んで適用する」処理だけになります。結果としてコード量が減り、初心者にも理解しやすくなります。
では早速、具体的な設定手順を見ていきましょう。
Google Apps Script(GAS)の導入方法
まずはスプレッドシートとGASの準備を行います。以下の手順で進めてください。
- スプレッドシートを作成: Googleドライブ等から新しいスプレッドシートを作成し、わかりやすい名前(例:「Gmail自動ラベル」など)を付けておきましょう。
- GASエディタを開く: 作成したスプレッドシート画面で、メニューの「拡張機能」→「Apps Script」をクリックします(※旧UIでは「ツール」→「スクリプトエディタ」)。すると、新しいタブでApps Scriptエディタが開きます。
- プロジェクトの準備: スクリプトエディタが開いたら、自動生成された関数などがあれば削除して空の状態にします。プロジェクト名(画面左上)も任意で変更できますが、今回は省略しても問題ありません。
これでGASを編集できる準備が整いました。次に、メール振り分けのルールをスプレッドシート上に設定します。
スプレッドシートで振り分けルールを設定する
先ほど作成したスプレッドシートに、ラベル付けのルールを記載します。ここでは、「特定のキーワードにマッチする未読メールに対して、指定したラベルを付与する」というルールを複数登録できます。
-
見出し行の作成: スプレッドシートの1行目に見出しとして「キーワード」と「ラベル名」と入力します。これらの列にそれぞれ「検索キーワード(条件)」と「付与したいラベル名」を書くためです。
-
ルールを入力: 2行目以降にルールを1行ずつ入力します。例えば以下のように記載できます。
キーワード ラベル名 Amazon ショッピング 請求書 支払い・経理 from:example@*.com 取引先(外部) - 上記例では、「件名や本文に 'Amazon' を含む未読メールには『ショッピング』というラベルを付ける」、「'請求書'という語を含む未読メールには『支払い・経理』ラベルを付ける」というルールを示しています。
- 3つ目の例ではGmailの検索演算子を使用し、送信元アドレスに
@example.com
を含む未読メールすべてに「取引先(外部)」ラベルを付与するルールになっています(from:〜
のように入力すると、送信者アドレスでフィルタ可能です)。
-
ラベルの事前準備(任意): 「ラベル名」欄に記載したラベルは、スクリプト実行時にGmail上で存在しなければ自動で作成されます。あらかじめGmailでラベルを作っておいても構いませんし、作成していなくてもスクリプト側で生成されるので安心です。
このようにスプレッドシート上に条件とラベルを整理しておけば、あとはこの表をもとにGASで未読メールを検索・ラベル付けしていくだけです。
コードの実装と解説
いよいよGAS側のスクリプトを書いていきます。以下のコードをそのままコピーして、先ほど開いたスクリプトエディタに貼り付けてください(関数名は自由ですが、ここではautoLabelUnread
としています)。貼り付けたら保存アイコンをクリックしましょう。
function autoLabelUnread() {
// スプレッドシートのアクティブなスプレッドシートとシートを取得
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); // シート名「Sheet1」を使用
// シートのデータ範囲を取得(2次元配列で全データ取得)
var values = sheet.getDataRange().getValues();
// 1行目はヘッダーのため、2行目(インデックス1)から最後の行までループ
for (var i = 1; i < values.length; i++) {
var keyword = values[i][0]; // 「キーワード」列の値
var labelName = values[i][1]; // 「ラベル名」列の値
// キーワードとラベル名の両方が存在する場合のみ実行
if (keyword && labelName) {
// Gmailから未読メールをキーワードで検索(該当するメールスレッド一覧を取得)
var query = 'is:unread ' + keyword;
var threads = GmailApp.search(query);
// 指定のラベルがなければ作成し、あれば取得
var label = GmailApp.getUserLabelByName(labelName);
if (!label) {
label = GmailApp.createLabel(labelName);
}
// 見つかった全てのスレッドに対してラベルを付与
for (var j = 0; j < threads.length; j++) {
threads[j].addLabel(label);
}
}
}
}
コードのポイント解説:
- 未読メールの検索:
GmailApp.search(query)
を使って未読メールを検索しています。query
には'is:unread キーワード'
という文字列を指定し、未読かつキーワードにマッチするメールスレッドを取得します。ここで指定するキーワードは、先ほどシートに入力したものが使われます。Gmailの検索と同じ書式で指定できるため、件名や送信者、本文の条件指定も自由自在です (〖GAS〗GmailApp.searchの使い方)。 - ラベルの取得または作成:
GmailApp.getUserLabelByName(labelName)
で指定名のラベルを取得しています。該当ラベルが存在しない場合はGmailApp.createLabel(labelName)
で新規作成します。このようにして、シートで指定したラベル名が常に Gmail に存在する状態を保証します。 - ラベルの付与:
threads[j].addLabel(label)
で、取得した各メールスレッドに対してラベルを付けています。GmailApp.search
で取得されるのはメール「スレッド」の集合である点に注意してください(同一件名のやり取りは1スレッドにまとめられる)。スレッドにラベルを付けることで、そのスレッド内の全メッセージにラベルが適用されます。
コードを保存したら、一度手動で実行してみましょう。エディタ上部の実行ボタン▷を押し、初回のみ表示される権限リクエストを承認します(Gmailとスプレッドシートへのアクセス許可が求められます)。実行が完了したらGmail受信トレイを確認してみてください。スプレッドシートに設定したルール通りに、該当する未読メールにラベルが付いているはずです。
GASを定期実行する方法(トリガー設定)
ここまでで、スクリプトを手動実行すれば未読メールの自動ラベル付けができるようになりました。次は、この処理を定期的に自動実行させる設定を行います。GASの「トリガー」という機能を使えば、一定間隔でスクリプトを走らせることが可能です。設定手順は以下の通りです。
- トリガー画面を開く: スクリプトエディタで時計マークのアイコン(または左側メニューの「トリガー」項目)をクリックします。旧エディタの場合は「編集」→「現在のプロジェクトのトリガー」を選択します。
- 新しいトリガーを追加: 「トリガーを追加」ボタンを押し、トリガー設定のダイアログを開きます。
- 実行する関数を選択: 「実行する関数を選択」のプルダウンから、先ほど作成した関数(例:
autoLabelUnread
)を選びます。 - 時間主導型トリガーの設定: イベントの種類で「時間主導型」を選択し、さらに詳細な間隔を設定します。「分ベースのタイマー」を選び、「5分おき」に設定しましょう(※他にも1分おきや1時間おきなど選択可能ですが、Gmailの負荷を考慮して5分程度が無難です)。
- 保存して許可: トリガーを保存すると、初回のみ再度の権限付与を求められる場合があります。内容を確認して許可すれば設定完了です。
以上で、スクリプトが5分ごとに自動実行されるようになりました。つまり新着の未読メールがあれば最大5分以内にスプレッドシートのルールに従ってラベル付けされることになります。もちろんスプレッドシートを開いていなくてもクラウド上で実行されますので、常に最新のルールが適用され続けます。
まとめ
今回、GASとスプレッドシートを使ってGmail未読メールの自動ラベル振り分けを実現しました。これで毎回手作業でラベルを付与する手間から解放され、メール整理の効率が格段にアップするでしょう。特にスプレッドシートでルール管理することで、コードを書き換えずに条件を増減できる柔軟性が大きな利点です。
最後に、さらに応用できるアイデアも少し紹介します。
- マルチキーワード対応: 一つのラベルに対して複数のキーワードを適用したい場合は、Gmailの検索演算子
OR
を使ってシートのキーワード欄に条件を記述できます(例:Apple OR Microsoft
と書けばどちらかの単語を含むメールを検索可能)。あるいは同じラベル名で複数行ルールを作成してもOKです。 - 処理の拡張: スクリプト内でラベル付け後に
thread.markRead()
を呼び出して未読を既読に変更したり、一定期間経過したメールをアーカイブする処理を加えたりと、さらなる自動化も可能です。業務フローに合わせてGASを拡張してみてください。
初めは難しく感じるGASですが、スプレッドシートと組み合わせることで直感的に扱えるようになります。ぜひ今回の方法を活用して、Gmailの整理を省力化してみてください。毎日のメールチェックがきっと快適になるはずです!