<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>メール自動化 | 週末起業ラボ</title>
	<atom:link href="https://shumatsu-lab.com/tag/%E3%83%A1%E3%83%BC%E3%83%AB%E8%87%AA%E5%8B%95%E5%8C%96/feed/" rel="self" type="application/rss+xml" />
	<link>https://shumatsu-lab.com</link>
	<description>本業の隣で、もう一つのキャリアを</description>
	<lastBuildDate>Wed, 03 Jun 2026 23:15:12 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>

<image>
	<url>https://shumatsu-lab.com/wp-content/uploads/2026/02/cropped-IMG_2742-32x32.jpeg</url>
	<title>メール自動化 | 週末起業ラボ</title>
	<link>https://shumatsu-lab.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">252581404</site>	<item>
		<title>GAS×NotebookLM実践記｜本業メール集約を自動化する術</title>
		<link>https://shumatsu-lab.com/gas-notebooklm-email-automation-practice/</link>
		
		<dc:creator><![CDATA[ムラサキ]]></dc:creator>
		<pubDate>Sun, 01 Mar 2026 03:25:33 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[GAS]]></category>
		<category><![CDATA[NotebookLM]]></category>
		<category><![CDATA[メール自動化]]></category>
		<category><![CDATA[自動化]]></category>
		<guid isPermaLink="false">https://shumatsu-lab.com/?p=317</guid>

					<description><![CDATA[「このプロジェクト、過去のメールを全部読み返さないと判断できない」──SE歴20年、こういう場面に何度も遭遇してきました。NotebookLMにメールを投入すれば文脈を横断して質問できると知り、試しに40通ほど突っ込んだ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<p class="wp-block-paragraph">2026.03.25 更新：NotebookLMプラン体系をPlus/Pro/Ultra体系に修正、Gemini 2.5 Flash・3系モデルのシャットダウン情報を追記</p>
</div>



<p class="wp-block-paragraph">「このプロジェクト、過去のメールを全部読み返さないと判断できない」──SE歴20年、こういう場面に何度も遭遇してきました。NotebookLMにメールを投入すれば文脈を横断して質問できると知り、試しに40通ほど突っ込んだところ、思考整理が驚くほど捗りました。</p>



<p class="wp-block-paragraph">しかし問題はその「突っ込む」作業です。Gmailからメールを1通ずつコピーしてGoogleドキュメントに貼り付け、NotebookLMのソースに手動追加する。隔週で繰り返すと、準備だけで30分以上かかります。</p>



<p class="wp-block-paragraph">そこでGoogle Apps Script（GAS）を使い、プロジェクトに関連するメールを自動で集約するスクリプトを書きました。本記事では、最初に書いた「動くけど荒い」v1と、実運用で起きた問題を踏まえて改善したv2の両方を、コピペ用コード付きで公開します。</p>


<div class="slb slb-tldr">
  <div class="slb-tldr__head">
    <span class="slb-mono slb-tldr__label">TL;DR / 三行要約</span>
          <span class="slb-mono slb-tldr__meta">12 MIN READ · UPDATED 2026.03</span>
      </div>
  <ol>
          <li>隔週で繰り返すメール手動集約（40通・30分超）をGASで全自動化。v1→v2の改善過程も全コード公開。</li>
          <li>v2はスプレッドシートからキーワード・基準日・除外条件を読み込む方式に変更。スクリプト書き換え不要。</li>
          <li>集約ドキュメントをNotebookLMに投入すれば「この案件で未回答の論点は？」を横断質問できる。</li>
      </ol>
    <div class="slb-tldr__badges">
          <span class="slb-badge slb-badge--hi">
        RESULT — メール集約30分→ボタン一つで完了      </span>
          <span class="slb-badge">
        TOOL — Google Apps Script + NotebookLM      </span>
          <span class="slb-badge">
        COST — 無料（GAS・NotebookLM共に）      </span>
      </div>
  </div>
    




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">本業メールの山をNotebookLMで「思考の素材」に変えたかった</a><ol><li><a href="#toc2" tabindex="0">きっかけ──40通のメールを手作業でNotebookLMに投入した日</a></li><li><a href="#toc3" tabindex="0">GASを開くだけで迷った話</a></li></ol></li><li><a href="#toc4" tabindex="0">最初に書いたスクリプト──「動くけど荒い」v1の全容</a><ol><li><a href="#toc5" tabindex="0">v1の仕様とコード</a></li><li><a href="#toc6" tabindex="0">v1で起きた問題──情報のミスリード</a></li></ol></li><li><a href="#toc7" tabindex="0">改善版v2──スプレッドシート制御＋除外フィルタ</a><ol><li><a href="#toc8" tabindex="0">改善点① キーワードと基準日をスプレッドシートから読み込み</a></li><li><a href="#toc9" tabindex="0">改善点② 除外キーワードをブラックリスト管理</a></li><li><a href="#toc10" tabindex="0">改善点③ 実行ログをスプレッドシートに出力</a></li></ol></li><li><a href="#toc11" tabindex="0">v2コピペ用コード全文と使い方</a><ol><li><a href="#toc12" tabindex="0">コード全文</a></li><li><a href="#toc13" tabindex="0">初回セットアップ手順</a></li></ol></li><li><a href="#toc14" tabindex="0">集約ドキュメントをNotebookLMに投入するコツ</a><ol><li><a href="#toc15" tabindex="0">手動投入の効率化Tips</a></li><li><a href="#toc16" tabindex="0">自動投入はEnterprise限定──2026年3月時点の制約</a></li></ol></li><li><a href="#toc17" tabindex="0">次のステップ──Gemini APIで返信下書きを自動生成する構想</a><ol><li><a href="#toc18" tabindex="0">構想：集約メールの文脈をGeminiに渡して下書き生成</a></li><li><a href="#toc19" tabindex="0">Gemini API無料枠で副業・本業どちらにも十分</a></li></ol></li><li><a href="#toc20" tabindex="0">GAS運用で知っておきたい注意点</a></li><li><a href="#toc21" tabindex="0">よくある質問</a></li><li><a href="#toc22" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">本業メールの山をNotebookLMで「思考の素材」に変えたかった</span></h2>



<h3 class="wp-block-heading"><span id="toc2">きっかけ──40通のメールを手作業でNotebookLMに投入した日</span></h3>



<p class="wp-block-paragraph">担当プロジェクトの方向性を整理する必要があり、過去2週間分のメールをNotebookLMに投入してみました。メールの本文をGoogleドキュメントにまとめ、NotebookLMのソースとして追加すると、「この案件で未回答の論点は何か」「A社とB社の要望の違いを整理して」といった質問に対し、メール横断で回答が返ってきます。</p>



<p class="wp-block-paragraph">自分の記憶だけでは見落としていた論点が浮かび上がり、NotebookLMの有用性を実感しました。ただし、40通のメールをGmailから手動でコピーしてドキュメントに貼り付ける作業は、想像以上に面倒でした。これを隔週で繰り返すのは現実的ではなく、GASで自動化しようと考えました。</p>



<p class="wp-block-paragraph">NotebookLMはGoogleが提供するAIノートブックツールです。Googleドキュメント・PDF・Webページなどをソースとしてアップロードすると、それらの内容に基づいてAIが質問に回答します。2026年3月時点では無料版のほか、Google AIのPlus（月額1,200円）・Pro（月額2,900円）・Ultra（月額36,400円）の有料プランがあり、上位プランほどソース数やチャット回数の上限が拡張されます。本記事のスクリプトは無料版で十分に運用できます。<a href="https://shumatsu-lab.com/notebooklm-practical-use-cases-se-experience-2/">NotebookLMの7つの活用術と実務レビューはこちら</a></p>



<h3 class="wp-block-heading"><span id="toc3">GASを開くだけで迷った話</span></h3>



<p class="wp-block-paragraph">GASを使おうとして、最初にハマったのが「どこから開くか」でした。Google検索で「GAS」と調べて<a rel="noopener" href="https://script.google.com" target="_blank">script.google.com</a>にアクセスしたところ、Google Workspaceアカウントと個人アカウントの切り替え問題でログインできません。</p>



<p class="wp-block-paragraph">結局たどり着いたのは、Googleドライブの「新規作成 → その他 → Google Apps Script」という経路です。Workspaceアカウントの場合、この方法が最も確実です。GASを初めて使う方は、script.google.comではなくGoogleドライブから開くことをおすすめします。</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="990" height="597" src="https://shumatsu-lab.com/wp-content/uploads/2026/03/google-drive-new-gas-menu.png" alt="Googleドライブの新規作成メニューでGoogle Apps Scriptを選択する操作" class="wp-image-665" srcset="https://shumatsu-lab.com/wp-content/uploads/2026/03/google-drive-new-gas-menu.png 990w, https://shumatsu-lab.com/wp-content/uploads/2026/03/google-drive-new-gas-menu-300x181.png 300w, https://shumatsu-lab.com/wp-content/uploads/2026/03/google-drive-new-gas-menu-768x463.png 768w" sizes="(max-width: 990px) 100vw, 990px" /></figure>



<h2 class="wp-block-heading"><span id="toc4">最初に書いたスクリプト──「動くけど荒い」v1の全容</span></h2>



<h3 class="wp-block-heading"><span id="toc5">v1の仕様とコード</span></h3>



<p class="wp-block-paragraph">最初に書いたスクリプトの仕様はシンプルです。Gmailの検索演算子を使い、プロジェクト名のキーワードと基準日以降という条件でメールを検索します。スレッド形式のメールは最新の1通だけを取得し、本文をそのままGoogleドキュメントに結合して出力します。キーワードと基準日はスクリプト内にハードコードしていました。</p>



<pre class="wp-block-code"><code>function collectProjectEmails_v1() {
  var keyword = "プロジェクトABC";
  var sinceDate = "2026/01/15";
  var query = keyword + " after:" + sinceDate;
  var threads = GmailApp.search(query);

  var doc = DocumentApp.create(
    keyword + "_メール集約_" + new Date().toLocaleDateString("ja-JP")
  );
  var body = doc.getBody();

  for (var i = 0; i &lt; threads.length; i++) {
    var messages = threads[i].getMessages();
    var lastMsg = messages[messages.length - 1];
    body.appendParagraph("【件名】" + lastMsg.getSubject());
    body.appendParagraph("【日時】" + lastMsg.getDate().toLocaleString("ja-JP"));
    body.appendParagraph("【差出人】" + lastMsg.getFrom());
    body.appendParagraph(lastMsg.getPlainBody());
    body.appendParagraph("─".repeat(40));
  }

  doc.saveAndClose();
  Logger.log("作成完了: " + doc.getUrl());
  Logger.log("取得スレッド数: " + threads.length);
}</code></pre>



<p class="wp-block-paragraph">このスクリプトで基本的な自動集約は実現できました。手動で40通コピーしていた作業が、ボタン一つで完了します。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="972" height="582" src="https://shumatsu-lab.com/wp-content/uploads/2026/03/gas-v1-script-editor.png" alt="GASスクリプトエディタでv1コードを開いた状態" class="wp-image-666" srcset="https://shumatsu-lab.com/wp-content/uploads/2026/03/gas-v1-script-editor.png 972w, https://shumatsu-lab.com/wp-content/uploads/2026/03/gas-v1-script-editor-300x180.png 300w, https://shumatsu-lab.com/wp-content/uploads/2026/03/gas-v1-script-editor-768x460.png 768w" sizes="(max-width: 972px) 100vw, 972px" /></figure>



<h3 class="wp-block-heading"><span id="toc6">v1で起きた問題──情報のミスリード</span></h3>



<p class="wp-block-paragraph">2回目の実行で問題が発生しました。キーワード検索でヒットしたメールの中に、対象プロジェクト以外の情報が含まれていたのです。具体的には、複数案件の売上報告メール、自分宛のメールメモ、案件横断の請求・支払業務メールです。</p>



<p class="wp-block-paragraph">これらはメール本文にプロジェクト名が含まれているためキーワード検索にヒットしますが、中身は別案件の金額や状況も記載されています。このままNotebookLMに投入すると、別案件の数字やコンテキストが混入し、AIの回答が事実と異なる内容を含む危険があります。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box alert-box">
<p class="wp-block-paragraph">実際に1回目の実行時、NotebookLMの回答に違和感を覚えて確認したところ、別案件の売上データが混ざっていたことが原因でした。AIに投入するデータの品質は、回答の信頼性に直結します。生成AI時代に求められるデータ品質管理やプロンプト設計のスキルについては「<a href="https://shumatsu-lab.com/ai-skills-youth-education/">生成AI時代に必要・不要なスキルと若手教育の進め方</a>」で詳しく解説しています。</p>
</div>



<p class="wp-block-paragraph">以降、集約後にGoogleドキュメントを目視確認し、不要なメールを手動で削除する運用にしましたが、これでは自動化の意味が半減します。</p>



<h2 class="wp-block-heading"><span id="toc7">改善版v2──スプレッドシート制御＋除外フィルタ</span></h2>



<p class="wp-block-paragraph">v1の問題を踏まえ、3つの改善を加えたv2を作成しました。最大の変更点は、キーワード・基準日・除外条件をスプレッドシートから読み込む方式にしたことです。スクリプトを毎回書き換える必要がなくなりました。</p>



<figure class="wp-block-table"><table><thead><tr><th>項目</th><th>v1</th><th>v2</th></tr></thead><tbody><tr><td>キーワード・基準日の管理</td><td>スクリプト内にハードコード</td><td>スプレッドシート「設定」シートから読み込み</td></tr><tr><td>除外フィルタ</td><td>なし</td><td>「除外」シートのブラックリストで件名一致スキップ</td></tr><tr><td>実行ログ</td><td>Loggerのみ（実行時に消える）</td><td>「ログ」シートに取得数・除外数・ドキュメントURLを記録</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc8">改善点① キーワードと基準日をスプレッドシートから読み込み</span></h3>



<p class="wp-block-paragraph">スプレッドシートに「設定」シートを作り、A1にプロジェクトキーワード、B1に基準日を入力します。スクリプトはこの値を読み取って検索に使います。隔週で実行する際は、スプレッドシートの日付を更新するだけで済みます。複数プロジェクトに対応したい場合は、行を増やして拡張できます。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="495" height="94" src="https://shumatsu-lab.com/wp-content/uploads/2026/03/spreadsheet-settings-sheet-sample.png" alt="スプレッドシートの設定シートにキーワードと基準日を入力した状態" class="wp-image-667" srcset="https://shumatsu-lab.com/wp-content/uploads/2026/03/spreadsheet-settings-sheet-sample.png 495w, https://shumatsu-lab.com/wp-content/uploads/2026/03/spreadsheet-settings-sheet-sample-300x57.png 300w" sizes="(max-width: 495px) 100vw, 495px" /></figure>



<h3 class="wp-block-heading"><span id="toc9">改善点② 除外キーワードをブラックリスト管理</span></h3>



<p class="wp-block-paragraph">同じスプレッドシートの「除外」シートに、除外したい件名キーワードを縦に並べます。たとえば「売上報告」「請求」「支払」の3行です。スクリプトはメールの件名にこれらの文字列が含まれている場合、そのメールをスキップします。</p>



<p class="wp-block-paragraph">運用しながら除外キーワードを追加できるため、スクリプト本体を触る必要がありません。当初3個だった除外キーワードが増えても、シートに1行追加するだけです。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="296" height="169" src="https://shumatsu-lab.com/wp-content/uploads/2026/03/spreadsheet-exclude-keywords.png" alt="除外シートにブラックリストキーワードを入力した状態" class="wp-image-668" srcset="https://shumatsu-lab.com/wp-content/uploads/2026/03/spreadsheet-exclude-keywords.png 296w, https://shumatsu-lab.com/wp-content/uploads/2026/03/spreadsheet-exclude-keywords-120x68.png 120w, https://shumatsu-lab.com/wp-content/uploads/2026/03/spreadsheet-exclude-keywords-160x90.png 160w" sizes="(max-width: 296px) 100vw, 296px" /></figure>



<h3 class="wp-block-heading"><span id="toc10">改善点③ 実行ログをスプレッドシートに出力</span></h3>



<p class="wp-block-paragraph">何通取得して何通除外したかを「ログ」シートに記録します。集約結果の信頼性を確認でき、除外キーワードの調整にも役立ちます。ドキュメントURLも記録するので、NotebookLMへの投入時にログシートからワンクリックでアクセスできます。</p>



<h2 class="wp-block-heading"><span id="toc11">v2コピペ用コード全文と使い方</span></h2>



<h3 class="wp-block-heading"><span id="toc12">コード全文</span></h3>



<pre class="wp-block-code"><code>function collectProjectEmails_v2() {
  // スプレッドシートから設定読み込み
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var settingsSheet = ss.getSheetByName("設定");
  var keyword = settingsSheet.getRange("A1").getValue();
  var sinceDate = Utilities.formatDate(
    new Date(settingsSheet.getRange("B1").getValue()),
    Session.getScriptTimeZone(),
    "yyyy/MM/dd"
  );

  // 除外キーワード読み込み
  var excludeSheet = ss.getSheetByName("除外");
  var excludeValues = excludeSheet
    .getRange("A1:A" + excludeSheet.getLastRow())
    .getValues();
  var excludeKeywords = excludeValues
    .map(function(row) { return row&#091;0]; })
    .filter(String);

  // Gmail検索
  var query = keyword + " after:" + sinceDate;
  var threads = GmailApp.search(query);

  // ドキュメント作成
  var docTitle = keyword + "_メール集約_"
    + Utilities.formatDate(
      new Date(),
      Session.getScriptTimeZone(),
      "yyyy-MM-dd"
    );
  var doc = DocumentApp.create(docTitle);
  var body = doc.getBody();

  var countTotal = 0;
  var countExcluded = 0;
  var countIncluded = 0;

  for (var i = 0; i &lt; threads.length; i++) {
    var messages = threads&#091;i].getMessages();
    var lastMsg = messages&#091;messages.length - 1];
    var subject = lastMsg.getSubject();
    countTotal++;

    // 除外判定
    var isExcluded = excludeKeywords.some(function(ex) {
      return subject.indexOf(ex) !== -1;
    });
    if (isExcluded) {
      countExcluded++;
      continue;
    }

    // ドキュメントに追記
    body.appendParagraph("【件名】" + subject);
    body.appendParagraph(
      "【日時】" + lastMsg.getDate().toLocaleString("ja-JP")
    );
    body.appendParagraph("【差出人】" + lastMsg.getFrom());
    body.appendParagraph(lastMsg.getPlainBody());
    body.appendParagraph("─".repeat(40));
    countIncluded++;
  }

  doc.saveAndClose();

  // 実行ログ記録
  var logSheet = ss.getSheetByName("ログ");
  if (!logSheet) {
    logSheet = ss.insertSheet("ログ");
    logSheet.appendRow(&#091;
      "実行日時", "キーワード", "基準日",
      "総スレッド数", "除外数", "取得数", "ドキュメントURL"
    ]);
  }
  logSheet.appendRow(&#091;
    new Date(), keyword, sinceDate,
    countTotal, countExcluded, countIncluded,
    doc.getUrl()
  ]);

  Logger.log(
    "完了: " + countIncluded + "通取得 / "
    + countExcluded + "通除外"
  );
  Logger.log("ドキュメント: " + doc.getUrl());
}</code></pre>



<h3 class="wp-block-heading"><span id="toc13">初回セットアップ手順</span></h3>



<p class="wp-block-paragraph">コードをコピーしたら、以下の手順で環境を整えてください。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box memo-box">
<ol class="wp-block-list">
<li>Googleドライブで新しいスプレッドシートを作成する</li>



<li>シート名を「設定」に変更し、A1にキーワード、B1に基準日（例：2026/02/01）を入力</li>



<li>新しいシートを追加し、シート名を「除外」に変更。A列に除外キーワードを1行ずつ入力</li>



<li>メニュー「拡張機能 → Apps Script」でスクリプトエディタを開く</li>



<li>上記コードを貼り付けて保存（Ctrl+S）</li>



<li>関数「collectProjectEmails_v2」を選択して&#x25b6;実行ボタンを押す</li>



<li>初回は権限承認ダイアログが出るので「許可」を選択</li>
</ol>
</div>



<p class="wp-block-paragraph">「ログ」シートは初回実行時に自動作成されます。実行後にログシートを確認し、取得数と除外数が想定どおりか確かめてください。</p>



<p class="wp-block-paragraph">&#x25b6; GAS以外にもSendToカスタマイズやSeleniumなど、Windows環境で使える自動化テクニックをまとめています。<br><a href="https://shumatsu-lab.com/se-automation-tips/">SE歴20年の業務自動化術｜SendTo・Selenium・AIエージェントまで</a></p>



<p class="wp-block-paragraph">GASの基礎から応用までを体系的に理解したい方には、以下の書籍が役立ちます。本記事のスクリプトで使っているSpreadsheetApp・GmailApp・DocumentAppの詳細な解説も含まれています。</p>



<!-- START MoshimoAffiliateEasyLink --><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20220329","msmaflink");msmaflink({"n":"詳解！ Google Apps Script完全入門 [第3版]","b":"","t":"","d":"https://m.media-amazon.com","c_p":"","p":["/images/I/51Ave84HXfS._SL500_.jpg"],"u":{"u":"https://www.amazon.co.jp/dp/B09897BYN3","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":7,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https://www.amazon.co.jp/dp/B09897BYN3","a_id":5384532,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":11,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https://search.rakuten.co.jp/search/mall/%E8%A9%B3%E8%A7%A3%EF%BC%81%20Google%20Apps%20Script%E5%AE%8C%E5%85%A8%E5%85%A5%E9%96%80%20%5B%E7%AC%AC3%E7%89%88%5D/","a_id":5378214,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2},{"id":12,"u_tx":"Yahoo!ショッピングで見る","u_bc":"#66a7ff","u_url":"https://shopping.yahoo.co.jp/search?first=1&p=%E8%A9%B3%E8%A7%A3%EF%BC%81%20Google%20Apps%20Script%E5%AE%8C%E5%85%A8%E5%85%A5%E9%96%80%20%5B%E7%AC%AC3%E7%89%88%5D","a_id":5384814,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"999BA","s":"s"});</script><div id="msmaflink-999BA">リンク</div><!-- MoshimoAffiliateEasyLink END -->



<h2 class="wp-block-heading"><span id="toc14">集約ドキュメントをNotebookLMに投入するコツ</span></h2>



<h3 class="wp-block-heading"><span id="toc15">手動投入の効率化Tips</span></h3>



<p class="wp-block-paragraph">GASが生成したGoogleドキュメントのURLは、ログシートに自動記録されています。NotebookLMのソース追加画面で「Googleドライブ」を選択し、ドキュメント名で検索して追加します。ログシートのURL列をクリックすればドキュメントに直接アクセスでき、内容を目視確認してからNotebookLMに投入する運用が可能です。</p>



<p class="wp-block-paragraph">投入前にドキュメントを開いて不要な部分がないか確認するひと手間を加えると、NotebookLMの回答精度がさらに安定します。v2の除外フィルタで大半は処理されていますが、件名に除外キーワードが含まれない想定外のメールが混入する可能性はゼロではありません。</p>



<h3 class="wp-block-heading"><span id="toc16">自動投入はEnterprise限定──2026年3月時点の制約</span></h3>



<p class="wp-block-paragraph">NotebookLMにはEnterprise版のみAPI（notebooks.sources.batchCreate）が提供されています。GASからAPIを叩いてソースを自動追加する構成は技術的に可能ですが、Enterprise契約が必要です。NotebookLMの無料版・有料版の違いやEnterprise版の詳細は「<a href="https://shumatsu-lab.com/notebooklm-practical-use-cases-se-experience-2/">NotebookLM活用術7選｜SE歴20年が実務で使い倒した全記録</a>」で比較しています。</p>



<p class="wp-block-paragraph">2026年2月19日にNotebookLMのバックエンドモデルがGemini 3.1 Proに更新されました。回答精度が向上している一方、一部のユーザーからは大量ソース投入時の検索品質低下が報告されています。GASで集約したドキュメントをNotebookLMに投入する際は、投入後の回答精度を確認し、必要に応じてソースを分割することをおすすめします。</p>



<p class="wp-block-paragraph">個人向けプラン（Free / Plus / Pro / Ultra）ではソースの自動追加APIは利用できません。2026年3月時点では手動投入が唯一の方法です。</p>



<h2 class="wp-block-heading"><span id="toc17">次のステップ──Gemini APIで返信下書きを自動生成する構想</span></h2>



<h3 class="wp-block-heading"><span id="toc18">構想：集約メールの文脈をGeminiに渡して下書き生成</span></h3>



<p class="wp-block-paragraph">現在のスクリプトはメールを「集める」ところまでですが、次のステップとして「返信の下書きを自動生成する」機能を計画しています。集約したメール本文をGemini APIに渡し、プロジェクトの文脈を踏まえた返信下書きをGmailの下書きフォルダに保存する仕組みです。</p>



<p class="wp-block-paragraph">GASのUrlFetchAppを使えばGemini APIを直接呼び出せます。集約済みドキュメントのテキストをプロンプトに含め、「このプロジェクトの経緯を踏まえて、以下のメールに対する返信案を3パターン生成してください」のような指示を送ることで、文脈に沿った下書きが期待できます。</p>



<h3 class="wp-block-heading"><span id="toc19">Gemini API無料枠で副業・本業どちらにも十分</span></h3>



<p class="wp-block-paragraph">Gemini 2.5 Flashの無料枠は1日あたり250リクエスト（RPD 250）、Flash-Liteなら1,000リクエスト（RPD 1,000）です（2026年3月時点）。隔週で40通程度のメールに対して返信下書きを生成する用途であれば、無料枠の範囲内で十分に収まります。APIキーは<a rel="noopener" href="https://aistudio.google.com/" target="_blank">Google AI Studio</a>から取得できます。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<p class="wp-block-paragraph">Gemini 2.0 Flashは2026年6月1日、Gemini 2.5 Flashは2026年6月17日にそれぞれシャットダウンが予定されています。後継のGemini 3 Flash Preview（2025年12月公開）やGemini 3.1系モデルがAPI無料枠で利用可能になっています。本記事の姉妹記事で使用しているgemini-2.5-flashのモデル名は、シャットダウン前にgemini-3-flash-previewなどへ変更が必要です。最新の非推奨スケジュールは<a rel="noopener" href="https://ai.google.dev/gemini-api/docs/deprecations" target="_blank">Google公式の非推奨モデル一覧</a>で確認してください。</p>
</div>



<p class="wp-block-paragraph">この構想は別記事で実装済みです。GASからGemini APIを呼び出し、プロジェクトの文脈を踏まえた返信下書きをGmailに自動保存するコード全文と実行結果を公開しています。本記事のv2スクリプトと同じ仕組みがベースなので、ここまでの内容を理解していればスムーズに読み進められます。</p>



<p class="wp-block-paragraph">&#x25b6; 実装コードと手順の詳細はこちら<br><a href="https://shumatsu-lab.com/gas-gemini-api-email-reply-draft/">GAS×Gemini APIでメール返信下書きを自動生成する方法</a></p>



<h2 class="wp-block-heading"><span id="toc20">GAS運用で知っておきたい注意点</span></h2>



<p class="wp-block-paragraph">GASにはいくつかの実行制限があります。1回の実行時間は最大6分で、これを超えるとスクリプトが強制終了します。40通程度のメール集約であれば問題ありませんが、数百通を対象にする場合は分割実行の仕組みが必要です。</p>



<p class="wp-block-paragraph">トリガー（定期実行）は1プロジェクトあたり最大20個まで設定可能です。Google Workspaceアカウントと個人Googleアカウントでは実行上限が異なり、Workspaceアカウントのほうがメール送信数やURL Fetch回数の上限が高く設定されています。詳細は<a rel="noopener" href="https://developers.google.com/apps-script/guides/services/quotas" target="_blank">Google公式のApps Script割り当て量ページ</a>で確認できます。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<p class="wp-block-paragraph">前述のとおり、GASを開く際はscript.google.comに直接アクセスするとWorkspaceアカウントの切り替え問題で失敗することがあります。Googleドライブの「新規作成 → その他 → Google Apps Script」、または既存ファイルをドライブ内で検索して開くのが確実です。</p>
</div>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">

<a href="https://shumatsu-lab.com/gas-gemini-api-email-reply-draft/" title="GAS×Gemini API無料枠でメール返信を自動化｜5分類＋下書き生成の実装記録" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="160" height="90" src="https://shumatsu-lab.com/wp-content/uploads/2026/02/gas-gemini-api-email-reply-draft-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://shumatsu-lab.com/wp-content/uploads/2026/02/gas-gemini-api-email-reply-draft-1-160x90.png 160w, https://shumatsu-lab.com/wp-content/uploads/2026/02/gas-gemini-api-email-reply-draft-1-120x68.png 120w, https://shumatsu-lab.com/wp-content/uploads/2026/02/gas-gemini-api-email-reply-draft-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">GAS×Gemini API無料枠でメール返信を自動化｜5分類＋下書き生成の実装記録</div><div class="blogcard-snippet internal-blogcard-snippet">1日30分のメール返信を自動化。GASとGemini APIの無料枠でメールを5分類して下書き生成する実装手順。2026年6月のGemini 2.5 Flashシャットダウンへの移行ガイダンスも収録。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://shumatsu-lab.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">shumatsu-lab.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.02.22</div></div></div></div></a>
</div></figure>



<h2 class="wp-block-heading"><span id="toc21">よくある質問</span></h2>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">GASは無料で使えますか？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p class="wp-block-paragraph">はい、Googleアカウントがあれば無料で使えます。Google Workspaceアカウントでも個人アカウントでも利用可能です。有料のWorkspaceプランのほうが実行回数の上限は高くなりますが、本記事のスクリプト程度であれば無料アカウントでも問題ありません。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">プログラミング経験がなくても大丈夫ですか？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p class="wp-block-paragraph">本記事のコードはコピペで動作するように設計しています。スプレッドシートの「設定」「除外」シートに値を入力し、スクリプトを貼り付けて実行ボタンを押すだけです。エラーが出た場合のデバッグにはJavaScriptの基礎知識があると助かりますが、エラーメッセージをそのままChatGPTやGeminiに貼り付けて解決策を聞く方法もあります。ExcelVBAを使った業務効率化に興味がある方は「<a href="https://shumatsu-lab.com/excel-efficiency-tips/">SE歴20年の時短術｜Excel業務効率化15選</a>」も参考になります。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">複数プロジェクトに対応できますか？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p class="wp-block-paragraph">設定シートの行を増やし、スクリプトをループ処理に変更すれば対応可能です。ただし、プロジェクトごとに除外キーワードが異なる場合は、除外シートの構成も合わせて変更する必要があります。まずは1プロジェクトで運用を安定させてから拡張することをおすすめします。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">NotebookLMの個人向け有料プランでAPIは使えますか？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p class="wp-block-paragraph">2026年3月時点では使えません。NotebookLM APIが提供されているのはEnterprise版のみです。個人向けプラン（Free / Plus / Pro / Ultra）ではソースの自動追加APIは利用できません。プランの確認方法や各プランの上限値は「<a href="https://shumatsu-lab.com/notebooklm-practical-use-cases-se-experience-2/">NotebookLM活用術7選</a>」のプラン比較表を参照してください。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">除外フィルタで取りこぼしが出たらどうすればいいですか？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p class="wp-block-paragraph">ログシートで除外数を確認し、想定より少ない場合は除外シートにキーワードを追加してください。Gmailの検索演算子を活用して「from:特定アドレス」や「label:ラベル名」で対象を絞る方法も有効です。自動化ツールを組み合わせた業務効率化の考え方は「<a href="https://shumatsu-lab.com/se-automation-tips/">SE歴20年の業務自動化術</a>」でも詳しく解説しています。</p>
</div></dd></dl></div>



<h2 class="wp-block-heading"><span id="toc22">まとめ</span></h2>



<p class="wp-block-paragraph">本業のプロジェクトメールをGASで自動集約し、NotebookLMの思考整理に活用する方法を解説しました。最初の「動くけど荒い」v1から、スプレッドシート制御と除外フィルタを加えたv2への改善過程を通じて、GASの実践的な使い方を紹介しています。</p>



<p class="wp-block-paragraph">NotebookLMへの自動投入は現時点でEnterprise限定ですが、手動投入でもGASによるメール集約だけで大幅な時短になります。次のステップとしてGemini APIによる返信下書き自動生成も別記事で実装・公開済みです。本記事のv2スクリプトをベースにGemini APIと連携して返信下書きを自動保存する手順を解説しています。</p>



<p class="wp-block-paragraph">&#x25b6; 本記事のメール集約をベースに、Gemini APIで返信下書きを自動生成する方法はこちらで解説しています。</p>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">

<a href="https://shumatsu-lab.com/gas-gemini-api-email-reply-draft/" title="GAS×Gemini API無料枠でメール返信を自動化｜5分類＋下書き生成の実装記録" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="160" height="90" src="https://shumatsu-lab.com/wp-content/uploads/2026/02/gas-gemini-api-email-reply-draft-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://shumatsu-lab.com/wp-content/uploads/2026/02/gas-gemini-api-email-reply-draft-1-160x90.png 160w, https://shumatsu-lab.com/wp-content/uploads/2026/02/gas-gemini-api-email-reply-draft-1-120x68.png 120w, https://shumatsu-lab.com/wp-content/uploads/2026/02/gas-gemini-api-email-reply-draft-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">GAS×Gemini API無料枠でメール返信を自動化｜5分類＋下書き生成の実装記録</div><div class="blogcard-snippet internal-blogcard-snippet">1日30分のメール返信を自動化。GASとGemini APIの無料枠でメールを5分類して下書き生成する実装手順。2026年6月のGemini 2.5 Flashシャットダウンへの移行ガイダンスも収録。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://shumatsu-lab.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">shumatsu-lab.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.02.22</div></div></div></div></a>
</div></figure>



<p class="wp-block-paragraph">&#x25b6; 集約したメールからスライド資料を作りたい場合、AIスライド生成ツールの選び方が参考になります。</p>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">

<a href="https://shumatsu-lab.com/ai-slide-generator-comparison-guide/" title="AIスライド作成3ツール比較｜社内プレゼン向け実践ガイド" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="160" height="90" src="https://shumatsu-lab.com/wp-content/uploads/2026/02/ai-slide-generator-comparison-guide-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://shumatsu-lab.com/wp-content/uploads/2026/02/ai-slide-generator-comparison-guide-1-160x90.png 160w, https://shumatsu-lab.com/wp-content/uploads/2026/02/ai-slide-generator-comparison-guide-1-120x68.png 120w, https://shumatsu-lab.com/wp-content/uploads/2026/02/ai-slide-generator-comparison-guide-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">AIスライド作成3ツール比較｜社内プレゼン向け実践ガイド</div><div class="blogcard-snippet internal-blogcard-snippet">Gamma・NotebookLM・Canva AIを同一条件で実際に試した。生成速度・編集性・社内プレゼンでの機密情報の扱いまで徹底比較。最適ツールの選び方を解説。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://shumatsu-lab.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">shumatsu-lab.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.05.17</div></div></div></div></a>
</div></figure>



<div class="wp-block-cocoon-blocks-toggle-box-1 toggle-wrap toggle-box block-box not-nested-style cocoon-block-toggle"><input id="toggle-checkbox-202605031856220" class="toggle-checkbox" type="checkbox"/><label class="toggle-button" for="toggle-checkbox-202605031856220">この記事の更新履歴</label><div class="toggle-content">
<p class="wp-block-paragraph">2026.03.25 ─ NotebookLMプラン体系・Gemini API非推奨情報・FAQ回答を更新<br>2026.03.20 ─ Gemini API無料枠RPD情報を最新データに修正<br>2026.03.01 ─ 初版公開</p>
</div></div>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">317</post-id>	</item>
		<item>
		<title>GAS×Gemini API無料枠でメール返信を自動化｜5分類＋下書き生成の実装記録</title>
		<link>https://shumatsu-lab.com/gas-gemini-api-email-reply-draft/</link>
		
		<dc:creator><![CDATA[ムラサキ]]></dc:creator>
		<pubDate>Sun, 22 Feb 2026 03:08:35 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[副業・効率化]]></category>
		<category><![CDATA[GAS]]></category>
		<category><![CDATA[Gemini]]></category>
		<category><![CDATA[Google Workspace]]></category>
		<category><![CDATA[メール自動化]]></category>
		<guid isPermaLink="false">https://shumatsu-lab.com/?p=320</guid>

					<description><![CDATA[「案件継続の確認メール、了解の返信、稼働報告への受領連絡──」毎日同じようなメールを何通も書いていませんか。SE歴20年の筆者も、気づけば1日30分以上をメール返信に費やしていました。 Google Apps Scrip [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<p class="wp-block-paragraph">2026.03.25 更新：Gemini 2.5 Flashのシャットダウン予定（2026年6月17日）とGemini 3系モデルへの移行ガイダンスを追記</p>
</div>



<p class="wp-block-paragraph">「案件継続の確認メール、了解の返信、稼働報告への受領連絡──」毎日同じようなメールを何通も書いていませんか。SE歴20年の筆者も、気づけば1日30分以上をメール返信に費やしていました。</p>



<p class="wp-block-paragraph">Google Apps Script（GAS）とGemini APIを組み合わせれば、新着メールを自動で分類し、パターンに応じた返信の下書きをGmailに自動生成できます。本記事では、実際にスクリプトを動かして遭遇したハマりポイント（429エラー、権限承認、モデル別レート制限）も含め、コピペで実装できるコード全文を公開します。</p>


<div class="slb slb-tldr">
  <div class="slb-tldr__head">
    <span class="slb-mono slb-tldr__label">TL;DR / 三行要約</span>
          <span class="slb-mono slb-tldr__meta">10 MIN READ · UPDATED 2026.03</span>
      </div>
  <ol>
          <li>ルールベース5パターン＋Gemini自由分類のハイブリッドで、定型メールは高速処理・想定外メールも対応。</li>
          <li>返信は「下書き保存」のみ。送信前に確認・編集できる安全設計で誤送信リスクゼロ。</li>
          <li>スクリプト作成場所に注意：スタンドアロン型ではなくスプレッドシートバインド型で作成すること。</li>
      </ol>
    <div class="slb-tldr__badges">
          <span class="slb-badge slb-badge--hi">
        RESULT — 1日30分以上のメール返信作業を自動下書き化      </span>
          <span class="slb-badge">
        TOOL — Google Apps Script + Gemini API無料枠      </span>
          <span class="slb-badge">
        COST — 無料（APIキー取得のみ）      </span>
      </div>
  </div>
    




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">毎日のメール返信、同じようなことを書いていませんか</a><ol><li><a href="#toc2" tabindex="0">この仕組みで自動化できる5つのメールパターン</a></li><li><a href="#toc3" tabindex="0">全体のデータフローと処理の流れ</a></li></ol></li><li><a href="#toc4" tabindex="0">事前準備──Gemini APIキーの取得とGASの開き方</a><ol><li><a href="#toc5" tabindex="0">Gemini APIキーを無料で取得する</a></li><li><a href="#toc6" tabindex="0">GASは「スプレッドシートから」作成する</a></li></ol></li><li><a href="#toc7" tabindex="0">スプレッドシートの4シート設計</a><ol><li><a href="#toc8" tabindex="0">「設定」シート──前回実行日時とラベル名</a></li><li><a href="#toc9" tabindex="0">「除外」シート──返信不要メールのルール定義</a></li><li><a href="#toc10" tabindex="0">「パターン」シート──5パターンの判定条件とプロンプト</a></li></ol></li><li><a href="#toc11" tabindex="0">コピペ用コード全文と初回セットアップ</a><ol><li><a href="#toc12" tabindex="0">コード全文</a></li><li><a href="#toc13" tabindex="0">初回セットアップ手順</a></li></ol></li><li><a href="#toc14" tabindex="0">「このアプリはGoogleで確認されていません」の突破方法</a></li><li><a href="#toc15" tabindex="0">無料枠の落とし穴──モデル別レート制限と回避策</a><ol><li><a href="#toc16" tabindex="0">モデル別の無料枠比較</a></li><li><a href="#toc17" tabindex="0">モデルはRPDが別カウント──使い分けで回避する</a></li></ol></li><li><a href="#toc18" tabindex="0">運用Tipsと今後の拡張</a><ol><li><a href="#toc19" tabindex="0">ルールベースのパターンを増やしてAPI呼び出しを最小化</a></li><li><a href="#toc20" tabindex="0">「AI下書き」ラベルで通常の下書きと分離管理</a></li></ol></li><li><a href="#toc21" tabindex="0">よくある質問</a></li><li><a href="#toc22" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">毎日のメール返信、同じようなことを書いていませんか</span></h2>



<p class="wp-block-paragraph">マネージャーやリーダー職になると、受信するメールの種類はある程度パターン化されます。取引先からの案件継続確認、稼働報告、請求連絡。メンバからの日報。内容を確認して返信を書く作業自体は数分ですが、1日に何通も積み重なると無視できない時間になります。</p>



<p class="wp-block-paragraph">この「パターン化されている」という特徴が、自動化のチャンスです。ルールベースの振り分けとAIによる文面生成を組み合わせれば、返信の下書きを自動で用意できます。あくまで下書きなので、送信前に内容を確認・編集できる安全設計です。</p>



<h3 class="wp-block-heading"><span id="toc2">この仕組みで自動化できる5つのメールパターン</span></h3>



<p class="wp-block-paragraph">今回自動化するのは、筆者の実務で頻度が高い以下の5パターンです。</p>



<ul class="wp-block-list">
<li>取引先からの案件継続確認 → 継続・終了の2パターンを本文に併記し、自分で選んで編集</li>



<li>取引先からの稼働報告 → 問題ない旨を伝え、次の手続き（請求書提出等）を促す</li>



<li>取引先からの請求連絡 → 受領確認と謝辞</li>



<li>日報 → 受領連絡とコメント記入用フォーマット</li>



<li>進捗報告 → 受領連絡と内容に対するコメント</li>
</ul>



<p class="wp-block-paragraph">これら以外のメールも、Gemini APIが返信要否を判断し、必要なら自由に返信文を生成します。</p>



<h3 class="wp-block-heading"><span id="toc3">全体のデータフローと処理の流れ</span></h3>



<p class="wp-block-paragraph">処理は5ステップで進みます。まず前回実行以降の新着メールを取得し、除外ルール（送信者・件名・受信タイプ）に該当するメールをスキップします。次にパターンシートのルールベースで分類し、一致すれば対応するプロンプトでGemini APIに返信文を生成させます。どのパターンにも一致しないメールはGeminiに自由に分類・返信要否判断を任せます。生成された返信は「全員に返信」の下書きとしてGmailに保存し、「AI下書き」ラベルを付けて通常の下書きと分離管理します。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="614" height="1024" src="https://shumatsu-lab.com/wp-content/uploads/2026/02/email-reply-automation-flow-diagram-614x1024.png" alt="メール返信自動化の全体フロー：新着メール→除外→パターン判定→Gemini分類→下書き保存" class="wp-image-336" srcset="https://shumatsu-lab.com/wp-content/uploads/2026/02/email-reply-automation-flow-diagram-614x1024.png 614w, https://shumatsu-lab.com/wp-content/uploads/2026/02/email-reply-automation-flow-diagram-180x300.png 180w, https://shumatsu-lab.com/wp-content/uploads/2026/02/email-reply-automation-flow-diagram-768x1280.png 768w, https://shumatsu-lab.com/wp-content/uploads/2026/02/email-reply-automation-flow-diagram-922x1536.png 922w, https://shumatsu-lab.com/wp-content/uploads/2026/02/email-reply-automation-flow-diagram-1229x2048.png 1229w, https://shumatsu-lab.com/wp-content/uploads/2026/02/email-reply-automation-flow-diagram.png 1550w" sizes="(max-width: 614px) 100vw, 614px" /></figure>



<h2 class="wp-block-heading"><span id="toc4">事前準備──Gemini APIキーの取得とGASの開き方</span></h2>



<h3 class="wp-block-heading"><span id="toc5">Gemini APIキーを無料で取得する</span></h3>



<p class="wp-block-paragraph">Gemini APIを使うために、Geminiの有料プラン（Gemini Advanced等）を契約する必要はありません。Geminiのチャットサービスと開発者向けAPIはまったく別物です。個人のGoogleアカウントで<a rel="noopener" href="https://aistudio.google.com/" target="_blank">Google AI Studio</a>にアクセスし、「Get API Key」ボタンを押すだけで、無料でAPIキーを取得できます。クレジットカードの登録も不要です。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="139" src="https://shumatsu-lab.com/wp-content/uploads/2026/02/ai-studio-get-api-key-1024x139.png" alt="Google AI StudioのGet API Keyボタンを押す操作" class="wp-image-335" srcset="https://shumatsu-lab.com/wp-content/uploads/2026/02/ai-studio-get-api-key-1024x139.png 1024w, https://shumatsu-lab.com/wp-content/uploads/2026/02/ai-studio-get-api-key-300x41.png 300w, https://shumatsu-lab.com/wp-content/uploads/2026/02/ai-studio-get-api-key-768x104.png 768w, https://shumatsu-lab.com/wp-content/uploads/2026/02/ai-studio-get-api-key.png 1227w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box alert-box"> 

<p class="wp-block-paragraph">会社のGoogle Workspaceアカウントでは、管理者がAI Studioへのアクセスをブロックしている場合があります。「An unknown error occurred」と表示された場合は管理者設定が原因です。個人のGoogleアカウントに切り替えてアクセスしてください。</p>


 </div>



<h3 class="wp-block-heading"><span id="toc6">GASは「スプレッドシートから」作成する</span></h3>



<p class="wp-block-paragraph">GASのスクリプトを作成する方法は複数ありますが、本記事のスクリプトは必ずスプレッドシートから作成してください。スプレッドシートを開き、メニューの「拡張機能 → Apps Script」を選択します。</p>



<p class="wp-block-paragraph">Googleドライブの「新規作成 → その他 → Google Apps Script」で作成すると「スタンドアロンスクリプト」になります。この場合、コード内の<code>SpreadsheetApp.getActiveSpreadsheet()</code>がどのスプレッドシートにも紐づかず<code>null</code>を返すため、シート読み込みでエラーが発生します。筆者も最初にこの方法で作成してしまい、原因特定に時間を取られました。</p>



<figure class="wp-block-image size-full"><img decoding="async" src="https://shumatsu-lab.com/wp-content/uploads/2026/02/spreadsheet-extension-apps-script.png" alt="スプレッドシートの拡張機能メニューからApps Scriptを開く操作" class="wp-image-337"/></figure>



<h2 class="wp-block-heading"><span id="toc7">スプレッドシートの4シート設計</span></h2>



<p class="wp-block-paragraph">スクリプトが参照するスプレッドシートには、4つのシートを作成します。設定値・除外ルール・返信パターン・実行ログをそれぞれ管理する構成です。</p>



<h3 class="wp-block-heading"><span id="toc8">「設定」シート──前回実行日時とラベル名</span></h3>



<p class="wp-block-paragraph">A列に項目名、B列に値を入力します。1行目はヘッダーです。B1の「前回実行日時」は初回実行時に空欄のままにしておけば、スクリプトが自動的に24時間前を基準にします。実行後に現在日時が自動で書き込まれます。B2の「ラベル名」は自動生成した下書きに付けるGmailラベルの名前です。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="467" height="147" src="https://shumatsu-lab.com/wp-content/uploads/2026/02/settings-sheet-lastrun-label.png" alt="設定シートに前回実行日時とラベル名を入力した状態" class="wp-image-341" srcset="https://shumatsu-lab.com/wp-content/uploads/2026/02/settings-sheet-lastrun-label.png 467w, https://shumatsu-lab.com/wp-content/uploads/2026/02/settings-sheet-lastrun-label-300x94.png 300w" sizes="(max-width: 467px) 100vw, 467px" /></figure>



<h3 class="wp-block-heading"><span id="toc9">「除外」シート──返信不要メールのルール定義</span></h3>



<p class="wp-block-paragraph">返信が不要なメールを事前にフィルタリングします。条件タイプは「送信者」「件名」「受信タイプ」の3種類です。受信タイプは、自分がToのみ（to-only）、Toに複数名（to-multi）、Cc（cc）、Bcc（bcc）の4分類で、ccとbccを除外に設定しておくと大半のノイズを排除できます。</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box not-nested-style cocoon-block-tab-caption-box"> <div class="tab-caption-box-label block-box-label box-label"> <span class="tab-caption-box-label-text block-box-label-text box-label-text">受信タイプの分類</span> </div> <div class="tab-caption-box-content block-box-content box-content"> 

<p class="wp-block-paragraph">to-only：自分だけがTo。直接の依頼で返信必須度が高い</p>


 

<p class="wp-block-paragraph">to-multi：Toに自分と他者。複数名への依頼で、誰かが返信すればよい場合も</p>


 

<p class="wp-block-paragraph">cc：自分はCcのみ。参考共有で基本返信不要</p>


 

<p class="wp-block-paragraph">bcc：自分はBcc。一斉送信でほぼ返信不要</p>


 </div> </div>



<figure class="wp-block-image size-full"><img decoding="async" width="525" height="199" src="https://shumatsu-lab.com/wp-content/uploads/2026/02/exclude-sheet-rules-sample.png" alt="除外シートに送信者・件名・受信タイプの除外ルールを入力した状態" class="wp-image-342" srcset="https://shumatsu-lab.com/wp-content/uploads/2026/02/exclude-sheet-rules-sample.png 525w, https://shumatsu-lab.com/wp-content/uploads/2026/02/exclude-sheet-rules-sample-300x114.png 300w" sizes="(max-width: 525px) 100vw, 525px" /></figure>



<h3 class="wp-block-heading"><span id="toc10">「パターン」シート──5パターンの判定条件とプロンプト</span></h3>



<p class="wp-block-paragraph">A列にパターン名、B列に条件タイプ（現在は「件名」のみ）、C列に条件値（キーワード）、D列に受信タイプ制限（カンマ区切りで複数指定可、空欄なら無制限）、E列にGeminiへのプロンプトを記載します。</p>



<p class="wp-block-paragraph">たとえば「案件継続確認」パターンでは、件名に「継続確認」を含み、受信タイプがto-onlyまたはto-multiの場合に、継続・終了の2パターンを本文内に併記するプロンプトを実行します。プロンプトはスプレッドシート上で自由に編集できるため、スクリプトを触らずに返信の文面やトーンを調整できます。</p>



<div class="wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-7387b849 wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full"><img decoding="async" width="1262" height="197" src="https://shumatsu-lab.com/wp-content/uploads/2026/02/pattern-sheet-5-rules-sample.png" alt="パターンシートに5パターンの条件とプロンプトを入力した状態" class="wp-image-357" srcset="https://shumatsu-lab.com/wp-content/uploads/2026/02/pattern-sheet-5-rules-sample.png 1262w, https://shumatsu-lab.com/wp-content/uploads/2026/02/pattern-sheet-5-rules-sample-300x47.png 300w, https://shumatsu-lab.com/wp-content/uploads/2026/02/pattern-sheet-5-rules-sample-1024x160.png 1024w, https://shumatsu-lab.com/wp-content/uploads/2026/02/pattern-sheet-5-rules-sample-768x120.png 768w" sizes="(max-width: 1262px) 100vw, 1262px" /></figure>
</div>



<h2 class="wp-block-heading"><span id="toc11">コピペ用コード全文と初回セットアップ</span></h2>



<h3 class="wp-block-heading"><span id="toc12">コード全文</span></h3>



<p class="wp-block-paragraph">以下がスクリプト全文です。メイン関数<code>processNewEmails</code>と、受信タイプ判定・除外判定・パターンマッチ・Gemini分類・API呼び出し・下書き作成の6つの補助関数で構成されています。</p>



<p class="wp-block-paragraph">メイン関数 <code>processNewEmails()</code> の冒頭部分だけ抜粋します。</p>



<pre class="wp-block-code"><code class="language-javascript">function processNewEmails() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var settingsSheet = ss.getSheetByName("設定");
  var lastRunRaw = settingsSheet.getRange("B1").getValue();
  var labelName = settingsSheet.getRange("B2").getValue() || "AI下書き";
  // ... 続きはトグル内で全文を掲載
}</code></pre>



<div class="wp-block-cocoon-blocks-toggle-box-1 toggle-wrap toggle-box block-box not-nested-style cocoon-block-toggle"><input id="toggle-checkbox-202606040759120" class="toggle-checkbox" type="checkbox"/><label class="toggle-button" for="toggle-checkbox-202606040759120">コード全文を表示する（クリックで開閉）</label><div class="toggle-content">
<pre class="wp-block-code"><code>function processNewEmails() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var settingsSheet = ss.getSheetByName("設定");
  var lastRunRaw = settingsSheet.getRange("B1").getValue();
  var labelName = settingsSheet.getRange("B2").getValue() || "AI下書き";
  var myEmail = Session.getActiveUser().getEmail();
  var lastRun;

  if (lastRunRaw) {
    lastRun = new Date(lastRunRaw);
  } else {
    lastRun = new Date(Date.now() - 24 * 60 * 60 * 1000);
  }

  var excludeSheet = ss.getSheetByName("除外");
  var excludeData = excludeSheet.getDataRange().getValues();
  excludeData.shift();

  var patternSheet = ss.getSheetByName("パターン");
  var patternData = patternSheet.getDataRange().getValues();
  patternData.shift();

  var logSheet = ss.getSheetByName("ログ");
  if (!logSheet) {
    logSheet = ss.insertSheet("ログ");
    logSheet.appendRow(&#091;"実行日時", "件名", "送信者", "受信タイプ", "処理区分", "分類結果", "ドラフトURL"]);
  }

  var label = GmailApp.getUserLabelByName(labelName);
  if (!label) { label = GmailApp.createLabel(labelName); }

  var afterDate = Utilities.formatDate(lastRun, Session.getScriptTimeZone(), "yyyy/MM/dd");
  var threads = GmailApp.search("after:" + afterDate + " is:inbox");

  var processedCount = 0;
  var excludedCount = 0;
  var draftedCount = 0;
  var skippedCount = 0;
  var now = new Date();

  for (var i = 0; i &lt; threads.length; i++) {
    var messages = threads&#091;i].getMessages();
    var lastMsg = messages&#091;messages.length - 1];
    if (lastMsg.getDate() &lt;= lastRun) continue;

    var subject = lastMsg.getSubject();
    var from = lastMsg.getFrom();
    var body = lastMsg.getPlainBody();
    var to = lastMsg.getTo() || "";
    var cc = lastMsg.getCc() || "";
    var receiveType = getReceiveType(myEmail, to, cc, lastMsg);
    processedCount++;

    if (isExcluded(subject, from, receiveType, excludeData)) {
      logSheet.appendRow(&#091;now, subject, from, receiveType, "除外", "-", "-"]);
      excludedCount++;
      continue;
    }

    var matchedPattern = matchPattern(subject, receiveType, patternData);
    if (matchedPattern) {
      var prompt = matchedPattern.prompt + "nn---n【件名】" + subject + "n【送信者】" + from + "n【本文】n" + body;
      var replyText = callGemini(prompt);
      if (replyText) {
        createReplyDraft(lastMsg, replyText, label);
        logSheet.appendRow(&#091;now, subject, from, receiveType, "生成", matchedPattern.name, "下書き作成済"]);
        draftedCount++;
      }
      continue;
    }

    var geminiResult = classifyAndDraftWithGemini(subject, from, body, receiveType);
    if (geminiResult.needsReply &amp;&amp; geminiResult.replyText) {
      createReplyDraft(lastMsg, geminiResult.replyText, label);
      logSheet.appendRow(&#091;now, subject, from, receiveType, "生成(Gemini分類)", geminiResult.category, "下書き作成済"]);
      draftedCount++;
    } else {
      logSheet.appendRow(&#091;now, subject, from, receiveType, "スキップ", geminiResult.category || "返信不要", "-"]);
      skippedCount++;
    }
  }

  settingsSheet.getRange("B1").setValue(now);
  Logger.log("完了: 処理=" + processedCount + " 生成=" + draftedCount + " 除外=" + excludedCount + " スキップ=" + skippedCount);
}

function getReceiveType(myEmail, to, cc, message) {
  var myEmailLower = myEmail.toLowerCase();
  var toLower = to.toLowerCase();
  var ccLower = cc.toLowerCase();

  if (ccLower.indexOf(myEmailLower) !== -1 &amp;&amp; toLower.indexOf(myEmailLower) === -1) return "cc";
  if (toLower.indexOf(myEmailLower) === -1 &amp;&amp; ccLower.indexOf(myEmailLower) === -1) return "bcc";
  if (toLower.indexOf(myEmailLower) !== -1) {
    var toAddresses = toLower.split(",").map(function(addr) {
      return addr.trim().replace(/.*&lt;/, "").replace(/&gt;.*/, "");
    }).filter(function(addr) { return addr.indexOf("@") !== -1; });
    return toAddresses.length === 1 ? "to-only" : "to-multi";
  }
  return "unknown";
}

function isExcluded(subject, from, receiveType, excludeData) {
  for (var i = 0; i &lt; excludeData.length; i++) {
    var condType = String(excludeData&#091;i]&#091;1]).trim();
    var condValue = String(excludeData&#091;i]&#091;2]).trim();
    if (!condType || !condValue) continue;
    switch (condType) {
      case "送信者": if (from.toLowerCase().indexOf(condValue.toLowerCase()) !== -1) return true; break;
      case "件名": if (subject.indexOf(condValue) !== -1) return true; break;
      case "受信タイプ": if (receiveType === condValue) return true; break;
    }
  }
  return false;
}

function matchPattern(subject, receiveType, patternData) {
  for (var i = 0; i &lt; patternData.length; i++) {
    var name = String(patternData&#091;i]&#091;0]).trim();
    var condType = String(patternData&#091;i]&#091;1]).trim();
    var condValue = String(patternData&#091;i]&#091;2]).trim();
    var allowedTypes = String(patternData&#091;i]&#091;3]).trim();
    var prompt = String(patternData&#091;i]&#091;4]).trim();
    if (!name || !condType || !condValue || !prompt) continue;
    if (condType === "件名" &amp;&amp; subject.indexOf(condValue) === -1) continue;
    if (allowedTypes) {
      var types = allowedTypes.split(",").map(function(t) { return t.trim(); });
      if (types.indexOf(receiveType) === -1) continue;
    }
    return { name: name, prompt: prompt };
  }
  return null;
}

function classifyAndDraftWithGemini(subject, from, body, receiveType) {
  var prompt = "あなたはIT企業のプロジェクトマネージャーのメールアシスタントです。n"
    + "以下のメールを分析し、JSON形式で回答してください。nn"
    + "【判断基準】n"
    + "- 自分宛て（to-only, to-multi）の業務メールで返信が期待されている場合は返信要n"
    + "- 通知・報告のみで返信不要と判断できる場合は返信不要n"
    + "- 迷った場合は返信要として短い受領確認を作成nn"
    + "【出力JSON形式】n"
    + "{"needsReply": true/false, "category": "分類名", "replyText": "返信文"}nn"
    + "【注意】n- 返信文はビジネスメールとして適切な敬語で作成n- JSON以外のテキストは出力しないでくださいnn"
    + "---n【件名】" + subject + "n【送信者】" + from + "n【受信タイプ】" + receiveType + "n【本文】n" + body;

  var responseText = callGemini(prompt);
  if (!responseText) return { needsReply: false, category: "APIエラー", replyText: "" };

  try {
    var jsonMatch = responseText.match(/{&#091;sS]*}/);
    if (jsonMatch) {
      var result = JSON.parse(jsonMatch&#091;0]);
      return {
        needsReply: result.needsReply || false,
        category: result.category || "不明",
        replyText: result.replyText || ""
      };
    }
  } catch (e) {
    Logger.log("JSON解析エラー: " + e.message);
  }
  return { needsReply: false, category: "解析エラー", replyText: "" };
}

function callGemini(prompt) {
  var apiKey = PropertiesService.getScriptProperties().getProperty("GEMINI_API_KEY");
  if (!apiKey) {
    Logger.log("エラー: GEMINI_API_KEYが設定されていません");
    return null;
  }

  var url = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent";
  var payload = { contents: &#091;{ parts: &#091;{ text: prompt }] }] };
  var options = {
    method: "POST",
    contentType: "application/json",
    headers: { "x-goog-api-key": apiKey },
    payload: JSON.stringify(payload),
    muteHttpExceptions: true
  };

  var maxRetries = 3;
  for (var attempt = 1; attempt &lt;= maxRetries; attempt++) {
    try {
      var response = UrlFetchApp.fetch(url, options);
      var statusCode = response.getResponseCode();

      if (statusCode === 200) {
        var data = JSON.parse(response.getContentText());
        return data.candidates&#091;0].content.parts&#091;0].text;
      }

      if (statusCode === 429) {
        var retryMatch = response.getContentText().match(/"retryDelay":s*"(d+)s"/);
        var waitSec = retryMatch ? parseInt(retryMatch&#091;1]) + 5 : 60;
        Logger.log("レート制限(試行" + attempt + "/" + maxRetries + ")：" + waitSec + "秒待機");
        Utilities.sleep(waitSec * 1000);
        continue;
      }

      Logger.log("APIエラー: " + statusCode + " " + response.getContentText());
      return null;
    } catch (e) {
      Logger.log("API呼び出しエラー(試行" + attempt + "): " + e.message);
      if (attempt &lt; maxRetries) Utilities.sleep(30 * 1000);
    }
  }

  Logger.log("リトライ上限到達。スキップします。");
  return null;
}

function createReplyDraft(message, replyText, label) {
  var draft = message.createDraftReplyAll(replyText);
  var thread = message.getThread();
  thread.addLabel(label);
  return draft;
}</code></pre>
</div></div>



<h3 class="wp-block-heading"><span id="toc13">初回セットアップ手順</span></h3>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box memo-box">
<ol class="wp-block-list">
<li>Googleドライブで新しいスプレッドシートを作成する</li>



<li>「設定」「除外」「パターン」の3シートを作成し、前述の通り入力する</li>



<li>メニュー「拡張機能 → Apps Script」でスクリプトエディタを開く</li>



<li>上記コード全文を貼り付けて保存（Ctrl+S）</li>



<li>左メニュー「プロジェクトの設定」→「スクリプトプロパティ」に GEMINI_API_KEY を追加し、取得したAPIキーを入力</li>



<li>関数「processNewEmails」を選択して&#x25b6;実行ボタンを押す</li>



<li>初回は権限承認が求められるので許可する（次のセクションで詳しく解説）</li>
</ol>
</div>



<figure class="wp-block-image size-full"><img decoding="async" width="841" height="612" src="https://shumatsu-lab.com/wp-content/uploads/2026/02/gas-script-property-api-key.png" alt="GASスクリプトプロパティにGEMINI_API_KEYを設定する画面" class="wp-image-346" srcset="https://shumatsu-lab.com/wp-content/uploads/2026/02/gas-script-property-api-key.png 841w, https://shumatsu-lab.com/wp-content/uploads/2026/02/gas-script-property-api-key-300x218.png 300w, https://shumatsu-lab.com/wp-content/uploads/2026/02/gas-script-property-api-key-768x559.png 768w" sizes="(max-width: 841px) 100vw, 841px" /></figure>



<h2 class="wp-block-heading"><span id="toc14">「このアプリはGoogleで確認されていません」の突破方法</span></h2>



<p class="wp-block-paragraph">初回実行時、「このアプリはGoogleで確認されていません」という警告画面が表示されます。GmailやGoogleドライブへのアクセス権限を求めるスクリプトでは必ず表示されるもので、自分で書いたスクリプトであれば安全です。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<p class="wp-block-paragraph">この警告は「Googleがまだ審査していないスクリプト」に対して表示されるもので、スクリプト自体が危険という意味ではありません。自分で作成したスクリプトであれば問題なく進めて大丈夫です。</p>
</div>



<p class="wp-block-paragraph">画面左下の「詳細」リンクをクリックすると、下部に「（プロジェクト名）（安全ではないページ）に移動」というリンクが表示されます。これをクリックすると権限の許可画面に進みます。「許可」を押せばスクリプトが実行されます。</p>



<figure class="wp-block-image size-full has-custom-border"><img decoding="async" width="648" height="356" src="https://shumatsu-lab.com/wp-content/uploads/2026/02/gas-unverified-app-warning-1.png" alt="「このアプリはGoogleで確認されていません」の警告画面と詳細リンク" class="has-border-color has-black-border-color wp-image-348" srcset="https://shumatsu-lab.com/wp-content/uploads/2026/02/gas-unverified-app-warning-1.png 648w, https://shumatsu-lab.com/wp-content/uploads/2026/02/gas-unverified-app-warning-1-300x165.png 300w" sizes="(max-width: 648px) 100vw, 648px" /></figure>



<figure class="wp-block-image size-full has-custom-border"><img decoding="async" width="645" height="492" src="https://shumatsu-lab.com/wp-content/uploads/2026/02/gas-allow-unverified-app.png" alt="権限承認で「詳細」→「安全でないページに移動」を選択する操作" class="has-border-color has-black-border-color wp-image-349" srcset="https://shumatsu-lab.com/wp-content/uploads/2026/02/gas-allow-unverified-app.png 645w, https://shumatsu-lab.com/wp-content/uploads/2026/02/gas-allow-unverified-app-300x229.png 300w" sizes="(max-width: 645px) 100vw, 645px" /></figure>



<h2 class="wp-block-heading"><span id="toc15">無料枠の落とし穴──モデル別レート制限と回避策</span></h2>



<p class="wp-block-paragraph">スクリプトが動き始めた直後に、429エラー（RESOURCE_EXHAUSTED）に遭遇しました。Gemini APIの無料枠にはモデルごとにリクエスト制限があり、想像よりかなり厳しい数値です。</p>



<h3 class="wp-block-heading"><span id="toc16">モデル別の無料枠比較</span></h3>



<p class="wp-block-paragraph">2026年3月時点の公式情報です。無料枠のレート制限は2025年12月に大幅削減されており、以前の数値とは大きく異なります。最新の上限は<a rel="noopener" href="https://aistudio.google.com/rate-limit" target="_blank">Gemini APIレート制限ダッシュボード</a>で自分のプロジェクトの実際の値を確認してください。</p>



<figure class="wp-block-table"><table><thead><tr><th>モデル</th><th>RPM（1分あたり）</th><th>RPD（1日あたり）</th><th>TPM（トークン/分）</th></tr></thead><tbody><tr><td>Gemini 2.5 Pro</td><td>5</td><td>100</td><td>250,000</td></tr><tr><td>Gemini 2.5 Flash</td><td>10</td><td>250</td><td>250,000</td></tr><tr><td>Gemini 2.5 Flash-Lite</td><td>15</td><td>1,000</td><td>250,000</td></tr></tbody></table></figure>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<p class="wp-block-paragraph">Gemini 2.5 Flashは2026年6月17日にシャットダウンが予定されています。後継のGemini 3 Flash Preview（2025年12月公開）やGemini 3.1系モデルがAPI無料枠で利用可能です。シャットダウン前にcallGemini関数内のモデル名をgemini-3-flash-previewなどに変更してください。最新の非推奨スケジュールは<a rel="noopener" href="https://ai.google.dev/gemini-api/docs/deprecations" target="_blank">Google公式の非推奨モデル一覧</a>で確認できます。</p>
</div>



<figure class="wp-block-image size-full"><img decoding="async" width="971" height="261" src="https://shumatsu-lab.com/wp-content/uploads/2026/02/gemini-rate-limit-dashboard.png" alt="Gemini APIレート制限画面でRPM・RPDの使用状況を確認" class="wp-image-351" srcset="https://shumatsu-lab.com/wp-content/uploads/2026/02/gemini-rate-limit-dashboard.png 971w, https://shumatsu-lab.com/wp-content/uploads/2026/02/gemini-rate-limit-dashboard-300x81.png 300w, https://shumatsu-lab.com/wp-content/uploads/2026/02/gemini-rate-limit-dashboard-768x206.png 768w" sizes="(max-width: 971px) 100vw, 971px" /></figure>



<h3 class="wp-block-heading"><span id="toc17">モデルはRPDが別カウント──使い分けで回避する</span></h3>



<p class="wp-block-paragraph">重要な発見がありました。レート制限はモデルごとに別カウントです。Gemini 2.5 FlashでRPDを使い切っても、コードのモデル名を<code>gemini-2.5-flash</code>に変更すれば、そのモデルのRPDがフルに使えます。変更箇所はcallGemini関数内のURL1箇所だけです。</p>



<p class="wp-block-paragraph">実際に筆者はGemini 2.5 FlashのRPD 250を使い切った後、Flash-Lite（RPD 1,000）に切り替えて同日中にテストを完了しました。返信文の品質はFlash-Liteでも実用レベルでした。日常運用ではRPD 250のGemini 2.5 Flashか、処理数が多い場合はRPD 1,000のFlash-Liteがおすすめです。コードの変更箇所はcallGemini関数内のURL1箇所だけです。</p>



<h2 class="wp-block-heading"><span id="toc18">運用Tipsと今後の拡張</span></h2>



<h3 class="wp-block-heading"><span id="toc19">ルールベースのパターンを増やしてAPI呼び出しを最小化</span></h3>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box ok-box"> 

<p class="wp-block-paragraph">パターンシートのルールベースで処理されたメールはGemini APIを1回呼び出すだけですが、Gemini分類に回るとAPI 1回で「分類＋返信生成」を処理します。ルールベースでカバーできるパターンを増やすほど、API消費を抑えて安定した運用ができます。</p>


 </div>



<p class="wp-block-paragraph">運用を続けていくと、ログシートの「生成(Gemini分類)」に記録されるメールに繰り返し同じ分類名が出てきます。それが新しいパターン候補です。パターンシートに追加すれば、次回以降はルールベースで処理されるようになります。</p>



<h3 class="wp-block-heading"><span id="toc20">「AI下書き」ラベルで通常の下書きと分離管理</span></h3>



<p class="wp-block-paragraph">スクリプトが生成した下書きには自動的に「AI下書き」ラベルが付きます。Gmailの左メニューでこのラベルをクリックすると、自動生成された下書きだけを一覧表示できます。通常の手書き下書きと混在しないため、まとめて確認・編集する運用が可能です。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="541" height="304" src="https://shumatsu-lab.com/wp-content/uploads/2026/02/gmail-ai-draft-label-list.png" alt="Gmailの「AI下書き」ラベルに自動生成された下書きが並んでいる状態" class="wp-image-352" srcset="https://shumatsu-lab.com/wp-content/uploads/2026/02/gmail-ai-draft-label-list.png 541w, https://shumatsu-lab.com/wp-content/uploads/2026/02/gmail-ai-draft-label-list-300x169.png 300w, https://shumatsu-lab.com/wp-content/uploads/2026/02/gmail-ai-draft-label-list-120x68.png 120w, https://shumatsu-lab.com/wp-content/uploads/2026/02/gmail-ai-draft-label-list-160x90.png 160w, https://shumatsu-lab.com/wp-content/uploads/2026/02/gmail-ai-draft-label-list-320x180.png 320w" sizes="(max-width: 541px) 100vw, 541px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="159" src="https://shumatsu-lab.com/wp-content/uploads/2026/02/log-sheet-processing-results-1024x159.png" alt="ログシートに処理結果（生成・除外・スキップ）が記録された状態" class="wp-image-353" srcset="https://shumatsu-lab.com/wp-content/uploads/2026/02/log-sheet-processing-results-1024x159.png 1024w, https://shumatsu-lab.com/wp-content/uploads/2026/02/log-sheet-processing-results-300x46.png 300w, https://shumatsu-lab.com/wp-content/uploads/2026/02/log-sheet-processing-results-768x119.png 768w, https://shumatsu-lab.com/wp-content/uploads/2026/02/log-sheet-processing-results.png 1065w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">&#x25b6; GASを使った業務自動化の全体像や、SendTo・Seleniumなど他の自動化テクニックに興味がある方はこちらも参考になります。<br><a href="https://shumatsu-lab.com/se-automation-tips/">SE歴20年の業務自動化術｜SendTo・Selenium・AIエージェントまで</a></p>



<h2 class="wp-block-heading"><span id="toc21">よくある質問</span></h2>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">GASは無料で使えますか？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p class="wp-block-paragraph">はい、Googleアカウントがあれば無料で使えます。Google Workspaceアカウントでも個人アカウントでも利用可能です。有料のWorkspaceプランのほうが実行回数の上限は高くなりますが、本記事のスクリプト程度であれば無料アカウントでも問題ありません。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">プログラミング経験がなくても大丈夫ですか？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p class="wp-block-paragraph">本記事のコードはコピペで動作するように設計しています。スプレッドシートの「設定」「除外」シートに値を入力し、スクリプトを貼り付けて実行ボタンを押すだけです。エラーが出た場合のデバッグにはJavaScriptの基礎知識があると助かりますが、エラーメッセージをそのままChatGPTやGeminiに貼り付けて解決策を聞く方法もあります。ExcelVBAを使った業務効率化に興味がある方は「<a href="https://shumatsu-lab.com/excel-efficiency-tips/">SE歴20年の時短術｜Excel業務効率化15選</a>」も参考になります。記事作成だけでなく、Claudeの無料版を使ったバイブコーディングで業務システムも開発しています。プログラミング未経験でも2週間で完成した全工程を<a href="https://shumatsu-lab.com/vibe-coding-claude-free-business-system/">バイブコーディング実践記</a>にまとめました。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">複数プロジェクトに対応できますか？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p class="wp-block-paragraph">設定シートの行を増やし、スクリプトをループ処理に変更すれば対応可能です。ただし、プロジェクトごとに除外キーワードが異なる場合は、除外シートの構成も合わせて変更する必要があります。まずは1プロジェクトで運用を安定させてから拡張することをおすすめします。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">NotebookLMの個人向け有料プランでAPIは使えますか？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p class="wp-block-paragraph">2026年3月時点では使えません。NotebookLM APIが提供されているのはEnterprise版のみです。個人向けプラン（Free / Plus / Pro / Ultra）ではソースの自動追加APIは利用できません。プランの確認方法や各プランの上限値は「<a href="https://shumatsu-lab.com/notebooklm-practical-use-cases-se-experience-2/">NotebookLM活用術7選</a>」のプラン比較表を参照してください。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">除外フィルタで取りこぼしが出たらどうすればいいですか？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p class="wp-block-paragraph">ログシートで除外数を確認し、想定より少ない場合は除外シートにキーワードを追加してください。Gmailの検索演算子を活用して「from:特定アドレス」や「label:ラベル名」で対象を絞る方法も有効です。自動化ツールを組み合わせた業務効率化の考え方は「<a href="https://shumatsu-lab.com/se-automation-tips/">SE歴20年の業務自動化術</a>」でも詳しく解説しています。</p>
</div></dd></dl></div>



<h2 class="wp-block-heading"><span id="toc22">まとめ</span></h2>



<p class="wp-block-paragraph">GAS×Gemini APIを使い、新着メールの自動分類と返信下書きの自動生成を実装しました。ルールベースのパターン判定とGeminiによるAI分類のハイブリッド構成により、定型メールは高速に処理しつつ、想定外のメールにも柔軟に対応できます。</p>



<p class="wp-block-paragraph">実際に動かしてみて、無料枠のRPD上限が想像より厳しいこと、モデルを切り替えればRPDが別カウントで回避できること、スクリプトの作成場所（スタンドアロン vs バインド）で挙動が変わることなど、ドキュメントだけでは分からないハマりポイントが複数ありました。本記事のコードはこれらの問題をすべて解決済みです。</p>



<p class="wp-block-paragraph">&#x25b6; GASによるメール集約からNotebookLMでの思考整理まで、一連の業務自動化の流れはこちらでまとめています。<br><a href="https://shumatsu-lab.com/gas-notebooklm-email-automation-practice/">GAS×NotebookLM実践記｜本業メール集約を自動化する術</a></p>



<p class="wp-block-paragraph">&#x25b6; GAS以外にもSendToカスタマイズやSeleniumなど、SE歴20年の実務で使っている自動化テクニックの全体像はこちらです。<br><a href="https://shumatsu-lab.com/se-automation-tips/">SE歴20年の業務自動化術｜SendTo・Selenium・AIエージェントまで</a></p>



<p class="wp-block-paragraph">単発のメール返信自動化が動いたら、Google Workspace全体のレシピを俯瞰した<a href="https://shumatsu-lab.com/claude-code-gas-google-workspace-automation-recipes/">Claude Code×GASでWorkspace自動化7選</a>で次の打ち手を選ぶと、判定ロジックを他レシピへ流用しやすい。</p>



<div class="wp-block-cocoon-blocks-toggle-box-1 toggle-wrap toggle-box block-box not-nested-style cocoon-block-toggle"><input id="toggle-checkbox-202606040759121" class="toggle-checkbox" type="checkbox"/><label class="toggle-button" for="toggle-checkbox-202606040759121">この記事の更新履歴</label><div class="toggle-content">
<p class="wp-block-paragraph">2026.03.25 ─ Gemini 2.5 Flashシャットダウン予定情報・Gemini 3系移行ガイダンスを追記<br>2026.03.20 ─ Gemini 2.0 Flash非推奨化に伴うモデル変更・レート制限表更新<br>2026.02.22 ─ 初版公開</p>
</div></div>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">320</post-id>	</item>
	</channel>
</rss>
