【Googleスプレッドシート】ChatGPT APIを呼び出して内容を生成!UrlFetchAppの実装

【Googleスプレッドシート】ChatGPT APIを呼び出して内容を生成!UrlFetchAppの実装
🛡️ 超解決

スプレッドシートでChatGPTのAPIを直接呼び出せたら便利だと思ったことはありませんか?外部ツールにデータをコピーせずに、シート上でテキスト生成や翻訳、要約などを自動化できます。この記事では、Google Apps ScriptのUrlFetchAppを使って、スプレッドシートからChatGPT APIを呼び出す方法を詳しく解説します。環境構築から実装、注意点までを一通り理解できます。

【要点】スプレッドシートからChatGPT APIを呼び出す実装の流れ

  • APIキーの取得と保存: OpenAIのAPIキーを発行し、スクリプトプロパティに安全に保存します。
  • UrlFetchAppを使った関数の作成: Apps ScriptでHTTPリクエストを送信し、応答をセルに返すカスタム関数を定義します。
  • シート上での関数利用: 作成した関数を数式としてセルに入力し、プロンプトを引数で渡して結果を取得します。

ADVERTISEMENT

なぜスプレッドシートからChatGPT APIを呼び出すのか

スプレッドシートは表計算やデータ管理に優れていますが、テキストの自動生成や高度な言語処理は得意ではありません。ChatGPTのAPIを組み合わせることで、セル内のデータを元にした翻訳、要約、カテゴリ分類、メール文面の作成などを自動化できます。例えば、商品名からキャッチコピーを生成したり、アンケートの自由記述を要約したりする処理を、シート上で完結させることが可能です。この記事では、Google Apps ScriptのUrlFetchAppを用いて、ChatGPT APIとスプレッドシートを連携させる具体的な実装手順を解説します。

UrlFetchAppでChatGPT APIを呼び出す実装手順

1. APIキーの準備

  1. OpenAIアカウントでAPIキーを発行する
    OpenAIのWebサイトにログインし、右上のアカウントメニューから「View API keys」を選択します。「Create new secret key」をクリックしてキーを生成します。キーは一度しか表示されないので、必ずコピーして安全な場所に保存してください。
  2. スクリプトプロパティにAPIキーを保存する
    スプレッドシートを開き、拡張機能メニューから「Apps Script」を選択してスクリプトエディタを開きます。左側の歯車アイコン(プロジェクトの設定)をクリックし、「スクリプトプロパティ」を選択します。「プロパティを追加」をクリックし、プロパティ名を「OPENAI_API_KEY」、値を先ほど発行したAPIキーに設定します。これでキーがスクリプト内で安全に参照できるようになります。

2. カスタム関数の作成

  1. 関数名と引数を定義する
    スクリプトエディタに以下のコードを記述します。関数名は「CHATGPT」とし、引数としてプロンプト(prompt)を受け取ります。オプションでモデル(model)や温度(temperature)も指定できるようにします。コメントを付けておくと後でわかりやすくなります。
  2. UrlFetchAppでAPIリクエストを送信する
    POSTリクエストを作成し、エンドポイント「https://api.openai.com/v1/chat/completions」に対して送信します。ペイロードはJSON形式で、モデル名やメッセージ配列を含みます。認証はヘッダーに「Authorization: Bearer ${API_KEY}」を設定します。
  3. レスポンスを処理して返す
    APIからの応答をJSON.parseで解析し、choices[0].message.contentから生成テキストを抽出します。エラーが発生した場合はエラーメッセージを返すようにします。

以下が関数のコード例です。

function CHATGPT(prompt, model, temperature) {
  // デフォルト値の設定
  model = model || "gpt-3.5-turbo";
  temperature = temperature || 0.7;
  
  // APIキーの取得
  const apiKey = PropertiesService.getScriptProperties().getProperty("OPENAI_API_KEY");
  if (!apiKey) {
    return "APIキーが設定されていません";
  }
  
  // リクエストボディの作成
  const payload = {
    model: model,
    messages: [{role: "user", content: prompt}],
    temperature: temperature
  };
  
  // オプションの設定
  const options = {
    method: "POST",
    headers: {
      "Authorization": "Bearer " + apiKey,
      "Content-Type": "application/json"
    },
    payload: JSON.stringify(payload),
    muteHttpExceptions: true
  };
  
  try {
    const response = UrlFetchApp.fetch("https://api.openai.com/v1/chat/completions", options);
    const json = JSON.parse(response.getContentText());
    if (json.error) {
      return "APIエラー: " + json.error.message;
    }
    return json.choices[0].message.content.trim();
  } catch (e) {
    return "リクエストエラー: " + e.message;
  }
}

3. シート上で関数を使う

  1. セルに関数を入力する
    スプレッドシートに戻り、任意のセルに「=CHATGPT(“日本語でこんにちはと言って”)」と入力します。関数名は自動的にスクリプトから認識されます。
  2. 関数の自動実行を確認する
    数式を入力すると、しばらくして結果が表示されます。初回は承認画面が表示されるので、「許可」をクリックします。これで関数が動作するようになります。
  3. 引数にセル参照を使う
    「=CHATGPT(A1)」のように他のセルを参照して、動的なプロンプトを生成できます。複数行にわたって関数をコピーすれば、一括処理も可能です。また、セル範囲を引数にしたい場合は、配列として渡すか、テキスト結合関数と組み合わせてください。

実装時の注意点とよくあるエラー

APIキーの漏洩に注意する

スクリプトプロパティに保存したAPIキーは、スクリプトエディタを開けるユーザーなら誰でも参照できてしまいます。シートを共有する場合は、スクリプトを公開しないように注意してください。また、キーをコード内に直接記述するのは絶対に避けてください。

レート制限と料金に気をつける

ChatGPT APIは使用量に応じて課金されます。大量のセルに関数を使うと、予想外のコストが発生する可能性があります。開発中はテスト用に数セルだけで試し、本番利用ではバッチ処理やキャッシュを検討してください。また、APIには1分あたりのリクエスト数制限があるため、連続して呼び出すとエラーになることがあります。その場合は、Utilities.sleep()でウェイトを入れるなどの対策をしましょう。

関数の再計算が自動で行われない

Googleスプレッドシートのカスタム関数は、引数が変わらない限り再計算されません。定期的に更新したい場合は、タイマートリガーを使ってスクリプトを実行するか、ボタンにスクリプトを割り当てて手動で更新する方法があります。また、引数にランダム関数など変化する値を含めることで強制的に再計算させるテクニックもあります。

モデルの選択とトークン制限

ChatGPT APIには複数のモデル(gpt-3.5-turbo, gpt-4など)があり、応答の品質や速度、コストが異なります。また、1回のリクエストでやり取りできるトークン数に上限があります。長いプロンプトや応答が必要な場合は、モデルをgpt-3.5-turbo-16kなどに変更するか、応答を分割して取得する工夫が必要です。関数内でmax_tokensパラメータを追加することも検討してください。

関数が#NAME?エラーになる場合

カスタム関数が#NAME?エラーを表示する場合、関数名が正しく認識されていない可能性があります。スクリプトエディタで関数名のスペルを確認し、セルに入力するときも正確に記述してください。また、スクリプトが正しく保存されているか、エディタのエラーログを確認しましょう。

ADVERTISEMENT

まとめ

この記事では、GoogleスプレッドシートからChatGPT APIを呼び出すための実装方法を解説しました。Apps ScriptのUrlFetchAppを使うことで、カスタム関数を通じてシート上でテキスト生成を自動化できます。まずは簡単なプロンプトから試し、応用としてバッチ処理やトリガー連携に発展させると良いでしょう。また、OpenAI APIの公式ドキュメントを参照して、より高度な機能(ストリーミング、ファインチューニングなど)を活用することもできます。ぜひ、実際の業務に役立ててみてください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。