
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列に自動で入力することが今回のゴールです。
実行前:
A | B | |
---|---|---|
1 | 記事タイトル | AI生成の導入文 |
2 | GASで業務を効率化する5つの方法 | |
3 | 初心者向け・Pythonデータ分析入門 | |
4 | リモートワークの生産性を上げる秘訣 |
実行後:
A | B | |
---|---|---|
1 | 記事タイトル | AI生成の導入文 |
2 | GASで業務を効率化する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}`);
}
}
実行手順(初回)
- スプレッドシートを開く
拡張機能 > Apps Script
からコードを貼り付ける- 左下の「プロジェクトの設定」→「スクリプト プロパティ」→
OPENAI_API_KEY
を追加 - 保存後、スプレッドシートに戻り、ページを再読み込み
🤖 AI自動生成
メニューが表示されたら、対象の行を選んで実行
応用アイデア
要約文生成
に変更すれば、議事録の要約などに使えるタグ生成
、SEOタイトル案出力
、英訳
などにも応用可能- 定期実行したい場合は「トリガー」機能でスケジュール化もOK
まとめ
- GASとChatGPT APIを組み合わせれば、スプレッドシート上で自然文生成が可能
- プロンプト次第で幅広い応用ができる
- APIキーは
PropertiesService
で安全に管理する - 「誰でも使えるメニューUI」を用意することで、チーム全体に展開しやすい