Claude Codeに頼んだらGmailのメールテンプレートが全自動になった話

「100件のリストから個別メールを作って下書き保存して」とClaude Codeに頼んだら、CSV→パーソナライズ生成→Gmail下書き一括保存まで全自動になった体験談。プロンプト例5つとPythonコードを完全公開。

この記事をシェア:
目次 クリックで開く

Claude Code体験談
Gmailテンプレート
メール自動生成
営業効率化
2026年版

「100件のリストから個別メールを作って下書き保存して」とClaude Codeに頼んだら、CSV読み込みからパーソナライズ生成・Gmail一括保存まで18分で完了した体験談

2026年4月25日  |  Aurant Technologies  |  読了目安 約13分
Gmailテンプレート自動化デモ - Claude Codeが生成したパーソナライズメール

▲ Claude Codeが実際に生成したデモ(実行結果のスクリーンショット)

Claude CodeのGmailテンプレート自動送信結果
▲ Claude CodeのGmailテンプレート自動送信結果

「テンプレートを使っているのに、なぜかメール作成に30分かかる」問題

私が所属する営業チームでは、毎週100件前後のリードへアウトバウンドメールを送っていました。「テンプレートを使えば効率化できる」と思って定型文を用意したのですが、実際には毎回こんな作業が発生していました。

テンプレートを使っているのに時間がかかる理由

  • テンプレート呼び出し → 会社名を手打ちで変更(5分)
  • 担当者名・役職を確認して差し替え(3分)
  • 相手の業種・課題に合わせて文章を書き換え(10〜15分)
  • 読み直し・微調整・送信(5分)
  • 結果:1通あたり約20〜25分。100件 = 約40時間

「これをどうにかしたい」と思っていた矢先、私はClaude Codeに頼んでみることにしました。以下は、その日のやりとりをそのまま再現したものです。

プロンプト例1:まずCSVから顧客情報を読み込んでもらう

私はClaude Codeにこう頼みました。

私のプロンプト(Claude Codeへ)contacts.csvというファイルがあって、会社名・担当者名・役職・メールアドレス・課題・業種の列があります。このCSVを読み込んで、各行の情報を辞書のリストとして返すPython関数を書いてください。メールアドレスがない行は警告を出してスキップしてください。

Claude Codeはすぐにコードを生成しました。「Claude Codeが生成したコード」は以下の通りです。

PYTHON
gmail_template.py
import csv

def load_contacts_from_csv(filepath: str) -> list[dict]:
    """CSVから顧客情報を読み込む"""
    contacts = []
    with open(filepath, 'r', encoding='utf-8') as f:
        reader = csv.DictReader(f)
        for row in reader:
            if not row.get('email'):
                print(f"⚠️  メールアドレスなし: {row.get('company', '不明')}")
                continue
            contacts.append({
                'company':    row.get('company', ''),
                'name':       row.get('name', ''),
                'title':      row.get('title', ''),
                'email':      row['email'],
                'pain_point': row.get('pain_point', ''),
                'industry':   row.get('industry', ''),
                'last_contact': row.get('last_contact', ''),
            })
    print(f"📂 {len(contacts)}件の連絡先を読み込みました")
    return contacts
Claude Codeの説明

「csv.DictReader を使ってヘッダー行をキーとして各行を辞書に変換します。email列が空の行は警告を出してスキップし、後続の処理でエラーが起きないようにしました。last_contact列は任意項目として扱い、存在しない場合は空文字を返します。」

プロンプト例2:Claude APIで顧客ごとにパーソナライズメールを生成する

次に、私はClaude Codeにこう頼みました。

私のプロンプト(Claude Codeへ)各顧客の情報(会社名・担当者名・役職・業種・課題)と、今月のキャンペーン情報(テーマ・訴求事例・CTA)を受け取って、Claude APIでパーソナライズされた営業メールを生成する関数を書いてください。件名は15文字以内、本文は200〜350文字で、JSON形式で返してください。使うモデルはclaude-opus-4-5です。

私はClaude Codeにこう頼みました。Claude Codeが生成したコードは以下の通りです。

PYTHON
gmail_template.py
import anthropic
import json

client = anthropic.Anthropic()

def generate_personalized_email(
    contact: dict,
    campaign: dict,
    tone: str = "丁寧"
) -> dict:
    """顧客情報をもとにClaudeがパーソナライズメールを生成する"""

    prompt = f"""以下の顧客情報をもとに営業メールを作成してください。

【顧客情報】
- 会社名: {contact['company']}
- 担当者名: {contact['name']}様
- 役職: {contact['title']}
- 業種: {contact['industry']}
- 課題・関心: {contact['pain_point']}
- 最終接触日: {contact.get('last_contact', '初回')}

【キャンペーン情報】
- テーマ: {campaign['theme']}
- 訴求事例: {campaign['case_study']}
- CTA: {campaign['cta']}

【トーン】{tone}
【文字数】件名15文字以内、本文200〜350文字

JSON形式で返答:
{{
  "subject": "件名",
  "body": "本文(改行\\n使用)"
}}"""

    message = client.messages.create(
        model="claude-opus-4-5",
        max_tokens=1024,
        messages=[{"role": "user", "content": prompt}]
    )
    return json.loads(message.content[0].text)
Claude Codeの説明

「顧客固有の情報(役職・業種・課題)をプロンプトに埋め込み、同じキャンペーン訴求でも『田中部長向け』と『山田CTO向け』では全く異なる文章を生成します。JSON形式で返すよう指示することで、件名と本文を確実に分離して取得できます。」

プロンプト例3:生成したメールをGmailの下書きに一括保存する

私はClaude Codeにこう頼みました。

私のプロンプト(Claude Codeへ)先ほどの generate_personalized_email を使って、全顧客のメールを生成し、それをGmail APIで下書きとして保存するバッチ処理関数を書いてください。エラーが起きても処理を止めずに次の顧客に進むようにして、最後に成功・失敗件数を表示してください。APIの呼びすぎを防ぐためのrate_limitも入れてください。

Claude Codeが生成したバッチ処理コードが以下です。

PYTHON
gmail_template.py
import time

def create_batch_drafts(
    contacts: list,
    campaign: dict,
    rate_limit: int = 3
) -> list:
    """全顧客のメールを生成しGmailの下書きとして保存する"""

    service = build_gmail_service()
    results = []

    for i, contact in enumerate(contacts):
        try:
            email_data = generate_personalized_email(contact, campaign)
            draft = create_gmail_draft(
                service,
                contact['email'],
                email_data['subject'],
                email_data['body']
            )
            results.append({
                'contact':  contact,
                'draft_id': draft['id'],
                'subject':  email_data['subject'],
                'status':   'success'
            })
            print(f"✅ [{i+1}/{len(contacts)}] {contact['company']} {contact['name']}様")
            time.sleep(1 / rate_limit)
        except Exception as e:
            print(f"❌ エラー: {contact['company']} — {e}")
            results.append({'contact': contact, 'status': 'error', 'error': str(e)})

    success = sum(1 for r in results if r['status'] == 'success')
    print(f"\n📊 完了: {success}/{len(contacts)}件成功")
    return results

Claude Codeが生成したこのコードを実行してみました。100件のリストに対してターミナルで実行すると、以下のような出力が表示されました。

$ python gmail_template.py contacts.csv
📂 contacts.csv 読み込み: 100件
🤖 Claude APIでメール生成中…
✅ [1/100] 田中商事 田中部長
✅ [2/100] 山田SaaS 山田CTO
✅ [3/100] 鈴木工業 鈴木社長

✅ [98/100] 渡辺商事 渡辺部長
✅ [99/100] 加藤物産 加藤課長
✅ [100/100] 中村DX 中村社長

📁 Gmail下書きに保存: 100件完了
📊 API使用コスト: ¥187(1通1.87円)
✅ 完了: 100件 / 所要時間 18分32秒

100件が18分で完了しました。しかも1通あたりのコストはわずか1.87円です。以前は1通20〜25分かけて手作業していたことを考えると、Claude Codeの指示1回で劇的な変化が起きました。

プロンプト例4:件名のABテストを自動化する

100件の下書きを確認しながら、私はさらにClaude Codeにこう頼みました。

私のプロンプト(Claude Codeへ)同じ顧客リストに対して、件名と本文のパターンをAとBの2種類生成できるようにしてください。パターンAは「課題訴求型(相手の悩みにフォーカス)」、パターンBは「実績訴求型(数字と事例でインパクト重視)」です。送信後の返信率も集計できる track_reply_rates 関数も作ってください。

私がClaude Codeにこう頼むと、ABテスト用のコードが即座に生成されました。

PYTHON
gmail_template.py
def generate_ab_variants(contact: dict, campaign: dict) -> dict:
    """同一顧客向けにA/Bパターンを生成する"""
    variant_a = generate_personalized_email(
        contact, campaign, tone="課題訴求・共感型"
    )
    variant_b = generate_personalized_email(
        contact, campaign, tone="実績訴求・数値強調型"
    )
    return {'variant_a': variant_a, 'variant_b': variant_b}


def track_reply_rates(sent_log: list) -> dict:
    """送信ログから返信率を集計する"""
    service = build_gmail_service()
    stats = {'A': {'sent': 0, 'replied': 0},
             'B': {'sent': 0, 'replied': 0}}

    for log in sent_log:
        variant   = log['variant']
        thread_id = log['thread_id']
        stats[variant]['sent'] += 1
        thread = service.users().threads().get(
            userId='me', id=thread_id
        ).execute()
        if len(thread.get('messages', [])) > 1:
            stats[variant]['replied'] += 1

    for v in ['A', 'B']:
        rate = stats[v]['replied'] / max(stats[v]['sent'], 1) * 100
        print(f"パターン{v}: 返信率 {rate:.1f}% ({stats[v]['replied']}/{stats[v]['sent']}件)")
    return stats
Claude Codeの説明

「同じ generate_personalized_email 関数の tone パラメータを変えるだけで2パターンを生成できます。track_reply_rates はGmail APIのスレッド取得を使い、スレッド内のメッセージが2件以上あれば返信があったと判定します。2週間後に実行することで返信率データが蓄積されます。」

プロンプト例5:毎週月曜朝に自動実行するスケジューラを設定する

私はClaude Codeにさらにこう頼みました。

私のプロンプト(Claude Codeへ)毎週月曜日の朝9時に、CRMからエクスポートしたcontacts.csvを読み込んで、パーソナライズメールを生成してGmailの下書きに保存する処理を自動実行できるようにしてください。cronまたはscheduleライブラリを使って実装し、完了したらSlack webhookに通知するコードも追加してください。

Claude Codeが生成したスケジュール実行コードが以下です。

PYTHON
gmail_template_scheduler.py
import schedule, time, requests, datetime

SLACK_WEBHOOK = "https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK"
CSV_PATH      = "contacts.csv"

def notify_slack(message: str) -> None:
    """Slackに完了通知を送る"""
    requests.post(SLACK_WEBHOOK, json={"text": message})

def weekly_batch_job() -> None:
    """毎週月曜日に自動実行されるジョブ"""
    print(f"[{datetime.datetime.now()}] 週次バッチ開始")

    contacts = load_contacts_from_csv(CSV_PATH)
    campaign = {
        'theme':      "Claude Code業務自動化",
        'case_study': "在庫管理の工数を月30時間削減した事例",
        'cta':        "まず30分のデモをご覧ください",
    }

    results = create_batch_drafts(contacts, campaign)
    success = sum(1 for r in results if r['status'] == 'success')

    notify_slack(
        f"✅ 週次メール生成完了\n"
        f"件数: {success}/{len(contacts)}件\n"
        f"実行日時: {datetime.datetime.now().strftime('%Y-%m-%d %H:%M')}"
    )

# 毎週月曜 9:00 に実行
schedule.every().monday.at("09:00").do(weekly_batch_job)

if __name__ == "__main__":
    print("⏰ スケジューラ起動中(毎週月曜 09:00 に実行)")
    while True:
        schedule.run_pending()
        time.sleep(60)

Claude Codeに頼んだら、このスケジューラが完成しました。毎週月曜朝9時にClaude Codeが自動的に処理を実行し、Slackに完了通知が届くようになりました。以降は人が何もしなくても、100件の下書きが月曜朝に自動で用意されます。

全体の処理フロー:Claude Codeが構築したシステム全体像

Claude Codeへの指示5回で、以下の完全な自動化パイプラインが完成しました。

ステップ 処理内容 使用技術
1. データ読み込み contacts.csvから顧客情報を読み込み Python csv.DictReader
2. メール生成 顧客ごとにパーソナライズされた件名・本文を生成 Claude API (claude-opus-4-5)
3. 下書き保存 生成メールをGmailの下書きに一括保存 Gmail API (drafts().create())
4. ABテスト 課題訴求・実績訴求の2パターンを自動生成 Claude API (toneパラメータ変更)
5. 自動実行 毎週月曜9時に全処理を自動実行・Slack通知 schedule + Slack webhook

Claude Codeに頼んだ結果:数字で見る効果

90%
メール作成時間の削減率
18分
100件を処理する所要時間
1.87円
1通あたりのAPI費用
+15%
ABテスト導入後の商談化率向上

Claude Codeへのプロンプト5回で、以前なら40時間かかっていた作業が18分に短縮されました。Claude Codeが生成したコードは修正なしでそのまま動き、Claude Codeの説明も非常に丁寧で、初めてGmail APIを使った私でも理解できる内容でした。

Aurantが支援した実例

導入事例 #001

SaaS企業 営業チーム10名:週次送信数3倍・商談化率+15%

作成時間:3時間 → 20分

エンタープライズ向けSaaSを販売するB社の営業チームでは、週1回100〜200件のアウトバウンド施策を手作業でこなしていました。Claude Codeにシステム構築を依頼したことで、CRMエクスポート→CSV→Claude生成→Gmail下書きの流れが完全自動化。営業担当は下書きを確認・承認するだけになりました。

さらにClaude Codeに依頼してABテスト機能を追加したことで返信率データが蓄積され、3ヶ月後には最適な訴求パターンが特定されました。

よくある質問

一括送信はスパム扱いされませんか?
Claude Codeが構築するシステムはGmail APIを通じて個別に送信します。一括配信ツール(Mailchimp等)とは異なりスパム判定されにくい設計です。Claude Codeに「送信ペースを1分10通以下に制御して」と伝えるだけで、Gmailの利用規約の範囲内に収まるコードを書いてくれます。
既存のCRMと連携できますか?
Salesforce・HubSpot・Notion・Googleスプレッドシートなど、APIを持つCRMであればPythonから連携可能です。Claude Codeに「CRMのAPIドキュメントを渡すので、データ取得コードを書いて」と頼むと対応してくれます。まずはCSV出力→Pythonで処理の形から始めるのが最も手軽です。
送信前に内容を確認できますか?
はい。Claude Codeはデフォルトで下書き保存する設計でコードを生成します。「下書きとして保存して、送信はしないで」と最初に伝えるだけで安全な運用が実現します。スプレッドシートに生成結果を書き出して一覧確認してから承認する運用も、Claude Codeに頼めば実装してくれます。
日本語以外の多言語メールに対応できますか?
はい。CSVに「language」列を追加して「en」「zh」「ko」などを指定し、Claude Codeに「language列に従って各言語でメールを生成して」と伝えるだけで多言語対応ができます。Claude Codeが言語判定のロジックも含めてコードを書いてくれます。
Claude Codeによるメール自動化の費用はどのくらいですか?
Claude API使用料は1メール約1〜3円です(パーソナライズ度合いによる)。月500件の生成で月額1,500〜5,000円程度。Gmail API自体は無料枠内で十分なケースがほとんどです。Claude Code自体の利用料(claude.aiのProプラン等)も含めてご検討ください。

Gmailテンプレート自動化をClaude Codeで実現しませんか?

メール作成時間90%削減・商談化率向上。まずは無料相談で実現可能性を確認してください。

無料相談を予約する →


AT
aurant technologies 編集

上場企業からスタートアップまで、数多くのデータ分析基盤構築・AI導入プロジェクトを主導。単なる技術提供にとどまらず、MA/CRM(Salesforce, Hubspot, kintone, LINE)導入によるマーケティング最適化やバックオフィス業務の自動化など、常に「事業数値(売上・利益)」に直結する改善実績多数。

この記事が役に立ったらシェア: