メインコンテンツへスキップ
レッスン一覧に戻る

atom.office-automator.gas-email-automation

GASでスプレッドシートからメールを自動送信する

スプレッドシートからメールを自動送信する 毎回同じようなメールを手作業で送っていませんか?「宛先と本文を用意したら、あとはボタン1つで送信できる」と想像してみてください。 たとえば、レストランで注文を紙に書いて厨房...

send-email-via-gassend-email-via-gas「send email via gas」に関するスキルがこのレッスンで身につきます。
想定時間未設定公開状態: draft
学習メモ

成果物成果物このレッスンが終わったとき、あなたの手元に残る具体的な成果物です(例: 公開済みの Web ページ、動作するフォームなど)。

種類: markdown_doc検証: basic_manual_check_v1

証跡証跡成果物が正しく作れたことを確認するためのチェックリストです(例: ブラウザで動作する、フォーム送信で値が保存される)。

screenshotlog_output

メディアメディアレッスン内に出てくる図や動画のスロットです。実際の画面やイメージで理解を補助します。

diagramscreen_capture

レッスン本文

スプレッドシートからメールを自動送信する

毎回同じようなメールを手作業で送っていませんか?「宛先と本文を用意したら、あとはボタン1つで送信できる」と想像してみてください。

たとえば、レストランで注文を紙に書いて厨房に渡すイメージです。あなたがやるのは「注文票(スプレッドシート)を書く」ことだけ。あとは厨房のスタッフ(GAS)が料理(メール)を作って届けてくれます。

このレッスンでは、Google スプレッドシート(=表計算ソフトのオンライン版)と Google Apps Script(=Google のサービスを自動操作する仕組み、通称 GAS)を使って、スプレッドシートのデータからメールを自動送信できるようになります。

メール自動送信の全体図

必要なものを確認する

  • Google アカウント(無料で作れます)
  • Chrome などのブラウザ
  • AI ツール(ChatGPT や Claude など)をブラウザで開いておく

このレッスンでは、スクリプト(=小さなプログラム)を自分で一から書くのではなく、AI ツールに書いてもらいます。あなたの役割は「AI に何をしてほしいか伝える」ことと「結果を確認する」ことです。

スプレッドシートを用意する

メール送信のデータを準備する

Google スプレッドシートを新しく作り、1行目に見出しを入れます。

良い例:

宛先件名本文送信済み
tanaka@example.com会議のお知らせ明日14時から会議です

悪い例:

A列B列C列
tanaka@example.com会議のお知らせ明日14時から会議です

見出し行に「宛先」「件名」のような日本語名をつけておくと、あとでスクリプトが読みやすくなります。列名は何でも構いませんが、内容が分かる名前にしましょう。

ポイント: テスト用に、まず自分のメールアドレスだけを1行入れてください。他の人のアドレスは最後の確認が終わってから追加します。

AI ツールにスクリプトを作ってもらう

プロンプト(=AI への指示文)を書く

AI ツール(ChatGPT、Claude、Cursor など、どれでも OK)を開いて、次の指示をコピー&ペーストしてください。

GoogleスプレッドシートのA列「宛先」、B列「件名」、C列「本文」を読み取り、
MailApp.sendEmailでメールを送信するGASスクリプトを書いてください。

条件:
- D列「送信済み」に「送信済み」と書き込む
- すでにD列が「送信済み」の行はスキップする
- 2行目からデータを読む(1行目は見出し行)
- エラーが起きたらD列に「エラー」と書き込む

コード全体と、各行にやさしい日本語コメントをつけてください。

「何をしているか」: スプレッドシートの列名やルールを伝えて、それに合うスクリプトを AI に生成してもらっています。

AI の回答で確認すべき3つのポイント

AI が出力したコードをそのまま使う前に、次の3点だけチェックしてください。

  1. MailApp.sendEmail という文字がコード内にあるか → メール送信の命令です
  2. getRangegetValues という文字があるか → スプレッドシートからデータを読む命令です
  3. setValue という文字があるか → 「送信済み」を書き込む命令です

もし分からないところがあれば、AI に追加で質問しましょう。

このコードの〇〇の部分は何をしていますか?プログラミング初心者にもわかるように説明してください。

スクリプトを貼り付ける

  1. スプレッドシートのメニューから 「拡張機能」→「Apps Script」 を開く
  2. 最初から入っている function myFunction() { } というコードを 全部消す
  3. AI が出力したコードをそのまま コピーして貼り付ける
  4. 上部の 保存ボタン(フロッピーディスクのアイコン 💾)を押す

スクリプトエディタの画面

よくある間違い: 元のコードを消さずに AI のコードを追加してしまう → エラーになります。必ず全部消してから貼り付けてください。

スクリプトを実行して確認する

テスト送信する

  1. スプレッドシートにテスト用の行を 1行だけ 追加する(宛先は 自分のメールアドレス にする)
  2. Apps Script の画面で関数名が sendEmails(AI が出力した関数名)になっていることを確認する
  3. 「▶ 実行」ボタン を押す
  4. 初回は 「権限の確認」画面 が出るので、次の手順で許可する:
    • 「権限を確認」をクリック
    • 自分の Google アカウントを選ぶ
    • 「詳細」→「〇〇(安全ではないページ)に移動」をクリック
    • 「許可」をクリック

なぜ「安全ではない」と表示されるの? これは Google が「このスクリプトは Google の審査を受けていません」と言っているだけです。自分で作った(AI に作ってもらった)スクリプトなので、問題ありません。

結果を確認する(3つのチェック)

次の3つがすべて OK なら成功です。

チェック項目確認方法
✅ メールが届いた自分のメールボックス(受信トレイ、迷惑メールフォルダも)を確認する
✅ 件名と本文がスプレッドシート通り届いたメールの内容とスプレッドシートの B 列・C 列を見比べる
✅ 「送信済み」と記入されたスプレッドシートの D 列に「送信済み」と自動で入っていることを確認する

良い例: 自分のアドレスに1通だけテスト送信してから、本番の宛先を追加する

悪い例: いきなり全員分のアドレスを入れて実行する(間違いがあっても取り消せません)

つまずきやすいポイントを押さえる

つまずき原因と対策
「権限の確認」画面で進めない「詳細」をクリックして「安全でないページに移動」を選ぶ。自分のスクリプトなので問題ありません
メールが送信されない宛先のメールアドレスに 余分なスペース が混じっていないか確認する。コピペ時に空白が入りがちです
スクリプトでエラーが出るエラーメッセージをそのまま AI に貼り付けて「このエラーの原因と修正方法を教えてください」と聞く
「送信済み」が書き込まれないAI に出力してもらったコードに setValue が含まれているか再確認する
1日に送れるメール数に上限がある無料の Google アカウントでは 1日100通まで です。大量送信は翌日に分けましょう

エラーが出たときの AI への聞き方

スクリプト実行時にエラーが出た場合、次のプロンプトをそのまま使えます。

以下のGASスクリプトを実行したらエラーが出ました。原因と修正方法を教えてください。

【エラーメッセージ】
(ここにエラーメッセージを貼り付ける)

【スクリプト】
(ここにコード全体を貼り付ける)

完了を確認する

以下のすべてに「はい」と言えたら、このレッスンは完了です。

  • スプレッドシートに「宛先・件名・本文・送信済み」の4列を作った
  • AI ツールにスクリプトを生成してもらい、Apps Script に貼り付けた
  • 自分のメールアドレス宛にテスト送信して、メールが届いた
  • スプレッドシートの D 列に「送信済み」が自動で書き込まれた
  • エラーが出た場合に AI に聞いて解決する方法を知っている

おめでとうございます! 「スプレッドシートにデータを入れて、ボタン1つでメール送信」ができるようになりました。次のステップでは、毎朝決まった時刻に自動実行する「トリガー」の設定に進みます。

成果物成果物このレッスンが終わったとき、あなたの手元に残る具体的な成果物です(例: 公開済みの Web ページ、動作するフォームなど)。

種類: markdown_doc

検証: basic_manual_check_v1

証跡とメディア

証跡証跡成果物が正しく作れたことを確認するためのチェックリストです(例: ブラウザで動作する、フォーム送信で値が保存される)。

screenshotlog_output

メディア

diagramscreen_capture
前提 atom

必須

なし

あると楽

なし

学習完了