Gmail添付ファイル自動保存アプリ — AttachSaver
実際のビジネスシーンで使える自動化100例をGASで実装するシリーズ「GAS自働化100本ノック」。その12本目
Gmail検索式で指定したメールの添付ファイルをGoogle Driveに自動保存するスプレッドシート版アプリ。
振り分けシートでサブフォルダを思いのままに作れるので、ファイル整理がめちゃ楽になります。
AttachSaver ができること
-
Gmail検索条件にマッチするメールの添付を一括保存
-
差出人ドメイン・件名キーワード等によるサブフォルダ自動作成・自動振り分け
-
ファイル名テンプレートで日付・差出人を付けたリネーム
-
同名衝突時の連番自動付与
-
保存ログをスプレッドシートに記録
-
時間トリガーで自動実行
-
ドライランで保存前確認
動作要件
-
Googleアカウント
-
Gmail / Drive / Spreadsheet の編集権限
インストール手順
-
新規Googleスプレッドシートを作成
-
メニュー「拡張機能 → Apps Script」を開く
-
デフォルトの `コード.gs` の内容を、本記事の有料版 `コード.gs` で上書き保存する
-
「ファイル → +」でファイルを追加し、本記事の有料版 `セットアップ.gs` の内容で上書き保存する
-
プロジェクト名を任意に設定して保存
-
スプレッドシートを再読み込み → メニュー「AttachSaver」が表示される
-
メニュー「初回セットアップ」を実行 → 認証ダイアログで承認(承認手順は第1回と同じ)
初回セットアップ
メニュー「AttachSaver → 初回セットアップ」を実行すると、以下の3シートが自動生成されます。
シート名の先頭 `AS_` は AttachSaver の略で、同じスプレッドシートで他のアプリと同居しても衝突しないようにするための識別子です。
-
`AS_設定` — 検索クエリ・保存先フォルダID等を入力
-
`AS_振り分け` — サブフォルダ振り分けルール
-
`AS_ログ` — 保存履歴(自動記録)
各シートの詳細は下記の `AS_設定 シート` / `AS_振り分け シート` / `AS_ログ シート` の各セクションを参照してください。
基本の使い方
-
`AS_設定` シートに必須3項目を入力
-
メニュー「添付ファイルを保存」を実行
-
`AS_ログ` シートに保存履歴が記録される
-
処理済メールには指定ラベルが付き、次回以降スキップされる
AS_設定 シート
検索クエリ・保存先フォルダID・ファイル名テンプレート・自動実行間隔 などアプリ動作のすべての設定を、このシートに A列キー/B列値 で入力します。

入力項目
-
検索クエリ (必須) … Gmail検索式。例: `from:example.com`(書き方の詳細は下記)
-
保存先フォルダID (必須) … DriveフォルダURLの末尾。`folders/` の後ろの文字列
`https://drive.google.com/drive/folders/【ここの部分】` です。 -
処理済ラベル (必須) … 処理済メールに付けるラベル名。無ければ自動作成
-
ファイル名テンプレート … 例: `{date}{from_domain}{base}{ext}`(プレースホルダの詳細は下記)
-
未分類フォルダ名 … 振り分けルールに当てはまらない場合のサブフォルダ名
-
自動実行間隔(分) … 自動実行ON時の実行頻度(自動実行設定の詳細は下記)
検索クエリの書き方
検索クエリは Gmail 画面上部の検索バーと 同じ書式 がそのまま使えます。業務でよく使う演算子は次の10種類くらいです。
-
`label:〇〇` … ラベルで絞る。先頭に `-` を付けると除外。例: `label:請求書`、`-label:処理済`
-
`from:〇〇` … 差出人で絞る。メアド全体でもドメインだけでもOK。例: `from:invoice@maruyama.co.jp`、`from:maruyama.co.jp`
-
`to:〇〇` … 宛先で絞る。`to:me` で自分宛
-
`subject:〇〇` … 件名キーワード。複数語はダブルクォートで囲む。例: `subject:請求書`、`subject:"5月 請求書"`
-
`has:attachment` … 添付ありに限定(添付保存用途ではほぼ必須)
-
`filename:〇〇` … 添付ファイル名/拡張子で絞る。例: `filename:pdf`、`filename:invoice.pdf`
-
`after:yyyy/MM/dd` / `before:yyyy/MM/dd` … 受信日で絞る。例: `after:2026/05/01 before:2026/06/01`
-
`newer_than:Nd` … 直近N日。単位は `d`(日)/ `m`(月)/ `y`(年)。例: `newer_than:7d`、`newer_than:1m`
-
`is:unread` / `is:starred` … 状態で絞る(未読のみ・スター付きのみ)
-
空白で AND、`OR` で OR … 例: `label:請求書 OR label:領収書`
業務でよくある組み合わせ例
-
請求書ラベル付き&添付ありで、まだ未処理のもの → `label:請求書 has:attachment`
-
特定取引先からの過去30日以内の添付メール → `from:maruyama.co.jp has:attachment newer_than:30d`
-
件名に「請求書」または「領収書」を含む添付メール → `(subject:請求書 OR subject:領収書) has:attachment`
-
月初の経理処理向け(5月分のみピンポイント) → `label:請求書 has:attachment after:2026/05/01 before:2026/06/01`
-
PDFのみ拾いたい → `label:請求書 filename:pdf`
入力前に Gmail 検索バーで動作確認できます。 同じクエリ文字列を Gmail 上部の検索バーに貼り付け、意図したメールがヒットするか確認してから `AS_設定` に貼り付けると、空振りや取りこぼしを未然に防げます。
ファイル名テンプレートのプレースホルダ
-
`{date}` … 受信日 (yyyy-MM-dd)
-
`{year}` … 受信年 (yyyy)
-
`{month}` … 受信月 (MM)
-
`{from_domain}` … 差出人ドメイン
-
`{from_local}` … 差出人ローカル部 (@より前)
-
`{filename}` … 元ファイル名(拡張子含む)
-
`{base}` … 元ファイル名(拡張子なし)
-
`{ext}` … 拡張子(ドット含む)
Drive / Windows で使えない文字(\ / : * ? " < > |)は自動的に `_` に置換されます。
自動実行の設定
-
`AS_設定` の `自動実行間隔(分)` に数値を入力(例: 60)
-
メニュー「自動実行 ON」を実行
-
オフにする時はメニュー「自動実行 OFF」
手動でトリガーを変更したい時
メニューを使わずに自分でトリガーを編集することもできます。
-
Apps Script の左サイドバー「⏰ トリガー」を開く
-
既存トリガーは右側の 🖊 マークから編集、`…` メニューから削除
-
新規は「+ トリガーを追加」で `runAuto` 関数・時間主導型・希望の間隔を選択して保存
AS_振り分け シート
`AS_振り分け` シートに「条件種別 / 条件値 / サブフォルダ名」を1行ずつ書くと、`AS_設定` シートで設定した保存先フォルダの下にサブフォルダが自動で作成され、マッチした添付ファイルが対応サブフォルダへ自動で振り分けられます。
必須ではありませんが、取引先別、書類別にフォルダ分けしたい、などの時に便利です。

3つの条件種別の使い分け
-
`domain` … ドメイン部分と 完全一致(大小無視)。社内の誰から来てもA社はA社フォルダにしたい時
-
`from_contains` … 差出人欄(`"丸山産業 <invoice@…>"`)に 部分一致。freee/マネーフォワード経由で表示名「丸山産業」「東京通商」を分けたい時や、同一ドメイン内で `billing@` だけ拾いたい時
-
`subject_contains` … 件名に 部分一致。同じ取引先から「請求書」「領収書」が来るのを書類種別で分けたい時
ルールはシートの 上から評価され、最初にマッチした行が採用 されます。
AS_ログ シート
メニュー「添付ファイルを保存」を実行するたびに、保存した添付ファイル1つにつき1行が自動で追記されます(実行日時/受信日時/差出人/件名/元ファイル名/保存名/サブフォルダ/DriveURL/スレッドID)。
月末の経理締めで「先月Drive保存した添付」を一覧確認したり、サブフォルダ列で「未分類」になった行を拾って `AS_振り分け` のルール追加候補にしたりできます。
ドライランを使えば、`AS_ログ`に保存予定の内容だけが記録されます。Driveを汚さずに検索クエリや振り分けルールが意図通りか確認できます。
ログをリセットしたい時は メニュー「保存ログをクリア」 で全件削除できます。
FAQ
Q. 同じメールが二重保存されない?
処理済ラベルが付いたスレッドは検索クエリで自動的に除外されます。
Q. 複数のアプリを同じスプレッドシートで使える?
シート名に `AS_` プレフィックスを付けているので、別のアプリと同居できます。
Q. GAS(Google Apps Script)の制限について教えて
本アプリは Google が定める GAS の実行制限の範囲内で動作します。業務に影響しそうな主な上限は次の3つです。
-
1回の実行は最大6分(無料/Workspace 共通)。
本アプリが1回あたり最大50スレッドに制限しているのは、この6分上限を超えないためです。50件を超える分は次回実行で順次処理されます -
1日あたりの累積実行時間: 無料Gmailアカウントは 90分/日、Workspaceは 6時間/日。
自動実行間隔を1分や5分に設定すると上限に到達しやすくなるため、業務上の必要に応じて15分〜を推奨します -
トリガー数の上限: 1スクリプト1ユーザーあたり 20個。
本アプリは「自動実行 ON」で1個追加・OFF で削除するため通常は問題ありません
これらは Google 側の仕様で、本アプリ側で緩和することはできません。
上限到達時は実行が中断され、次回実行時にスキップ済み分から再開します。
セットアップ.gsとコード.gsは以下より
この記事の続きはnoteで公開しています。
