雑記
GeminiAPI × GAS で文章生成ジェネレーター作ってみた
わら
公開日:2025/06/27
最近になって、ようやくGeminiを触ってみました。
せっかくなので、Gemini APIを使って何か作れないかと思い、試験的に「文章生成ジェネレーター」を作ってみました。
APIキーを取得する方法
APIキーを取得する方法は、大きく分けて2つあります。
| 方法A:Google Cloud Platform | 方法B:Google AI Studio | |
| クレジットカード登録 | 原則として必要 | 不要 |
| 設定の複雑さ | やや複雑(プロジェクト作成、請求先設定など) |
簡単(ログインしてボタンを押すだけ)
|
| 得られるAPIキー | 同じもの(無料枠も同じ) | 同じもの(無料枠も同じ) |
| おすすめな人 | 本格的にCloudの他サービスも使う企業 |
手軽にAPIを試したい個人・開発者
|
GeminiAPIでは Gemini 1.5 Flash を無料で利用できます。(2025-06-26時点)
https://ai.google.dev/gemini-api/docs/pricing?hl=ja
「Google Cloud Platform」はクレジットカードの登録が必要だったり、設定が複雑とのことなので、
今回は「Google AI Studio」を使います。
Google AI Studioを使いましょう
ステップ1:Google AI Studioにアクセスする
ウェブブラウザで、以下のURLにアクセスします。
https://aistudio.google.com/
Googleアカウントでのログインを求められたら、普段お使いのアカウントでログインしてください。
ステップ2:APIキーを作成する
画面の右上にある「API キーを取得」というボタンをクリックします。
開いた画面で、「新しいAPIキーを作成」というボタンをクリックします。
すぐにAPIキー(長い文字列)が生成されます。右側にあるコピーアイコンをクリックして、キーをコピーし、メモ帳などに貼り付けておきましょう。
Gemini × GASで「SNS投稿ジェネレーター」を作る
今回は、SNSで投稿する文章を生成してくれるシステムを作ります。
- スプレッドシートのメニューから「拡張機能」>「Apps Script」を選択します。
- 新しいタブでスクリプトエディタが開きます。既存のコード(function myFunction() {…})は全て削除してください。
- APIキーを安全に保管する
- 以下のコードを全てコピーして、空のスクリプトエディタ画面に貼り付けてください。コードを貼り付けたら、フロッピーディスクのアイコン(プロジェクトを保存)をクリックして保存します。
/**
* スプレッドシートを開いたときにカスタムメニューをUIに追加します。
*/
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('? Geminiメニュー')
.addItem('キャッチコピーとハッシュタグを生成', 'generateContents')
.addToUi();
}
/**
* シートの情報を基に、Gemini APIを呼び出してキャッチコピーとハッシュタグを生成し、シートに書き込みます。
*/
function generateContents() {
// --- 1. スプレッドシートから情報を取得 ---
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const sns = sheet.getRange('B3').getValue();
const theme = sheet.getRange('B4').getValue();
const target = sheet.getRange('B5').getValue();
const point = sheet.getRange('B6').getValue();
const tone = sheet.getRange('B7').getValue();
// 商材/テーマが入力されているかチェック
if (!theme) {
SpreadsheetApp.getUi().alert('「商材/テーマ」(セルB4) を入力してください。');
return; // 処理を中断
}
// --- 2. Geminiに送る指示(プロンプト)を作成 ---
const prompt = `
あなたはプロのSNSマーケターです。
以下の情報をもとに、SNS投稿用のキャッチコピー案とハッシュタグ案を具体的に提案してください。
# 投稿情報
- SNSの種類:${sns}
- 商材/テーマ:${theme}
- ターゲット:${target}
- 伝えたいこと:${point}
- 希望するトーン:${tone}
# 出力形式
## キャッチコピー案 (5つ)
・
・
・
・
・
## ハッシュタグ案 (10個)
# # #
`;
// --- 3. Gemini APIを呼び出す準備 ---
// スクリプトプロパティから安全にAPIキーを取得
const apiKey = PropertiesService.getScriptProperties().getProperty('GEMINI_API_KEY');
if (!apiKey) {
SpreadsheetApp.getUi().alert('APIキーが設定されていません。スクリプトエディタの「プロジェクトの設定」からスクリプトプロパティ「GEMINI_API_KEY」を設定してください。');
return; // 処理を中断
}
const url = `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash-latest:generateContent?key=${apiKey}`;
const payload = {
"contents": [{
"parts": [{
"text": prompt
}]
}]
};
const options = {
'method': 'post',
'contentType': 'application/json',
'payload': JSON.stringify(payload),
'muteHttpExceptions': true // エラーが発生してもスクリプトを止めずに情報を取得する
};
// --- 4. API実行と結果の書き込み ---
// 実行中であることをユーザーに知らせる
sheet.getRange('B11').setValue('生成中...');
sheet.getRange('B12').setValue('生成中...');
SpreadsheetApp.flush(); // シートの表示を即時更新
try {
const response = UrlFetchApp.fetch(url, options);
const responseCode = response.getResponseCode();
const responseBody = response.getContentText();
if (responseCode === 200) {
const result = JSON.parse(responseBody);
// 安全にテキストを抽出
const generatedText = result.candidates[0].content.parts[0].text;
// 生成されたテキストを「キャッチコピー」と「ハッシュタグ」に分割
const catchphraseMatch = generatedText.match(/## キャッチコピー案(?: \(5つ\))?([\s\S]*?)## ハッシュタグ案/);
const hashtagMatch = generatedText.match(/## ハッシュタグ案(?: \(10個\))?([\s\S]*)/);
const catchphrases = catchphraseMatch ? catchphraseMatch[1].trim() : 'キャッチコピー部分の取得に失敗しました。';
const hashtags = hashtagMatch ? hashtagMatch[1].trim() : 'ハッシュタグ部分の取得に失敗しました。';
// 結果をセルに書き込む
sheet.getRange('B11').setValue(catchphrases);
sheet.getRange('B12').setValue(hashtags);
} else {
// APIからエラーが返された場合
sheet.getRange('B11').setValue('APIエラー');
sheet.getRange('B12').setValue(`コード: ${responseCode}\n詳細: ${responseBody}`);
SpreadsheetApp.getUi().alert(`APIリクエストでエラーが発生しました。(コード: ${responseCode})\n詳細はセルE6を確認してください。APIキーやモデル名が正しいか確認してください。`);
}
} catch (e) {
// 通信エラーなど、API呼び出し自体に失敗した場合
sheet.getRange('B11').setValue('実行エラー');
sheet.getRange('B12').setValue(e.toString());
SpreadsheetApp.getUi().alert('スクリプトの実行中にエラーが発生しました。\n' + e.toString());
}
}
【実行】承認と動作確認
- スプレッドシートを再読み込みしてください。すると、メニューバーに「? Geminiメニュー」という新しい項目が表示されます。
- 初回実行時の「承認」
- B4〜B8セルに投稿したい内容を入力します。
- 「? Geminiメニュー」>「キャッチコピーとハッシュタグを生成」をクリックします。(↑私は「実行」ボタンに置き換えました)
- 初めて実行する際に「承認が必要です」というダイアログが表示されます。「続行」をクリックします。
- 自分のGoogleアカウントを選択します。
- 「このアプリは Google で確認されていません」 という警告画面が表示されますが、ご自身が作成した安全なスクリプトなので問題ありません。左下の「詳細」をクリックし、「(プロジェクト名)(安全でないページ)に移動」をクリックします。
- 最後に「許可」をクリックします。
- 動作確認
- 承認が終わると、スクリプトが実行されます。B11〜B12の「生成結果」の欄に「生成中…」と表示され、十数秒待つと、Geminiが考えたキャッチコピー案とハッシュタグ案が自動で入力されれば成功です!
期待できること
今回はSNS投稿ジェネレーターとして作成しましたが、普通に使えるぐらい性能に問題なかったので、今後は色々な使い方に期待できそうです。
低コストでの実現:
GASの無料利用枠とGemini APIの無料枠を活用することで、非常に安価に、あるいは無料で運用を開始できます。
Gemini APIの多機能性:
要約だけでなく、翻訳、ブレインストーミング、文章のトーン調整、アイデア出しなど、多様なAI処理を組み込めます。
業務効率化の拡張性:
用途別のフォーマット(プロンプト)を用意することで、SNS投稿、メールマガジン作成、文章校正、議事録の清書など、様々な定型業務を効率化できます。また、生成された文章の履歴を残しておけば、過去のものと比較することも可能。
トリガー機能による「完全自動化」
- 定時実行: 「毎日朝9時に最新ニュースを要約してチャットに投稿する」「毎週月曜日に週次レポートのドラフトを自動生成する」といった定期的なタスクを自動化できます。
- イベントドリブン実行: 「スプレッドシートの特定のセルが更新されたら」「フォームが送信されたら」といったイベントをきっかけに、文章生成処理を自動で実行できます。
注意点
※無料APIは、基本的にAI学習対象となっているため機密情報、個人情報の取扱には十分注意しましょう。



