社内AIアシスタント、お金かけずに作れます

ミドリ: タツヤさん、社内にAIアシスタントを導入したいんですけど、SaaS系のツールって月額1人あたり3,000〜5,000円とかするじゃないですか。50人の会社だと年間200万円超えちゃう……。

タツヤ: その気持ちわかるよ。でも、すでにGoogle Workspaceを使ってるなら、追加コストほぼゼロで社内AIアシスタントが作れるんだ。

ミドリ: え、タダですか?

タツヤ: Gemini APIには無料枠があって、1日あたり1,500リクエストまで無料で使える。中小企業の社内利用なら十分な量だよ。それをGoogle Apps Script(GAS)から呼び出すだけ。

ミドリ: GASってあれですよね、スプレッドシートのマクロみたいなやつ。

タツヤ: そう。JavaScriptベースのスクリプト環境で、Google Workspaceの全サービスと連携できる。Gmailの操作、スプレッドシートの読み書き、カレンダーの管理——これらを全部AIに接続できるんだよ。

SaaSとの比較

ミドリ(surprised): 本当にSaaSの代わりになるんですか?

タツヤ: 用途による。比較表で見てみよう。

比較項目SaaS型AIアシスタントGAS × Gemini API
月額コスト(50人)15〜25万円0〜5,000円
年間コスト180〜300万円0〜6万円
セットアップ時間1〜2週間30分〜数時間
カスタマイズ性限定的自由自在
Google Workspace連携プラグイン経由ネイティブ連携
セキュリティベンダー依存自社Google環境内
サポートあり自前(コミュニティ)
適用規模大規模OK〜100人程度

ミドリ: 年間コストの差がエグいですね……。

タツヤ(thinking): しかもGAS × Gemini APIの方がカスタマイズ性が高い。SaaSは汎用的に作られてるから、自社独自の業務フローに合わせるのが難しいケースがある。GASなら自社の業務に完全に合わせたロジックが書ける。

Gemini API のセットアップ

ミドリ(thinking): じゃあ具体的に、どうやって作るんですか?

タツヤ(nodding): まずGemini APIキーの取得からだね。

ステップ1:APIキーの取得

タツヤ: Google AI Studio(https://aistudio.google.com)にアクセスして、APIキーを発行する。Googleアカウントがあれば1分で完了。

ステップ2:GASプロジェクトの作成

タツヤ: Googleスプレッドシートを開いて、「拡張機能 → Apps Script」を選択。ここにコードを書いていく。まずはGemini APIを呼び出す基本関数を作ろう。

// Gemini API呼び出しの基本関数
function callGemini(prompt) {
  const API_KEY = PropertiesService
    .getScriptProperties()
    .getProperty('GEMINI_API_KEY');

  const url = 'https://generativelanguage.googleapis.com'
    + '/v1beta/models/gemini-2.0-flash:generateContent'
    + '?key=' + API_KEY;

  const payload = {
    contents: [{ parts: [{ text: prompt }] }]
  };

  const options = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(payload)
  };

  const response = UrlFetchApp.fetch(url, options);
  const json = JSON.parse(response.getContentText());

  return json.candidates[0].content.parts[0].text;
}

ミドリ: これだけでGeminiとつながるんですか!?

タツヤ: そう。APIキーはスクリプトプロパティに保存するから、コードに直書きしなくて安全。これが全ての基盤になる関数だよ。

ステップ3:APIキーの安全な保存

タツヤ: GASエディタの「プロジェクトの設定」→「スクリプト プロパティ」で、キー名を GEMINI_API_KEY、値にAPIキーを設定する。これでコード内に秘密情報が残らない。

ユースケース1:メール要約アシスタント

ミドリ(thinking): 具体的にどんなことができるんですか?

タツヤ: 3つの実用的なユースケースを見ていこう。まずはメール要約。

毎朝の未読メールを自動要約

タツヤ: 前日の未読メールをGmailから取得して、Geminiで要約。結果をSlackやチャットに送ったり、スプレッドシートに記録したりできる。

function summarizeUnreadEmails() {
  // 過去24時間の未読メールを取得
  const threads = GmailApp.search(
    'is:unread newer_than:1d', 0, 20
  );

  if (threads.length === 0) return;

  let emailTexts = '';
  threads.forEach((thread, i) => {
    const msg = thread.getMessages()[0];
    emailTexts += `\n--- メール${i + 1} ---\n`
      + `件名: ${msg.getSubject()}\n`
      + `差出人: ${msg.getFrom()}\n`
      + `本文: ${msg.getPlainBody().substring(0, 500)}\n`;
  });

  const prompt = `以下のメールを日本語で簡潔に要約してください。
各メールについて「件名」「差出人」「要点」「対応が必要か」を
箇条書きで整理してください。\n${emailTexts}`;

  const summary = callGemini(prompt);

  // 結果をスプレッドシートに記録
  const sheet = SpreadsheetApp
    .getActiveSpreadsheet()
    .getSheetByName('メール要約');
  sheet.appendRow([new Date(), summary]);
}

ミドリ: 毎朝20件のメールを読む代わりに、要約だけ見ればいいんですね。

タツヤ: しかも「対応が必要か」まで判定してくれるから、優先順位がすぐわかる。トリガー設定で毎朝8時に自動実行すれば、出社した時点で要約が待ってる状態を作れるよ。

ユースケース2:スプレッドシートQ&A

ミドリ: スプレッドシートのデータについてAIに質問できるってことですか?

タツヤ: そう。売上データや在庫データが入ったスプレッドシートに対して、自然言語で質問できるアシスタントを作れる。

function askSpreadsheet(question) {
  const sheet = SpreadsheetApp
    .getActiveSpreadsheet()
    .getSheetByName('売上データ');
  const data = sheet.getDataRange().getValues();

  // ヘッダーとデータを文字列に変換
  const headers = data[0].join(', ');
  const rows = data.slice(1).map(r => r.join(', ')).join('\n');

  const prompt = `以下のスプレッドシートデータに基づいて、
質問に日本語で回答してください。
数値の根拠も示してください。

【列名】${headers}
【データ】
${rows}

【質問】${question}`;

  return callGemini(prompt);
}

// カスタムメニューから呼び出し
function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('AIアシスタント')
    .addItem('質問する', 'showQuestionDialog')
    .addToUi();
}

function showQuestionDialog() {
  const ui = SpreadsheetApp.getUi();
  const result = ui.prompt(
    'AIアシスタント',
    'スプレッドシートのデータについて質問してください:',
    ui.ButtonSet.OK_CANCEL
  );

  if (result.getSelectedButton() === ui.Button.OK) {
    const answer = askSpreadsheet(result.getResponseText());
    ui.alert('AIの回答', answer, ui.ButtonSet.OK);
  }
}

ミドリ: 「先月の売上トップ3の商品は?」とか聞けるんですか?

タツヤ(nodding): その通り。ピボットテーブルやVLOOKUPを組む代わりに、日本語で聞くだけ。Excelやスプレッドシートの関数を覚えなくても、データ分析ができるようになるんだよ。

ミドリ: これ、経理部の人とか営業事務の人が使ったら革命ですね。

タツヤ: 実際、スプレッドシートのデータ分析にかかる時間が平均70%削減されたっていうケースもある。

ユースケース3:議事録の自動整理

ミドリ: 3つ目はなんですか?

タツヤ: 会議の議事録を自動整理するアシスタント。Google Meetの文字起こし機能やメモをGeminiで構造化する。

function formatMeetingNotes(rawNotes) {
  const prompt = `以下の会議メモ・文字起こしを、
プロフェッショナルな議事録に整理してください。

【出力フォーマット】
1. 会議概要(1〜2行)
2. 参加者
3. 決定事項(箇条書き)
4. アクションアイテム(担当者・期限つき)
5. 次回までの宿題

【会議メモ】
${rawNotes}`;

  return callGemini(prompt);
}

function processLatestMeetingDoc() {
  // Googleドキュメントの議事録メモを取得
  const docId = 'YOUR_DOCUMENT_ID';
  const doc = DocumentApp.openById(docId);
  const rawText = doc.getBody().getText();

  const formatted = formatMeetingNotes(rawText);

  // 整理された議事録を新しいドキュメントに出力
  const newDoc = DocumentApp.create(
    '議事録_' + Utilities.formatDate(
      new Date(), 'Asia/Tokyo', 'yyyy-MM-dd'
    )
  );
  newDoc.getBody().setText(formatted);

  // チームにメールで共有
  GmailApp.sendEmail(
    '[email protected]',
    '【議事録】' + Utilities.formatDate(
      new Date(), 'Asia/Tokyo', 'MM/dd'
    ) + 'の会議',
    formatted
  );
}

ミドリ: 走り書きのメモが、ちゃんとした議事録になるんですか。

タツヤ: しかもアクションアイテムが担当者と期限つきで整理される。「あの会議で何が決まったんだっけ?」問題が完全に解消する。

ミドリ: 議事録って誰かが書く負担がいつも問題になりますよね。

タツヤ: そう。このアシスタントなら、会議後5分以内に構造化された議事録がチーム全員に届く。議事録係が不要になるし、記録の精度も上がる。

運用のポイント

ミドリ: 実際に運用する上で気をつけることはありますか?

タツヤ: 3つある。

1. APIの利用制限を把握する

タツヤ(smiling): Gemini APIの無料枠は1日1,500リクエスト、1分あたり15リクエスト。50人規模の会社で1人あたり1日30回使っても1,500回だから十分だけど、超えそうならPay-as-you-goプランに切り替える。

プランリクエスト上限月額コスト目安
無料枠1,500回/日0円
Pay-as-you-go(Flash)無制限〜3,000円/月(中小規模)
Pay-as-you-go(Pro)無制限〜15,000円/月(中小規模)

ミドリ(confused): 有料でも月3,000円って、SaaSの1人分以下ですね。

2. プロンプトの品質管理

タツヤ: AIの出力品質はプロンプト次第。社内で「このユースケースにはこのプロンプト」というテンプレート集を作って共有するのが効果的。プロンプトはスプレッドシートで一元管理すると、改善の履歴も残せて便利だよ。

3. セキュリティの配慮

タツヤ(thinking): Gemini APIに送るデータには注意が必要。個人情報や機密情報は送信前にマスキングする処理を入れること。また、Google Workspaceの管理者権限でGASの実行権限を適切に制限する。

// 個人情報のマスキング例
function maskPersonalInfo(text) {
  // 電話番号をマスク
  text = text.replace(
    /0\d{1,4}-?\d{1,4}-?\d{4}/g, '[電話番号]'
  );
  // メールアドレスをマスク
  text = text.replace(
    /[\w.]+@[\w.]+/g, '[メールアドレス]'
  );
  return text;
}

ミドリ: セキュリティ大事ですね。

タツヤ: 特に中小企業はセキュリティポリシーが甘くなりがちだから、最初にルールを決めておくことが重要だよ。

発展的な活用

ミドリ: もっと高度なこともできますか?

タツヤ: もちろん。応用パターンをいくつか紹介しよう。

ミドリ(surprised): GASってこんなに何でもできるんですね。

タツヤ: Google Workspaceのエコシステム内なら、ほぼ何でもできる。既にある環境を最大限活用するのが、コストゼロAI化の本質だよ。

まとめ:まずは30分で1つ作ってみよう

ミドリ: 今日の話をまとめるとどうなりますか?

タツヤ(nodding): ポイントは3つ。

  1. GAS × Gemini APIなら追加コストほぼゼロで社内AIアシスタントが作れる。SaaSに年間200万円払う前に、まずこれを試すべき
  2. メール要約・スプレッドシートQ&A・議事録整理の3つが、最も効果の出やすいユースケース。どれも30分〜1時間で構築可能
  3. セキュリティとプロンプト管理をルール化すれば、中小企業でも安全に運用できる

ミドリ: 「まず1つ作ってみる」のが大事ですね。

タツヤ: そう。完璧なシステムを設計してから動くんじゃなくて、メール要約の関数を1つ動かしてみる。それだけで「AIってこんなに便利なんだ」って実感が生まれる。その実感が、次のステップへの最大のモチベーションになるよ。


次のアクション

GAS × Gemini APIで社内AIアシスタントを始めましょう。