GoogleスプレッドシートでChatGPTに質問するツールつくってみた

# GoogleスプレッドシートでChatGPTに質問するツールつくってみた

#実装にはChatGPT APIの利用料金が発生します
## 目次
1. [はじめに](#はじめに)
2. [ツールの概要](#ツールの概要)
3. [ソースコード](#ソースコード)
4. [コードの解説](#コードの解説)
5. [手順](#手順)

## はじめに
GoogleスプレッドシートとChatGPTを連携させることで、スプレッドシート内で質問を自動的に処理し、回答を取得するツールを作成しました。このツールを使えば、スプレッドシートに入力した質問に対してChatGPTが自動的に応答し、結果をシートに表示することができます。この記事では、ツールの概要から具体的なコード、設定手順までを初心者向けに詳しく説明します。

## ツールの概要
このツールは、GoogleスプレッドシートとOpenAIのChatGPT APIを統合することで、スプレッドシートに入力した質問に対して自動的に回答を取得できるようにします。スプレッドシートのA列に質問を書き込み、ツールを実行することで、B列にChatGPTからの回答が表示されます。

## ソースコード
以下は、Google Apps Scriptを使用して作成したソースコードです。APIキーは`YOUR_OPENAI_API_KEY`と表示されていますが、実際には自分のAPIキーに置き換えてください。

```javascript
const API_KEY = 'YOUR_OPENAI_API_KEY'; // OpenAIのAPIキーをここに入力

function getChatGPTResponse(prompt) {
  const url = 'https://api.openai.com/v1/chat/completions';
  const payload = {
    model: 'gpt-3.5-turbo',
    messages: [{ role: 'user', content: prompt }],
    max_tokens: 150
  };

  const options = {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${API_KEY}`,
      'Content-Type': 'application/json'
    },
    payload: JSON.stringify(payload)
  };

  try {
    const response = UrlFetchApp.fetch(url, options);
    const json = JSON.parse(response.getContentText());
    return json.choices[0].message.content.trim();
  } catch (e) {
    Logger.log('Error: ' + e.message);
    if (e.message.includes('429')) {
      Logger.log('Quota exceeded. Please check your OpenAI plan.');
    }
    return 'Error: Could not retrieve response.';
  }
}

function fillAnswers() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const range = sheet.getRange('A2:A');
  const questions = range.getValues();
  
  for (let i = 0; i < questions.length; i++) {
    const question = questions[i][0];
    if (question) {
      const answer = getChatGPTResponse(question);
      sheet.getRange(i + 2, 2).setValue(answer);
    }
  }
}
```

## コードの解説
1. **APIキーの設定**
   ```javascript
   const API_KEY = 'YOUR_OPENAI_API_KEY'; // OpenAIのAPIキーをここに入力
   ```
   OpenAIのAPIキーを設定します。セキュリティのため、公開リポジトリなどではAPIキーを直接コードに含めないことを推奨します。

2. **ChatGPTへのリクエスト関数**
   ```javascript
   function getChatGPTResponse(prompt) {
     const url = 'https://api.openai.com/v1/chat/completions';
     const payload = {
       model: 'gpt-3.5-turbo',
       messages: [{ role: 'user', content: prompt }],
       max_tokens: 150
     };

     const options = {
       method: 'POST',
       headers: {
         'Authorization': `Bearer ${API_KEY}`,
         'Content-Type': 'application/json'
       },
       payload: JSON.stringify(payload)
     };

     try {
       const response = UrlFetchApp.fetch(url, options);
       const json = JSON.parse(response.getContentText());
       return json.choices[0].message.content.trim();
     } catch (e) {
       Logger.log('Error: ' + e.message);
       if (e.message.includes('429')) {
         Logger.log('Quota exceeded. Please check your OpenAI plan.');
       }
       return 'Error: Could not retrieve response.';
     }
   }
   ```
   `getChatGPTResponse`関数は、指定した質問をChatGPT APIに送信し、その回答を取得します。エラーハンドリングも含まれており、APIのクォータ超過などのエラーに対応しています。

3. **スプレッドシートに回答を入力する関数**
   ```javascript
   function fillAnswers() {
     const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
     const range = sheet.getRange('A2:A');
     const questions = range.getValues();
     
     for (let i = 0; i < questions.length; i++) {
       const question = questions[i][0];
       if (question) {
         const answer = getChatGPTResponse(question);
         sheet.getRange(i + 2, 2).setValue(answer);
       }
     }
   }
   ```
   `fillAnswers`関数は、スプレッドシートのA列にある質問を取得し、各質問に対して`getChatGPTResponse`関数を実行して回答をB列に書き込みます。

## 手順
1. **APIキーの取得**
   - OpenAIのアカウントを作成し、[OpenAIのAPIページ](https://platform.openai.com/)からAPIキーを取得します。

2. **Google Apps Scriptの設定**
   - Googleスプレッドシートを開き、「拡張機能」>「Apps Script」を選択します。
   - 新しいプロジェクトを作成し、上記のコードをコピーして貼り付けます。
   - `API_KEY`の部分を、自分のAPIキーに置き換えます。

3. **トリガーの設定**
   - Apps Scriptのエディタで「時計」アイコンをクリックし、「トリガー」を設定します。
   - `fillAnswers`関数を定期的に実行するように設定するか、手動で実行します。

4. **スプレッドシートでの使用**
   - スプレッドシートのA列に質問を入力します。
   - スクリプトを実行すると、B列にChatGPTからの回答が表示されます。

今回のこのツールはかなり簡素な作りですので別シートに用意した、プロンプトの形式で質問するとかできれば、スプレッドシートの質問処理が効率的に行えるようになるのではと思いますので、それは次回以降に。
参考
Google Apps Scriptの基本
https://www2.kobe-u.ac.jp/~tnishida/programming/GAS-01.html
Qiitaの関連記事
https://qiita.com/JinA293/items/ab953c40ce73d161f4fc
## 採用拡大中！
アシストエンジニアリングでは一緒に働くフロントエンド、バックエンドのエンジニア仲間を大募集しています！
少しでも興味ある方は、カジュアル面談からでもぜひお気軽にお話ししましょう！
お問い合わせはこちらから↓
https://official.assisteng.co.jp/contact/