Gmailの未読メールを自動でラベル分けする方法【スプレッドシート×GASで簡単整理】

# Gmailの未読メールを自動でラベル分けする方法【スプレッドシート×GASで簡単整理】

## はじめに（手動ラベル付けの課題）

Gmailで毎日届くメールに**いちいち手動でラベルを付けるのは面倒**ですよね。例えば仕事用やプライベート用に振り分けたい場合、手作業だとミスも起きがちです。また、Gmail標準のフィルタ機能も便利ですが、**後から条件を変えたり増やしたりする柔軟な管理が難しい**ことがあります。

そこで本記事では、**Googleスプレッドシート**と\*\*Google Apps Script（GAS）\*\*を活用して、**Gmailの未読メールを自動的にラベル分けする方法**をご紹介します。スプレッドシートにキーワードとラベルの対応表を作り、GASのスクリプトで未読メールへラベルを付与します。手順に沿って設定すれば、プログラミング初心者の方でも簡単に導入できます。

## スプレッドシートを使うメリット

メール振り分けのルールをスクリプト内ではなく**スプレッドシート上で管理する**ことで、次のようなメリットがあります。

*   **キーワードやルールの追加・編集が簡単**: スプレッドシートに新しい行を追加したり、セルの値を変えるだけでルールを変更できます。コードを修正する必要がありません。
*   **複数条件の柔軟な設定**: Gmailの検索演算子（`from:○○`, `subject:○○`など）を組み合わせた高度なキーワードもシートに書いておけば、その条件でメールを抽出してラベル付けできます。 ([〖GAS〗GmailApp.searchの使い方](https://tetsuooo.net/gas/1267/#:~:text=GmailApp.search%28%E3%82%AF%E3%82%A8%E3%83%AA))Gmailの検索ボックスと同じ形式で指定できるので直感的です。
*   **コードがシンプルになる**: 振り分けロジックをシートのデータに任せることで、GASのコード側は「シートのルールを読み込んで適用する」処理だけになります。結果としてコード量が減り、初心者にも理解しやすくなります。

では早速、具体的な設定手順を見ていきましょう。

## Google Apps Script（GAS）の導入方法

まずはスプレッドシートとGASの準備を行います。以下の手順で進めてください。

1.  **スプレッドシートを作成**: Googleドライブ等から新しいスプレッドシートを作成し、わかりやすい名前（例：「Gmail自動ラベル」など）を付けておきましょう。
2.  **GASエディタを開く**: 作成したスプレッドシート画面で、メニューの「拡張機能」→「Apps Script」をクリックします（※旧UIでは「ツール」→「スクリプトエディタ」）。すると、新しいタブでApps Scriptエディタが開きます。
3.  **プロジェクトの準備**: スクリプトエディタが開いたら、自動生成された関数などがあれば削除して**空の状態**にします。プロジェクト名（画面左上）も任意で変更できますが、今回は省略しても問題ありません。

これでGASを編集できる準備が整いました。次に、メール振り分けのルールをスプレッドシート上に設定します。

## スプレッドシートで振り分けルールを設定する

先ほど作成したスプレッドシートに、**ラベル付けのルール**を記載します。ここでは、「特定のキーワードにマッチする未読メールに対して、指定したラベルを付与する」というルールを複数登録できます。

1.  **見出し行の作成**: スプレッドシートの1行目に見出しとして「**キーワード**」と「**ラベル名**」と入力します。これらの列にそれぞれ「検索キーワード（条件）」と「付与したいラベル名」を書くためです。

2.  **ルールを入力**: 2行目以降にルールを1行ずつ入力します。例えば以下のように記載できます。

    | キーワード           | ラベル名       |\
    | -------------------- | -------------- |\
    | Amazon               | ショッピング    |\
    | 請求書               | 支払い・経理    |\
    | from:example@\*.com | 取引先（外部） |

    *   上記例では、「件名や本文に 'Amazon' を含む未読メールには『ショッピング』というラベルを付ける」、「'請求書'という語を含む未読メールには『支払い・経理』ラベルを付ける」というルールを示しています。
    *   3つ目の例ではGmailの検索演算子を使用し、送信元アドレスに`@example.com`を含む未読メールすべてに「取引先（外部）」ラベルを付与するルールになっています（`from:〜`のように入力すると、送信者アドレスでフィルタ可能です）。

3.  **ラベルの事前準備（任意）**: 「ラベル名」欄に記載したラベルは、スクリプト実行時にGmail上で存在しなければ**自動で作成されます**。あらかじめGmailでラベルを作っておいても構いませんし、作成していなくてもスクリプト側で生成されるので安心です。

このようにスプレッドシート上に条件とラベルを整理しておけば、あとはこの表をもとにGASで未読メールを検索・ラベル付けしていくだけです。

## コードの実装と解説

いよいよGAS側のスクリプトを書いていきます。以下のコードをそのままコピーして、先ほど開いたスクリプトエディタに貼り付けてください（**関数名は自由**ですが、ここでは`autoLabelUnread`としています）。貼り付けたら保存アイコンをクリックしましょう。

```javascript
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の使い方](https://tetsuooo.net/gas/1267/#:~:text=GmailApp.search%28%E3%82%AF%E3%82%A8%E3%83%AA))。
*   **ラベルの取得または作成**: `GmailApp.getUserLabelByName(labelName)`で指定名のラベルを取得しています。該当ラベルが存在しない場合は`GmailApp.createLabel(labelName)`で新規作成します。このようにして、シートで指定したラベル名が常に Gmail に存在する状態を保証します。
*   **ラベルの付与**: `threads[j].addLabel(label)`で、取得した各メールスレッドに対してラベルを付けています。`GmailApp.search`で取得されるのはメール「スレッド」の集合である点に注意してください（同一件名のやり取りは1スレッドにまとめられる）。スレッドにラベルを付けることで、そのスレッド内の全メッセージにラベルが適用されます。

コードを保存したら、**一度手動で実行**してみましょう。エディタ上部の実行ボタン▷を押し、初回のみ表示される権限リクエストを承認します（Gmailとスプレッドシートへのアクセス許可が求められます）。実行が完了したらGmail受信トレイを確認してみてください。スプレッドシートに設定したルール通りに、該当する未読メールにラベルが付いているはずです。

## GASを定期実行する方法（トリガー設定）

ここまでで、スクリプトを手動実行すれば未読メールの自動ラベル付けができるようになりました。次は、この処理を**定期的に自動実行**させる設定を行います。GASの「トリガー」という機能を使えば、一定間隔でスクリプトを走らせることが可能です。設定手順は以下の通りです。

1.  **トリガー画面を開く**: スクリプトエディタで時計マークのアイコン（または左側メニューの「トリガー」項目）をクリックします。旧エディタの場合は「編集」→「現在のプロジェクトのトリガー」を選択します。
2.  **新しいトリガーを追加**: 「トリガーを追加」ボタンを押し、トリガー設定のダイアログを開きます。
3.  **実行する関数を選択**: 「実行する関数を選択」のプルダウンから、先ほど作成した関数（例：`autoLabelUnread`）を選びます。
4.  **時間主導型トリガーの設定**: イベントの種類で「時間主導型」を選択し、さらに詳細な間隔を設定します。「分ベースのタイマー」を選び、「5分おき」に設定しましょう（※他にも1分おきや1時間おきなど選択可能ですが、Gmailの負荷を考慮して5分程度が無難です）。
5.  **保存して許可**: トリガーを保存すると、初回のみ再度の権限付与を求められる場合があります。内容を確認して許可すれば設定完了です。

以上で、スクリプトが5分ごとに自動実行されるようになりました。つまり新着の未読メールがあれば最大5分以内にスプレッドシートのルールに従ってラベル付けされることになります。もちろんスプレッドシートを開いていなくてもクラウド上で実行されますので、常に最新のルールが適用され続けます。

## まとめ

今回、GASとスプレッドシートを使って**Gmail未読メールの自動ラベル振り分け**を実現しました。これで毎回手作業でラベルを付与する手間から解放され、メール整理の効率が格段にアップするでしょう。特にスプレッドシートでルール管理することで、コードを書き換えずに条件を増減できる柔軟性が大きな利点です。

最後に、さらに応用できるアイデアも少し紹介します。

*   **マルチキーワード対応**: 一つのラベルに対して複数のキーワードを適用したい場合は、Gmailの検索演算子`OR`を使ってシートのキーワード欄に条件を記述できます（例：`Apple OR Microsoft`と書けばどちらかの単語を含むメールを検索可能）。あるいは同じラベル名で複数行ルールを作成してもOKです。
*   **処理の拡張**: スクリプト内でラベル付け後に`thread.markRead()`を呼び出して未読を既読に変更したり、一定期間経過したメールをアーカイブする処理を加えたりと、さらなる自動化も可能です。業務フローに合わせてGASを拡張してみてください。

初めは難しく感じるGASですが、スプレッドシートと組み合わせることで直感的に扱えるようになります。ぜひ今回の方法を活用して、Gmailの整理を省力化してみてください。毎日のメールチェックがきっと快適になるはずです！