Gmailの添付ファイルをGoogleドライブに自動保存する

GASGmailGoogleドライブ自動化
Gmailの添付ファイルをGoogleドライブに自動保存するのサムネイル

Gmailの添付ファイルをGoogleドライブに自動保存する方法を、GASおじがわかりやすく解説するぞ。中小企業の経営者やフリーランスの皆さん、日々のメールの添付ファイル管理で手間取ってないかな?この自動化で作業時間を削減し、SaaSの追加費用もかけずに効率化を図ろう。

なぜGmailの添付ファイルを自動保存するのか?

メールの添付ファイルを手動でダウンロードし、整理するのは時間がかかるし、うっかりファイルを見失うリスクもある。Google Apps Script(以下GAS)を使えば、Gmailの特定条件のメールから添付ファイルを抽出し、Googleドライブの指定フォルダへ自動で保存できる。これにより、

  • 手作業のミスを減らす
  • 保存場所が一元化される
  • 作業時間の短縮とコスト削減

を実現可能だ。

ただし、GASはGoogleアカウントの利用枠内で動作し、追加の専用SaaS料金は不要。ただしquotaや実行時間上限はあるので、その範囲で賢く使おう。

初期設定と必要な権限

まずは以下を準備しよう。

  1. Googleドライブに保存用フォルダを作成
    添付ファイルを保存するためのフォルダを作る。フォルダIDはスクリプトで使うので控えておく。

  2. GASプロジェクトを作成
    GoogleスプレッドシートやGASエディタから新規スクリプトを作成。

  3. GmailとGoogleドライブの権限付与
    スクリプト初回実行時にGmailとGoogleドライブへのアクセス許可を求められる。必ず承認しよう。

  4. installable triggerの設定
    添付ファイルの自動保存は「時間主導型トリガー」を使うのが一般的。1時間に1回など定期実行を設定しよう。

具体的なコード例

以下はGmailの受信トレイ内で、件名に「請求書」が含まれるメールの添付ファイルを指定フォルダに保存し、新規の日時付きスプレッドシートに保存したファイル名を記録する例だ。

ポイントは

  • 既存のデータを上書きせず、新規ファイルを作成して記録する
  • 添付ファイルの重複保存を防ぐためにメールIDで管理(batch writeでまとめて保存)
  • 万が一の復元用にバックアップも考慮
function saveAttachmentsToDrive() {
  const folderId = 'あなたのフォルダIDをここに入れる';
  const driveFolder = DriveApp.getFolderById(folderId);
  
  // 保存記録用スプレッドシートを新規作成(日時付き)
  const timestamp = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss');
  const ss = SpreadsheetApp.create('添付ファイル保存記録_' + timestamp);
  const sheet = ss.getActiveSheet();
  sheet.appendRow(['メールID', '件名', '添付ファイル名', '保存ファイルID', '保存日時']);
  
  // Gmail検索クエリ(例:subject:請求書 is:unread)
  const query = 'subject:請求書 in:inbox';
  const threads = GmailApp.search(query);
  
  // 既に保存済みのメールIDを取得(今回は新規なので空)
  // 過去実装ではプロパティサービスなどで管理可能だが今回は省略
  
  let saveCount = 0;
  
  for (const thread of threads) {
    const messages = thread.getMessages();
    
    for (const message of messages) {
      const messageId = message.getId();
      // 添付ファイルを取得
      const attachments = message.getAttachments();
      if (attachments.length === 0) continue;
      
      for (const file of attachments) {
        // Googleドライブに保存(同名ファイル重複時は別ファイルとして保存)
        const savedFile = driveFolder.createFile(file.copyBlob());
        
        // 保存記録をスプレッドシートに追加
        sheet.appendRow([
          messageId,
          message.getSubject(),
          file.getName(),
          savedFile.getId(),
          new Date()
        ]);
        
        saveCount++;
      }
    }
  }
  Logger.log(`添付ファイルを${saveCount}件保存しました。`);
}

ポイント解説

  • 添付ファイルはcopyBlob()でコピーし、新規ファイルとしてGoogleドライブへ保存。
  • 保存履歴は新規作成したスプレッドシートに行単位で追記(batch write的処理)。
  • メールIDで管理すれば、重複実行時に同じメールからの添付ファイルを二重保存しにくい。
  • 削除APIは一切使わず、既存データは更新しない設計。
  • 実行時間が長くならないようメール数を調整したり、途中結果をプロパティサービスなどで管理して分割処理も検討可能。

個人情報の取り扱いと復元手順

メールや添付ファイルには個人情報が含まれることもある。スクリプトの実行権限は自分のGoogleアカウントに限定し、不特定多数がアクセスできる場所での実行は避けよう。

バックアップや復元は、

  • スプレッドシートの保存記録で対象ファイルを特定し、
  • Googleドライブの保存先フォルダからファイルを手動で確認・復元可能。

万一ファイルが誤って消えた場合も、削除はしない設計なので基本的には元のファイルが残り続ける。

導入によるコスト削減イメージ

仮に1日平均10通の請求書メールがあり、添付ファイルの手動ダウンロード・整理に1通あたり2分かかっているとしよう。

  • 10通 × 2分 = 20分/日
  • 月20営業日 × 20分 = 400分 = 約6.7時間/月
  • 時給2,000円換算 → 6.7時間 × 2,000円 = 13,400円/月の価値

GASによる自動保存はGoogleアカウントの利用枠内で追加専用SaaS料金なし。
ただし、GASのquotaや実行時間上限はあるため、処理量が多い場合は分割実行など検討を。

まとめ

Gmailの添付ファイルをGoogleドライブに自動保存するスクリプトは、中小企業やフリーランスの方々の業務効率化に役立つ。SaaSの追加課金なしでGoogleアカウントの枠内で動作し、運用方法や権限管理に気を付ければ安心して使えるぞ。

【ポイント】

  • 既存データを消さず、新規ファイル・スプレッドシートで記録すること
  • installable triggerで定期実行し、手動作業を減らすこと
  • 個人情報の取り扱いに十分注意すること

ぜひ、この自動化を活用して手間を減らし、経営や業務に集中してほしい。GASおじも応援してるぞ!


もっと便利なGASツールを試したい方はこちらからメンバーシップに参加してみてくれ!
GASおじラボで500ツール使い放題 →