2026-09-20 · 1 分で読めます

古いGmailメールを自動削除して同期を高速化する方法

何年も使い続けたGmailアカウントには、50万通を超えるメールが簡単に溜まります。この量がThunderbirdやOutlook、スマートフォンのメールアプリを極端に遅くする原因です。各クライアントは受信トレイ全体を索引付けして同期するため、帯域、メモリ、バッテリーを大量に消費します。毎日手作業で削除するのは時間がかかり、ミスも起きやすくなります。

巨大なメールボックスがクライアントを遅くする理由

デスクトップとモバイルのクライアントは、メールボックスのローカルコピーを保持します。スレッド数が増えるほど初回同期は長くなり、ローカルデータベースは肥大化し、接続が切れる頻度も上がります。Gmail自体は快適でも、IMAPクライアントはそうではありません。実用的な解決策は、直近90日分など最近のメールだけを残し、それより古いものを削除することです。

Google Apps Scriptによるバッチ削除スクリプト

Google Apps Scriptを使えば、この整理を無料で自動化できます。script.google.comを開いて新しいプロジェクトを作成し、以下のコードを貼り付けます。domains 配列を編集して自分のアドレスやドメインを追加してください。対象の送信者からのメールだけが処理されます。スクリプトは90日より古いスレッドを検索し、小さなバッチでゴミ箱へ移動し、6分の実行制限に達する前に停止します。スレッドは30日間ゴミ箱から復元できます。

JS
function deleteNewsletters3MonthsPermanent() {
  var domains = [
    "site1.com", "user@site2.com",
  ];

  var batchSize = 25;
  var totalDeleted = 0;
  var startTime = new Date().getTime();
  var maxExecutionTimeMs = 5 * 60 * 1000; // 5 minutes safety threshold

  for (var b = 0; b < domains.length; b += batchSize) {
    if (new Date().getTime() - startTime > maxExecutionTimeMs) {
      Logger.log("Execution limit approaching. Stopped safely. Permanently deleted so far: " + totalDeleted);
      return;
    }

    var chunk = domains.slice(b, b + batchSize);
    var fromFilters = chunk.map(function(d) {
      return d.indexOf('@') > -1 ? 'from:' + d : 'from:*@' + d;
    }).join(' OR ');

    var searchQuery = '(' + fromFilters + ') older_than:90d';
    var pageToken = null;

    do {
      if (new Date().getTime() - startTime > maxExecutionTimeMs) {
        Logger.log("Execution limit approaching inside pagination. Permanently deleted so far: " + totalDeleted);
        return;
      }

      // Max results allowed per list request by the API is 500
      var response = Gmail.Users.Messages.list('me', {
        q: searchQuery,
        maxResults: 500,
        pageToken: pageToken
      });

      if (response.messages && response.messages.length > 0) {
        var messageIds = response.messages.map(function(m) { return m.id; });
        
        // Permanent bulk delete: 50 quota units for up to 1,000 IDs
        Gmail.Users.Messages.batchDelete({ ids: messageIds }, 'me');
        totalDeleted += messageIds.length;
        
        // Small delay to keep rate pacing clean
        Utilities.sleep(600);
      }

      pageToken = response.nextPageToken;
    } while (pageToken);
  }

  Logger.log("Finished. Total messages permanently deleted: " + totalDeleted);
}

追加のコツと安全なバックアップ

実行する前に、Google Takeoutでメールボックスをエクスポートし、ローカルにコピーを残してください。まずは範囲の狭い検索条件でテストし、その後で対象を広げます。Thunderbirdでは「すべてのメール」フォルダの購読を解除し、IMAP同期をヘッダーのみ、または直近数日に限定すると、遅延がすぐに改善します。

一緒に取り組みましょう

さらに詳しい情報やプロジェクトのヘルプ、またはアイデアの構築が必要ですか?

簡単な質問でもフルプロジェクトでも、お気軽にどうぞ。お問い合わせいただき、あなたのアイデアを一緒に実現しましょう。

お問い合わせ →

トピックを切り替える

探索する専門トピックを選択してください: