「スプレッドシートに毎日データは溜まっていくのに、その中身を誰も読んでいない」。そんな状態になっていませんか。
売上の推移、問い合わせの傾向、アンケートの自由記述。どれも宝の山のはずなのに、行数が増えるほど目を通すのが面倒になり、結局放置されてしまいます。気づけば「今週の数字どうだった?」と聞かれて慌てて手集計、というのが定番化していたりしますよね。
この記事では、GAS(Google Apps Script)からGemini APIを呼び出して、スプレッドシートのデータをAIに自動で要約させ、毎朝メールで届く日次レポートを作る方法を解説します。手順通りに進めれば、コピペで動く仕組みが完成します。最後にコストと送信上限の注意点もまとめているので、安心して導入できますよ。
GASそのものが初めてという方は、先に【GAS入門】スプレッドシート自動化の始め方とコピペで使えるレシピ集に目を通しておくと、この記事の内容がぐっと理解しやすくなります。
GAS × Gemini で何ができるのか
まず、これから作る仕組みの全体像を確認しておきましょう。
GASは、GoogleスプレッドシートやGmailを自動で操作できるプログラミング環境です。一方のGeminiは、Googleが提供する生成AIで、文章の要約やコメント生成が得意です。この2つを組み合わせると、次のような流れが自動で回ります。
- GASがスプレッドシートから最新のデータを読み取る
- そのデータをGemini APIに渡して、要約とコメントを生成させる
- AIが返した文章を、GASがメールやChatに送信する
- トリガーで毎朝自動実行する
つまり、人間が一切手を動かさなくても、「昨日の売上は前日比12%増。特に午後の時間帯が好調でした」といったAIの分析コメント付きレポートが、毎朝メールボックスに届くようになります。
専門用語を1つだけ補足します。API(エーピーアイ) とは、外部のサービスを自分のプログラムから呼び出すための窓口のことです。GASからGeminiに「このデータを要約して」とお願いするには、このAPIという窓口を使います。難しく見えますが、やることは「決められた住所に決められた形式でお願いを送るだけ」とイメージしてもらえれば大丈夫です。
完成後のゴール状態は、こうです。毎朝9時に、スプレッドシートの当日分データをAIが要約したレポートが、指定したメールアドレスに自動で届く。これを目指して進めていきましょう。
必要な前提条件
始める前に、以下を確認してください。
- Googleアカウント(無料のもので構いません)
- 要約したいデータが入ったGoogleスプレッドシート
- Google AI Studio でGemini APIキーを取得できること(次のセクションで取得します)
プログラミングの経験は不要です。コードはすべてコピペで使えます。
手順【全5ステップ】
ここからは実際に手を動かしていきます。1ステップずつ確実に進めれば、迷わず完成できますよ。
ステップ1: Gemini APIキーを取得する
Gemini APIを使うには、自分専用の「APIキー」が必要です。これはAIに「あなたは許可された利用者ですよ」と伝えるためのパスワードのようなものだと考えてください。
- ブラウザで Google AI Studio(aistudio.google.com)を開く
- Googleアカウントでログインする
- 画面左メニューまたは右上の[Get API key](APIキーを取得)ボタンをクリックする
- [Create API key](APIキーを作成)を選び、表示された文字列をコピーする
コピーしたAPIキーは、この後コードに貼り付けます。このキーは絶対に他人に見せたり、公開したりしないでください。 流出すると他人に使われて、思わぬ料金が発生する恐れがあります。
無料枠については後ほど詳しく触れますが、個人や小さなチームで使う分には無料の範囲内で十分まかなえることがほとんどです。
ステップ2: スプレッドシートとGASエディタを開く
要約したいデータが入ったスプレッドシートを開きます。
- 対象のスプレッドシートを開く
- 上部メニューの[拡張機能]をクリックする
- [Apps Script]を選ぶ
新しいタブでGASのコードエディタが開きます。最初から function myFunction() {} という空のコードが書かれていますが、これは丸ごと消して大丈夫です。
今回サンプルとして想定するデータは、A列に「日付」、B列に「売上」、C列に「問い合わせ件数」が並んでいるシートです。皆さんの実際のデータに合わせて、後でコード内の列指定を調整してください。
ステップ3: APIキーを安全に保存する
APIキーをコードに直接書くこともできますが、おすすめしません。コードを誰かと共有したときに、キーまで一緒に渡ってしまうからです。
GASには「スクリプトプロパティ」という、キーなどの秘密情報を安全にしまっておく場所があります。まずはここにAPIキーを保存しましょう。
エディタに次のコードを貼り付けて、ここにAPIキーを貼る の部分をステップ1でコピーしたキーに置き換えてください。
// このコードは1回だけ実行する(APIキーをスクリプトプロパティに保存)
function setApiKey() {
const apiKey = 'ここにAPIキーを貼る';
PropertiesService.getScriptProperties().setProperty('GEMINI_API_KEY', apiKey);
console.log('APIキーを保存しました');
}
貼り付けたら、エディタ上部の関数選択メニューで setApiKey を選び、[実行]ボタンを押します。初回は「承認が必要です」という画面が出るので、自分のアカウントを選んで許可してください。
実行後、ログに「APIキーを保存しました」と出れば成功です。これで以降のコードからは、キーの文字列を書かずに安全に呼び出せるようになります。
保存が終わったら、setApiKey のコードからAPIキーの文字列を消しておくと、より安全です。
ステップ4: Geminiに要約させる本体コードを書く
いよいよメインのコードです。スプレッドシートのデータを読み取り、Geminiに渡して要約させ、メールで送信する一連の処理を書きます。
少し長く見えますが、やっていることは「データを集める → AIにお願いする → 結果を送る」の3つだけです。コメントで各処理を説明しているので、安心してコピペしてください。
function sendDailyReport() {
// --- 1. スプレッドシートからデータを読み取る ---
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const data = sheet.getDataRange().getValues();
// ヘッダー行を含めてテキスト化する(行数が多い場合は直近30行などに絞る)
const rows = data.slice(-30); // 最新30行に限定(コスト・上限対策)
let dataText = '';
rows.forEach(function(row) {
dataText += row.join(', ') + 'n';
});
// --- 2. Geminiに渡すプロンプト(指示文)を組み立てる ---
const prompt =
'あなたは優秀なデータアナリストです。以下のスプレッドシートのデータを読み、n' +
'日次レポートとして次の形式で日本語でまとめてください。n' +
'1. 全体サマリー(2〜3文)n' +
'2. 注目すべき変化や傾向(箇条書き2〜3点)n' +
'3. 明日に向けたひとことコメントnn' +
'【データ】n' + dataText;
// --- 3. Gemini APIを呼び出す ---
const summary = callGemini(prompt);
// --- 4. メールで送信する ---
const today = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd');
GmailApp.sendEmail(
'あなたのメールアドレス@example.com', // ← 送信先に変更
'【日次レポート】' + today,
summary
);
}
// Gemini API を呼び出す関数(UrlFetchApp を使用)
function callGemini(prompt) {
const apiKey = PropertiesService.getScriptProperties().getProperty('GEMINI_API_KEY');
const model = 'gemini-2.0-flash'; // 軽量・低コストなモデル
const url = 'https://generativelanguage.googleapis.com/v1beta/models/'
+ model + ':generateContent?key=' + apiKey;
const payload = {
contents: [
{ parts: [ { text: prompt } ] }
]
};
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.length > 0) {
return json.candidates[0].content.parts[0].text;
} else {
// エラー時は内容をそのまま返す(原因確認用)
return 'AIの応答取得に失敗しました。詳細: ' + response.getContentText();
}
}
ここで使っている UrlFetchApp(ユーアールエルフェッチアップ) が、GASから外部のAPIにHTTPリクエストを送るための機能です。Geminiの窓口(URL)に、要約してほしいデータと指示文をまとめて送り、返ってきた文章を受け取っています。
コードを貼り付けたら、次の2か所を必ず書き換えてください。
- メール送信先(
あなたのメールアドレス@example.com)を自分の宛先に変更する - データの列構成が違う場合は、プロンプト内の説明をデータに合わせて調整する
書き換えたら、関数メニューで sendDailyReport を選んで[実行]してみましょう。数秒後、指定したメールアドレスにAIの要約レポートが届けば成功です。
うまくいかないときは、後半の「うまくいかないときの対処法」を確認してください。
ステップ5: トリガーで毎朝自動実行する
最後に、このレポートを毎朝自動で送る設定をします。手動で実行する手間をなくす、いちばん大事なステップです。
GASには「トリガー」という、決まった時刻にコードを自動実行する仕組みがあります。
- GASエディタの左メニューにある時計アイコン([トリガー])をクリックする
- 右下の[トリガーを追加]ボタンをクリックする
- 実行する関数に
sendDailyReportを選ぶ - イベントのソースを「時間主導型」にする
- 「日付ベースのタイマー」を選び、時刻を「午前8時〜9時」などに設定する
- [保存]をクリックする
これで毎朝、指定した時間帯にAIが自動でレポートを作り、メールで届けてくれます。あとは放っておくだけで、毎日データの要約が手に入る状態になりました。
トリガーの設定をもっと細かくカスタマイズしたい方は、GASのトリガーでスプレッドシートの集計・通知を自動化する方法で、時間指定やフォーム送信時の起動など、応用パターンを詳しく解説しています。
応用テクニック・カスタマイズ
基本の仕組みができたら、少しの工夫でさらに実用的になります。
送信先をChatに変える。メールではなくGoogle ChatやSlackに通知したい場合は、Webhook(ウェブフック)というURL宛にUrlFetchAppでメッセージを送れば実現できます。チームの全員に共有したいときに便利です。
要約の切り口を変える。プロンプト(指示文)を書き換えるだけで、レポートの内容は自由に調整できます。たとえば「ネガティブな問い合わせだけを抽出して」「先週との比較を中心に」といった指示にすると、目的に合った分析が返ってきます。プロンプトこそがこの仕組みの心臓部だと考えてください。
複数シートをまとめる。売上シートとアンケートシートを両方読み込んで、1通のレポートにまとめることもできます。getSheetByName('シート名') で対象シートを指定すれば、データを組み合わせられます。
アンケートの自由記述を要約する。数値データだけでなく、お客様アンケートの自由記述欄をGeminiに渡せば、「不満の声に多かったキーワード」や「全体の感情傾向」をAIがまとめてくれます。手作業では時間のかかる定性分析が一瞬で終わります。
うまくいかないときの対処法
実行してエラーが出ても、原因はだいたい決まっています。落ち着いて確認していきましょう。
メールが届かない・要約が空っぽ。まずGASエディタの[実行ログ]を確認してください。「AIの応答取得に失敗しました」と出ている場合は、APIキーが正しく保存されているかを疑います。ステップ3の setApiKey をもう一度実行してみてください。
「APIキーが無効」というエラー。Google AI Studioで取得したキーが正しくコピーされているか確認します。前後に余計なスペースが入っていることがよくあるので、貼り直すと直る場合が多いです。
429エラー(リクエストが多すぎます)。短時間にAPIを呼びすぎると出ます。無料枠の1分あたりの上限を超えた可能性が高いので、少し時間をおいてから再実行してください。トリガーは1日1回なら問題になりません。
承認画面が繰り返し出る。GASが初めてGmailや外部通信を使うときに表示されます。「詳細」→「(プロジェクト名)に移動」を選んで、許可を進めてください。一度許可すれば次回からは出ません。
それでも解決しない場合は、callGemini 関数の戻り値(エラー詳細)をメール本文や実行ログでそのまま確認すると、Geminiが返したエラーメッセージから原因を特定できます。
コストと送信上限の注意点
最後に、安心して使い続けるための注意点をまとめます。ここを押さえておけば、想定外の請求に驚くことはありません。
無料枠の範囲。Gemini APIには無料利用枠があり、軽量モデル(gemini-2.0-flashなど)を1日1回のレポート用途で使う程度であれば、無料の範囲内で十分まかなえることがほとんどです。ただし無料枠の具体的な上限値は変更されることがあるため、Google AI Studio や公式の料金ページで最新の条件を確認してください。
送るデータ量を絞る。AIに渡すデータが多いほど処理コストは上がります。サンプルコードで data.slice(-30) として最新30行に限定しているのは、このためです。何百行も丸ごと渡す必要はありません。要約に必要な分だけ渡すのがコツです。
実行回数を増やしすぎない。トリガーを「1時間ごと」などにすると、呼び出し回数が一気に増えて無料枠を超えやすくなります。レポート用途なら1日1回で十分です。
有料化が必要になったら。データ量や回数が増えて無料枠を超える場合は、Google Cloud側で課金設定(Vertex AI など)を行う方法もあります。本格運用に移る際は、まず無料枠でしばらく試してから判断すると安全です。
GASの自動化が初めての方は、まず【GAS入門】スプレッドシート自動化の始め方とコピペで使えるレシピ集で基礎を固めてから、この仕組みに挑戦するのもおすすめです。
まとめ
GASとGeminiを組み合わせれば、スプレッドシートに溜まったデータを、AIが毎朝自動で要約してレポートにしてくれます。今回のポイントを振り返りましょう。
- Google AI Studio でAPIキーを取得し、スクリプトプロパティに安全に保存する
- UrlFetchApp でGemini APIにデータと指示文を送り、要約を受け取る
- プロンプト(指示文)を変えれば、レポートの切り口は自由に調整できる
- トリガーで毎朝自動実行すれば、放っておくだけでレポートが届く
- 渡すデータは必要な分に絞り、実行は1日1回にしてコストを抑える
一度仕組みを作ってしまえば、あとは毎朝AIが分析してくれる状態が続きます。手集計に追われていた時間を、本来やるべき仕事に使えるようになりますよ。まずはAPIキーの取得から、気軽に試してみてください。
