GASでGmail検索!GmailApp.search完全ガイド

結論から言うと、GmailApp.search() をマスターすれば、受信メールの転記・抽出・通知業務を完全に自動化できます。 Google Apps Script(GAS)でGmailを操作する際、検索条件(演算子)を正しく指定することが効率的なスクリプト作成の鍵となります。

本記事では、特定条件(日付、件名、送信者、未読、添付ファイルの有無)による絞り込みから、AND/ORを組み合わせた高度な複数条件検索まで、実践的なサンプルコード付きで分かりやすく解説します。

基本編:日付・件名・送信者・ラベルでの検索指定方法

GASの GmailApp.search(query) メソッドでは、Gmailの検索窓に入力する「検索演算子」をそのまま文字列として query に渡すことでメールを取得できます。

1. 日付指定(after / before, older_than / newer_than)

要点:過去の特定日付での絞り込みや、「◯日以内」「◯か月前」といった相対的な期間指定が可能です。 

特定の開始日・終了日を指定する場合は after:before: を使用し、相対的な期間(日数・月数)を指定する場合は newer_than:older_than: を使用します。

2. 件名指定(subject:)

要点:メールの件名(Subject)に含まれる特定のキーワードをピンポイントで検索します。

完全一致ではなく部分一致で検索されます。スペースを含むキーワードを指定する場合はダブルクォーテーションで囲みます。

3. 送信者指定(from:)

要点:特定の差出人(メールアドレスまたは表示名)からのメールを絞り込みます。

システムからの自動通知メールや特定顧客からの受信メールをトリガーにして処理を行う際に不可欠な設定です。

4. ラベル指定(label:)

要点:Gmail上で既に付与されているラベルを条件にして対象メールを抽出します。

手動またはGmailフィルタで自動付与されたラベル(ネストされたラベル含む)を指定して処理できます。

応用編:複数条件(AND / OR)を組み合わせた高度な検索

AND検索(半角スペース区切り / 丸カッコ)

要点:複数の条件を「すべて満たす」メールを抽出する場合は、条件を半角スペースで区切るか、丸カッコ () でグループ化します。

OR検索(波カッコ {})

要点:「いずれかの条件を満たす」メールを抽出する場合は、条件を波カッコ {} で囲むか OR(大文字)を使用します。

複合検索のサンプルコード

以下は「特定送信者かつ未読」または「特定件名かつ添付ファイルあり」といった複雑なロジックを1行のクエリで実行するコード例です。

便利演算子:未読・既読・添付ファイルの判定

Gmail検索では、状態判定用の演算子を活用することで、自動化処理の対象をさらに正確に絞り込むことができます。

演算子意味・概要実務での利用例
is:unread未読メールのみ対象自動転記後に既読化(markRead())する処理
is:read既読メールのみ対象処理済みログのアーカイブ作成
has:attachment添付ファイルがあるメール添付PDF/CSVをGoogleドライブへ自動保存
filename:.pdf特定拡張子の添付ファイル請求書(PDF)のみを自動収集
is:starredスターが付いているメールユーザーがフラグを立てたメールのみ処理

注意点・セキュリティ:GAS実行権限と検索上限(Quota)

GmailApp.search() を実務運用する際は、以下の制限事項(Quota)および仕様を念頭に置いて設計してください。

  1. 取得件数の上限(デフォルトと最大値): GmailApp.search(query) はデフォルトで最大50件のスレッドしか取得しません。50件以上を安全に処理したい場合は、第2引数と第3引数でオフセットと取得件数を明示的に指定します(例: GmailApp.search(query, 0, 500))。
  2. スクリプトの実行時間制限: GASの無料アカウント(Google Workspace標準)では、1回のスクリプト実行上限時間は6分(Workspace有料版は30分)です。大容量の検索や大量メールのルーピング処理を行うとタイムアウトエラーが発生します。
  3. 実行権限(スコープ): 初回実行時にはGmailアクセスへの承認ダイアログが表示されます。組織内展開時はGoogle Workspace管理者のセキュリティ方針に沿ってアクセス権限を付与してください。

FAQ(よくある質問)

検索結果が50件しか取れません。どうすれば全件取得できますか?

GmailApp.search(query, start, max) を使用します。例えば GmailApp.search(query, 0, 500) のように最大件数を指定(最大500件まで)することで、一括取得が可能になります。

newer_than と after の違いは何ですか?

after:2026/01/01 のように具体的な日付を固定で指定するのが after であり、newer_than:7d のように「実行時点から7日前以内」という相対的期間を指定するのが newer_than です。定期実行スクリプトには newer_than の利用が推奨されます。

まとめ & 受託開発のご案内

GmailApp.search() の検索条件を正しく記述することで、受信メールの自動分類、Googleスプレッドシートへの転記、SlackやLINEへの自動通知など、日常の業務コストを劇的に削減できます。

「自社業務に合わせた複雑な抽出ロジックを作りたい」「スプレッドシートやチャットツールとの高度な連携システムを構築したい」など、自社内での開発・保守が難しい企業様は、ぜひ Civic Tech Akita へご相談ください。

自社仕様へのGASカスタマイズやシステム連携をお任せください

「自社業務に合わせた処理を追加したい」「他ツールと自動連携させたい」など、小規模GAS開発(15万円〜)から伴走支援いたします。

※オンラインでのヒアリング・仕様設計から柔軟に対応いたします

\ 最新情報をチェック /

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA