Gmailメールをラベル別にGoogleDriveへ自動保存する手順(無料 Apps Script 版)

o_wani
Contents
背景と目的
メールボックスは読み終えたら埋もれてしまう“受信箱のブラックホール”になりがちですが、実は 過去のメルマガ・通知メール など貴重な情報の宝庫です。
- Drive に置いておけば Google 検索はもちろん、Notion・スプレッドシート・生成AI など他ツールとも連携しやすい
- Markdown 形式なら テキストマイニングや静的サイト化もラクでObsidanとの相性も最高◎
そのための第一歩として、「Gmail をラベル別に Drive へ分類保存」→「いつでも活用できる形に整理」 する無料ソリューションを作ってみました。
やりたいこと
- Gmail に付けたラベルごとにGoogle Drive の指定フォルダへ
- 件名+本文を Markdown 形式で保存
完成イメージ▼
My Google Drive
├── メルマガ_A
│ ├── 20250703_080500_XXXXXXのメルマガ.md
│ └── 20250710_081000_XXXXXXのメルマガ.md
└── メルマガ_B
└── 20250630_090200_●●●●.md
事前準備
GmailとGoogleDriveを利用することが前提です。
必要なもの | 備考 |
---|---|
Google アカウント | 個人 Gmail で OK |
Gmail ラベル | 例: メルマガA |
Google Drive フォルダ | バックアップ先、フォルダ ID を後で使う |
ポイント: ラベルとフォルダは 1 対 1。複数ラベル → 複数フォルダも設定可能です。
手順(所要 10 分)
1. Gmail でラベル+フィルタを作る
- Gmail 検索欄に条件を入力例
from:(googlealerts-noreply@google.com)
→ Enter - 右端フィルタアイコン → フィルタを作成
- アクションで
ラベルを付ける
→新しいラベル
を選択する 例)Googleアラート
を入力して[作成]- 「一致するスレッドにもフィルタを適用する」 にチェック → [フィルタを作成]
「一致するスレッドにもフィルタを適用する」ことで、すでに受信しているメールを対象にラベル付けを行います。
2. Google Drive でフォルダを用意
My Drive
内で +新規 → フォルダ- フォルダ名:
Newsletters
(自由) - アドレスバー URL
folders/XXXXXXXXXXXXXXXXXXXXX
の部分が フォルダ ID「XXXXXXXXXXXXXXXXXXXXX
」
3. Apps Script プロジェクトを作成
- https://script.google.com/ → 新しいプロジェクト
- ファイル名を
Gmail_to_Gdrive
などで作成
4. スクリプトを貼り付けてカスタマイズ
/**
* Gmail ラベル別にメールを Markdown で Drive 保存
* - 重複保存防止に DONE_LABEL を使用
* - 6分でタイムアウトするので注意
*/
function backupNewsletterMD() {
// ==== 編集するのはここだけ =========================
const CONFIG = {
'Gmailのラベル1': 'GoogleDriveのフォルダ1_ID', // ← Drive フォルダ ID
'Gmailのラベル2': 'GoogleDriveのフォルダ2_ID', // ← Drive フォルダ ID
'Gmailのラベル3': 'GoogleDriveのフォルダ3_ID', // ← Drive フォルダ ID
};
const DONE_LABEL = 'BackedUp'; // 保存済みフラグ
const BATCH = 20; // 1 回あたりのスレッド数
// ======//編集するのはここだけ=========================
// ラベル(保存済みフラグ)を取得 or 作成
const doneLabel = GmailApp.getUserLabelByName(DONE_LABEL) || GmailApp.createLabel(DONE_LABEL);
// ラベルごとに処理
Object.entries(CONFIG).forEach(([labelName, folderId]) => {
const folder = DriveApp.getFolderById(folderId);
// Gmail 検索で未バックアップ&非ゴミ箱/迷惑メールだけ取得
const query = `label:"${labelName}" -label:"${DONE_LABEL}" -in:trash -in:spam`;
const threads = GmailApp.search(query, 0, BATCH);
threads.forEach(thread => {
thread.getMessages().forEach(msg => {
const ts = Utilities.formatDate(msg.getDate(), Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss');
const subj = (msg.getSubject() || 'No-subject').replace(/[\\/:*?"<>|]/g, '_').substring(0, 80);
const md = `# ${subj}\n\n${msg.getPlainBody()}`;
folder.createFile(`${ts}_${subj}.md`, md, MimeType.PLAIN_TEXT);
});
doneLabel.addToThread(thread); // 重複保存防止
});
});
}
カスタマイズ:
編集するのはここだけ、と記載している箇所を自身の環境に置き換えてください
5. スクリプトを実行 & 認証を許可
スクリプトを実行するために、GmailをGoogleDriveに対してプログラムからアクセスできる権限を付与する。
- エディタ上部 ▶ 実行 → 権限を確認
- Google アカウント選択
- 「このアプリは Google で確認されていません」画面 → 詳細 → {プロジェクト名} に移動
[詳細]をクリックする
[安全ではないページに移動]をクリックする - Gmail と Drive のアクセスを 許可し、[続行]をクリックする
この時点で「▶︎実行」をクリックして実行してみます。すでに問題なく動くはずです。

問題なければ、自動実行を設定しましょう。
6. 自動化するトリガーを設定
- エディタ左バー 時計アイコン(トリガー) → +トリガーを追加
- トリガーを追加する
実行する関数:backupNewsletterMD
イベントのソース: 時間主導型 → 1時間おき(任意) - 保存 で完了
7. 動作テスト
- Drive フォルダに
.md
ファイルが生成 → OK - Gmail スレッドに
BackedUp
ラベル付与 → OK - 新着メールも 例)1時間後に自動保存 → OK
まとめ
- 完全無料 & コード 50 行未満 で Gmail を自動整理。
- ラベル運用+Apps Script だけなので導入しやすい。
- カスタムは
CONFIG
と保存ロジックをいじるだけ。

ObsidanでGoogleDriveを保存先に利用しているので、同じフォルダ内にするとなんかできそう🤔
STAFF