◉GEMINI LABEN
●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、残り6日。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、残り6日。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…
記事一覧/開発ツール
⟐ 開発ツール/2026-03-21中級

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

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

Google Apps ScriptGemini API248業務自動化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/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

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

関連記事

⟐ 開発ツール2026-09-10
浮世絵カタログの表記ゆれ照合を、正規化と候補列挙の二層で組む手順
同じ絵師名が三通りに散らばったカタログを揃えるとき、Gemini に同一判定をさせると世代違いが混ざります。正規化を先に置き、モデルには候補の列挙だけを頼む二層構成を、動くコードと費用の見積もりつきでお伝えします。
⟐ 開発ツール2026-09-06
アイコンだけのボタンは、翻訳が揃っていても読み上げでは無言になります
翻訳ファイルが揃っていても、読み上げラベルの穴は残ります。iOS と Android からアイコン要素とラベルを集め、機械で決まる不備をローカルで確定させてから Gemini に文言だけを渡す二段構えを、実際の出力とともに書き残します。
⟐ 開発ツール2026-09-02
モデル入れ替えの合否を一致率で決めると、カテゴリ分布のずれは通過します
画像分類バッチのモデルを差し替えたとき、ゴールデンセットの一致率は通るのにカテゴリ構成比だけが動くことがあります。必要サンプル数を実際に計算し、切替前に判定できる対応比較のハーネスを組みました。