GEMINI LABEN
ROBOTICS — 8月31日に停止した ER 1.6 preview には後継があります。Gemini Robotics ER 2 が公開プレビュー中で、通常版とストリーミング版の2種類が提供されていますVIDEO — ER 2 の成功・失敗判定は静止画ではなく生の映像フィード上で動きます。こぼれ・滑り・位置ずれのような、実行の途中で起きる失敗を捉えられる設計ですDEADLINE — 次の期限は9月30日、gemini-omni-flash-preview の廃止です。移行先は8月27日に GA になった gemini-omni-1.1-flash で、残り4週間を切りましたAPIKEY — 残りの標準 API キーは、制限付きのものも含めて9月中に全面停止します。移行先は Google Cloud サービスアカウントに紐付く auth キー形式ですPRICE — Gemini 3.7 Flash の導入価格 $0.75/$3.75 per 1M は12月31日までです。2027年1月1日から $1.50/$7.50 になるため、年を跨ぐ見積もりは2本立てが要りますAUDIO — Gemini 3.5 Transcribe は85言語以上の言語検出、話者ダイアライゼーション、単語単位タイムスタンプ、最大1,000語のカスタム語彙バイアスに対応していますROBOTICS — 8月31日に停止した ER 1.6 preview には後継があります。Gemini Robotics ER 2 が公開プレビュー中で、通常版とストリーミング版の2種類が提供されていますVIDEO — ER 2 の成功・失敗判定は静止画ではなく生の映像フィード上で動きます。こぼれ・滑り・位置ずれのような、実行の途中で起きる失敗を捉えられる設計ですDEADLINE — 次の期限は9月30日、gemini-omni-flash-preview の廃止です。移行先は8月27日に GA になった gemini-omni-1.1-flash で、残り4週間を切りましたAPIKEY — 残りの標準 API キーは、制限付きのものも含めて9月中に全面停止します。移行先は Google Cloud サービスアカウントに紐付く auth キー形式ですPRICE — Gemini 3.7 Flash の導入価格 $0.75/$3.75 per 1M は12月31日までです。2027年1月1日から $1.50/$7.50 になるため、年を跨ぐ見積もりは2本立てが要りますAUDIO — Gemini 3.5 Transcribe は85言語以上の言語検出、話者ダイアライゼーション、単語単位タイムスタンプ、最大1,000語のカスタム語彙バイアスに対応しています
記事一覧/開発ツール
開発ツール/2026-03-21中級

Gemini × Google Apps Script で業務自動化 — スプレッドシート・メール・ドキュメントをAIで効率化する

Google Apps Script から Gemini API を呼び出し、スプレッドシートの自動分析、メールの分類と要約、ドキュメントの下書き生成といった日常業務を自動化します。セットアップからトリガー設定、レート制限への対処、セキュリティの注意点まで解説します。

Google Apps ScriptGemini API228業務自動化4スプレッドシート4GAS

Gemini × Google Apps Script で業務自動化

Google Apps Script(GAS)は、Google Workspace の各サービスをプログラムで操作できる強力なプラットフォームです。ここに Gemini API を組み合わせることで、スプレッドシートのデータ分析、メールの自動分類・要約、ドキュメントの下書き生成など、日常業務の大幅な効率化が可能になります。

このガイドでは、GAS から Gemini API を呼び出す基本的なセットアップから、実践的な自動化ワークフローの構築まで、ステップバイステップで解説します。

なぜ GAS × Gemini なのか

Google Apps Script と Gemini API を組み合わせるメリットは多岐にわたります。

まず、ゼロインフラで始められる点が大きな利点です。GAS は Google のサーバー上で動作するため、外部サーバーの用意やデプロイ作業が不要です。スクリプトエディタを開くだけで即座に開発を始められます。

次に、Google Workspace との深い統合があります。Gmail、スプレッドシート、ドキュメント、カレンダー、ドライブなど、普段使っているツールのデータに直接アクセスできます。API キーの取得とわずかなコードで、これらのデータを Gemini に渡して分析・生成を行えます。

さらに、トリガーによる完全自動化が可能です。時間ベースのトリガーやスプレッドシートの編集トリガーを設定すれば、人の介在なしに定期的な処理を実行できます。

セットアップ

1. Gemini API キーの取得

Google AI Studio(aistudio.google.com)にアクセスし、API キーを生成します。生成したキーはスクリプトプロパティに安全に保存しましょう。

2. Apps Script プロジェクトの作成

Google スプレッドシートを開き、メニューから「拡張機能」→「Apps Script」を選択します。新しいスクリプトエディタが開いたら、まず API キーをスクリプトプロパティに保存します。

// 初回のみ実行:APIキーをスクリプトプロパティに保存
function setApiKey() {
  const scriptProperties = PropertiesService.getScriptProperties();
  scriptProperties.setProperty('GEMINI_API_KEY', 'your-api-key-here');
}

3. Gemini API を呼び出す共通関数

以下の関数を作成しておくと、様々な自動化で再利用できます。

function callGemini(prompt, model = 'gemini-2.5-flash') {
  const apiKey = PropertiesService.getScriptProperties()
    .getProperty('GEMINI_API_KEY');
  const url = `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${apiKey}`;
 
  const payload = {
    contents: [{ parts: [{ text: prompt }] }],
    generationConfig: {
      temperature: 0.7,
      maxOutputTokens: 2048
    }
  };
 
  const options = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(payload),
    muteHttpExceptions: true
  };
 
  const response = UrlFetchApp.fetch(url, options);
  const json = JSON.parse(response.getContentText());
 
  if (json.candidates && json.candidates[0]) {
    return json.candidates[0].content.parts[0].text;
  }
  throw new Error('Gemini API エラー: ' + response.getContentText());
}

実践ワークフロー

ワークフロー1: スプレッドシートのデータを自動分析

売上データやアンケート結果が蓄積されたスプレッドシートを、Gemini に渡して自動的に分析レポートを生成する例です。

function analyzeSalesData() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet()
    .getSheetByName('売上データ');
  const data = sheet.getDataRange().getValues();
  const headers = data[0];
  const rows = data.slice(1);
 
  // データをテキスト形式に変換
  const csvText = [headers.join(','),
    ...rows.map(row => row.join(','))
  ].join('\n');
 
  const prompt = `以下の売上データを分析し、主要なトレンド、
注目すべきポイント、改善提案を日本語で簡潔にまとめてください。
 
データ:
${csvText}
 
以下の観点で分析してください:
1. 売上の全体的なトレンド
2. カテゴリ別のパフォーマンス
3. 改善が必要な領域
4. 具体的なアクションの提案`;
 
  const analysis = callGemini(prompt);
 
  // 結果を新しいシートに書き込む
  let resultSheet = SpreadsheetApp.getActiveSpreadsheet()
    .getSheetByName('AI分析');
  if (!resultSheet) {
    resultSheet = SpreadsheetApp.getActiveSpreadsheet()
      .insertSheet('AI分析');
  }
 
  resultSheet.getRange('A1').setValue('分析日時');
  resultSheet.getRange('B1').setValue(new Date());
  resultSheet.getRange('A3').setValue(analysis);
}

ワークフロー2: Gmail の受信メールを自動要約

毎朝、未読メールの要約を生成してスプレッドシートに記録するワークフローです。

function summarizeUnreadEmails() {
  const threads = GmailApp.search('is:unread', 0, 20);
  const summaries = [];
 
  for (const thread of threads) {
    const messages = thread.getMessages();
    const latest = messages[messages.length - 1];
 
    const prompt = `以下のメールを1〜2文で要約し、
緊急度(高・中・低)を判定してください。
 
件名: ${latest.getSubject()}
送信者: ${latest.getFrom()}
本文: ${latest.getPlainBody().substring(0, 1000)}
 
JSON形式で回答:
{"summary": "要約文", "urgency": "高|中|低"}`;
 
    try {
      const result = callGemini(prompt);
      const parsed = JSON.parse(
        result.replace(/```json\n?/g, '').replace(/```/g, '')
      );
      summaries.push([
        new Date(),
        latest.getFrom(),
        latest.getSubject(),
        parsed.summary,
        parsed.urgency
      ]);
    } catch (e) {
      summaries.push([
        new Date(),
        latest.getFrom(),
        latest.getSubject(),
        '要約失敗',
        '-'
      ]);
    }
  }
 
  if (summaries.length > 0) {
    const sheet = SpreadsheetApp.getActiveSpreadsheet()
      .getSheetByName('メール要約')
      || SpreadsheetApp.getActiveSpreadsheet()
        .insertSheet('メール要約');
    const lastRow = sheet.getLastRow();
    sheet.getRange(lastRow + 1, 1, summaries.length, 5)
      .setValues(summaries);
  }
}

ワークフロー3: ドキュメントの下書き自動生成

スプレッドシートに入力したトピックから、Google ドキュメントの下書きを自動生成する例です。

function generateDocumentDraft() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet()
    .getSheetByName('ドキュメント依頼');
  const data = sheet.getDataRange().getValues();
 
  for (let i = 1; i < data.length; i++) {
    const [topic, audience, length, status] = data[i];
    if (status === '完了') continue;
 
    const prompt = `以下の条件でビジネスドキュメントの下書きを
作成してください。
 
トピック: ${topic}
対象読者: ${audience}
分量: ${length}
 
構成をしっかりとした見出し付きで作成してください。`;
 
    const draft = callGemini(prompt);
 
    // Google ドキュメントとして保存
    const doc = DocumentApp.create(`[AI下書き] ${topic}`);
    doc.getBody().setText(draft);
 
    // ステータスを更新
    sheet.getRange(i + 1, 4).setValue('完了');
    sheet.getRange(i + 1, 5).setValue(doc.getUrl());
  }
}

トリガーの設定

GAS のトリガー機能を使えば、上記のワークフローを完全に自動化できます。

function createTriggers() {
  // 毎朝8時にメール要約を実行
  ScriptApp.newTrigger('summarizeUnreadEmails')
    .timeBased()
    .everyDays(1)
    .atHour(8)
    .create();
 
  // 毎週月曜に売上分析を実行
  ScriptApp.newTrigger('analyzeSalesData')
    .timeBased()
    .onWeekDay(ScriptApp.WeekDay.MONDAY)
    .atHour(9)
    .create();
}

スクリプトエディタの「トリガー」メニューから GUI で設定することもできます。複雑な条件が必要な場合は、コードで設定する方が柔軟に対応できます。

エラーハンドリングとレート制限

本番運用では、API 呼び出しの失敗に備えたエラーハンドリングが重要です。

function callGeminiWithRetry(prompt, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    try {
      return callGemini(prompt);
    } catch (e) {
      if (attempt === maxRetries - 1) throw e;
      // 指数バックオフで待機
      Utilities.sleep(Math.pow(2, attempt) * 1000);
    }
  }
}

GAS には1日の実行時間制限(無料アカウントで6分/実行、90分/日)があるため、大量のデータを処理する場合はバッチ処理を検討しましょう。処理の進捗をスクリプトプロパティに保存し、複数回に分けて実行するパターンが有効です。

セキュリティのベストプラクティス

API キーの管理には十分注意が必要です。コード内にハードコードせず、必ずスクリプトプロパティを使用してください。また、スクリプトを共有する際は、プロパティに保存されたキーが他のユーザーからアクセスされる可能性がある点に注意しましょう。

機密性の高いデータを Gemini API に送信する場合は、組織のデータポリシーを確認してください。Google Workspace の管理者設定で、Apps Script から外部 API への接続を制限している場合もあります。

全体を振り返って

Google Apps Script と Gemini API の組み合わせは、プログラミング経験が少ない方でも始めやすい業務自動化の手段です。スプレッドシートのデータ分析、メールの自動処理、ドキュメント生成など、日常的な業務を大幅に効率化できます。まずは小さなワークフローから始めて、徐々に自動化の範囲を広げていくのがおすすめです。

シェア

お読みいただきありがとうございます

Gemini Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥2,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

開発ツール2026-08-30
モデル廃止日をまたぐ古い端末に、読み替えではなく拒否を返す設計
モデルが止まっても、配布済みのアプリは止まりません。後継へ黙って差し替えるか、明示的に断るか。出力契約を軸に廃止台帳を作り、残存曲線から自分の締切日を逆算するまでの実装と計測をまとめました。
開発ツール2026-08-28
1日2回のはずの分類バッチが1回しか動かない — 成果物から実行回数を復元する
定期実行のうち片方の枠だけが不発火し、失敗ログが一件も出ないまま処理量が半分になっていた運用の記録です。成果物と未処理残高から実行回数を復元し、起きなかった回を名指しする手順を動くコードでまとめます。
開発ツール2026-08-25
AI Studio でログを止めると、Interactions API の会話履歴も止まります
Gemini API のログが AI Studio に一件も出ないとき、原因の多くは API ごとに逆になっている store の既定値です。設定トグルが会話履歴まで止めてしまう副作用と、呼び出し側で store を明示して事故を防ぐ書き方をまとめます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →