はじめに
「ChatGPTを業務に組み込みたいけど、どこから始めればいいか分からない」
そんな方向けに、Google Apps Script(GAS)からChatGPT APIを呼び出す方法を解説します。GASはGoogleアカウントさえあれば無料で使えるので、サーバー不要・環境構築不要で今日から試せます。
この記事を読めば、スプレッドシートやGmailとChatGPTを連携させる仕組みを自分で作れるようになります。
完成イメージ
この記事では以下の3つを作ります。
- 基本:GASからChatGPTに質問して回答を取得する
- 実用例①:スプレッドシートのセルにAI回答を自動入力する
- 実用例②:メールの下書きをChatGPTに自動生成させる
事前準備
OpenAI APIキーの取得
- platform.openai.com にアクセスしてアカウント作成
- 右上のアカウントメニュー → 「API keys」
- 「Create new secret key」でAPIキーを生成
- 生成されたキー(
sk-...)をメモしておく(再表示されないので注意)
注意: APIの利用は従量課金です。GPT-4o miniなら1,000トークンあたり約$0.00015と非常に安価ですが、本番運用前に利用制限を設定しておくことをおすすめします。
① 基本:GASからChatGPTを呼び出す
コード
// ─── 設定 ───────────────────────────────────────
const OPENAI_API_KEY = 'sk-xxxxxxxxxxxxxxxxxxxxxxxx'; // ★ あなたのAPIキー
const MODEL = 'gpt-4o-mini'; // 安価で高速なモデル
// ────────────────────────────────────────────────
/**
* ChatGPTにメッセージを送り、回答を返す
* @param {string} userMessage - ユーザーからのメッセージ
* @param {string} systemPrompt - AIへの役割・指示(省略可)
* @returns {string} AIの回答
*/
function chatWithGPT(userMessage, systemPrompt = 'あなたは親切なアシスタントです。') {
const url = 'https://api.openai.com/v1/chat/completions';
const payload = {
model: MODEL,
messages: [
{ role: 'system', content: systemPrompt },
{ role: 'user', content: userMessage },
],
max_tokens: 1000,
temperature: 0.7,
};
const options = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${OPENAI_API_KEY}`,
},
payload: JSON.stringify(payload),
muteHttpExceptions: true,
};
const response = UrlFetchApp.fetch(url, options);
const json = JSON.parse(response.getContentText());
// エラーチェック
if (json.error) {
throw new Error(`OpenAI API Error: ${json.error.message}`);
}
return json.choices[0].message.content;
}
// 動作確認用(スクリプトエディタから実行してみてください)
function test() {
const answer = chatWithGPT('GASとは何ですか?50文字以内で教えてください。');
console.log(answer);
}
実行方法
- Apps Scriptのエディタにコードを貼り付ける
-
OPENAI_API_KEYを自分のキーに変更 -
test関数を選択して実行 - 「ログ」に回答が表示されれば成功
② 実用例①:スプレッドシートにAI回答を自動入力する
A列に質問を入力すると、B列にChatGPTの回答が自動で入力される仕組みです。
/**
* スプレッドシートのA列の質問に対してAI回答をB列に入力する
*/
function fillAnswersInSheet() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const lastRow = sheet.getLastRow();
for (let i = 2; i <= lastRow; i++) { // 2行目から(1行目はヘッダー)
const question = sheet.getRange(i, 1).getValue(); // A列:質問
// 質問が空、またはすでに回答済みならスキップ
if (!question || sheet.getRange(i, 2).getValue()) continue;
try {
const answer = chatWithGPT(question);
sheet.getRange(i, 2).setValue(answer); // B列に回答を入力
Utilities.sleep(1000); // API制限対策で1秒待つ
} catch (e) {
sheet.getRange(i, 2).setValue(`エラー: ${e.message}`);
}
}
}
使い方
| A列(質問) | B列(AIが自動入力) |
|---|---|
| GASとは何ですか? | (自動で回答が入ります) |
| Pythonの特徴を3つ教えてください | (自動で回答が入ります) |
③ 実用例②:メールの下書きをChatGPTに自動生成させる
件名と要点を渡すと、ビジネスメールの本文を自動生成してGmailの下書きに保存します。
/**
* ChatGPTでビジネスメールを生成してGmailの下書きに保存する
* @param {string} subject - メールの件名
* @param {string} keyPoints - メールに含めたい要点(箇条書きでOK)
* @param {string} to - 宛先(例:「株式会社〇〇 田中様」)
*/
function generateEmailDraft(subject, keyPoints, to) {
const systemPrompt = `
あなたはビジネスメールの作成を支援するアシスタントです。
以下のルールに従ってメール本文を作成してください。
- 丁寧で自然なビジネス文体
- 件名と要点に沿った内容
- 挨拶・本文・締めの3部構成
- 署名は含めない
`.trim();
const userMessage = `
件名:${subject}
宛先:${to}
要点:
${keyPoints}
上記をもとにメール本文を作成してください。
`.trim();
const body = chatWithGPT(userMessage, systemPrompt);
// Gmailの下書きとして保存
GmailApp.createDraft(
'', // 宛先メールアドレス(任意)
subject,
body
);
console.log('下書きを保存しました:\n' + body);
}
// 実行例
function testEmailDraft() {
generateEmailDraft(
'先日のお打ち合わせのお礼',
`・先日はお時間をいただきありがとうございます
・ご提案内容について社内で検討いたします
・来週中に改めてご連絡いたします`,
'株式会社〇〇 田中様'
);
}
APIキーの安全な管理方法
コードに直接APIキーを書くのは非推奨です。スクリプトプロパティを使って安全に管理しましょう。
// ── キーの保存方法 ──
// Apps Script エディタ →「プロジェクトの設定」→「スクリプトプロパティ」
// キー名:OPENAI_API_KEY、値:sk-xxx... を追加
// ── コードでの読み出し方 ──
const OPENAI_API_KEY = PropertiesService
.getScriptProperties()
.getProperty('OPENAI_API_KEY');
これでコードをGitHubなどに公開しても、APIキーが漏れません。
料金の目安
| モデル | 入力(1Mトークン) | 出力(1Mトークン) |
|---|---|---|
| gpt-4o-mini | $0.15 | $0.60 |
| gpt-4o | $5.00 | $15.00 |
日常的な業務利用(1日100リクエスト程度)なら、gpt-4o-miniで月数百円以下に収まることがほとんどです。
まとめ
GASとChatGPT APIを組み合わせると、Googleのサービスとのシームレスな連携が簡単に実現できます。
- ✅ サーバー不要・環境構築不要
- ✅ スプレッドシートやGmailとすぐに連携できる
- ✅ コストも低く抑えられる
今回紹介した chatWithGPT() 関数は汎用的に使えるので、様々な業務フローに組み込んでみてください。
AI活用の業務自動化・システム開発のご相談
「自社の業務にAIを組み込みたい」「GASでの開発を外注したい」などのご相談はお気軽にどうぞ。