
雑記
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キーを安全に保管する
- 以下のコードを全てコピーして、空のスクリプトエディタ画面に貼り付けてください。コードを貼り付けたら、フロッピーディスクのアイコン(プロジェクトを保存)をクリックして保存します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
/** * スプレッドシートを開いたときにカスタムメニューを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学習対象となっているため機密情報、個人情報の取扱には十分注意しましょう。