Google

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

GmailtoGdrive
o_wani

背景と目的

メールボックスは読み終えたら埋もれてしまう“受信箱のブラックホール”になりがちですが、実は 過去のメルマガ・通知メール など貴重な情報の宝庫です。

  • 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 でラベル+フィルタを作る

  1. Gmail 検索欄に条件を入力例 from:(googlealerts-noreply@google.com) → Enter
  2. 右端フィルタアイコン → フィルタを作成

    gmail_filter
  3. アクションで ラベルを付ける新しいラベル を選択する

    gmail_label
  4. 例)Googleアラートを入力して[作成]

  5. 「一致するスレッドにもフィルタを適用する」 にチェック → [フィルタを作成]

    「一致するスレッドにもフィルタを適用する」ことで、すでに受信しているメールを対象にラベル付けを行います。

2. Google Drive でフォルダを用意

  1. My Drive 内で +新規 → フォルダ
  2. フォルダ名: Newsletters(自由)
  3. アドレスバー URL folders/XXXXXXXXXXXXXXXXXXXXX の部分が フォルダ IDXXXXXXXXXXXXXXXXXXXXX

3. Apps Script プロジェクトを作成

  1. https://script.google.com/新しいプロジェクト
  2. ファイル名を 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に対してプログラムからアクセスできる権限を付与する。

  1. エディタ上部 ▶ 実行 → 権限を確認

    google-confirmation
  2. Google アカウント選択

    google-confirmation-2
  3. 「このアプリは Google で確認されていません」画面 → 詳細 → {プロジェクト名} に移動

    [詳細]をクリックする

    google-confirmation-3

    [安全ではないページに移動]をクリックする

    google-confirmation-4

  4. Gmail と Drive のアクセスを 許可し、[続行]をクリックする

    google-confirmation-5

この時点で「▶︎実行」をクリックして実行してみます。すでに問題なく動くはずです。

問題なければ、自動実行を設定しましょう。

6. 自動化するトリガーを設定

  1. エディタ左バー 時計アイコン(トリガー)+トリガーを追加

    set-trigger
  2. トリガーを追加する
    実行する関数: backupNewsletterMD
    イベントのソース: 時間主導型 → 1時間おき(任意)

    set-trigger-2
  3. 保存 で完了

7. 動作テスト

  • Drive フォルダに .md ファイルが生成 → OK
  • Gmail スレッドに BackedUp ラベル付与 → OK
  • 新着メールも 例)1時間後に自動保存 → OK

まとめ

  • 完全無料 & コード 50 行未満 で Gmail を自動整理。
  • ラベル運用+Apps Script だけなので導入しやすい。
  • カスタムは CONFIG と保存ロジックをいじるだけ。
o_wani
o_wani

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

STAFF
o_wani
o_wani
スタッフ
大学卒業後、15年間WEB業界で働く。現在はマネジメントに従事していますが、ChatGPTの登場に触発され、このブログを再開。AIをパートナーに、自分で手を動かして実装する楽しさと喜びを再発見中。時代が変わりつつある中でも、陳腐化しない情報発信も目指しています。
記事URLをコピーしました