GmailApp.search×定期実行!GASでGmail検索を自動化して業務効率を最大化

GmailApp.searchでGmail検索を自動化!定期実行で業務効率を最大化

GmailApp.searchは、Google Apps Script(GAS)でGmailを検索するための強力なツールです。この記事では、GmailApp.searchを定期実行による自動化処理に特化して解説します。メール送信やファイル操作など、日々の業務を自動化し、劇的に効率を上げる方法を、具体的なコード例を交えながらご紹介します。

GmailApp.searchの基本

GmailApp.search(query, start, max)は、Gmailを検索し、条件に合致するスレッドの配列を返します。

  • query: 検索クエリ(文字列)。Gmailの検索ボックスに入力するのと同じ形式です。
  • start: 検索を開始するスレッドのインデックス(数値)。0から始まります。
  • max: 返されるスレッドの最大数(数値)。

検索クエリには、from:, to:, subject:, before:, after:などのキーワードを使用できます。これらのキーワードを組み合わせることで、非常に詳細な検索が可能です。

定期実行による自動化の実装例

1. 特定の送信者からのメールを自動でスプレッドシートに記録する

特定の送信者(例:example@example.com)からのメールを受信したら、その内容を自動的にGoogleスプレッドシートに記録するスクリプトです。毎日午前9時に実行されるように設定します。

// スプレッドシートIDを定義
const spreadsheetId = "YOUR_SPREADSHEET_ID";

function recordEmailsToSpreadsheet() {
// 検索クエリを定義 (特定の送信者からのメール)
const searchQuery = 'from:example@example.com';

// 検索を実行
const threads = GmailApp.search(searchQuery, 0, 50);

// スプレッドシートを開く
const ss = SpreadsheetApp.openById(spreadsheetId);
const sheet = ss.getSheetByName("シート1");

// 各スレッドについて
for (let i = 0; i < threads.length; i++) {
const messages = threads[i].getMessages();
// 各メッセージについて
for (let j = 0; j < messages.length; j++) {
const message = messages[j];
const sender = message.getFrom();
const subject = message.getSubject();
const body = message.getPlainBody();
const date = message.getDate();

// スプレッドシートに書き込む
sheet.appendRow([date, sender, subject, body]);
}
}
}

// 毎日午前9時に実行されるようにトリガーを設定

カスタマイズ方法:

  • searchQueryの条件を変更することで、記録するメールの種類を調整できます。
  • spreadsheetIdを自分のスプレッドシートIDに置き換えてください。
  • シート名をgetSheetByName()で指定してください。

2. 特定のキーワードを含むメールを自動でラベル付けする

特定のキーワード(例:請求書)を含むメールを検索し、自動的に特定のラベル(例:請求書関連)を付けるスクリプトです。

function labelEmails() {
// 検索クエリを定義 (特定のキーワードを含むメール)
const searchQuery = '請求書';

// 検索を実行
const threads = GmailApp.search(searchQuery, 0, 50);

// ラベルを取得 (存在しない場合は作成)
let label = GmailApp.getUserLabelByName('請求書関連');
if (!label) {
label = GmailApp.createLabel('請求書関連');
}

// 各スレッドにラベルを付ける
for (let i = 0; i < threads.length; i++) {
label.addToThreads([threads[i]]);
}
}

// スクリプトを実行

カスタマイズ方法:

  • searchQueryを変更することで、ラベル付けするメールの条件を調整できます。
  • GmailApp.getUserLabelByName()で指定するラベル名を変更できます。

3. 古いメールを自動でアーカイブする

特定の日付より古いメール(例:1年前)を検索し、自動的にアーカイブするスクリプトです。

function archiveOldEmails() {
// 検索クエリを定義 (1年前より古いメール)
const oneYearAgo = new Date();
oneYearAgo.setFullYear(oneYearAgo.getFullYear() - 1);
const searchQuery = 'before:' + oneYearAgo.getFullYear() + '/' + (oneYearAgo.getMonth() + 1) + '/' + oneYearAgo.getDate();

// 検索を実行
const threads = GmailApp.search(searchQuery, 0, 50);

// 各スレッドをアーカイブ
for (let i = 0; i < threads.length; i++) {
threads[i].moveToArchive();
}
}

// スクリプトを実行

カスタマイズ方法:

  • oneYearAgoの計算方法を変更することで、アーカイブする期間を調整できます。

よくある問題とトラブルシューティング

  • 検索結果が返ってこない: 検索クエリが正しいか確認してください。Gmailの検索ボックスで同じクエリを試して、期待通りの結果が得られるか確認すると良いでしょう。
  • エラーが発生する: スクリプトの実行権限が正しく設定されているか確認してください。GASのエディタで、[実行] > [承認] をクリックして、必要な権限を付与してください。
  • タイムアウトが発生する: 検索範囲が広すぎると、スクリプトがタイムアウトする可能性があります。maxパラメータを調整して、一度に処理するスレッド数を減らしてみてください。

カスタマイズ方法と応用例

  • 添付ファイルの自動ダウンロード: GmailApp.searchで見つけたメールから添付ファイルを抽出し、Google Driveに保存するスクリプトを作成できます。
  • 特定の条件でメールを転送: GmailApp.searchで見つけたメールを、特定の条件(例:特定のキーワードを含む場合)で別のメールアドレスに転送するスクリプトを作成できます。
  • AIとの連携: Gmailの内容をOpenAIなどのAIサービスに連携し、感情分析や要約を行うことも可能です。

まとめ

GmailApp.searchと定期実行を組み合わせることで、Gmailの様々な業務を自動化できます。この記事で紹介したコード例を参考に、ぜひ日々の業務効率化に役立ててください。