Gmailのラベル管理をGASで自動化
中小企業の経営者やフリーランスの皆さん、こんにちは。GASおじです。忙しい毎日、メール整理に時間を取られていませんか?Gmailのラベル管理をGoogle Apps Script(以下GAS)で自動化すれば、効率アップ間違いなし。しかも、Googleアカウントの利用枠内で追加の専用SaaS料金なし。GASの実行上限やクォータはあるものの、コストを抑えつつ便利に使えますよ。
今回は既存のラベルデータを消さずに安全に処理するためのポイントを押さえつつ、実際に使えるコード例と導入手順を解説します。
■ なぜGmailのラベル管理を自動化すべきか?
メールの数が増えるほど、手動でラベルを付けたり整理したりするのは時間のムダ。管理がルーズになると重要なメールを見落としたり、対応が遅れたりする原因にもなります。GASで自動化すれば、
・新着メールを条件に応じて自動でラベル付け
・定期的にラベル状況を確認し、まとめてレポート作成
・誤操作で元データを消してしまうリスクを回避しながらバックアップも確保
といったことが可能に。自動化で生産性が上がれば、コスト削減にも繋がります。
例として、メールを「重要」「顧客」「請求」などキーワードで振り分ける仕組みを作った場合、手作業で1日30分かけていた作業が5分に短縮できたとしましょう。
仮に時給2500円の作業時間削減効果を計算すると、
(30分 - 5分) × 20営業日 × 2500円 ÷ 60分 = 約20,833円/月
年間では約25万円。もちろんこれは一例で保証値ではありませんが、GAS導入の目安として参考にしてください。
■ 初期設定と必要な権限について
GASを使うにあたっては、初回に以下の準備が必要です。
・GoogleアカウントでGoogleドライブにアクセス。
・Google Apps Scriptで新規プロジェクトを作成。
・スクリプトの権限設定で「Gmail API」と「Google Drive API」へのアクセスを許可。
この2つのAPIは、メールのラベル操作とバックアップファイルの保存に必須です。実行時に認証画面が表示されるので、必ず自分のGmailアカウントで許可してください。
また、個人情報を扱うため、スクリプトの管理は信頼できる環境で行い、不特定多数に公開しないことが重要です。
■ バックアップと復元の基本設計
既存のメールやラベルを直接編集・削除すると、誤操作のリスクが高まります。GASおじは、必ず「新しい日時付きシート」や「新規ファイル」に結果を書き出す方式を推奨。
こうすれば、
・元データを変更しないため安全
・いつでもバックアップから復元可能
・ロールバックも容易
となります。
復元手順は、
・バックアップシートから必要なデータをコピー
・Gmailのラベル管理画面やGASで再適用
という流れです。自動化の前に必ずバックアップを取りましょう。
■ Gmailラベル管理の具体的なGASコード例
以下のサンプルは、
・指定キーワードに応じてメールにラベルを付ける
・処理結果を新規スプレッドシートにまとめてバックアップ
・既存データは消さず、追記形式で保存
という仕様です。
function manageGmailLabels() {
const LABEL_MAP = {
"重要": ["重要", "urgent", "至急"],
"顧客": ["customer", "client", "顧客"],
"請求": ["invoice", "請求書", "支払い"]
};
// 新規バックアップ用スプレッドシートを作成
const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
const backupSpreadsheet = SpreadsheetApp.create(`Gmailラベル管理バックアップ_${timestamp}`);
const sheet = backupSpreadsheet.getActiveSheet();
sheet.appendRow(["メールID", "件名", "送信者", "付与ラベル", "日時"]);
// Gmail検索クエリ例(過去7日以内の未読メール)
const query = "is:unread newer_than:7d";
const threads = GmailApp.search(query, 0, 50); // 上限50スレッド
let processedCount = 0;
threads.forEach(thread => {
const messages = thread.getMessages();
messages.forEach(message => {
const subject = message.getSubject() || "";
const from = message.getFrom() || "";
let appliedLabels = [];
// キーワード判定
for (const [labelName, keywords] of Object.entries(LABEL_MAP)) {
if (keywords.some(keyword => subject.includes(keyword) || from.includes(keyword))) {
// ラベルを取得(存在しなければ自動生成)
let label = GmailApp.getUserLabelByName(labelName);
if (!label) label = GmailApp.createLabel(labelName);
label.addToThread(thread);
appliedLabels.push(labelName);
}
}
if (appliedLabels.length > 0) {
// バックアップシートに記録
sheet.appendRow([
message.getId(),
subject,
from,
appliedLabels.join(", "),
new Date()
]);
processedCount++;
}
});
});
Logger.log(`処理済みメール数: ${processedCount}`);
Logger.log(`バックアップシートURL: ${backupSpreadsheet.getUrl()}`);
}
□ ポイント解説
・既存データを消さないラベルは新規で作成または既存ラベルに付与のみ。過去のラベルは消さず、重複付与も防止はしていませんが安全重視。
・バックアップは新規ファイルで作成実行ごとに新しいスプレッドシートを作成。誤操作時のロールバックに使えます。
・処理対象の絞り込み未読かつ7日以内のメールに限定し、実行時間とAPIコストを節約。
■ installable triggerの設定と復元手順
このスクリプトを定期実行したい場合は「installable trigger」を使います。手動で設定する手順は以下。
・スクリプトエディタの「編集」→「現在のプロジェクトのトリガー」へ
・「トリガーを追加」をクリック
・実行する関数に manageGmailLabels を選択
・イベントの種類は「時間主導型」から「日付ベースのタイマー」などを設定(例:毎日午前9時)
・保存し、権限を再度許可
復元手順は、バックアップファイルから対象メールIDやラベルを抽出し、該当メールに手動または別スクリプトでラベルを再付与します。GASで復元自動化も可能ですが、慎重に行いましょう。
□ 注意点とまとめ
・このスクリプトはGoogleアカウントの利用枠内で動作します。実行時間やAPIコール数に制限がありますので、大量メールの一括処理は分割実行を推奨。
・専用SaaS料金は発生しませんが、Google Apps Scriptのquota・実行上限には注意。
・個人情報を扱うため、スクリプトは安全な環境で管理し、権限の取り扱いに注意してください。
■ GASの相談や導入サポートを見たい方へ
この記事と近い作業をGoogleシートやGASで整えたい方は、Gasおじのココナラ出品一覧もご覧ください。
■ 関連サービス
GASおじのココナラ出品一覧
日々の記録、確認、通知、投稿準備などを、GoogleスプレッドシートとGASで無理なく自動化する相談ができます。