GASでGmailを自動整理!ラベル付け&定期実行トリガーで受信箱をスッキリさせる方法

毎朝パソコンを開くと、受信箱がメールでいっぱい。そんな状況になっていませんか?

  • 「メルマガや通知メールに埋もれて、大事なメールを見落としそうになる」
  • 「毎回手作業でラベルを付けたり、アーカイブしたりするのが面倒」
  • 「Gmailのフィルタだけでは、細かい条件の整理が追いつかない」

こうした「毎日ちょっとだけ時間を取られる作業」こそ、自動化の効果がいちばん出やすいところです。

今回は、Google Apps Script(GAS)を使って、Gmailのラベル付けとアーカイブを自動化する方法を紹介します。


受信箱が散らかってしまう理由

受信箱が散らかる一番の原因は、「あとで整理しよう」が積み重なることです。

1通1通は数秒で片付くメールでも、毎日数十通届けば、それだけで集中力が削られていきます。

しかも、整理のルールが頭の中にしかないと、忙しい日ほど後回しになってしまいます。

そこで、整理のルールをコードに書き出して、GASに毎回実行してもらうという発想に切り替えてみましょう。

ルールが目に見える形になるだけでも、受信箱の管理はぐっと楽になります。


GmailAppでラベルを付ける基本コード

まずは、整理のルールを配列で定義し、ルールごとにラベル付けとアーカイブを行うコードです。

スプレッドシートやGoogleドライブから新しいプロジェクトを作成し、以下を貼り付けてください。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
// 整理ルール:Gmailの検索演算子で条件を書く
const RULES = [
  { query: 'from:([email protected] OR [email protected])', label: 'メルマガ', archive: true },
  { query: 'subject:(請求書 OR 領収書)', label: '経理', archive: false },
];

function organizeInbox() {
  RULES.forEach(rule => {
    // ラベルがなければ作成する
    const label = GmailApp.getUserLabelByName(rule.label) || GmailApp.createLabel(rule.label);

    // まだラベルが付いていない受信箱のスレッドだけを対象にする(最大100件)
    const threads = GmailApp.search(`in:inbox -label:${rule.label} ${rule.query}`, 0, 100);
    if (threads.length === 0) return;

    label.addToThreads(threads);
    if (rule.archive) {
      GmailApp.moveThreadsToArchive(threads);
    }
    console.log(`${rule.label}:${threads.length}件を整理しました`);
  });
}

ポイントは、検索条件にGmailの検索演算子をそのまま使えることです。

from:、subject:、has:attachment、older_than:7d など、普段Gmailの検索窓で使っている書き方がそのまま使えます。

また、-label: で「すでにラベルが付いたもの」を除外しているので、同じスレッドを何度も処理することがありません。

addToThreads や moveThreadsToArchive は、スレッドをまとめて処理できるメソッドです。1件ずつ処理するより呼び出し回数が減るので、実行時間の短縮にもつながります。

初回実行時には、Gmailへのアクセス許可を求める画面が表示されます。内容を確認して許可してください。


時間主導型トリガーで自動実行する

コードが動くことを確認できたら、あとは定期的に実行されるように設定するだけです。

エディタ左側の「トリガー」(時計のアイコン)から追加することもできますが、コードで作成することもできます。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
// 1時間ごとに organizeInbox を実行するトリガーを作成(1回だけ実行する)
function createTrigger() {
  ScriptApp.newTrigger('organizeInbox')
    .timeBased()
    .everyHours(1)
    .create();
}

createTrigger は1回だけ実行してください。実行するたびにトリガーが増えてしまうので注意が必要です。

登録されたトリガーは、エディタの「トリガー」画面から確認・削除できます。


運用するときの注意点

便利な自動化ですが、いくつか気をつけておきたい点があります。

  • 最初は archive: false で試す:意図しないメールがアーカイブされないか、まずはラベル付けだけで様子を見ましょう
  • 実行時間とクォータに上限がある:GASには1回の実行時間や1日の処理量に上限があります。件数が多い場合は、検索条件を絞るのがおすすめです
  • ラベル名にスペースを入れない:検索演算子の -label: で扱いやすくするため、ラベル名はシンプルにしておくと安心です

GASの処理を速くするコツについては、こちらの記事でもまとめています。

Google Apps Scriptで処理を爆速化!遅いGASを劇的に改善する実践テクニック


まとめ

今回は、GASを使ってGmailのラベル付けとアーカイブを自動化する方法を紹介しました。

  • 整理のルールを配列で定義する
  • Gmailの検索演算子で対象を絞る
  • 時間主導型トリガーで定期実行する

この3ステップだけで、毎朝の「メール仕分け」の手間を大きく減らせます。

まずは1つのルールから、気軽に試してみてくださいね。


メンバーのSNSアカウントはこちら

◆かいと:IT担当
X(旧Twitter)
Instagram