← 記事一覧へ戻る

【保存版】Gmail返信をAIに任せたら、1日30分浮いた話 — 全コード公開

Gmail自動返信下書きツールをGoogle Apps Script + Claude APIで作る完全ガイド。コピペで動く全コード・スクショ豊富で初心者OK。

仕事って、同じことの繰り返しで案外時間取られてませんか?

僕、会社員として働いてるんですけど、最近すごく思うんです。

「仕事って、同じことの繰り返しで案外時間取られてるな」って。

中でも一番モヤモヤしてたのが、メールの返信

毎日メールチェックして、似たような問い合わせに、似たような返信を書く。 内容は毎回ほぼ同じなのに、ゼロから書いてるから1通あたり5分は普通にかかる。

しかも相手がいることだから、後回しにもしづらい。 他の仕事に集中したいのに、メール来るたびに思考が中断されて…💦

「これ、なんとか自動化できないかな…」

ちょっと前まではこういうモヤモヤをどうしようもなかったんですけど、今はAIがありますから!

AIに「Gmailの返信を自動で下書きしてくれる仕組み作れない?」って聞いたら、なんと、できちゃいました

もうこれでメールの返信に時間を割かないで済むって思うと、他の仕事にも自然とやる気が湧いてきます笑

今回の記事では、あなたにも同じように無駄を減らして、少しでも早く帰れるように、僕が実際に使ってる方法をそのままお伝えしますね🌱


はじめまして、みやもんです

簡単に自己紹介。

僕は普通の会社員をやりながら、副業で**「AIで業務を楽にする仕組み作り」**をやってます。

  • Xでは @miyamon_ai として発信中
  • ブログ「定時ダッシュ研究所」で、AI×業務効率化のノウハウを公開
  • リベシティでも活動中

「特別なスキルはないけど、AIで仕事をどう楽にするか」を、自分で試して→記事にして、を繰り返してます。

今回のGmail自動返信ツールも、僕自身が毎日使ってる仕組みです。


ざっくりやってることは「メール → AIに見せる → 下書き保存」だけ

このツールがやってることは、すごくシンプルです。

「自動返信対象」というラベルを付けたメールが届いたら、AIがその内容を読んで、適切な返信文を考えて、Gmailの下書きフォルダに保存してくれる。それだけ。

自動送信はしません。 必ず自分の目で下書きを確認してから、送信ボタンを押す形になります。 だから「AIが勝手に変な返信を送っちゃった!」みたいな事故は起きません。安心🌱

「自動返信対象」ラベルを付けないメールはスルーされるので、 「この問い合わせは AI に下書き任せたいな」というメールだけ選んで使えます


必要なもの

必要なもの入手方法コスト
Gmailアカウント既存のものでOK無料
GAS (Google Apps Script)Googleアカウントがあれば使える無料
Anthropic API キーhttps://console.anthropic.com で発行$5〜(最小チャージ)

⚠️ Anthropic Console でクレジットカード登録が必要(最小$5チャージ)。月のAPI利用料はメール20通でも¥100未満なので、$5あれば数ヶ月持ちます。

会社のメールで使いたい人へ

「これ本業でも使えたら最高じゃん…」と思ったあなた。 必ず会社に確認してから使ってくださいね🙇‍♂️

AIにメール本文を送る都合上、情報の取り扱いルール(情報セキュリティ規定など)に引っかかる可能性があります。

ただ、もし会社の業務効率化として認められれば、会社のお金でAPI課金してもらえるかもしれません。 その方が個人の財布的にも嬉しいですよね笑✨

Anthropic API キーの取得方法(10分)

  1. https://console.anthropic.com/ にアクセス
  2. メール or Googleアカウントでサインアップ

Anthropic Console ログイン画面

  1. 左サイドバー → 「API Keys」→ 右上「Create Key」
  2. キー名(例:gmail-auto-reply)を入力 → Create
  3. ⚠️ 表示された sk-ant-xxxxx を即コピー(1度しか表示されない!)
  4. 左サイドバー → 「Billing」→ クレジットカード登録 → 最小$5チャージ

API Keys 一覧画面

⚠️ Claude Pro/Max(チャット用月額契約)とは別物です。API keyだけ単独でも契約できます。


セットアップ手順(15分)

Step 1:GASプロジェクト作成

https://script.google.com/ を開いて、「新しいプロジェクト」をクリック。

GASプロジェクト一覧

プロジェクト名を「Gmail 自動返信下書き」に変更しておくと管理しやすいです。

Step 2:コードを貼り付け

デフォルトの function myFunction() { ... } を全選択して削除し、**この記事の一番下にある「【コピペ用】Code.gs 全コード」**を全部コピペして保存(Cmd+S)。

新規プロジェクト初期画面

貼り付け後はこんな感じ:

Code.gs 貼り付け済み

💡 コードの中に「自分用に書き換える3カ所」があります。 個人で使う人はそのまま、会社で使う人は名乗りや署名を書き換えてください(詳しくは末尾コードのコメント参照)。

Step 3:Anthropic API キーを登録

左サイドバー → ⚙️「プロジェクトの設定」をクリック。

プロジェクトの設定メニュー

下の「スクリプト プロパティ」セクションで:

  • プロパティ名:ANTHROPIC_API_KEY
  • 値:sk-ant-xxxxx(前章でコピーしたkey)

スクリプトプロパティ追加画面

「スクリプト プロパティを保存」をクリック。

Step 4:API動作テスト

エディタに戻って、関数選択ドロップダウンで testClaudeApi を選択 → ▶ 実行。

初回は権限承認が求められます:

  • 「権限を確認」→ Googleアカウント選択
  • 「詳細」→「(プロジェクト名)(安全ではないページ)に移動」→「許可」

実行ログに Status: 200 と「テストOK」が出ればOK🎉

Step 5:Gmailラベル作成

関数選択で setupLabels を選択 → ▶ 実行。

setupLabels 関数選択

Gmail を開いて、左サイドバーに「自動返信対象」「AI下書き済」の2つのラベルが追加されていればOK。

Step 6:トリガー(自動実行)設定

左サイドバー → ⏰「トリガー」をクリック。

トリガーメニュー

右下「トリガーを追加」→ 設定:

  • 実行する関数:autoDraftReplies
  • イベントのソース:時間主導型
  • 時間ベースのトリガーのタイプ:時間ベースのタイマー
  • 時間の間隔:1時間おき

トリガー設定画面

「保存」して完了🎉


プロンプト設計のコツ(核心ノウハウ)

このツールの返信の質を決めるのは、Claude(AI)に渡す「プロンプト(指示文)」です。

僕が使ってるプロンプトのポイントは4つ:

コツ①:トーンを具体的に

「丁寧に」だけだと堅くなる。「丁寧だが堅すぎない、親しみやすいトーン」と書くと、適度な距離感に。

コツ②:自分の名乗りを固定する

「お世話になっております。みやもんです。」と固定すると、毎回ブレない。

コツ③:不明な点は質問させる

「分からないことを推測で書く」を防ぐため、「不明な点があれば箇条書きで質問する形にする」と指示。

コツ④:余計な出力を消す

「返信本文のみを返す」を入れないと、AIが「以下が返信文です:」みたいな前置きを付ける。


動作確認・使い方

テスト用メールで試す

自分宛にテストメールを送信して、Gmail でそのメールに「自動返信対象」ラベルを手動で付ける。

GASエディタで autoDraftReplies を手動実行。

実行ログに「処理対象スレッド数: 1」「下書き保存完了」「成功: 1件 / エラー: 0件」と出ればOK🎉

autoDraftReplies 実行ログ

Gmail の「下書き」フォルダを開くと、AI が書いた返信が入っています:

生成された下書きメール

「お世話になっております。みやもんです。」始まりで、相手の問い合わせ内容(料金・納期)に対して逆質問で確認事項を聞く返信が生成されてます。

これ、人間が書いてもおかしくない品質です🌱

日常運用

  1. 自動返信させたいメールに「自動返信対象」ラベルを手動で付ける
  2. 1時間以内にAIが下書きを作る
  3. Gmailの下書きを開いて、内容確認→必要なら修正→送信

注意点・運用ルール

気をつけたいこと

  • ⚠️ 会社のメールで使う前に、必ず会社に確認を取る(情報の取り扱いルールに引っかかる可能性あり)
  • ❌ 自動送信化(必ず人間チェック後に送信)
  • ❌ 重要顧客のメールへの即時返信(最終的な人間判断が大事)

やった方がいいこと

  • ✅ 「自動返信対象」ラベルを慎重に選ぶ
  • ✅ 月に1度、生成された返信の質を振り返る
  • ✅ プロンプトを自分のトーンに合わせて調整

コスト目安

  • 1メール処理:約 ¥1〜3
  • 月20通処理:¥100未満

カスタマイズ・拡張案

拡張① カテゴリ別ラベルで返信トーンを変える

  • 「顧客返信」ラベル → 丁寧モード
  • 「友達」ラベル → カジュアルモード

拡張② 過去のやり取りを参照

  • 同じスレッドの過去メールも Claude に渡すと、文脈精度UP

拡張③ 件名で自動振り分け

  • 「【お問い合わせ】」を含むメールに自動でラベル付け

まとめ:こんな会社員にお勧め

  • ✅ 似たような問い合わせメールを毎日返してる人
  • ✅ メール返信に1日30分以上使ってる人
  • ✅ 「AIで時短したいけど、何から始めればいいか分からない」人

このツール、僕の中で「定時で帰るための最強の相棒」になりました🌱


つまづいたら、気軽にDMください

ここまで読んでくれてありがとうございます🙇‍♂️

正直に言うと、コードを触ったことがない人は、途中で「あれ?スクショと画面が違う!」「ここのコードどうやって書き換えるの?」って詰まる場面が出てくると思います(僕も最初そうでした💦)。

そんな時は、Xで気軽にDMください👇

🐦 @miyamon_ai

「ここがわかりません!」「このスクショと違うんですけど…」みたいな質問も大歓迎です。 記事もみなさんの声を反映して、随時アップデートしていきますね🌱


【コピペ用】Code.gs 全コード

ここから下のコードを全部コピーして、Step 2 でGASエディタに貼り付けてください。

コードの上部に「自分用に書き換える3カ所」があるので、特に会社で使う方は要チェック⭐️

/**
 * Gmail 自動返信下書きツール
 *
 * 「自動返信対象」ラベルが付いた未読メールに対して、
 * Claude AI が返信文を生成して下書きに保存する。
 */

// ===== 設定(基本そのままでOK) =====
const TARGET_LABEL = '自動返信対象';
const PROCESSED_LABEL = 'AI下書き済';
const CLAUDE_MODEL = 'claude-opus-4-5';
const MAX_TOKENS = 1024;
const MAX_THREADS_PER_RUN = 10; // 1回の実行で処理する最大スレッド数

// ============================================
// ↓↓↓ ここから下は「自分用に書き換える」場所 ↓↓↓
// ============================================

// 【1】返信の冒頭挨拶(自分の名乗り)
// 例(個人用):'お世話になっております。みやもんです。'
// 例(会社用):'お世話になっております。株式会社〇〇 営業部のみやもんです。'
const MY_OPENING = 'お世話になっております。みやもんです。';

// 【2】返信の末尾署名(不要なら空文字 '' でOK)
// 会社用の例:
//   const MY_SIGNATURE = `
//   --
//   株式会社〇〇 営業部
//   みやもん
//   TEL: 03-1234-5678
//   Email: [email protected]
//   `;
const MY_SIGNATURE = '';

// 【3】返信のトーン(お好みで調整)
// 例:'丁寧でかしこまったビジネストーン'
// 例:'親しみやすくフランクなトーン'
const MY_TONE = '丁寧だが堅すぎない、親しみやすいトーン';

// ============================================
// ↑↑↑ ここまでが「自分用に書き換える」場所 ↑↑↑
// ============================================

/**
 * メイン関数(トリガーで定期実行)
 */
function autoDraftReplies() {
  const apiKey = PropertiesService.getScriptProperties().getProperty('ANTHROPIC_API_KEY');
  if (!apiKey) {
    console.error('ANTHROPIC_API_KEY がスクリプトプロパティに設定されていません。');
    return;
  }

  // ラベル取得(無ければ作成)
  const targetLabel = getOrCreateLabel(TARGET_LABEL);
  const processedLabel = getOrCreateLabel(PROCESSED_LABEL);

  // 「自動返信対象」ラベル付き かつ「AI下書き済」ラベルが付いていない未読スレッドを取得
  const query = `label:${TARGET_LABEL} -label:${PROCESSED_LABEL} is:unread`;
  const threads = GmailApp.search(query, 0, MAX_THREADS_PER_RUN);

  console.log(`処理対象スレッド数: ${threads.length}`);

  let successCount = 0;
  let errorCount = 0;

  for (const thread of threads) {
    try {
      const messages = thread.getMessages();
      const lastMessage = messages[messages.length - 1];

      // 自分が送ったメールには返信しない
      const fromAddress = lastMessage.getFrom();
      const myEmail = Session.getActiveUser().getEmail();
      if (fromAddress.includes(myEmail)) {
        console.log(`スキップ(自分のメール): ${lastMessage.getSubject()}`);
        thread.addLabel(processedLabel);
        continue;
      }

      // 返信文を Claude で生成
      const replyText = generateReplyWithClaude(lastMessage, apiKey);

      if (!replyText) {
        console.warn(`返信生成失敗: ${lastMessage.getSubject()}`);
        errorCount++;
        continue;
      }

      // 下書き保存
      lastMessage.createDraftReply(replyText);

      // 処理済みラベル付与
      thread.addLabel(processedLabel);

      console.log(`下書き保存完了: ${lastMessage.getSubject()}`);
      successCount++;

    } catch (e) {
      console.error(`エラー: ${e.message}`);
      errorCount++;
    }
  }

  console.log(`完了 - 成功: ${successCount}件 / エラー: ${errorCount}件`);
}

/**
 * Claude API を呼び出して返信文を生成
 */
function generateReplyWithClaude(message, apiKey) {
  const subject = message.getSubject();
  const body = message.getPlainBody().slice(0, 3000); // 長すぎる本文は切り詰め
  const from = message.getFrom();

  const prompt = `以下のメールに対する、自然で丁寧な返信文を日本語で書いてください。

【送信者】${from}
【件名】${subject}
【本文】
${body}

【返信のルール】
- 冒頭:「${MY_OPENING}」
- ${MY_TONE}
- 相手の問い合わせ内容に対して具体的に回答する
- 「件名や送信者を見てもよく分からない場合」は、確認したい点を箇条書きで質問する形にする
- 末尾:「よろしくお願いいたします。」「ご返信お待ちしております。」など状況に応じたクロージング
- 署名は付けない(自動で末尾に追加されます)
- 返信本文のみを返す(説明や前置きは一切不要)`;

  try {
    const response = UrlFetchApp.fetch('https://api.anthropic.com/v1/messages', {
      method: 'post',
      contentType: 'application/json',
      muteHttpExceptions: true,
      headers: {
        'x-api-key': apiKey,
        'anthropic-version': '2023-06-01',
      },
      payload: JSON.stringify({
        model: CLAUDE_MODEL,
        max_tokens: MAX_TOKENS,
        messages: [{ role: 'user', content: prompt }],
      }),
    });

    const code = response.getResponseCode();
    const text = response.getContentText();

    if (code !== 200) {
      console.error(`Claude API エラー (${code}): ${text}`);
      return null;
    }

    const data = JSON.parse(text);
    if (data.content && data.content[0] && data.content[0].text) {
      const aiReply = data.content[0].text.trim();
      // 署名が設定されていれば末尾に自動付与
      return MY_SIGNATURE ? `${aiReply}\n${MY_SIGNATURE}` : aiReply;
    }

    console.error('Claude API レスポンス形式が想定外');
    return null;
  } catch (e) {
    console.error(`Claude API 呼び出し例外: ${e.message}`);
    return null;
  }
}

/**
 * ラベルを取得(無ければ作成)
 */
function getOrCreateLabel(labelName) {
  let label = GmailApp.getUserLabelByName(labelName);
  if (!label) {
    label = GmailApp.createLabel(labelName);
    console.log(`ラベル作成: ${labelName}`);
  }
  return label;
}

/**
 * テスト用:API key が動くか確認
 */
function testClaudeApi() {
  const apiKey = PropertiesService.getScriptProperties().getProperty('ANTHROPIC_API_KEY');
  if (!apiKey) {
    console.error('ANTHROPIC_API_KEY が設定されていません');
    return;
  }

  const response = UrlFetchApp.fetch('https://api.anthropic.com/v1/messages', {
    method: 'post',
    contentType: 'application/json',
    muteHttpExceptions: true,
    headers: {
      'x-api-key': apiKey,
      'anthropic-version': '2023-06-01',
    },
    payload: JSON.stringify({
      model: CLAUDE_MODEL,
      max_tokens: 50,
      messages: [{ role: 'user', content: 'こんにちは。「テストOK」と返してください。' }],
    }),
  });

  console.log(`Status: ${response.getResponseCode()}`);
  console.log(`Response: ${response.getContentText()}`);
}

/**
 * 初期セットアップ用:ラベルを2つ作る
 */
function setupLabels() {
  getOrCreateLabel(TARGET_LABEL);
  getOrCreateLabel(PROCESSED_LABEL);
  console.log('セットアップ完了。Gmail でラベルを確認してください。');
}

自分用に書き換える3カ所まとめ

場所何を書く?
MY_OPENING返信の冒頭挨拶(個人なら「みやもんです」、会社なら「株式会社〇〇の…」)
MY_SIGNATURE末尾の署名(不要なら空っぽでOK)
MY_TONE返信のトーン(堅い・カジュアル・親しみやすいなど)

特に会社で使う人は、MY_SIGNATURE に会社の正式署名(社名・部署・電話番号など)を入れておけば、AIが書いた返信の末尾に毎回自動で署名が付きます🌱


関連リンク