実験トップ

GAS×Gmail · 登録不要 · コード全文

Gmailの古いメールを
自動で削除・アーカイブする(GAS)。

「Googleアカウントの保存容量がいっぱい」「受信トレイが何万件」——手で消すのは大変ですが、一括削除は大事なメールまで消しそうで怖いものです。このページでは Google Apps Script(GAS)で、決めたルールに合う古いメールだけを、毎日少しずつゴミ箱かアーカイブへ移す仕組みを作ります。

1. できること

項目このページのコード
初期ルールプロモーション・SNS通知タブは最後のやり取りから30日でゴミ箱へ/受信トレイは90日でアーカイブ(消さずに受信トレイから外すだけ)
お試しモードDRY_RUN = true の間は何も動かさず、対象の件数と件名の例だけをログに出します
触らないものスター付き・「保存」ラベル付きのスレッド、最後のメッセージがまだ新しいスレッド
大量のメール100件ずつ処理し、4.5分で止めて続きは次回(6分の実行時間制限に当たりません)

ゴミ箱に移したメールは30日間は元に戻せます。完全削除はしません。

2. 手順

  1. script.google.com で「新しいプロジェクト」を作り、下のコードを貼り付けます。
  2. 残したいメールにスターを付けるか、Gmailで「保存」というラベルを作って付けておきます。
  3. DRY_RUN = true のまま ▶ で cleanupGmail を実行し、Gmailへのアクセスを許可します。実行ログに「[お試し] プロモーション: 245件 ゴミ箱へ 例: …」のように出ます。
  4. 件数と例を見て問題なければ、DRY_RUN = false にして保存し、もう一度実行します。
  5. 左の時計アイコン「トリガー」→ 関数 cleanupGmail・「時間主導型」・「日付ベースのタイマー」・「午前3時〜4時」などで保存します。初回で終わらなかった分は毎日続きが処理されます。

3. コード全文(コピペで動きます)

const DRY_RUN = true;                  // まずは true のまま実行し、ログで対象を確認する
const RULES = [                        // days: 最後のメッセージからこの日数が過ぎたスレッドが対象
  { name: 'プロモーション', query: 'category:promotions', days: 30, action: 'trash' },
  { name: 'SNS通知',       query: 'category:social',     days: 30, action: 'trash' },
  { name: '受信トレイ整理', query: 'in:inbox',            days: 90, action: 'archive' },
];
const PROTECT = ' -is:starred -label:保存';   // スター付きと「保存」ラベルは絶対に触らない
const BATCH = 100;                     // GmailApp の一括操作は1回100件まで
const TIME_LIMIT_MS = 4.5 * 60 * 1000; // 6分制限の手前で止め、続きは次回

function cleanupGmail() {
  const lock = LockService.getScriptLock();
  if (!lock.tryLock(10000)) return;
  const start = Date.now();
  try {
    for (const r of RULES) {
      if (!(r.days >= 1)) throw new Error(r.name + ': days を1以上にしてください');
      const q = r.query + ' older_than:' + r.days + 'd' + PROTECT + (r.action === 'archive' ? ' in:inbox' : '');
      const cutoff = new Date(Date.now() - r.days * 86400000);
      let offset = 0, done = 0, sample = [];
      while (Date.now() - start < TIME_LIMIT_MS) {
        const threads = GmailApp.search(q, offset, BATCH);
        if (!threads.length) break;
        // 検索は「どれか1通が古い」スレッドも返すので、最後のやり取りが新しいものは除外
        const targets = threads.filter(t => t.getLastMessageDate() < cutoff);
        if (sample.length < 5) targets.slice(0, 5 - sample.length).forEach(t => sample.push(t.getFirstMessageSubject()));
        if (DRY_RUN) { done += targets.length; offset += threads.length; continue; }
        if (targets.length) {
          if (r.action === 'trash') GmailApp.moveThreadsToTrash(targets);
          else GmailApp.moveThreadsToArchive(targets);
        }
        done += targets.length;
        offset += threads.length - targets.length;  // 除外したぶんだけ次の検索位置をずらす
      }
      console.log((DRY_RUN ? '[お試し] ' : '') + r.name + ': ' + done + '件 ' +
        (r.action === 'trash' ? 'ゴミ箱へ' : 'アーカイブ') + ' 例: ' + sample.join(' / '));
    }
  } finally {
    lock.releaseLock();
  }
}

書き換えるのは RULES です。例:{ name: '通販の発送通知', query: 'from:(@example-shop.jp) subject:発送', days: 60, action: 'trash' }、{ name: '大きいメール', query: 'larger:10M', days: 365, action: 'archive' }。query はGmailの検索窓と同じ書き方です。検索窓で試してから入れると確実です。

4. このコードが防いでいる4つの失敗

5. よくあるつまずき

実行したのに容量が減らない:ゴミ箱のメールも容量に数えられます。30日で自動的に消えるのを待つか、確認したうえでゴミ箱を手動で空にしてください。アーカイブは容量を減らしません。
SNS通知が0件:Gmailの設定でタブ(カテゴリ)を使っていないと category:social には何も入りません。from: で送信元を指定するルールに変えてください。
間違えて消した:Gmailの「ゴミ箱」を開き、スレッドを選んで「受信トレイに移動」で戻せます(30日以内)。
会社のGoogle Workspaceで使う:保存義務のあるメール(契約・請求など)は、社内ルールや管理者の保持設定を先に確認してください。

6. AIはどこに使う?

整理そのものにAIは不要です。ルールで決めたほうが確実で、あとから説明もできます。AIが役立つのは、残したメールの中の問い合わせを分類して返信の下書きを作るほうです。作り方は Gmailの問い合わせ返信をAIで下書き にまとめています。

このページのコードを含む6本を、1つのシートでまとめて動かしたい方へ

無料記事のコードは1本ずつ単独で使う前提のため、同じプロジェクトに複数入れると定数名が衝突します。セット版は添付保存・Slack/Chat通知・古いメール整理・送信元ラベル・シート書き出し・未返信リマインドの6本が同時に動くよう整理し、「今すぐ実行/定期実行ON・OFF(二重登録なし)」メニューと日本語の導入手順を付けました。APIキー不要で、追加費用はかかりません。

Gmail自動化GAS 6本セット(APIキー不要/$9)を見る →

Gumroad での販売です。デジタル納品のため、ダウンロード後の返金はお受けできません(不具合時は誠実に対応します)。

自分で設定するのが不安な方へ(ココナラ・日本円):シート1列のAI一括処理と、当日分の自動サマリーメールのGAS2本+日本語手順書を、ココナラで販売しています(3,000円・税抜〜)。初期設定サポート(+4,000円)や、あなたの実データで自動化フローを1つ一緒に作る導入伴走(+12,000円)は任意のオプションです(いずれも税抜)。対応できるかは購入前の見積り相談で確認できます。

ココナラで導入相談・購入する →

メールを「減らす」だけでなく、問い合わせ対応も軽くしたい方へ

届いた問い合わせをAIで分類し、登録した事実(FAQ)だけを使って返信の下書きを作る拡張版です。noreply・通知・メルマガは自動でスキップし、お試しモードで結果を確認してから本番にできます。自動送信はせず、下書きまでです。

Gmail問い合わせ AI 下書き返信・拡張版(FAQ参照・除外送信元・お試しモード/$3)を見る → 請求書PDF+AI添え状・議事録AI要約など、そのまま動くGAS5本+日本語の導入手順書(PRO版・$39)→

手で貼って使うプロンプトだけ欲しい方へ:事務AIプロンプト集12種(無料・投げ銭歓迎)

Gumroad での販売です。このページのメール整理のコードは無料で、有料版には含まれていません。AI を使う機能には OpenAI の API キー(従量課金)が必要です。デジタル納品のため、ダウンロード後の返金はお受けできません(不具合時は誠実に対応します)。


Gmailを送信元ごとに自動でラベル分け · Gmailの新着をSlack・Google Chatに通知 · Gmailの未返信メールを毎朝リマインド · Gmailの受信メールをスプレッドシートに書き出す · Gmailの添付ファイルをドライブに自動保存 · 無料本:GAS×ChatGPT事務自動化の基本

AI Revenue Experiment の用途解説ページです。導入実績や効果測定の結果ではありません。