2025年6月13日
•約4分で読めます
Google Apps ScriptからChatGPT APIを呼び出して、スプレッドシートでAI機能を実装する具体的な方法を解説します。
Google Apps Script(GAS)を使用して ChatGPT API と連携することで、Google スプレッドシート上で強力な AI 機能を実現できます。本記事では、実際のコード例とともに実装方法を詳しく解説します。
OpenAI の公式サイトでアカウントを作成し、API キーを取得します。
Google スプレッドシートから「拡張機能」→「Apps Script」を選択してプロジェクトを作成します。
// スクリプトプロパティにAPIキーを保存
function setApiKey() {
const apiKey = "your-openai-api-key";
PropertiesService.getScriptProperties().setProperty("OPENAI_API_KEY", apiKey);
}
function callChatGPT(prompt, maxTokens = 100) {
const apiKey =
PropertiesService.getScriptProperties().getProperty("OPENAI_API_KEY");
const url = "https://api.openai.com/v1/chat/completions";
const payload = {
model: "gpt-3.5-turbo",
messages: [
{
role: "user",
content: prompt,
},
],
max_tokens: maxTokens,
temperature: 0.7,
};
const options = {
method: "POST",
headers: {
Authorization: `Bearer ${apiKey}`,
"Content-Type": "application/json",
},
payload: JSON.stringify(payload),
};
try {
const response = UrlFetchApp.fetch(url, options);
const data = JSON.parse(response.getContentText());
if (data.choices && data.choices.length > 0) {
return data.choices[0].message.content.trim();
} else {
return "エラー: 有効な応答が得られませんでした";
}
} catch (error) {
Logger.log("API呼び出しエラー: " + error.toString());
return "エラー: API呼び出しに失敗しました";
}
}
function summarizeText() {
const sheet = SpreadsheetApp.getActiveSheet();
const range = sheet.getRange("A:A");
const values = range.getValues();
for (let i = 1; i < values.length; i++) {
if (values[i][0] && values[i][0].toString().length > 100) {
const text = values[i][0].toString();
const prompt = `以下のテキストを3行で要約してください:\n\n${text}`;
const summary = callChatGPT(prompt, 150);
sheet.getRange(i + 1, 2).setValue(summary);
Utilities.sleep(1000); // API制限を考慮して1秒待機
}
}
}
function categorizeData() {
const sheet = SpreadsheetApp.getActiveSheet();
const dataRange = sheet.getRange("A2:A100");
const data = dataRange.getValues();
const categories = ["営業", "技術", "マーケティング", "その他"];
data.forEach((row, index) => {
if (row[0]) {
const prompt = `以下のテキストを次のカテゴリのいずれかに分類してください: ${categories.join(
", "
)}\n\nテキスト: ${
row[0]
}\n\n分類結果のカテゴリ名のみを回答してください。`;
const category = callChatGPT(prompt, 50);
sheet.getRange(index + 2, 2).setValue(category);
Utilities.sleep(1000);
}
});
}
function analyzeSentiment() {
const sheet = SpreadsheetApp.getActiveSheet();
const textRange = sheet.getRange("A:A");
const texts = textRange.getValues();
for (let i = 1; i < texts.length; i++) {
if (texts[i][0]) {
const text = texts[i][0].toString();
const prompt = `以下のテキストの感情を分析し、「ポジティブ」「ネガティブ」「ニュートラル」のいずれかで回答してください:\n\n${text}`;
const sentiment = callChatGPT(prompt, 30);
sheet.getRange(i + 1, 3).setValue(sentiment);
Utilities.sleep(1000);
}
}
}
function createTrigger() {
// 毎日午前9時に実行
ScriptApp.newTrigger("dailyAnalysis")
.timeBased()
.everyDays(1)
.atHour(9)
.create();
}
function dailyAnalysis() {
// 新しいデータの自動分析
summarizeText();
categorizeData();
analyzeSentiment();
}
function batchProcess(data, batchSize = 10) {
for (let i = 0; i < data.length; i += batchSize) {
const batch = data.slice(i, i + batchSize);
batch.forEach((item) => {
// AI処理
const result = callChatGPT(item.prompt);
item.result = result;
});
// バッチ間で60秒待機
if (i + batchSize < data.length) {
Utilities.sleep(60000);
}
}
}
function estimateCost(text, model = "gpt-3.5-turbo") {
const tokensPerChar = 0.25; // 概算
const estimatedTokens = text.length * tokensPerChar;
const pricing = {
"gpt-3.5-turbo": 0.002, // $0.002 per 1K tokens
};
const cost = (estimatedTokens / 1000) * pricing[model];
return `推定コスト: $${cost.toFixed(4)}`;
}
Google Apps Script と ChatGPT API の連携により、Google スプレッドシート上で高度な AI 機能を実現できます。適切なエラーハンドリングとコスト管理を行いながら、段階的に機能を拡張していくことが成功の鍵です。
ビットライトでは、GAS と AI API を活用したカスタムソリューションの開発支援を行っています。技術的なご相談はお気軽にお問い合わせください。
代表取締役 CEO
大阪大学基礎工学部情報科学科卒業。大学時代はAIについて研究。10年以上のWebアプリ開発・データ分析経験を持つ。株式会社ビットライト代表として、生成AI・RPA・Excelなどを活用した業務効率化の専門コンサルティングを提供。
代表取締役 CEO
大阪大学基礎工学部情報科学科卒業。大学時代はAIについて研究。10年以上のWebアプリ開発・データ分析経験を持つ。株式会社ビットライト代表として、生成AI・RPA・Excelなどを活用した業務効率化の専門コンサルティングを提供。