GASでA列の情報を参照して、B列にAIで出力したデータを記載の自動化する方法|【業務効率化ラボ】業務効率化

GASでA列の情報を参照して、B列にAIで出力したデータを記載の自動化する方法

GoogleスプレッドシートのA列にあるお題(例:ブログタイトル)を基に、GASとChatGPT APIを連携させて、B列にAIが生成した文章(例:導入文)を自動で出力するスクリプトを紹介します。

はじめに

定型的な文章作成、例えばブログの導入文、商品説明、SNSの投稿文などを大量に作成するのは、時間がかかる作業です。もし、お題やキーワードさえあれば、AIが自動で文章を生成してくれたら、業務は格段に効率化されるでしょう。

この記事では、Google Apps Script(GAS)とOpenAIのAPI(ChatGPTを動かしているAPI)を使い、スプレッドシート上でこの「文章生成の自動化」を実現する方法を、コードと手順を交えて具体的に解説します。

実現したいこと

以下のようなスプレッドシートを考えます。A列にブログ記事のタイトルが並んでいます。このタイトルを基に、AIに「読者の興味を引くような150字程度の導入文」を生成させ、B列に自動で入力することが今回のゴールです。

実行前:

AB
1記事タイトルAI生成の導入文
2GASで業務を効率化する5つの方法
3初心者向け・Pythonデータ分析入門
4リモートワークの生産性を上げる秘訣

実行後:

AB
1記事タイトルAI生成の導入文
2GASで業務を効率化する5つの方法Google Apps Script、通称GASをご存知ですか?普段お使いのGoogleサービスを自動化できる魔法のツールです。本記事では、明日からすぐに使える5つの具体的な効率化テクニックをコード付きでご紹介。あなたの定型作業をGASで終わらせましょう。
3初心者向け・Pythonデータ分析入門「データ分析」と聞くと難しそうに感じますか?Pythonを使えば、実は誰でも簡単第一歩を踏み出せます。この記事では、専門知識がない方でもつまずかないよう、環境構築から実際のデータ読み込み、可視化までを丁寧に解説します。
4リモートワークの生産性を上げる秘訣在宅勤務が広がる中、「どうも集中できない」「成果が上がらない」と悩んでいませんか?本記事では、多くのビジネスパーソンが実践している、リモート環境でもオフィス同様、あるいはそれ以上の生産性を維持するための具体的な秘訣を7つ紹介します。

準備するもの

  • Googleアカウント
  • OpenAIアカウントとAPIキー
  • OpenAI公式サイト で取得可能
  • APIは従量課金制。APIキーの管理には注意

完成コード

const API_KEY = PropertiesService.getScriptProperties().getProperty('OPENAI_API_KEY');
const API_URL = 'https://api.openai.com/v1/chat/completions';

/**
 * スプレッドシートにカスタムメニューを追加
 */
function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('🤖 AI自動生成')
    .addItem('選択範囲の導入文を生成', 'generateIntroductionForSelectedRows')
    .addToUi();
}

/**
 * 選択された行のA列を元に、B列にAI導入文を生成する
 */
function generateIntroductionForSelectedRows() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const range = sheet.getActiveRange();
  const values = range.getValues();
  const startRow = range.getRow();

  for (let i = 0; i < values.length; i++) {
    const currentRow = startRow + i;
    const title = values[i][0];
    const outputCell = sheet.getRange(currentRow, 2);

    if (title && !outputCell.getValue()) {
      try {
        const prompt = `以下のブログタイトルについて、読者の興味を引くような150字程度の導入文を作成してください。\n\nタイトル: 「${title}」`;
        const generatedText = callChatGPT(prompt);
        outputCell.setValue(generatedText);
        Utilities.sleep(1000); // API制限対策
      } catch (e) {
        console.error(`Error processing row ${currentRow}: ${e.message}`);
        outputCell.setValue(`エラー: ${e.message}`);
      }
    }
  }
}

/**
 * ChatGPT APIへリクエストを送る
 * @param {string} prompt - AIに渡すプロンプト
 * @return {string} - AIの生成結果
 */
function callChatGPT(prompt) {
  const payload = {
    model: 'gpt-3.5-turbo',
    messages: [
      {
        role: 'system',
        content: 'あなたはプロの編集者です。簡潔で魅力的な文章を生成してください。'
      },
      {
        role: 'user',
        content: prompt
      }
    ],
    max_tokens: 250,
    temperature: 0.7,
  };

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

  const response = UrlFetchApp.fetch(API_URL, options);
  const responseCode = response.getResponseCode();
  const responseBody = response.getContentText();

  if (responseCode === 200) {
    const jsonResponse = JSON.parse(responseBody);
    return jsonResponse.choices[0].message.content.trim();
  } else {
    console.error(`API Error: ${responseCode} ${responseBody}`);
    throw new Error(`APIリクエストに失敗しました。ステータスコード: ${responseCode}`);
  }
}

実行手順(初回)

  1. スプレッドシートを開く
  2. 拡張機能 > Apps Script からコードを貼り付ける
  3. 左下の「プロジェクトの設定」→「スクリプト プロパティ」→ OPENAI_API_KEY を追加
  4. 保存後、スプレッドシートに戻り、ページを再読み込み
  5. 🤖 AI自動生成 メニューが表示されたら、対象の行を選んで実行

応用アイデア

  • 要約文生成 に変更すれば、議事録の要約などに使える
  • タグ生成SEOタイトル案出力英訳 などにも応用可能
  • 定期実行したい場合は「トリガー」機能でスケジュール化もOK

まとめ

  • GASとChatGPT APIを組み合わせれば、スプレッドシート上で自然文生成が可能
  • プロンプト次第で幅広い応用ができる
  • APIキーは PropertiesService で安全に管理する
  • 「誰でも使えるメニューUI」を用意することで、チーム全体に展開しやすい
シェアしていただけると励みになります