オフィス AI > スプシ AI > Google Apps ScriptでChatGPT APIを活用する実践ガイド

Google Apps ScriptでChatGPT APIを活用する実践ガイド

2025年6月13日

4分で読めます

Google Apps ScriptからChatGPT APIを呼び出して、スプレッドシートでAI機能を実装する具体的な方法を解説します。

GAS
ChatGPT
API
スプレッドシート
技術解説

Google Apps Script と ChatGPT API の連携

Google Apps Script(GAS)を使用して ChatGPT API と連携することで、Google スプレッドシート上で強力な AI 機能を実現できます。本記事では、実際のコード例とともに実装方法を詳しく解説します。

事前準備

1. OpenAI API キーの取得

OpenAI の公式サイトでアカウントを作成し、API キーを取得します。

2. Google Apps Script プロジェクトの作成

Google スプレッドシートから「拡張機能」→「Apps Script」を選択してプロジェクトを作成します。

3. API キーの安全な管理

// スクリプトプロパティにAPIキーを保存
function setApiKey() {
  const apiKey = "your-openai-api-key";
  PropertiesService.getScriptProperties().setProperty("OPENAI_API_KEY", apiKey);
}

基本的な ChatGPT API 呼び出し関数

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呼び出しに失敗しました";
  }
}

実用的な活用例

1. テキスト要約機能

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秒待機
    }
  }
}

2. カテゴリ分類機能

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);
    }
  });
}

3. 感情分析機能

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();
}

エラーハンドリングとベストプラクティス

1. API 制限の考慮

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);
    }
  }
}

2. コスト管理

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 を活用したカスタムソリューションの開発支援を行っています。技術的なご相談はお気軽にお問い合わせください。

この記事が役に立ちましたか?

スプシ AI×AIの導入や業務効率化についてのご相談は、お気軽にビットライトまでお問い合わせください。

著者
守高 成悟
守高 成悟

代表取締役 CEO

大阪大学基礎工学部情報科学科卒業。大学時代はAIについて研究。10年以上のWebアプリ開発・データ分析経験を持つ。株式会社ビットライト代表として、生成AI・RPA・Excelなどを活用した業務効率化の専門コンサルティングを提供。

著者
守高 成悟
守高 成悟

代表取締役 CEO

大阪大学基礎工学部情報科学科卒業。大学時代はAIについて研究。10年以上のWebアプリ開発・データ分析経験を持つ。株式会社ビットライト代表として、生成AI・RPA・Excelなどを活用した業務効率化の専門コンサルティングを提供。