社内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;
}
ミドリ: セキュリティ大事ですね。
タツヤ: 特に中小企業はセキュリティポリシーが甘くなりがちだから、最初にルールを決めておくことが重要だよ。
発展的な活用
ミドリ: もっと高度なこともできますか?
タツヤ: もちろん。応用パターンをいくつか紹介しよう。
- Googleフォームの回答自動分析 — アンケート結果をリアルタイムで集計・分析して、トレンドを可視化
- Slackボット連携 — GASのWebhookとSlackを接続して、Slackから自然言語でデータを問い合わせ
- 日報の自動レビュー — Googleフォームで提出された日報を、AIが自動でフィードバック
- カレンダー最適化 — 会議の多い週を検出して、集中作業時間の確保を提案
ミドリ(surprised): GASってこんなに何でもできるんですね。
タツヤ: Google Workspaceのエコシステム内なら、ほぼ何でもできる。既にある環境を最大限活用するのが、コストゼロAI化の本質だよ。
まとめ:まずは30分で1つ作ってみよう
ミドリ: 今日の話をまとめるとどうなりますか?
タツヤ(nodding): ポイントは3つ。
- GAS × Gemini APIなら追加コストほぼゼロで社内AIアシスタントが作れる。SaaSに年間200万円払う前に、まずこれを試すべき
- メール要約・スプレッドシートQ&A・議事録整理の3つが、最も効果の出やすいユースケース。どれも30分〜1時間で構築可能
- セキュリティとプロンプト管理をルール化すれば、中小企業でも安全に運用できる
ミドリ: 「まず1つ作ってみる」のが大事ですね。
タツヤ: そう。完璧なシステムを設計してから動くんじゃなくて、メール要約の関数を1つ動かしてみる。それだけで「AIってこんなに便利なんだ」って実感が生まれる。その実感が、次のステップへの最大のモチベーションになるよ。
次のアクション
GAS × Gemini APIで社内AIアシスタントを始めましょう。
- Google AI Studio(https://aistudio.google.com)でGemini APIキーを取得する
- 上記のメール要約コードをコピーして、まず動かしてみる
- 自社の業務に合わせたカスタマイズや本格導入のご相談は、Shimanto AI SolutionsのGAS開発支援サービスへ