Gmail返信フォローアプリ — FollowupTracker

実際のビジネスシーンで使える自動化100例をGASで実装するシリーズ「GAS自働化100本ノック」。その16本目

「あの件、その後いかがでしょうか?」
見積書、提案書、稟議依頼、仕様確認などなど
「送ったけど返事が来ない」メールのフォローアップ、どうされてますか?

スプレッドシート版アプリ FollowupTracker なら、送信からの経過日数とフォロー文を設定しておくだけで、返信が来ていないスレッドに対して、フォローアップメールの下書きを自動作成してくれます。

自動で送信はしません。
「催促」というデリケートな業務の誤送信リスクを排除するため、本アプリは、あえて「下書きを準備するところまで」に限定しています。
実送信は、ユーザー自身が下書きの内容を確認した上で、手動で送信する仕様となっています。

FollowupTracker ができること

  1. 送信フォルダの未返信スレッドを自動検出してフォローアップメールの下書きを作成 — 各スレッドの最後のメッセージが「自分発」のものだけを未返信とみなし、経過日数が閾値以上なら下書きを作成

  2. 下書きまでで止まる「人の目チェック」設計 — 自動送信はしないため、誤送信・誤爆メールが届く事故が起こらない

  3. 段階別の督促テンプレ — `FT_督促ルール` に 1回目/2回目/3回目… の本文を分けて書ける(行数 = 最大下書き作成回数)

  4. 差し込み変数(`{{相手名}}` `{{相手メアド}}` `{{経過日数}}` `{{元の件名}}`) — 「丸山 様」「送信から5日経過しました」「『お見積り送付の件』について」のように個別感のある下書きが作成できる

  5. 追跡台帳で全スレッドの状態を可視化 — 1スレッド1行で督促回数(下書き作成回数)・最終督促日(最終下書き作成日)・状態(督促中/上限到達/返信あり)を記録

  6. 上限到達 → 自動打切+ラベル付与 — 最大回数まで下書きを作ったスレッドには処理済ラベルが付与され、以後の検索から除外される

  7. 相手から返信が来たら自動打切+ラベル付与 — フォロー中のスレッドに相手から返信が入ると、台帳の状態が「返信あり」に更新されてラベル付与

  8. 下書きが溜まらない経過日数判定 — 下書き作成後は「最終下書き作成日」を基準に経過日数を計算するため、自動実行間隔を短くしても閾値日数分は次の下書きが作られない

  9. 自動実行時のサマリー通知メール — 自動実行で下書きが1件以上作成された時に、指定アドレスへ「誰に何回目の下書きを作ったか」を1通にまとめて通知(手動実行・ドライランでは通知なし)

  10. ドライラン — 下書き作成なしで「どのスレッドに何回目の下書きが当たるか」を事前確認

  11. 時間トリガーで自動実行 — 指定間隔で下書き判定を回す

  12. 全体エラー(設定不足・シート欠落など)は `FT_エラー` に記録

  13. LockService による多重起動防止

動作要件

  • Googleアカウント

  • Gmail / Spreadsheet の編集権限

インストール手順

  1. 新規Googleスプレッドシートを作成

  2. メニュー「拡張機能 → Apps Script」を開く

  3. デフォルトの `コード.gs` の内容を、本記事の有料版 `コード.gs` で上書き保存する

  4. 「ファイル → +」でファイルを追加し、本記事の有料版 `セットアップ.gs` で上書き保存する

  5. プロジェクト名を任意に設定して保存

  6. スプレッドシートを再読み込み → メニュー「FollowupTracker」が表示される

  7. メニュー「初回セットアップ」を実行 → 認証ダイアログで承認(承認手順は第1回と同じ)

初回セットアップ

メニュー「FollowupTracker → 初回セットアップ」を実行すると、以下の4シートが自動生成されます。

  • `FT_設定` — 検索クエリ・経過日数・処理済ラベル・上限値などを入力

  • `FT_督促ルール` — 督促回数/件名(メモ)/本文 の対応表(サンプル3行=1回目/2回目/3回目入り)

  • `FT_追跡台帳` — 1スレッド1行のスレッド状態(自動記録)

  • `FT_エラー` — 全体エラー履歴(自動記録)

シート名の先頭 `FT_` は FollowupTracker の略で、同じスプレッドシートで他のアプリと同居しても衝突しないようにするための識別子です。

各シートの詳細は下記の `FT_設定 シート` / `FT_督促ルール シート` / `FT_追跡台帳 シート` / `FT_エラー シート` の各セクションを参照してください。

基本の使い方

  1. `FT_設定` シートの 検索クエリ を、フォロー対象にしたい送信メールを絞るクエリに書き換える(例: `in:sent newer_than:30d to:取引先ドメイン`)

  2. `FT_設定` の 経過日数 を業務に合わせて編集(例: `3` で「送信から3日返信なし」をフォロー下書き候補)

  3. `FT_督促ルール` の本文を自社のフォロー文面に合わせて編集

  4. メニュー「ドライラン」で「どのスレッドに何回目の督促下書きが当たるか」を下書き作成なしで事前確認

  5. 当たり方に納得したら、メニュー「未返信スレッドのフォロー下書きを作成」を実行

  6. Gmail の 「下書き」フォルダ を開き、作成された下書きを1通ずつ確認 → 問題なければ送信ボタンで送信、不要なら下書きを削除

  7. 運用に乗せるならメニュー「自動実行 ON」で時間トリガー登録(自動実行でも実送信は発生せず、下書きが定期的に作られるだけ)

FT_設定 シート

検索クエリ・経過日数・処理済ラベル名・1回の督促上限・自動実行間隔 などアプリ動作のすべての設定を、このシートに A列キー/B列値 で入力します。

FT_設定シートの例

入力項目

  • 検索クエリ (必須) — Gmailの検索バーで使うのと同じ書式。フォロー対象は 自分の送信フォルダ なので `in:sent` を起点にする。下記「検索クエリの書き方」参照

  • 経過日数 (必須) — 自分の最終送信または最終下書き作成からこの日数以上経過していたら下書き作成候補にする。整数(小数点もOK、`0` で即時作成)

  • 処理済ラベル (必須) — 上限到達・相手返信ありで打切となったスレッドに付ける目印のラベル名。存在しなければアプリが自動作成

  • 1回の督促上限 — 1回の実行で下書きを作成する最大件数(1〜100、デフォルト30)。GAS6分制限を超えないための上限。実送信はしないため Gmail の1日100通制限の対象外だが、下書きフォルダが大量の下書きで溢れるのを防ぐ意味でも上限を設けている

  • 自動実行間隔(分) — 自動実行ON時の実行頻度(自動実行設定の詳細は下記)

  • 通知先メアド — 自動実行で督促下書きが1件以上作成された時に通知メールを送る宛先(任意。空欄なら通知しない)

検索クエリの書き方

Gmail検索バーで使える演算子がそのまま使えます。
本アプリは 自分が送ったメールに対する督促 なので、必ず `in:sent` を起点に絞り込みます。

  • 送信箱全体から直近30日 — `in:sent newer_than:30d`

  • 取引先の特定ドメインだけ — `in:sent newer_than:30d to:example.co.jp`

  • 件名で識別できる — `in:sent newer_than:30d subject:お見積り`

  • 社外宛だけ(社内のやり取りは除外) — `in:sent newer_than:30d -to:自社ドメイン.co.jp`

`newer_than:` で「いつまで遡るか」を絞っておくのが運用上のコツです。古すぎる送信メールまで対象にすると、すでに別経路で完了した案件にも下書きが作られかねません(下書きは送信されないので相手には届きませんが、下書きフォルダが散らかります)。

経過日数の決め方

「送ってから何日経ったら督促下書きを作るか」の閾値です。
判定基準は 「直近の自分送信時刻」と「最終下書き作成日」のうち遅い方 からの経過日数です。

  • 1〜2日 — 即対応を期待する案件向け(社内稟議・短期締切)

  • 3〜5日 — 一般的なビジネスメール(提案書フィードバック・面談調整など)

  • 7〜14日 — 長期検討案件(年契約見積・採用エントリーなど)

「経過日数」と「自動実行間隔(分)」は別物です。
経過日数は 下書きを作る/作らないの閾値 、自動実行間隔は アプリが判定を回す頻度
例えば経過日数3・自動実行間隔60分にすると、「3日経過した未返信スレッドに、毎時0分ごとに下書き作成判定が走る」動作になります。

本アプリは 下書きを作るだけで実送信はしない ため、ナイーブに実装すると「下書きを作ってもスレッドの最終メッセージは変わらないので、次の自動実行時にまた閾値超過と判定されて下書きが連続作成される」事故が起きえます。
これを防ぐため、本アプリは経過日数判定の基準を `max(スレッド最終メッセージ日時, 追跡台帳の最終下書き作成日)` で計算します。

下書きを作った時刻が台帳に記録されるので、自動実行間隔を15分にしても 下書きが15分おきに連発されることはなく 、下書き作成のテンポは経過日数と同じおおよそ3日おきになります(次の判定で「最終下書き作成日からまだ3日経っていない」として自動スキップされる)。

なお、ユーザーが下書きを送信または削除しても、台帳側のカウントには影響しません。
「下書きが作られた」事実だけがカウントの基準なので、 下書きを削除すると次の判定タイミングで次の段階(例: 1回目→2回目)の下書きが作られます
同じ段階を再試行したい場合は、下書きを編集して送信するか、対象スレッドに手動で処理済ラベルを付けてから台帳をクリアしてください。

処理済ラベル名

上限到達・相手返信ありで打切となったスレッドに付ける目印のラベル名です。存在しなければアプリ起動時に自動作成されます。

  • このラベルが付いているスレッドは、次回以降の検索から自動的に除外される

  • フォロー中(上限未到達)のスレッドにはラベルは付かない — 次回実行時に経過日数を再判定し、必要なら2回目・3回目の下書きを作成する

  • ラベル名は1アプリ1個固定。他アプリの処理済ラベルとは別名にする(衝突回避)

自動実行の設定

  1. `FT_設定` の `自動実行間隔(分)` に数値を入力(例: 60)

  2. メニュー「自動実行 ON」を実行 → 確認ダイアログで間隔を確認して `YES`

  3. オフにする時はメニュー「自動実行 OFF」

手動でトリガーを変更したい時

メニューを使わずに自分でトリガーを編集することもできます。

  1. GASエディタの左サイドバー「⏰ トリガー」を開く

  2. 既存トリガーは右側の ✐ マークから編集、`…` メニューから削除

  3. 新規は「+ トリガーを追加」で `runAuto` 関数・時間主導型・希望の間隔を選択して保存

FT_督促ルール シート

督促回数ごとの 本文テンプレ を、1行1回数で入力するシートです。 行数 = 最大下書き作成回数 で、3行書けば3回まで、5行追加すれば5回まで下書きを作成できます。

FT_督促ルール シートの例
  • A列「督促回数」 — 1以上の整数。アプリ側で昇順ソートするので、シート上での行順は気にしなくてもよい(ただし読みやすさのため昇順で書くのを推奨)

  • B列「件名(メモ用)」 — 表示用のメモ。実際の下書き件名としては使われない(`thread.createDraftReply` は元の件名に `Re:` を自動付与するため)。担当者がシート上で「何回目はどんな文面か」を一覧できるように残してある

  • C列「本文」 — 下書きの本文として作成される督促文。`{{相手名}}` `{{相手メアド}}` `{{経過日数}}` `{{元の件名}}` の差し込み変数が使える

差し込み変数の書き方

C列(本文)に以下4種類の差し込み変数を書けます。

  • `{{相手名}}` — 元の送信メールの `To:` から氏名部分を抽出。`"丸山太郎" maruyama@example.co.jp` → `丸山太郎`。 氏名部分がなくメアドのみの宛先 の場合は `{{相手メアド}}` の値(メアド)にフォールバックする(「 様」だけになるのを防ぐ)

  • `{{相手メアド}}` — `To:` ヘッダーからメアド部分を抽出

  • `{{経過日数}}` — 自分の最終送信からの経過日数(整数日、小数点切り捨て)

  • `{{元の件名}}` — スレッドの 最初のメッセージ の件名(つまり自分が最初に送ったメールの件名)

本文を複数行で書く

`FT_督促ルール` のC列(本文)に複数行を入れる時は、セル内で `Alt+Enter` で改行します。

ルール追加・編集の流れ

  1. シートに新しい行を追加し、督促回数・本文を入力(件名は空欄でも動く)

  2. メニュー「ドライラン」で、新しいルールが意図通りのスレッドに当たるか確認

  3. 問題なければメニュー「未返信スレッドのフォロー下書きを作成」で本番実行

  4. Gmail の下書きフォルダで作成された下書きの文面を確認し、手動で送信

FT_追跡台帳 シート

本アプリの 可視化の中心となるシート
1スレッドにつき1行が記録され、下書きを作るたびに「督促回数」「最終督促日」「状態」が更新されます。

各列の見方

初回送信日        スレッドID     相手名    相手メアド          元の件名           督促回数 最終督促日        状態      スレッドURL
2026-05-15 09:12  18f3a4b...  丸山太郎  maruyama@example…   先週の提案書ドラフト    2  2026-05-22 09:30  督促中    https://...
2026-05-14 10:45  18f3b9c...  佐藤花子  sato@…              お見積り送付の件        3  2026-05-22 10:00  上限到達  https://...
2026-05-13 11:30  18f3c2d...  山田次郎  yamada@…            来週MTG日程ご相談       1  2026-05-22 11:35  返信あり  https://...
  • 初回送信日 — 自分がこのスレッドに最初にメールを送った日(スレッドの最初のメッセージの送信日)

  • スレッドID — Gmailスレッドの内部ID。台帳と実スレッドを紐付けるためのキー(手で編集しないこと)

  • 相手名/相手メアド — 直近の自分送信時の `To:` から抽出した宛先情報

  • 元の件名 — スレッドの最初のメールの件名(`Re:` 抜き)

  • 督促回数 — このスレッドで作成した督促下書きの累積回数(実送信ではなく、本アプリが下書き作成した回数)

  • 最終督促日 — 最後に督促下書きを作成した日時(経過日数判定の基準にもなる)

  • 状態 — `督促中`/`上限到達`/`返信あり` の3値

  • スレッドURL — Gmailのそのスレッドへの直リンク(クリックでGmailが開く、下書きはスレッドビュー内に表示される)

状態列の意味

  • `督促中` — まだ最大回数に達していない、相手からの返信も来ていない。次回実行時も下書き作成候補

  • `上限到達` — `FT_督促ルール` の最大回数まで作り終わって打切済み。処理済ラベル付与で以後の検索から除外

  • `返信あり` — 督促中に相手から返信が入って打切済み。処理済ラベル付与で以後の検索から除外

督促回数と「実送信回数」の違い

督促回数 ≠ 実送信回数 です。
本アプリは下書きを作るところまでしか面倒を見ないので、台帳の「督促回数」は 本アプリが下書きを作成した累積回数 を示します。

  • ユーザーが下書きを送信したか・編集してから送信したか・削除したかは、本アプリは追跡しません

  • 「2回目の下書きを作って削除した」ケースでも台帳の督促回数は2のままで、次は3回目(=最終)の下書きが作られます

  • 実際にどの督促が相手に届いたかを正確に追いたい場合は、Gmail のスレッド画面で送信履歴を確認してください

台帳から読み取れること

  • 状態列でフィルタ → 「上限到達」だけ抽出 — 自動下書き作成では届かなかった相手の一覧。 担当者が手動で電話・別アプローチに切り替える対象

  • 「督促回数」を集計 — 月次で「平均何回下書きを作ったか」が見える

  • 「初回送信日 → 最終督促日」の差 — 案件あたりの督促サイクル時間

  • 「返信あり」の比率 — 督促が功を奏した割合の参考値(送信した下書きの分のみ反映)

台帳のクリア

メニュー「追跡台帳のデータをクリア」で全件削除できます。

ただし以下の注意点があります。

  • Gmail側の 処理済ラベルは残る ので、ラベル付きのスレッド(上限到達・返信あり)には再度下書きが作成されない

  • ラベルが付いていないスレッド(`督促中` だが上限未到達)は、次回実行時に 督促回数1からカウントし直し になり、再び1回目の下書きが作成される。「すでに作成・送信した督促を「無かったこと」にして1回目から作り直したい」場合のみクリアする

通常は台帳をクリアする必要はありません。
台帳が肥大化してきたら「状態が `上限到達` または `返信あり` の行だけ手動削除」のような部分クリアの方が安全です。

FT_エラー シート

設定欠落・シート欠落・想定外例外などの 行に紐づかない全体エラー を発生順に記録します。
個別スレッドへの督促失敗(権限エラー等)もここに記録されます。


コード.gsとセットアップ.gsは以下より

この記事の続きはnoteで公開しています。

noteで続きを読む

GAS,自動化自動化

Posted by botw