GEMINI LABEN
NANOLITE — Nano Banana 2 Liteが登場しました。Googleで最も速く、最もコスト効率の高いGemini Imageモデルで、軽量な画像生成を安く回したい用途に向いていますOMNIFLASH — Gemini Omni Flashがpublic previewになりました。ネイティブにマルチモーダルなモデルで、企業や開発者が独自の動的な動画ワークフローを構築できますAGENTS — Managed Agentsが拡張されました。background: trueでサーバー側の非同期実行とポーリング、リモートMCPサーバー連携、対話をまたぐ認証情報のリフレッシュに対応しますMEMORY — Memory BankのIngestEvents APIが一般提供になりました。イベントの取り込みとメモリ生成を分離し、コンテンツを継続的にストリームできますTHROUGHPUT — Provisioned Throughputで、同一モデル・同一リージョンに対して最大7件の保留オーダーを提出できるようになりましたDEPRECATE — 画像生成モデルは8月17日に、Gemini Enterprise Agent PlatformのGrok 4.1系は8月20日に停止される予定ですNANOLITE — Nano Banana 2 Liteが登場しました。Googleで最も速く、最もコスト効率の高いGemini Imageモデルで、軽量な画像生成を安く回したい用途に向いていますOMNIFLASH — Gemini Omni Flashがpublic previewになりました。ネイティブにマルチモーダルなモデルで、企業や開発者が独自の動的な動画ワークフローを構築できますAGENTS — Managed Agentsが拡張されました。background: trueでサーバー側の非同期実行とポーリング、リモートMCPサーバー連携、対話をまたぐ認証情報のリフレッシュに対応しますMEMORY — Memory BankのIngestEvents APIが一般提供になりました。イベントの取り込みとメモリ生成を分離し、コンテンツを継続的にストリームできますTHROUGHPUT — Provisioned Throughputで、同一モデル・同一リージョンに対して最大7件の保留オーダーを提出できるようになりましたDEPRECATE — 画像生成モデルは8月17日に、Gemini Enterprise Agent PlatformのGrok 4.1系は8月20日に停止される予定です
記事一覧/開発ツール
開発ツール/2026-03-21中級

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

Google Apps Script から Gemini API を呼び出し、スプレッドシートの自動分析、メール要約、ドキュメント生成など日常業務をAIで自動化する方法を解説します

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

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-07-18
難読化されたスタックトレースを Gemini に渡していました — retrace を前段に置くまで、診断はもっともらしく外れ続けます
release ビルドのスタックトレースは R8 で名前が潰れています。それをそのまま Gemini に渡すと、診断は落ち着いた文体のまま外れます。retrace を前段に置き、mapping を versionCode で突合し、復元できないときは断定させない。42件で数え直した記録です。
開発ツール2026-07-16
生成ログを丸ごと残すのをやめました — 3層の保持設計とプロンプト指紋で追跡性だけを残す
障害調査のために Gemini API のリクエストとレスポンスを丸ごと保存していました。3層の保持設計とプロンプト指紋に切り替え、本文を消しても原因を辿れる状態を保った記録です。
開発ツール2026-07-09
例外にならない失敗を型で閉じる — Gemini API のレスポンスを判別可能ユニオンに正規化する
HTTP 200 なのに本文が空、という失敗は try/catch では捕まりません。finishReason と blockReason を判別可能ユニオンに正規化し、never による網羅性チェックで処理漏れをコンパイル時に潰す設計をまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →