GAS Gemini API連携の使い方|最初にやる3つとコード
※この記事にはアフィリエイト広告(PR)が含まれます。紹介したサービスへの申し込みなどで、運営者に報酬が入ることがあります。
GASとGemini APIは、①Google AI StudioでAPIキーを作る、②キーをGASの「スクリプトプロパティ」に保存する、③UrlFetchAppでGemini APIを呼び、返ってきた文章をSpreadsheetAppでセルに書き込む、の3手順でつながります。Gemini APIには無料枠があり、一部のモデルは無料でも呼び出せます。ただし無料枠に送った内容はGoogleの製品改善に使われます。仕事のデータを流すなら、有料枠に切り替えるかどうかを先に決めておきましょう(Gemini API 料金・2026年10月時点・最新は公式で確認)。
あなたに合うのはどれ?
コードを書けるか、送るデータが社外秘かどうか。この2点で、選ぶものが変わります。
| 状況 | まず選ぶもの | 最初に開くページ |
|---|---|---|
| 初心者で、まず無料で動くところを見たい | Gemini API の無料枠+この記事のコード | Google AI Studio の APIキー画面 |
| 仕事で毎日使い、顧客情報や社内文書も送る | Gemini API の有料枠(請求先アカウントを紐付ける) | Gemini API 料金 |
| コードは書きたくない。会社でWorkspaceの対象プランを契約している | スプレッドシートの AI 関数(=AI()) | AI 関数のヘルプ |
| 社内で ChatGPT の GAS 連携をすでに使っている | 今のコードの「URL・認証・返り値」の3か所を書き換える | この記事の「ChatGPT連携との違い」の表 |
無料枠はクレジットカードなしで始められるので、動作を確かめる段階に合っています。有料枠は「送ったデータを製品改善に使わない」と料金ページに書かれていて、業務データ向けです。AI 関数はコードが要りませんが、対象プランの契約が必要で、生成できるのは最初の350セルまでという制限があります(AI 関数のヘルプ)。
GASでGemini APIを使うにはどんな準備が必要?
必要なのは、Googleアカウント・Gemini APIキー・GASのプロジェクトの3つです。
Gemini APIキーは、裏側で必ずGoogle Cloudのプロジェクトにひもづきます。
「Every Gemini API key is associated with a Google Cloud project」(Gemini API キーの使い方)
訳すと「Gemini APIキーはすべて、どれかのGoogle Cloudプロジェクトにひもづいている」。料金の請求も使える回数の上限も、このプロジェクトの単位で管理されます。とはいえ、Google Cloudのコンソールを自分で操作しなくても、Google AI Studio側でキーを作ればプロジェクトは用意されます。
| 準備するもの | どこで用意するか | 費用 |
|---|---|---|
| Googleアカウント | 個人の Gmail でも Workspace のアカウントでもよい | 無料 |
| Gemini APIキー | Google AI Studio | 無料枠あり |
| GASのプロジェクト | スプレッドシートの「拡張機能」→「Apps Script」 | 無料 |
| 請求先アカウント(有料枠を使う場合だけ) | Google AI Studio または Google Cloud | 使った分だけ |
会社のWorkspaceアカウントで作業する場合は、管理者の設定によってGoogle AI StudioやApps Scriptが使えないことがあります。開けないときは、情報システム担当に「Google AI Studio と Apps Script の利用が許可されているか」を聞いてください。
GASそのものが初めてなら、ChatGPTとつなぐ版の ChatGPT GAS自動化、始め方の3手順 にエディタの開き方を書いています。どちらのAIでも、GAS側の操作は同じです。
Gemini APIキーの取得手順は?
Google AI Studioの「API Keys」画面で「Create API key」を押せば、キーが発行されます。
表記は2026年10月時点の公式ドキュメントのものです。画面の言語が日本語なら訳された表記になります。
- Google AI Studio の API Keys ページ を開き、Googleアカウントでログインする
- 初めてのときは利用規約が表示されるので、確認して同意する
- 「Create API key」を押す
- キーを入れるプロジェクトを選ぶ。既存のGoogle Cloudプロジェクトを使うときは「Import projects」で読み込む
- 表示されたキーをコピーし、次の手順でGASに貼るまで手元のメモ帳などに一時的に置いておく
キーの扱いについては、公式に3つの注意があります(Gemini API キーの使い方)。キーはパスワードと同じように人に見せないこと。本番ではブラウザ側(クライアント側)に埋め込まないこと。本番運用ではGoogle Cloudの Secret Manager の利用を検討すること、の3つです。キーの画面には「Add restrictions」があり、使えるAPIを絞る制限もかけられます。
つまずきやすい所
- キーをチャットやメールに貼ってしまった:API Keys の画面からそのキーを削除し、作り直してください。漏れたキーで他人に使われると、有料枠では請求があなたに来ます。
- 会社アカウントで「Create API key」が押せない:組織のポリシーで止められている場合があります。個人アカウントで試すか、管理者に相談しましょう。
- プロジェクトを複数作ってしまった:無料枠の上限はプロジェクトごとに決まります。どのキーがどのプロジェクトのものか、名前で見分けられるようにしておくと後で困りません。
GASのスクリプトプロパティにAPIキーを安全に保存する方法は?
キーはコードに直接書かず、「プロジェクトの設定」の「スクリプト プロパティ」に保存します。
コードにキーを書くと、スプレッドシートを共有した相手やコードをコピーした人にもキーが見えてしまいます。スクリプトプロパティならコードの外に置けて、PropertiesService で読み込めます。公式の手順は次の5段です(Properties Service ガイド)。
- Apps Script のプロジェクトを開く
- 左の歯車アイコン「プロジェクトの設定」(Project Settings)を押す
- 「スクリプト プロパティ」の欄で「スクリプト プロパティを追加」(Add script property)を押す。2つ目からは「スクリプト プロパティを編集」
- 「プロパティ」に
GEMINI_API_KEY、「値」にコピーしたキーを貼る - 「スクリプト プロパティを保存」(Save script properties)を押す
コードからはこう読み込みます。
const apiKey = PropertiesService.getScriptProperties().getProperty('GEMINI_API_KEY');
画面から手で足せるプロパティは50個まで。値1つは9KBまでで、1つの保存先の合計は500KBまでです(Apps Script の割り当て・2026年10月時点)。APIキーなら1つで十分に収まります。
つまずきやすい所
getPropertyが null を返す:プロパティ名の打ち間違いが一番多い原因です。GEMINI_API_KEYとGEMINI_APIKEYのように1文字違うだけで読めません。前後に空白が入っていないかも見てください。- スクリプトプロパティは編集者全員に見える:スプレッドシートの編集権限がある人は、Apps Scriptを開けばキーを見られます。共有範囲が広いシートでは、キー専用のスクリプトを分けるか、有料枠のキーに利用上限をかけておくと安心です。
GASからGemini APIを呼び出すコードの書き方は?
UrlFetchApp.fetch でGemini APIの generateContent のURLにPOSTし、返ってきたJSONから文章を取り出します。
URL・送るJSON・返り値の形は generateContent リファレンス と テキスト生成のガイド に沿っています。コード先頭の MODEL には、モデル一覧 で今提供されているモデル名を入れてください。モデルは入れ替わりが早く、提供が終わった名前を書くと404エラーになります。下のコードの gemini-2.5-flash は書き方の例です。
手順:コードを貼って動かす
- スプレッドシートの「拡張機能」→「Apps Script」を開く
- 最初からある
function myFunction() {}を消して、下のコードを貼る MODELの値を、モデル一覧と料金ページで確かめたモデル名に書き換える- フロッピーのアイコン(プロジェクトを保存)を押す
- 上の関数の選択欄で
testGeminiを選び、「実行」を押す - 初回は「承認が必要です」と出るので「権限を確認」→ 自分のアカウントを選ぶ。「このアプリは Google で確認されていません」と出たら「詳細」→「(プロジェクト名)(安全ではないページ)に移動」→「許可」
- 下の「実行ログ」にGeminiの回答が出れば成功です
// 使うモデル(例)。モデル一覧で現行の名前を、料金ページで無料枠の有無を確認してから決める
const MODEL = 'gemini-2.5-flash';
function callGemini(prompt) {
const apiKey = PropertiesService.getScriptProperties().getProperty('GEMINI_API_KEY');
if (!apiKey) {
throw new Error('スクリプトプロパティ GEMINI_API_KEY が設定されていません');
}
const url = 'https://generativelanguage.googleapis.com/v1beta/models/'
+ MODEL + ':generateContent';
const options = {
method: 'post',
contentType: 'application/json',
headers: { 'x-goog-api-key': apiKey },
payload: JSON.stringify({
contents: [{ parts: [{ text: prompt }] }]
}),
muteHttpExceptions: true
};
const res = UrlFetchApp.fetch(url, options);
const code = res.getResponseCode();
const body = JSON.parse(res.getContentText());
if (code !== 200) {
const msg = body.error ? body.error.message : res.getContentText();
throw new Error('Gemini API エラー ' + code + ': ' + msg);
}
const cand = body.candidates && body.candidates[0];
if (!cand || !cand.content) {
const reason = body.promptFeedback ? body.promptFeedback.blockReason : '不明';
throw new Error('回答が返りませんでした(blockReason: ' + reason + ')');
}
return cand.content.parts.map(p => p.text || '').join('');
}
function testGemini() {
Logger.log(callGemini('GASとは何かを1文で説明してください。'));
}
キーはURLに付けず、x-goog-api-key というヘッダーで送っています。公式の例もこの形です(Gemini API キーの使い方)。muteHttpExceptions: true を付けたのは、失敗したときにGASがすぐ止まらず、エラーの中身を受け取れるようにするためです(UrlFetchApp リファレンス)。この指定がないと、エラーになってもGoogle側が返した理由の文章が見えません。
回答が返ってこなかったときは promptFeedback.blockReason を読みます。安全フィルタで止められた場合には、ここに SAFETY などの理由が入る仕様です(generateContent リファレンス)。
Geminiの回答をスプレッドシートに出力する手順は?
A列の文章を1行ずつGeminiに送り、返ってきた答えをB列に書き込む関数を足せば完成です。
たとえば「A列に問い合わせ文、B列に3行の要約」というシートを考えてみます。1行目は見出し行とします。
- シートの名前を「シート1」にする(下のコードの名前と合わせる)
- A1に「問い合わせ」、B1に「要約」と入れ、A2から下に文章を入れる
- 前の見出しのコードの下に、次の
summarizeRowsを貼って保存する - 関数の選択欄で
summarizeRowsを選んで「実行」
function summarizeRows() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1');
const lastRow = sheet.getLastRow();
if (lastRow < 2) return;
const values = sheet.getRange(2, 1, lastRow - 1, 2).getValues();
values.forEach((row, i) => {
const text = row[0];
const done = row[1];
if (text && !done) { // B列が空の行だけ処理する
const answer = callGemini('次の問い合わせを3行で要約してください。\n\n' + text);
sheet.getRange(i + 2, 2).setValue(answer);
Utilities.sleep(1000); // 1分あたりの回数制限に当たりにくくする
}
});
}
「B列が空の行だけ」に絞ったのは、途中で止まっても、もう一度実行すれば続きから処理できるようにするためです。同じ行を何度も送らずに済むので、無料枠の回数も料金も節約できます。
自分のシートに合わせて変える所
| 変えたいこと | 直す場所 |
|---|---|
| シート名が違う | getSheetByName('シート1') の中 |
| 要約ではなく分類・翻訳にしたい | callGemini( に渡す指示文 |
| 結果をC列に出したい | getRange(2, 1, lastRow - 1, 2) の最後を 3 に、getRange(i + 2, 2) を 3 に、row[1] を row[2] に |
| 毎朝自動で動かしたい | 左の時計アイコン「トリガー」→「トリガーを追加」で、時間主導型を選ぶ |
つまずきやすい所
GASには時間の上限があります。1回の実行は6分まで。セルに =関数名() と書いて呼ぶ「カスタム関数」は30秒までです(Apps Script の割り当て・2026年10月時点)。
何百行もあるシートを一度に回すと、6分で「実行時間の上限を超えました」となって止まります。上のコードはB列が空の行だけを処理するので、止まったらもう一度実行してください。毎回止まるほど行数が多いなら、トリガーで10分おきに動かすのが手軽です。
セルに =GEMINI(A2) のように書くカスタム関数も作れます。ただ、30秒の上限に加えて、シートを開くたびや再計算のたびにAPIが呼ばれやすい。回数がかさみやすいので、最初はボタンやメニューから実行する形をおすすめします。
GAS×Gemini APIとGAS×ChatGPT APIの違いは?
GAS側の書き方はほぼ同じです。違うのはURL・キーの渡し方・返ってくるJSONの形の3つで、そこだけ書き換えればつながります。
ChatGPT GAS自動化、始め方の3手順 のコードを持っている人は、下の表と見比べてください。
| 比べる所 | Gemini API(generateContent) | OpenAI API(Responses) |
|---|---|---|
| キーを作る場所 | Google AI Studio | OpenAI の管理画面 |
| URL | https://generativelanguage.googleapis.com/v1beta/models/モデル名:generateContent | https://api.openai.com/v1/responses |
| キーの渡し方 | ヘッダー x-goog-api-key: キー | ヘッダー Authorization: Bearer キー |
| モデル名を書く場所 | URLの中 | 送るJSONの model |
| 送るJSON | {"contents":[{"parts":[{"text":"…"}]}]} | {"model":"…","input":"…"} |
| 文章がある場所 | candidates[0].content.parts[].text | output[].content[].text |
| 無料で試せる枠 | 料金ページに Free Tier あり | 料金は公式で確認 |
出典は Gemini API キーの使い方、generateContent リファレンス、OpenAI Responses API リファレンス(いずれも2026年10月時点)。
書き換えで一番間違えやすいのは「モデル名を書く場所」です。OpenAI版はJSONの中に model を書きますが、Gemini版はURLの中に入ります。ChatGPT版のpayloadから model を消し忘れても動くことはありますが、URL側のモデル名を入れ忘れると404になります。
- Geminiが向いている人:Googleのサービスだけで完結させたい人。無料枠で動作確認から始めたい人
- Geminiが向いていない人:社内で使うAIがChatGPTに決まっていて、ほかの部署とプロンプトや結果を共有したい人
- 注意点:Gemini APIのキーと、Geminiアプリやスプレッドシートの AI 関数の契約は別物です。Google AI Pro などの契約があっても、APIの料金は別に請求されます
チャットで使うAIの選び方は ChatGPT Claude Copilot使い分けの基準 にまとめています。
Gemini APIの無料利用枠はどこまで?
無料枠で使えるのは一部のモデルだけで、回数に上限があり、送った内容はGoogleの製品改善に使われます。
どのモデルが無料枠の対象かは、料金ページ の各モデルの「Free Tier」の欄で確認できます。上位のモデルや画像生成などは無料枠の対象外のことがあり、対象や単価は改定されることがあります。GASで使う前に、MODEL に書くモデルの欄を必ず見てください。単価は100万トークンあたりのドル建てで、入力と出力で別々に書かれています。
無料枠と有料枠の違い
| 比べる所 | 無料枠(Free) | 有料枠(Paid) |
|---|---|---|
| 始め方 | キーを作るだけ | 請求先アカウントをプロジェクトに紐付ける |
| 送った内容の扱い | 製品改善に使われる | 製品改善に使われない |
| 回数の上限 | 低め。値は AI Studio で確認 | 高い。支払い額に応じて上がる |
| Batch API(50%割引) | なし | あり |
出典:Gemini API 料金。
回数の上限は、1分あたりの回数(RPM)、1分あたりの入力トークン数(TPM)、1日あたりの回数(RPD)の3種類で決まります。1日の回数は太平洋時間の0時にリセットされます。日本時間なら夏時間の間は16時、それ以外は17時です。無料枠の具体的な数字は公式ドキュメントには書かれておらず、「AI Studio で確認できる」と案内されています(レート制限・2026年10月時点)。
有料枠は4段階あります。
| 段階 | 条件 |
|---|---|
| Free | 有効なプロジェクトがある |
| Tier 1 | 請求先アカウントを設定して紐付ける |
| Tier 2 | 合計100ドル以上を支払い、最初の支払いから3日たつ |
| Tier 3 | 合計1,000ドル以上を支払い、最初の支払いから30日たつ |
出典:レート制限(2026年10月時点)。
GAS側にも上限があります。外部へのアクセス(URL Fetch)は、個人のGoogleアカウントで1日20,000回、Workspaceで1日100,000回までです(Apps Script の割り当て)。たいていの場合、先にGemini側の上限に当たります。
顧客名・社員の情報・未公開の数字を送るなら、最初から有料枠にしてください。公開済みの文章の要約や練習用のデータなら、無料枠で十分です。
連携時によく出るエラーとその対処法は?
エラーの多くは、キーの設定ミス(403)・モデル名の誤り(404)・回数の上限(429)の3つです。
実行ログに出る数字を見て、下の表で原因を探してください。
| ログの数字 | 意味 | 直し方 |
|---|---|---|
| 400 INVALID_ARGUMENT | 送ったJSONの形や設定値がおかしい | contents の綴り、temperature などの値の範囲、URLの v1beta を確認 |
| 400 FAILED_PRECONDITION | 前提条件を満たしていない | 無料枠の対象か、請求先の設定を確認 |
| 403 PERMISSION_DENIED | キーが無効、または権限がない | キーをコピーし直してスクリプトプロパティを上書き。キーの制限設定も確認 |
| 404 NOT_FOUND | モデル名が存在しない・提供が終わった | MODEL の値をモデル一覧と見比べる |
| 429 RESOURCE_EXHAUSTED | 回数の上限に達した | 時間をおく。Utilities.sleep の秒数を増やす。有料枠を検討 |
| 500 / 503 / 504 | Google側の一時的な不具合や混雑 | 少し待ってから再実行 |
出典:Gemini API トラブルシューティング(2026年10月時点)。
公式は、429に対して「指数バックオフ」を勧めています。待ち時間を1秒、2秒、4秒と倍にしながら再試行するやり方です。GASなら、callGemini を呼ぶ所を次のように包めば実現できます。
function callGeminiWithRetry(prompt) {
let wait = 1000;
for (let i = 0; i < 4; i++) {
try {
return callGemini(prompt);
} catch (e) {
if (!/エラー (429|500|503|504)/.test(e.message) || i === 3) throw e;
Utilities.sleep(wait);
wait *= 2;
}
}
}
数字が出ないエラー
- 「Exception: 次のアクションを実行する権限がありません」:初回の承認をしていないか、途中で取り消しています。もう一度「実行」して、承認の画面で「許可」を押してください。
- 「回答が返りませんでした(blockReason: SAFETY)」:この記事のコードが出すメッセージで、安全フィルタに止められたという意味です。指示文の言い方を変えるか、送る文章から問題になりそうな部分を外します。
OTHERの場合は利用規約に触れている可能性がある、と公式は説明しています。 - 「SyntaxError: Unexpected token」:JSONではない返事(HTMLのエラー画面など)を
JSON.parseしようとして起きます。URLの打ち間違いを疑ってください。
エラーの意味をAIに聞くのも手です。ログの文章をそのままGeminiやClaudeに貼って「GASでこのエラーが出た。原因と直し方は?」と聞けば、どこを見ればよいか見当がつきます。コードを書く作業をAIに手伝わせる流れは、Claude Code使い方|無料の範囲と料金表・導入7手順 でも説明しています。
次にやること
今日やるのは2つだけ。Google AI StudioでAPIキーを1つ作ることと、testGemini を実行してログに回答が出るのを見ることです。
自分でやる人の今日の一歩
- Google AI Studio の API Keys ページ で「Create API key」を押す
- 練習用のスプレッドシートを新しく作り、この記事のコードを貼って
MODELを確認し、testGeminiを実行する - 動いたら、A列に公開済みの文章を5行ほど入れて
summarizeRowsを試す。社外秘のデータはまだ入れない
自分でやるのが大変・早く確実にしたい人
| 選択肢 | 費用(2026年10月時点・最新は公式で確認) | 向いている人 | 向いていない人 |
|---|---|---|---|
| Gemini API の有料枠 | 使った分だけ。モデルごとの単価は料金ページで確認 | 業務データを送る人。回数の上限に何度も当たる人 | 月に数回しか動かさない人 |
| スプレッドシートの AI 関数 | 対象の Workspace / Google AI のプラン料金(ヘルプ) | コードを書かずにセルで要約・分類したい人 | 350セルを超える量を一度に処理したい人 |
| AIやプログラミングの講座 | 講座による | GASを体系的に学び、仕事の仕組みづくりまでやりたい人 | 今すぐ1つの作業を自動化したいだけの人 |
有料枠のデメリットは、使った分だけ請求が来ることです。トリガーの設定ミスで同じ処理が繰り返されると、気づかないうちに回数が増えます。有料枠に切り替えたら、Google Cloudの予算アラートを設定しておくと安心です。講座を選ぶなら、給付金の対象かどうかで絞る方法を AIスクール比較、給付金対象で絞る3つの軸 に書いています。
このサイトの関連記事
- ChatGPT GAS自動化、始め方の3手順:同じ自動化をChatGPTで組む場合
- ChatGPT Claude Copilot使い分けの基準:仕事で使うAIの決め方
- Claude Code使い方|無料の範囲と料金表・導入7手順:コードをAIに書かせる方法
- AIスクール比較、給付金対象で絞る3つの軸:学んで仕事にしたい人向け
よくある質問
GASでGemini APIを使うのにクレジットカードは必要?
無料枠だけで使うなら要りません。Google AI StudioでAPIキーを作れば、無料枠のあるモデルを呼び出せます。カードが必要になるのは、請求先アカウントを紐付けて有料枠(Tier 1以上)に上げるときです。
無料枠で会社のデータを送っても大丈夫?
おすすめしません。料金ページには、無料枠のデータが製品改善に使われると書かれています。顧客情報や社内の数字を扱うなら有料枠に切り替え、あわせて社内のルールも確認してください。
モデル名は何を書けばいい?
モデル一覧 に載っている現行のモデル名を書き、料金ページ で無料枠の有無と単価を確かめてください。この記事のコードの gemini-2.5-flash は書き方の例です。モデルは入れ替わりが早く、提供が終わると404エラーになります。半年に1回ほど見直すと安心です。
セルに =GEMINI(A2) と書いて使えますか?
カスタム関数として作れば使えます。ただし1回30秒の上限があり、再計算のたびにAPIが呼ばれて回数を使いやすくなります。最初はこの記事の summarizeRows のように、実行ボタンやトリガーから動かす形にしてください。
出典
- Gemini API キーの使い方(Google AI for Developers)
- Gemini API 料金(Google AI for Developers)
- Gemini API レート制限(Google AI for Developers)
- Gemini モデル一覧(Google AI for Developers)
- テキスト生成(Google AI for Developers)
- generateContent リファレンス(Google AI for Developers)
- Gemini API トラブルシューティング(Google AI for Developers)
- Properties Service ガイド(Google Apps Script)
- Apps Script の割り当て(Google Apps Script)
- UrlFetchApp リファレンス(Google Apps Script)
- Google スプレッドシートの AI 関数(Google ドキュメント エディタ ヘルプ)
- Responses API リファレンス(OpenAI)
- Google AI Studio API Keys
次に検討するなら(PR)
- バイテック生成AI(生成AIのオンラインスクール・無料説明会) — 生成AIを仕事で使う力を学ぶオンラインスクール。説明会で内容を確かめられます
- バイテックGEEK(Claude Code 特化のオンラインAIプログラミングスクール・無料説明会) — Claude Code を使った開発を学ぶオンラインスクール。説明会で内容を確かめられます
内容の誤りや古くなった情報に気づいたら、shigoto.ai.note@gmail.com までお知らせください。記事は順番に公式の情報で確かめ直しています。