8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【0からGASを学ぶ】Gemini Pro API をGASから呼び出して、回答を得よう!

Last updated at Posted at 2023-12-26

はじめに

本シリーズでは、GASの始め方や便利な使い方、ビジネス活用まで幅広く解説します。シリーズをひと通り読んでいただければ、あなたもきっとGASマスターになれるはずです。

シリーズの対象者

  • そもそもGASってなんだかわからない
  • GASを学びたいけど何から始めればいいかわからない方
  • GASはわかり始めたけど、もっと活用ができないかと模索している方
  • とにかくGoogleが好き! という方

前回記事

Gemini Pro API をGASからアクセスする

では早速始めていきましょう。【0からGASを学ぶ】シリーズの第14回は「Gemini Pro API をGASから呼び出して、回答を得よう!」です。前回までは、Googleフォームを用いた自動化や、dayjsライブラリの使い方を行いました。今回はちょっと流れを変えて、2023年12月13日に満を持して登場したGemini Pro APIを使ってみましょう。ちょっと難しそうに感じるかもしれませんが、APIの利用は、GoogleドキュメントやGoogleスプレッドシートをPDF変換する際に学びました。そのため、実はそのFetchするURLやパラメタをいじればできちゃうんです。…と聞くと、何となく楽勝な感じがしますよね!

createPdf(抜粋)
// PDF変換するためのベースURLを作成する
let wUrl = `https://docs.google.com/document/d/${docId}/export?exportFormat=pdf`;

// headersにアクセストークンを格納する
let wOtions = {
  headers: {
    'Authorization': `Bearer ${ScriptApp.getOAuthToken()}`
  }
}; 
// PDFを作成する
let wBlob = UrlFetchApp.fetch(wUrl, wOtions).getBlob().setName(fileName + '.pdf');

今回やること

  1. Gemini Pro APIのAPIキーを取得
  2. GASからGemini Pro APIの呼び出し
  3. 呼び出した結果から回答を抽出

今回はあくまでもGASからGemini pro APIの呼び出しまでとします。次回以降、さらにそれをLINEのチャットボットに組み込みを行い、自分だけの相談相手を作っていきましょう。

事前準備

STEP.1 Gemini Pro APIのAPIキーを取得

※以下はGoogleのフリーアカウント向けの手順となります。GoogleWorkspaceをご利用の方は、事前に1つ確認しておくことがあるため、STEP.0 を先にご確認ください。

手順 イメージ
1 以下のURLにアクセスして、「Get API key in Google AI Stuio」をクリックします。
https://ai.google.dev/
2 同意項目にチェックを入れ、右下の「Continue」をクリックします。なお、同意項目は3つ全てに同意する必要はありません。1番上のみがチェックされていれば進めますが、以下を参考にしてください。
  • 利用規約に関する同意
  • アップデート情報等の受け取り有無
  • AI調査研究への参加有無
3 「Get API key」をクリックします。
4 「Create API key in new project」をクリックします。
5 しばらくするとAPI keyが作成されるため「Copy」をクリックします。
※ここで取得したキーを後ほど利用します。

STEP.0 早期アクセスアプリの有効化設定

GoogleWorkspaceをご利用の方は、上記手順に従ってNo.1の「Get API key in Google AI Stuio」をクリックすると、正しく遷移しない場合があります。その場合は、早期アクセスアプリの有効化設定がされていない可能性が高いです。以下を参考に設定を行ったうえでSTEP.1を実施してください。

手順 イメージ
1 以下のURLにアクセスして、「早期アクセスアプリ」をクリックします。
https://admin.google.com/ac/appslist/additional?hl=ja
2 「サービスのステータス」エリアをクリックします。
3 サービスのステータスをオンにし「保存」をクリックします。
4 1つ前の画面に戻り、今度は「Core Data Access Permissions」エリアをクリックします。
5 チェック状態にし「保存」をクリックします。

いざ開発!

STEP.2 GASからGemini Pro APIの呼び出し

今回はGemini Pro APIをとにかくGASから呼び出すことだけを目的としているため、スタンドアロン型でGASを記述していきます。こちらを参考にGASエディタを起動してください。では、どんどんいきますよ、ついてきてください。

まずは仕様を確認

Gemini ProのAPIをPythonやNode.js等から呼び出す場合には、すでにGoogleGenerativeAIのライブラリがあるため、比較的簡単に実装が可能です。しかしながら、GASから呼び出す場合は、Fetch先のURLやそれに付随するパラメータを構成し、返却値であるHTTPResponseから回答を抽出する必要があります。とはいっても、Google大先生がすでに情報はまとめてくれてますので、ご安心を。

curlによる呼び出し
curl https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=$API_KEY \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[{
          "text": "Write a story about a magic backpack."}]}]}' 2> /dev/null

これを見ると、以下のことがわかります。

項目
Fetch先のURL https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=$API_KEY
method種別 POST
データ種別 application/json
データ本体 {
  "contents": [{
    "parts":[{
      "text": "Write a story about a magic backpack."
    }]
  }]
}

ではこれをGASで表現する

Qiita014.gs
const GEMINI_API = '**STEP.1のNo.5で取得したAPI keyを記載する**';

function Qiita014_GeminiPro() {
  const url = `https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=${GEMINI_API}`
        , payload = {
            'contents': [
              {
                'parts': [{
                  'text': 'Write a story about a magic backpack.'
                }]
              }
            ]
          }
        , options = {
            'method': 'post',
            'contentType': 'application/json',
            'payload': JSON.stringify(payload)
          };

  const res = UrlFetchApp.fetch(url, options)
        , resJson = JSON.parse(res.getContentText());

  console.log(JSON.stringify(resJson));
}

いかがでしょうか。Google大先生が示してくれたcurlコマンドを素直にGASで表現しただけです。非常に明瞭ですよね。
こちらを実行するとこのような実行結果が得られます。
※見やすいように一部JSONの整形だけしておきます。

実行結果
17:24:52	お知らせ	実行開始
17:25:00	情報
{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "text": "In the quaint town of Brightville, nestled amidst rolling hills and whispering woods, lived a young boy named Oliver. …"
          }
        ],
        "role": "model"
      },
      "finishReason": "STOP",
      "index": 0,
      "safetyRatings": [
        {
          "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_HATE_SPEECH",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_HARASSMENT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
          "probability": "NEGLIGIBLE"
        }
      ]
    }
  ],
  "promptFeedback": {
    "safetyRatings": [
      {
        "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_HATE_SPEECH",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_HARASSMENT",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
        "probability": "NEGLIGIBLE"
      }
    ]
  }
}
17:25:00	お知らせ	実行完了

STEP.3 呼び出した結果から回答を抽出

回答文がどこにあるかを確認

上記の実行結果を見れば一目瞭然ですが、以下の位置にGemini Pro APIからの回答があります。

{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "text": "In the quaint town of Brightville, nestled amidst rolling hills and whispering woods, lived a young boy named Oliver. …"
          }

返却されたJSONには、様々な要素がありますが、以下の4つのパラメタに関して設定を行うことで、Gemini Pro APIからの回答を制御することができます。※詳細はこちら

  • HARM_CATEGORY_SEXUALLY_EXPLICIT
    性的行為やその他のわいせつなコンテンツに関して
  • HARM_CATEGORY_HATE_SPEECH
    否定的または有害なコメントに関して
  • HARM_CATEGORY_HARASSMENT
    悪意のある、威圧的、いじめ、または虐待的なコメントに関して
  • HARM_CATEGORY_DANGEROUS_CONTENT
    有害な商品、サービス、活動などのコンテンツに関して

これらについて、以下の閾値を設定することができます。※詳細はこちら

概要 閾値設定値 閾値説明
ブロックしない BLOCK_NONE 安全でないコンテンツの可能性に関係なく、常に表示します。
ブロックが少ない BLOCK_ONLY_HIGH 安全でないコンテンツの可能性が高い場合はブロックします。
一部をブロックする BLOCK_MEDIUM_AND_ABOVE 安全でないコンテンツの可能性が中程度または高い場合にブロックします。
ほとんどをブロックする BLOCK_LOW_AND_ABOVE 安全でないコンテンツの可能性が中程度または高い場合にブロックします。
HARM_BLOCK_THRESHOLD_UNSPECIFIED 閾値は指定されていません。デフォルトの閾値を使用してブロックします。

回答文をGASで抽出

Qiita014.gs
const GEMINI_API = '**STEP.1のNo.5で取得したAPI keyを記載する**';

function Qiita014_GeminiPro() {
  const url = `https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=${GEMINI_API}`
        , payload = {
            'contents': [
              {
                'parts': [{
                  'text': 'Google Apps Scriptについて教えてください。'
                }]
              }
            ]
          }
        , options = {
            'method': 'post',
            'contentType': 'application/json',
            'payload': JSON.stringify(payload)
          };

  const res = UrlFetchApp.fetch(url, options)
        , resJson = JSON.parse(res.getContentText());

  // responseがちゃんと返ってきていることを確認
  if (resJson && resJson.candidates && resJson.candidates.length > 0) {
    /** 以下の位置を取得
    {
      "candidates": [
      {
        "content": {
        "parts": [
        {
          "text": 
    */
    console.log(resJson.candidates[0].content.parts[0].text);
  } else {
    // HARM_CATEGORYによって、無回答の場合も多々あり
    console.log('回答が返されませんでした。');
  }
}
17:28:56	お知らせ	実行開始
17:29:05	情報	Google Apps Scriptとは、Google Workspaceのアプリケーション上で動作するスクリプティング言語です。JavaScriptに基づいており、Google Sheets、Google Docs、Google Slides、Google FormsなどのGoogle Workspaceアプリケーションと連携して、自動化やカスタマイズを実現することができます。

Google Apps Scriptを使う利点は以下の通りです。

* **コードを書く必要がない:** Google Apps Scriptは、コードを書く必要なく、ビジュアルなインターフェースでスクリプトを作成することができます。
* **強力なAPI:** Google Apps Scriptは、Google Workspaceの様々なアプリケーションのAPIにアクセスすることができます。これにより、自動化やカスタマイズを簡単に実現することができます。
* **クロスプラットフォーム:** Google Apps Scriptは、ウェブブラウザ上で動作するため、どのオペレーティングシステムでも使用することができます。
* **無料:** Google Apps Scriptは、無料で使用することができます。

Google Apps Scriptの主なユースケースは以下の通りです。

* **データの自動化:** Google Apps Scriptを使って、スプレッドシートのデータを自動的に更新したり、フォームの回答を自動的に処理したりすることができます。
* **カスタムレポートの作成:** Google Apps Scriptを使って、スプレッドシートのデータを分析してカスタムレポートを作成することができます。
* **ウェブアプリケーションの開発:** Google Apps Scriptを使って、ウェブアプリケーションを開発することができます。
* **アドオンの作成:** Google Apps Scriptを使って、Google Workspaceのアプリケーション用のアドオンを作成することができます。

Google Apps Scriptは、Google Workspaceユーザーにとって強力なツールです。自動化やカスタマイズを実現することで、生産性を向上させ、時間を節約することができます。
17:29:05	お知らせ	実行完了

ばっちり取得できましたね。しかも私の記事より詳細にGASを語りやがって、Gemini Pro 恐るべしです。

おわりに

お疲れ様でした。
第14回は「Gemini Pro API をGASから呼び出して、回答を得よう!」ということで、GASからGemini Proを扱う手順とともに、API keyの取得も含めて、今後Gemini Proを扱う下準備を行いました。次回は、先述の通りですがLINE Messaging APIと連携させ、自分だけの相談チャットボットを作っていきましょう。GASはなんでもできる! と述べていたのが少しずつわかってきたのでは!?引き続き、GASを楽しんでいきましょう!!
記事を読んで、「良いな」や「今後に期待できる!」と感じて頂けたらいいねフォローコメントいただけると幸いです。それではまた次回をお楽しみに!

ブログでより詳しく解説しています!

以下画像をクリックしてブログにアクセス!!

8
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?