Gmail下書きのバックアップ漏れを保存前に発見|GASで件数だけをdry-run監査
ツールおじ|GoogleアカウントをAIエージェント化
メール下書きのバックアップを自動化したい一方で、本文や宛先をログへ出すのは不安ではないでしょうか。この記事では、Gmailの下書きを変更せず、件数・空の下書き・宛先未入力だけを集計する事前監査を試します。
この監査で先に止められること
- 想定件数を超えたままバックアップ処理を始める
- 件名と本文が空の下書きを保存対象へ混ぜる
- 宛先未入力を完成済みメールと誤認する
- 件名、本文、宛先を実行ログへ残す
このコードは下書きの作成、更新、送信、削除をしません。Gmailが標準で行う下書き保存を置き換えるものでもありません。
コピーして使える最小コード
const DRAFT_AUDIT_CONFIG = Object.freeze({
DRY_RUN: true,
MAX_DRAFTS_TO_CHECK: 50,
WARNING_COUNT: 40
});
function auditGmailDraftBackupPlanFree() {
if (DRAFT_AUDIT_CONFIG.DRY_RUN !== true) {
throw new Error('安全のためDRY_RUN=trueで実行してください。');
}
const maxDrafts = Number(DRAFT_AUDIT_CONFIG.MAX_DRAFTS_TO_CHECK);
const warningCount = Number(DRAFT_AUDIT_CONFIG.WARNING_COUNT);
if (!Number.isInteger(maxDrafts) || maxDrafts < 1 || maxDrafts > 100) {
throw new Error('MAX_DRAFTS_TO_CHECKは1〜100の整数にしてください。');
}
if (!Number.isInteger(warningCount) || warningCount < 1 || warningCount > maxDrafts) {
throw new Error('WARNING_COUNTは1〜MAX_DRAFTS_TO_CHECKの整数にしてください。');
}
const allDrafts = GmailApp.getDrafts();
const drafts = allDrafts.slice(0, maxDrafts);
const summary = {
dryRun: true,
totalDraftsFound: allDrafts.length,
checkedDrafts: drafts.length,
emptyDrafts: 0,
missingRecipientDrafts: 0,
overWarningCount: allDrafts.length >= warningCount,
truncated: allDrafts.length > drafts.length
};
drafts.forEach(function(draft) {
const message = draft.getMessage();
const subject = String(message.getSubject() || '').trim();
const body = String(message.getPlainBody() || '').trim();
const recipient = String(message.getTo() || '').trim();
if (!subject && !body) summary.emptyDrafts += 1;
if (!recipient) summary.missingRecipientDrafts += 1;
});
// 本文・件名・宛先・下書きIDはログへ出さない
console.log(JSON.stringify(summary));
if (summary.truncated) {
console.warn('確認上限を超えています。上限より後ろの下書きは未確認です。');
}
return summary;
}実行前の準備
1. Google Apps Scriptで新しい検証用プロジェクトを作ります。
2. 上のコードを貼り付け、タイムゾーンを普段使う地域へ合わせます。
3. `MAX_DRAFTS_TO_CHECK`は最初は10程度に下げても構いません。
4. `auditGmailDraftBackupPlanFree`を選び、手動で1回だけ実行します。
5. Gmailの読み取り権限を確認し、意図しない権限が表示されたら中止します。
ログの読み方
- `checkedDrafts`: 今回確認した件数
- `emptyDrafts`: 件名と本文が両方空だった件数
- `missingRecipientDrafts`: 宛先未入力だった件数
- `overWarningCount`: 下書き総数が警告値以上か
- `truncated`: 確認上限より後ろに未確認分があるか
個々のメール内容は出力しません。件数だけで判断できない場合は、Gmail画面で対象を手動確認してください。
自動実行へ進む前の停止条件
- `truncated`がtrueのまま
- 空または宛先未入力の件数が想定外
- 共有端末や共有アカウントで実行している
- 実行ログの閲覧範囲を確認できていない
- 業務ルール上、メール本文のスクリプト読取が認められていない
制限と安全上の注意
- この例は監査専用で、下書きをスプレッドシートへ保存しません。
- 本文は空判定のため実行中に読み取りますが、ログや外部サービスへ送信しません。
- 下書きが多い環境では実行時間やGmailサービスの利用上限に達することがあります。
- 定期トリガーを付ける前に、少量の下書きで手動実行し、権限とログを確認してください。
- 復元や上書きは自動化せず、必要な場合も人が内容を確認して行ってください。
まとめ
いきなりバックアップ処理を動かす前に、対象件数と入力不備だけをdry-runで確認すると、過剰取得や機密情報のログ出力を避けやすくなります。監査結果に問題がないことを確認してから、保存方法や運用範囲を決めてください。
関連する有料Tips「Gmail下書きテンプレGAS Pro」を見る

GasおじのTips商品一覧を見る

※学習・検証用の例です。実データへ適用する前に、検証用アカウントまたは影響を限定した環境で確認してください。Google公式・Google公認の商品ではありません。
