【2025年6月最新】GASでGemini 2.5 ProのAPI画像とプロンプトをリクエストする方法

2025年5月にGemini 2.5 Proがアップデートされ、その飛躍的な性能向上が大きな話題を集めました。

そこで、Google Apps Script(GAS)でGemini 2.5 proのAPIを使って、テキストプロンプトをリクエストする方法、ならびに画像を入力するマルチモーダルの手順をサンプルコード付きで解説します。

Gemini 2.5 Proが2025年5月アップデート

2025年5月6日にGoogleが開発する生成AIのGemini 2.5 Proがアップデートされました。

主にコーディング機能が大幅に強化されたとGoogleが発表しています。

もともとはGoogleの開発者向けイベントである「Google I/O」で発表される予定でしたが、他のChatGPTなどのアップデートを受けて前倒しで早期アクセス版が展開されました。

コーディング機能以外にも生成AIの性能を図る色々な指標でも数値向上が見られています。

Gemini 2.5 pro 2025-05-06プレビュー版がAPI利用可能

そんな2025年5月最新のGemini 2.5 Proは、APIでも利用することができます。

※2025年5月時点では、Gemini 2.5 Proプレビュー版(5月6日)は有料でのみ利用可能です。

APIの利用方法としては、以下の2種類の方法が用意されています。

  1. Google AI Studio
  2. Vertex AI(Google Cloud Platform)

どちらでも同じようにGemini 2.5 Pro Preview 05-06をAPI経由で利用可能です。

ただ、API利用の手軽さで言えば、Google AI StudioのほうがAPIキーの発行や認証などは簡単です。

Google AI Studioを利用すれば、手軽にGeminiをAPI利用するAPIキーの発行が可能

そこで、今回はGoogle AI StudioでのGemini 2.5 Pro Preview 05-06のAPIの使い方を解説します。

GASでGeminiを使うと業務自動化に便利

Gemini 2.5 Pro Preview 05-06をAPIで利用することで、Google Apps Script(GAS)で利用できるようになります。

Google AI StudioやGeminiアプリから利用するだけでも文章生成やコード生成など便利ですが、GASと組み合わせることで業務自動化が可能です。

GASでスクレイピングした情報を生成AIに整形して、スプレッドシートなどのデータに落とし込み、メール等で通知もできます。

その他にもGoogle Analytics(GA4)などからウェブサイトのKPIとなるアクセス数値を取得して、グラフなどのレポートデータとしてGoogleスライドを自動生成することも可能です。

GASによってGemini 2.5 ProをAIエージェントとしてフローに組み込み業務自動化が実現できます。

Gemini 2.5 pro最新版のエンドポイントURL

Googleの生成AI、GeminiをAPIで利用する際の注意ポイントは、エンドポイントURLです。

Gemini flashやGemini Proなど各種モデルをAPIで利用する場合は、モデルによってエンドポイントURLが変更されます。

特にGeminiは1.0→1.5→2.0→2.5と2年弱で何度もアップデートされてきたため、古いバージョンのGemini Proなどは利用できなくなっています。

現在最新の「Gemini 2.5 Pro Preview 05-06」のモデルにおけるAPIのエンドポイントURLは以下の通りです。

https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro-preview-05-06:generateContent

Geminiに最新モデルのエンドポイントURLを尋ねても出てこないことが多いので、上記を覚えておきましょう。

modelsのあとにある「gemini-(バージョン[2.5])-(モデルレベル[pro])-(preview)-(日付[05-06])」というルールを覚えておくと新しいバージョンが出てきても対応可能です。

GASでGemini 2.5 proのAPIリクエストする方法

前述した2025年5月時点で最新のGemini 2.5 ProのAPIエンドポイントURLを使って、Google Apps Script(GAS)でGemini 2.5 ProのAPIにリクエストしてみます。

テキストプロンプトのみリクエストする方法と、テキストプロンプトと画像を組み合わせたマルチモーダル入力の方法を、GASのサンプルコードで解説します。

どちらもGoogle AI StudioからAPIキーを発行する必要があるので、事前にAPIキーを取得しておきましょう。

Gemini 2.5 Proの2025年5月6日のプレビュー版は無料APIとしては利用できず、利用するたびに従量料金が発生する有料でのみ利用可

前述した通り、2025年5月31日時点ではGemini 2.5 Proの2025年5月6日プレビュー版は無料では提供されていません。

プランがFreeのAPIキーではGemini 2.5 Pro-preview-05-06は利用できず、少なくともTier1以上が必要です。

テキストプロンプトのみのGASサンプルコード

まずはGemini 2.5 Pro preview-05-06にテキストプロンプトのみリクエストします。

以下がGoogle Apps Script(GAS)のサンプルコードです。

// Gemini APIのエンドポイントURLを定数として定義
const GEMINI_API_ENDPOINT = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro-preview-05-06:generateContent';

/**
 * Gemini APIを呼び出してテキストを生成する
 * @param {string} promptText Geminiに送信するプロンプト
 * @param {string} apiKey Gemini APIキー
 * @return {string|null} 生成されたテキスト、またはエラーの場合はnull
 */
function callGeminiApi(promptText, apiKey) {
  // APIのURLにAPIキーを付加してフェッチするURLを作成
  const url = `${GEMINI_API_ENDPOINT}?key=${apiKey}`;
  // APIに送信するデータを構築
  const payload = {
    "contents": [
      {
        "parts": [
          { "text": promptText }  // プロンプトテキストを設定
        ]
      }
    ],
    "generationConfig": {
      "temperature": 0.3,        // 生成のランダム性を制御(低いほど一貫性のある回答)
      "maxOutputTokens": 4096    // 生成されるテキストの最大長
    }
  };

  // APIリクエストの設定を定義
  const options = {
    'method': 'post',           // HTTPメソッドをPOSTに設定
    'contentType': 'application/json',  // コンテンツタイプをJSONに設定
    'payload': JSON.stringify(payload),  // ペイロードをJSON文字列に変換
    'muteHttpExceptions': true  // エラー時もレスポンスを取得するように設定
  };

  try {
    // APIにリクエストを送信
    const response = UrlFetchApp.fetch(url, options);
    // レスポンスのステータスコードを取得
    const responseCode = response.getResponseCode();
    // レスポンスの本文を取得
    const responseBody = response.getContentText();

    if (responseCode === 200) {  // リクエストが成功した場合
      // レスポンスをJSONとして解析
      const jsonResponse = JSON.parse(responseBody);
      // レスポンスの構造を確認し、テキストが存在するかチェック
      if (jsonResponse.candidates && jsonResponse.candidates.length > 0 &&
          jsonResponse.candidates[0].content && jsonResponse.candidates[0].content.parts &&
          jsonResponse.candidates[0].content.parts.length > 0 && jsonResponse.candidates[0].content.parts[0].text) {
        // 生成されたテキストを返す
        return jsonResponse.candidates[0].content.parts[0].text;
      } else {
        // レスポンスの形式が不正な場合のエラーログ
        console.log("Gemini APIレスポンスの形式が予期したものと異なります。Response: " + responseBody);
        return null;
      }
    } else {
      // APIリクエストが失敗した場合のエラーログ
      console.log(`Gemini APIリクエストエラー: ${responseCode}\nResponse: ${responseBody}`);
      return null;
    }
  } catch (e) {
    // 例外が発生した場合のエラーログ
    console.log("Gemini API呼び出し中に例外が発生しました: " + e.toString());
    return null;
  }
}

//Gemini APIを実行する関数(テキストのみ)
function executeGeminiTextPrompt() {
  // 固定のプロンプトテキストを定義
  const promptText = "あなたができることは何ですか?";
  
  // スクリプトプロパティからAPIキーを取得
  const apiKey = PropertiesService.getScriptProperties().getProperty('GEMINI_API_KEY');
  
  // APIキーが設定されていない場合はエラー
  if (!apiKey) {
    console.log('エラー: GEMINI_API_KEYがスクリプトプロパティに設定されていません。');
    return;
  }
  
  // Gemini APIを呼び出して結果を取得
  const result = callGeminiApi(promptText, apiKey);
  
  // 結果をログ出力
  console.log('Gemini APIの応答結果:\n' + result);
}

こちらの実行するにはスクリプトプロパティにGeminiのAPIキーを設定する必要があります。

Google Apps Script(GAS)でGemini 2.5 ProをAPI利用するにはAPIキーをスクリプトプロパティに設定するのがオススメ

スクリプトプロパティを設定後、executeGeminiTextPromptの関数を実行すると、初回認証を実行した上で、APIリクエストが実行されます。

Google Apps Script(GAS)でGemini 2.5 Pro-preview-05-06にリクエストし、応答結果をログ出力

このようにGemini 2.5 Proにテキストプロンプトをリクエストして、応答結果をログ出力できました。

プロンプト+画像のマルチモーダルのGASサンプルコード

続いて、テキストプロンプトに加えて、画像も入力するマルチモーダルのGoogle Apps Script(GAS)のサンプルコードです。

// Gemini APIのエンドポイントURLを定数として定義
const GEMINI_API_ENDPOINT = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro-preview-05-06:generateContent';

/**
 * Gemini APIを呼び出して画像とテキストから応答を生成する
 * @param {string} promptText Geminiに送信するプロンプト
 * @param {string} base64ImageData Base64エンコードされた画像データ
 * @param {string} mimeType 画像のMIMEタイプ (例: "image/jpeg", "image/png")
 * @param {string} apiKey Gemini APIキー
 * @return {string|null} 生成されたテキスト、またはエラーの場合はnull
 */
function callGeminiImageApi(promptText, base64ImageData, mimeType, apiKey) {
  // APIのURLにAPIキーを付加してフェッチするURLを作成
  const url = `${GEMINI_API_ENDPOINT}?key=${apiKey}`;
  // APIに送信するデータを構築
  const payload = {
    "contents": [
      {
        "parts": [
          { "text": promptText },  // プロンプトテキストを設定
          {
            "inlineData": {
              "mimeType": mimeType,  // 画像のMIMEタイプを設定
              "data": base64ImageData  // Base64エンコードされた画像データを設定
            }
          }
        ]
      }
    ],
    "generationConfig": {
      "temperature": 0.3,        // 生成のランダム性を制御(低いほど一貫性のある回答)
      "maxOutputTokens": 4096    // 生成されるテキストの最大長
    }
  };

  // APIリクエストの設定を定義
  const options = {
    'method': 'post',           // HTTPメソッドをPOSTに設定
    'contentType': 'application/json',  // コンテンツタイプをJSONに設定
    'payload': JSON.stringify(payload),  // ペイロードをJSON文字列に変換
    'muteHttpExceptions': true  // エラー時もレスポンスを取得するように設定
  };

  try {
    // APIにリクエストを送信
    const response = UrlFetchApp.fetch(url, options);
    // レスポンスのステータスコードを取得
    const responseCode = response.getResponseCode();
    // レスポンスの本文を取得
    const responseBody = response.getContentText();

    if (responseCode === 200) {  // リクエストが成功した場合
      // レスポンスをJSONとして解析
      const jsonResponse = JSON.parse(responseBody);
      // レスポンスの構造を確認し、テキストが存在するかチェック
      if (jsonResponse.candidates && jsonResponse.candidates.length > 0 &&
          jsonResponse.candidates[0].content && jsonResponse.candidates[0].content.parts &&
          jsonResponse.candidates[0].content.parts.length > 0 && jsonResponse.candidates[0].content.parts[0].text) {
        // 生成されたテキストを返す
        return jsonResponse.candidates[0].content.parts[0].text;
      } else {
        // レスポンスの形式が不正な場合のエラーログ
        console.log("Gemini APIレスポンスの形式が予期したものと異なります。Response: " + responseBody);
        return null;
      }
    } else {
      // APIリクエストが失敗した場合のエラーログ
      console.log(`Gemini APIリクエストエラー: ${responseCode}\nResponse: ${responseBody}`);
      return null;
    }
  } catch (e) {
    // 例外が発生した場合のエラーログ
    console.log("Gemini API呼び出し中に例外が発生しました: " + e.toString());
    return null;
  }
}

//Gemini APIを実行する関数(テキスト+画像)
function executeGeminiImagePrompt() {
  // 固定のプロンプトテキストを定義
  const promptText = "この画像について説明してください";

  // 画像URLを定義(イトーヨーカドーのチラシ画像のURL)
  const imageUrl = 'https://image.tokubai.co.jp/images/bargain_office_leaflets/o=true/8092910.jpg';

  // スクリプトプロパティからAPIキーを取得
  const apiKey = PropertiesService.getScriptProperties().getProperty('GEMINI_API_KEY');
  
  // APIキーが設定されていない場合はエラー
  if (!apiKey) {
    console.log('エラー: GEMINI_API_KEYがスクリプトプロパティに設定されていません。');
    return;
  }
  
  // URLから画像データを取得
  const imageBlob = UrlFetchApp.fetch(imageUrl).getBlob();
  const base64ImageData = Utilities.base64Encode(imageBlob.getBytes());
  const mimeType = imageBlob.getContentType();
  
  // Gemini APIを呼び出して結果を取得
  const result = callGeminiImageApi(promptText, base64ImageData, mimeType, apiKey);
  
  // 結果をログ出力
  console.log('Gemini APIの応答結果:\n' + result);
} 

※前述のテキストプロンプトのみと同じGASプロジェクト内に配置する場合、このコード冒頭のエンドポイントURLのグローバル定数は不要です。

今回、イトーヨーカドーのチラシ画像をリクエストして、画像について質問してみます。

Gemini 2.5 Pro-preview-05-06に対し、Google Apps Script(GAS)でチラシ画像をマルチモーダル入力して、内容確認を依頼した応答結果

きちんとチラシの中身を読み取って、オトクな情報をリストアップしてくれています。

まとめ・終わりに

今回、2025年5月6日に発表されたGemini 2.5 Proの最新版「Gemini 2.5 Pro preview-05-06」をGoogle Apps Script(GAS)でAPIリクエストする方法を紹介しました。

最新のGemini 2.5 Proはコーディング能力や画像解析能力が飛躍的に向上しており、色々な業務効率化、業務自動化に威力を発揮します。

ただ、GASからGemini 2.5 ProのAPIをリクエストするにはエンドポイントURLが必要ですが、Geminiに質問しても古いAPIキーを返されることがあります。

ぜひ、今回紹介したサンプルコードを使って、テキストプロンプトだけでなく、画像入力も含めたマルチモーダルなGemini 2.5 Proとのやり取りをGASで実用化してみてください。