ここからは、実際にChatGPTとGoogle Apps Script(GAS)を組み合わせて、スプレッドシートの日報をAIが自動で文章化する手順を解説します。まずは「動く体験」を作りましょう。
目次
Contents
ChatGPT×GASで日報を自動作成する
準備するもの
- Googleスプレッドシート(例:シート名「日報」)
- OpenAI APIキー(ChatGPTをプログラムから使うための鍵)
- Googleアカウント(GAS実行用)
スプレッドシートには、たとえば次のような列を用意します。
| 日付 | 作業内容 | 所要時間 | 備考 |
|---|---|---|---|
| 10/18 | ミーティング資料作成 | 2h | A社提案用 |
| 10/18 | メール対応 | 1h | 顧客サポート |
出力先として、同じシートのG2セルに「AI生成の日報本文」を書き出す想定です。
コード例(ChatGPTが日報を作成)
スプレッドシートのメニューから「拡張機能」→「Apps Script」を開き、下記コードを貼り付けて保存します。
function createDailyReport() {
const apiKey = 'あなたのOpenAI_APIキーを入れる';
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('日報');
const lastRow = sheet.getLastRow();
if (lastRow <= 1) return; // データがない場合は終了
// A:D列(1〜4列目)をまとめて取得(ヘッダー行を除く)
const data = sheet.getRange(2, 1, lastRow - 1, 4).getValues();
let bullet = "今日の業務内容:\\n";
data.forEach(row => {
const task = row[1]; // 作業内容
const time = row[2]; // 所要時間
const note = row[3]; // 備考
bullet += `・${task}(${time})${note ? "/" + note : ""}\\n`;
});
const prompt = `次の箇条書きを基に、社内日報として自然で簡潔な日本語の文章を作成してください。
# 条件
- 200〜350文字程度
- 最後に「明日の予定」セクションを一文で添える
- 丁寧語で簡潔にまとめる
# 箇条書き
${bullet}`;
// ChatGPT API呼び出し
const url = 'https://api.openai.com/v1/chat/completions';
const payload = {
model: 'gpt-3.5-turbo',
messages: [{ role: 'user', content: prompt }],
temperature: 0.4
};
const res = UrlFetchApp.fetch(url, {
method: 'post',
headers: { 'Authorization': 'Bearer ' + apiKey },
contentType: 'application/json',
payload: JSON.stringify(payload),
muteHttpExceptions: true
});
const json = JSON.parse(res.getContentText());
if (!json.choices || !json.choices[0]) {
throw new Error('APIレスポンスが不正です: ' + res.getContentText());
}
const report = json.choices[0].message.content.trim();
// 結果をG2セルへ出力
sheet.getRange('G2').setValue(report);
}
ポイント:プロンプトに「文字量」「トーン」「締めの一文」などの指示を入れると、実務で使いやすい安定した文章が返ってきます。
自動実行(トリガー設定)
- GAS画面左の「トリガー(時計アイコン)」をクリック
- 「トリガーを追加」→ 関数に
createDailyReportを選択 - イベントのソース:時間主導型、頻度:毎日/平日などを選択して保存
これで、日々の作業を入力するだけで、AIが自動的に日報を作成してくれる仕組みが完成です。
応用:メールやLINEにも自動で送信しよう
作成した日報は、さらにGASで「送る」まで自動化できます。メールは数行でOK、LINEはMessaging APIを使います(公式アカウントが必要)。
メール送信のサンプル(Gmail)
function sendReportByMail() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('日報');
const body = sheet.getRange('G2').getValue();
if (!body) return;
GmailApp.sendEmail('manager@example.com', '【日報】本日の業務報告', body);
}
上記をトリガーで createDailyReport の直後に実行すると、生成→送信まで全自動になります。
LINE通知のポイント(概念)
- LINE公式アカウントのチャネルを作成 → チャネルアクセストークン取得
- GASから
UrlFetchApp.fetch()でhttps://api.line.me/v2/bot/message/pushにPOST - ユーザーID(またはグループID)宛に、G2セルの本文を送る
社内連絡をメールからLINE/Slackに切り替えると、確認率が大きく向上します。通知の使い分けが効率化のカギです。
よくあるつまずきと対処
- APIエラーが出る:APIキーの前後に空白が入っていないか、課金設定・利用上限を確認。
- CORS/権限まわり:初回実行時の権限許可ダイアログで「許可」を選択。スクリプトの実行ユーザーに注意。
- 日本語が不自然:プロンプトに「トーン/文字数/対象読者」を明記。温度(temperature)を0.2〜0.5に下げて安定化。
- コストが心配:文字量を制限(例:200〜350文字)。バッチ化して回数を減らす。
