Gmail:受信メールを監視してスプレッドシートへ自動転記 3(件名+日時ハッシュ)
- egachira0250
- 4 日前
- 読了時間: 3分
Gmailに届いたメールをGoogle Apps Script(GAS)を使ってスプレッドシートに自動転記する方法は、業務効率化に非常に役立ちます。しかし、処理済みメールと未処理メールをどう区別するかが非常に重要です。処理済みのメールを再び転記してしまうと、重複データが発生し、業務に支障をきたすおそれがあります。
本記事では、メールの自動転記における「処理済み管理」の方法について、以下の4つのアプローチを紹介すると共に、「件名+日時ハッシュ」の具体的な実装方法を説明します。
■ 動作環境
OS: Windows 10 Home(64ビット)
Chrome: 136.0.7103.93(Official Build) (64 ビット)
■ 処理済み管理の4つの手法
手法 | 概要 | メリット | デメリット |
---|---|---|---|
ラベル管理 | 処理済みのメールに専用ラベルを付ける | 視覚的にわかりやすい/Gmail上でも確認可 | ラベルの付け忘れ・重複処理の可能性 |
スレッドID記録 | スレッドIDをスプレッドシートやプロパティに保存 | 転記済みの判別が確実 | スクリプトがやや複雑/プロパティ制限あり |
件名+日時ハッシュ | 件名と日時で一意キーを生成して判別 | 実装がシンプル | 類似メールで誤判定の可能性あり |
未既読管理 | 未読メールのみを転記、処理後に既読に | 実装が簡単/Gmail標準機能と連携しやすい | 既読操作で誤判定のリスク/チーム運用に不向き |
この中で今回は、件名+日時ハッシュを使った管理方法について詳しく解説します。
■ 件名+日時ハッシュ方式を活用したGmail転記スクリプトの作り方
□ 基本的な仕組み
Gmailの受信トレイからメールを取得
各メールの「件名+受信日時」を結合してハッシュキーを生成
そのハッシュキーが記録済みか確認
記録されていなければ、スプレッドシートに転記
転記後にハッシュキーを保存
□ スクリプト案
getSubject():メールの件名を取得
getDate():メールの受信日時を取得
Utilities.base64Encode():テキストを簡易ハッシュ化(文字列比較を高速化)
appendRow():スプレッドシートにデータを追加
GmailAppのsearch(query):検索条件を絞って処理対象を限定
□ なぜハッシュ化が必要なのか?
「件名+日時」のまま記録しても判定自体は可能ですが、以下のような理由でハッシュ化(この例では Base64 変換)を採用しています。
理由1:データの軽量化と整形
生の件名や日時文字列は長く、特殊文字(絵文字や改行、記号など)を含む可能性があります。
ハッシュ化してしまえば、固定長の安全な文字列になるため、スプレッドシートに保存しても扱いやすくなります。
理由2:誤動作の防止
件名に含まれる改行や特殊記号が、シートやスクリプトでの比較処理に影響することがあります。
文字列のまま比較するより、ハッシュで比較する方が安定性が高いです。
理由3:パフォーマンスの向上
比較対象がすべて整形された短い文字列(ハッシュ)であれば、スプレッドシートの検索処理も高速になります。
特に件数が増えてきた場合に効率の差が出やすいです。
このような理由により、「件名+日時」をそのまま使うのではなく、簡易なハッシュとして扱う方が現場では安全で現実的な選択になります。
■ まとめ
Gmailの受信メールを自動でスプレッドシートに転記する際、重複防止のための「処理済み管理」は不可欠です。
今後チーム利用や大量メールの処理に拡張する場合は、スレッドIDやラベル管理方式なども検討し、ニーズに合った手法を選びましょう。
その他の粋な備忘録も、合わせてご覧ください。 (参考備忘録)Gmail:一括メール送信 (参考備忘録)Gmail:受信メールを監視してスプレッドシートへ自動転記 1(ラベル管理) (参考備忘録)Gmail:受信メールを監視してスプレッドシートへ自動転記 2(スレッドID記録) (参考備忘録)Gmail:受信メールを監視してスプレッドシートへ自動転記 3(件名+日時ハッシュ) (参考備忘録)Gmail:受信メールを監視してスプレッドシートへ自動転記 4(未既読管理) |
תגובות