(最終更新月:2023年4月)
Google Apps Script(GAS)を使って、Googleスプレッドシートに入力した質問をChatGPTAPIに投げて、その回答を受け取る仕組みを開発。
その概要からコードまで、すべて公開しています。
GASを活用したGoogleスプレッドシートとChatGPTの連携方法
こちらの仕組みでは、スプレッドシートとChatGPTAPIの間をGASで処理しています。
ひとつずつやるべきことを解説していきます。
詳しく動画でも解説していますので、こちらのコードを見ながらご覧ください。
OpenAIのシークレットキーを取得する
OpenAIへサインアップ・ログインし、APIキーを取得します。
キーをコピーしたうえで、次へ進みましょう。
GoogleスプレッドシートとGASのスクリプトを紐付ける
Googleスプレッドシートを用意して、GASのスクリプトと紐付けるには以下のようにおこないます。
これにより、スプレッドシートと紐付いたGoogle Apps Scriptのプロジェクトが自動生成されます。
GASの設定と実コード
GASでおこなうことは以下の2つ。
- キーをスクリプトプロパティに登録
- コードを書く
- GASに権限を付与する
キーをスクリプトプロパティに登録
Scriptプロパティとは、プロジェクト内で使える環境変数。
プロジェクトの設定からスクリプトプロパティを編集してください。
コードを書く
エディタで記載するコードは以下のとおりです。
//スクリプトプロパティ
const apiKey = ScriptProperties.getProperty('GPT_KEY');
//リクエストを投げるエンドポイント
const ep = "https://api.openai.com/v1/chat/completions";
//モデル
const model = "gpt-3.5-turbo";
//実行する関数
function main() {
//スプレッドシートからロール・質問を取り出す
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName('base');
const role = sheet.getRange(1,2).getValue();//シートをからロールを取り出す(B1)
const q = sheet.getRange(2,2).getValue();//シートから質問を取り出す(B2)
//ChatGPTへの質問を作成
const messages = [
{
"role": "system", "content": role
},
{"role": "user", "content": q}
]
//requestペイロード
const payload = {
"model": model,
"messages":messages,
"max_tokens":3000
}
//request本体
const options = {
"method": "post",
"headers": {
"Content-Type": "application/json",
'Authorization': 'Bearer ' + apiKey,
},
"payload": JSON.stringify(payload)
}
//requestの実行
try {
var response = UrlFetchApp.fetch(ep, options);
Logger.log(response)
var json = response.getContentText();
var data = JSON.parse(json);
sheet.getRange(6,2).setValue(data["choices"][0]["message"]["content"]);
} catch(e) {
// 例外エラー処理
Logger.log('Error:')
Logger.log(e)
}
}
GASに権限を付与する
試しに実行してみると以下のような権限許可の画面がでてきます。
問題ないかを確認し、ScriptのGoogleスプレッドシートや外部APIサービス利用について、許可をしなければなりません。
続行を押して次へ進む
詳細をクリック
「プロジェクト名(安全ではないページ)に移動」をクリック
許可をクリック
まとめ:スプレッドシートからChatGPTを使うのは簡単
Google Apps Scriptを使うと、Googleサービスに対して、さまざまな処理が可能になります。
ぜひいろいろと活用して、作業効率向上を目指しましょう。