技術ブログ

【GAS x ChatGPT】API連携で業務効率を劇的に改善!

/ 初心者向け

【GAS x ChatGPT】API連携で業務効率を劇的に改善!

【GAS x ChatGPT】API連携で業務効率を劇的に改善!

皆さん、こんにちは!GAS専門ブロガーの〇〇です。

今回は、今話題のChatGPT APIとGoogle Apps Script (GAS) を連携させて、日々の業務を効率化する画期的な方法をご紹介します。

「ChatGPTってすごいのは知ってるけど、どうやってGASで使えるの?」「API連携って難しそう…」

そんな風に思っている方も大丈夫!この記事を読めば、誰でも簡単にChatGPT APIをGASから呼び出し、様々な業務に応用できるようになります。

なぜChatGPT APIとGASを連携させるのか?

GASはGoogle Workspace(Gmail, スプレッドシート, ドキュメントなど)を自動化するのに非常に強力なツールです。そこに、ChatGPTの高度な自然言語処理能力を組み合わせることで、以下のようなことが可能になります。

  • 文章生成の自動化: メール文面、報告書、SNS投稿文などの作成を自動化。
  • データ分析・要約: スプレッドシートのデータからインサイトを抽出し、要約を作成。
  • 質疑応答ボット: 社内FAQや顧客からの問い合わせに自動で回答。
  • 翻訳: 多言語でのコミュニケーションを円滑に。

これらの作業をGASで自動化することで、これまで手作業に費やしていた時間を大幅に削減し、より創造的で価値の高い業務に集中できるようになります。

事前準備:ChatGPT APIキーの取得

まず、ChatGPT APIを利用するにはAPIキーが必要です。以下の手順で取得してください。

1. OpenAIのウェブサイトにアクセス: https://openai.com/

2. アカウントを作成またはログイン:

3. APIキーのページへ移動: 右上のプロフィールアイコンから「View API keys」を選択。

4. 新しいシークレットキーの作成: 「+ Create new secret key」ボタンをクリック。

5. キーのコピーと保管: 発行されたAPIキーは一度しか表示されないため、安全な場所にコピーして保管してください。絶対に公開しないように注意しましょう!

GASからChatGPT APIを呼び出す方法

GASからChatGPT APIを呼び出すには、UrlFetchApp サービスを使用します。HTTPリクエストを送信し、APIからの応答を受け取る形になります。

例:簡単なテキスト生成スクリプト

ここでは、GASからChatGPTに「〇〇について教えて」という指示を送り、その回答を取得する簡単なスクリプトを例に説明します。

function callChatGPT() {
  // 取得したAPIキーを設定します。実際のキーに置き換えてください。
  const apiKey = 'YOUR_OPENAI_API_KEY';
  
  // ChatGPT APIのエンドポイントURL
  const apiUrl = 'https://api.openai.com/v1/chat/completions';
  
  // APIに送信するデータ(プロンプトやモデル設定など)
  const requestBody = {
    model: 'gpt-3.5-turbo', // 使用するモデルを指定
    messages: [
      { role: 'system', content: 'あなたは優秀なアシスタントです。' }, // システムメッセージ
      { role: 'user', content: 'Google Apps Script (GAS) とは何か、簡単に説明してください。' } // ユーザーからの質問
    ],
    max_tokens: 150, // 生成する最大トークン数
    temperature: 0.7 // 生成のランダム性 (0.0~2.0)
  };
  
  // HTTPリクエストのヘッダー
  const headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + apiKey
  };
  
  // オプション設定
  const options = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(requestBody),
    headers: headers,
    muteHttpExceptions: true // エラー発生時にも例外を投げないようにする
  };
  
  try {
    // APIにリクエストを送信
    const response = UrlFetchApp.fetch(apiUrl, options);
    const responseCode = response.getResponseCode();
    const responseBody = response.getContentText();
    
    if (responseCode === 200) {
      // 成功した場合
      const jsonResponse = JSON.parse(responseBody);
      const generatedText = jsonResponse.choices[0].message.content;
      Logger.log('ChatGPTからの回答: ' + generatedText);
      return generatedText;
    } else {
      // エラーが発生した場合
      Logger.log('エラーが発生しました。ステータスコード: ' + responseCode);
      Logger.log('レスポンスボディ: ' + responseBody);
      return 'API呼び出し中にエラーが発生しました。';
    }
  } catch (e) {
    Logger.log('例外が発生しました: ' + e.toString());
    return 'API呼び出し中に予期せぬエラーが発生しました。';
  }
}

コードの解説:

  • apiKey: 取得したChatGPT APIキーを設定します。ご自身のキーに必ず置き換えてください。
  • apiUrl: ChatGPT APIのチャット補完エンドポイントを指定します。
  • requestBody: APIに送信するリクエストの本体です。
  • model: 使用するChatGPTのモデルを指定します。gpt-3.5-turboはコストパフォーマンスに優れており、多くの用途で利用できます。
  • messages: 対話の履歴を配列で渡します。roleで話者の役割(systemはAIの振る舞いを指示、userはユーザーからの入力)を指定し、contentで実際のメッセージ内容を記述します。
  • max_tokens: 生成されるテキストの最大長を制限します。
  • temperature: 生成されるテキストのランダム性を調整します。値が高いほど多様な表現になります。
  • headers: リクエストヘッダーを設定します。AuthorizationヘッダーにAPIキーをBearerトークンとして含めます。
  • options: UrlFetchApp.fetchメソッドに渡すオプションです。
  • method: 'post': POSTメソッドを使用します。
  • payload: リクエストボディをJSON形式の文字列に変換して設定します。
  • muteHttpExceptions: true: APIエラー時にGASが例外を投げずに、エラーコードとレスポンスを取得できるようにします。

この callChatGPT() 関数を実行すると、LoggerにChatGPTからの回答が表示されます。この回答をスプレッドシートに書き込んだり、メールで送信したりと、さらに応用することができます。

応用例:スプレッドシートからのメール文面生成

例えば、スプレッドシートに顧客リストがあり、それぞれにパーソナライズされたメールを送りたい場合を考えましょう。

1. スプレッドシートの準備: 顧客名、メールアドレス、簡単な依頼内容などを列に持つスプレッドシートを作成します。

2. GASスクリプトの作成: スプレッドシートの各行を読み込み、ChatGPT APIを使ってメール本文を生成し、MailApp.sendEmail() で送信するスクリプトを作成します。

function sendPersonalizedEmails() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const dataRange = sheet.getDataRange();
  const values = dataRange.getValues();

  // ヘッダー行をスキップ
  for (let i = 1; i < values.length; i++) {
    const row = values[i];
    const customerName = row[0]; // 顧客名 (A列)
    const emailAddress = row[1]; // メールアドレス (B列)
    const request = row[2];      // 依頼内容 (C列)

    if (customerName && emailAddress && request) {
      // ChatGPTにメール本文生成を依頼
      const emailBody = generateEmailBody(customerName, request);
      
      // メール送信
      MailApp.sendEmail({
        to: emailAddress,
        subject: '【重要】ご依頼について',
        body: emailBody
      });
      Logger.log(customerName + '様へメールを送信しました。');
    }
  }
}

function generateEmailBody(name, request) {
  const apiKey = 'YOUR_OPENAI_API_KEY'; // ご自身のAPIキーに置き換えてください
  const apiUrl = 'https://api.openai.com/v1/chat/completions';
  
  const prompt = `${name}様、いつもお世話になっております。

${request}について、進捗状況をご共有いただけますでしょうか。

お忙しいところ恐縮ですが、ご返信いただけますと幸いです。

よろしくお願いいたします。`;

  const requestBody = {
    model: 'gpt-3.5-turbo',
    messages: [
      { role: 'system', content: 'あなたは丁寧なビジネスメールを作成するアシスタントです。' },
      { role: 'user', content: prompt }
    ],
    max_tokens: 300,
    temperature: 0.7
  };

  const headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + apiKey
  };

  const options = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(requestBody),
    headers: headers,
    muteHttpExceptions: true
  };

  try {
    const response = UrlFetchApp.fetch(apiUrl, options);
    const responseCode = response.getResponseCode();
    const responseBody = response.getContentText();
    
    if (responseCode === 200) {
      const jsonResponse = JSON.parse(responseBody);
      return jsonResponse.choices[0].message.content;
    } else {
      Logger.log('メール本文生成エラー。ステータスコード: ' + responseCode);
      return '(メール本文生成に失敗しました)';
    }
  } catch (e) {
    Logger.log('メール本文生成例外: ' + e.toString());
    return '(メール本文生成中に予期せぬエラーが発生しました)';
  }
}

このスクリプトでは、generateEmailBody 関数がChatGPT APIを呼び出してメール本文を生成し、sendPersonalizedEmails 関数がその生成された本文を使ってメールを送信します。これにより、顧客一人ひとりに合わせたメールを大量に、かつ自動で送信できるようになります。

まとめ

ChatGPT APIとGASを連携させることで、これまで想像もできなかったような業務自動化が可能になります。

  • APIキーの取得方法
  • UrlFetchApp を使ったAPI呼び出しの基本
  • 具体的なコード例

これらを理解すれば、皆さんのGASスキルの幅が大きく広がり、日々の業務効率を劇的に改善できるはずです。

ぜひ、今回ご紹介した内容を参考に、ご自身の業務に合ったChatGPT API連携を試してみてください!

次回もお楽しみに!

---

GAS自動化の導入相談

請求書PDF作成、Gmail自動送信、Slack通知、スプレッドシート連携などを業務に合わせて実装できます。

請求書自動生成ツールを見る / SNS自動投稿ツールを見る