- GPTs Actionsを使ってLINE Bot(Messaging API)と連携する方法
- Google Apps Script と LINEを使ったオウム返しBotの作成方法
- GPTs Actions APIでGoogle Apps Script(GAS)を使う: 料理番号から料理名を返すアプリ
- GPTs Actions Schemaの簡単構築術
- Google Apps ScriptとGemini Proを活用してサーバーレスなLINE Botを構築する
はじめに
Google Apps Script(GAS)を使用し、GPTsのCustom Actions APIを活用して、ユーザーが入力した料理の番号に基づいて対応する料理名を返すシステムを作成します。
こちらの記事もおすすめ
Google Apps Script(GAS)とは何か?
Google Apps Script(略称:GAS)は、Googleが提供するプログラミングプラットフォームです。この言語はJavaScriptに基づいており、Webブラウザ上で動作します。つまり、JavaScriptの基本を知っていれば、GASを学ぶ際に有利です。
GASの使用方法
GASはGoogleの様々なサービス(例えば、Googleドキュメント、Googleスライド、Googleスプレッドシートなど)と連携して、データ収集や作業の自動化などを行うことが可能です。さらに、外部のサービス(例えば、LINEやTwitter)との連携にも対応しており、多様な用途で使用できます。
開発環境
GASを利用するために必要なのは、Google Workspace アカウント(または無償のGoogleアカウント)とウェブブラウザのみです。特別な開発環境を設置する必要はありません。Webブラウザ上で直接コードを記述し、実行することができます。
GASの特徴
- Googleサービスとの連携: Googleの各種サービスと簡単に連携できるため、これらのサービスを使っている方には特に便利です。
- JavaScriptベースのスクリプト言語: JavaScriptの基本的な知識があれば、容易に学ぶことができます。
- オンラインでの編集・実行: Webブラウザ上で直接編集し、実行できるため、特別なソフトウェアのインストールは必要ありません。
- サードパーティ製ライブラリの使用: 他の開発者が作成したライブラリを利用することで、機能拡張が可能です。
- カスタムメニューやトリガーの追加: Googleスプレッドシートやドキュメントにカスタムメニューを追加したり、特定の条件でスクリプトが自動実行されるトリガーを設定できます。
コスト
GASは完全無料で利用できます。Googleアカウントがあれば、追加の費用なしでGASを使用することが可能です。
GASは、Googleのサービスを使っている方にとって非常に便利なツールです。初心者でも基本的なJavaScriptの知識があれば、簡単に利用を開始できます。データ処理や作業の自動化など、日々の業務を効率化するためにGASを活用することも可能です。
GPTs Actionsとは何か?
GPTsとは何か?
GPTs は、カスタム機能を持つChatGPTを特定の用途に合わせて深くカスタマイズできる技術です。GPTを使うと、以下のようなことが可能になります。
- ユーザーとの対話方法を決定するカスタム指示を持つ
- ブラウジング、DALL·E、コードインタープリターなどのツールを含む
- 新規およびリターンユーザー向けのプリセットスタータープロンプトを持つ
- APIに接続してGPTにカスタムアクションを追加する
- その他多くのカスタマイズが可能
GPTs内のアクションとは何か?
GPTでは、ビルトイン機能(ブラウジング、DALL·E、コードインタープリター)に加えて、カスタムアクションを定義することもできます。アクションを使うことで、GPTをデータベースに接続したり、メールにプラグインしたり、ショッピングアシスタントにしたりすることが可能になります。これはすべてAPIを通じて行われます。
アクションの設計は、プラグインベータからの洞察に基づいており、開発者はモデルやAPIの呼び出し方法についてより大きなコントロールを持ちます。アクションはOpenAPI仕様を使用して定義されます。
GPTアクションの流れ
アクションを持つGPTを構築するには、エンドツーエンドのフローを理解することが重要です。
- GPTの作成:
- ChatGPT UIでGPTを作成します。
- 使用したいAPIを特定します。
- GPTエディタの「Configure」タブに移動し、「Create new action」を選択します。
- アクションの設定:
- 認証スキーマの選択、スキーマ自体の入力、プライバシーポリシーURLの設定の3つの主要なオプションが表示されます。
- スキーマはOpenAPI仕様形式に従います。
- スキーマ、認証、プライバシーポリシーの詳細を入力します。
- GPTの可視性を決定:
- デフォルトでは、GPTはすべてのユーザーにアクセス可能ではありません。
- GPTを保存する際、「Publish to」で特定のオーディエンスを選択します:「Only me」、「Anyone with a link」、または「Everyone」。
- ユーザーがGPTを利用:
- GPTの可視性に応じて、ユーザーは共有されたリンク経由で試すか、GPTストアで見つけることができます。
- OAuthが必要な場合、ユーザーはセッション中にログインを求められます。
- ユーザーがリクエストをするたびに、モデルは利用可能なツール、アクション、指示を見て、どのようにGPTが応答するかを決定します。
- 例えば、特定の場所の天気を確認するリクエストがある場合、モデルは提供されたOpenAPI仕様に従ってAPIにリクエストを送信し、ユーザーに応答を返します。
GPTs Actionsの基本
GPTs Actionsを用いることで、外部のAPIを呼び出し、特定のデータを取得できます。この場合、料理の番号をAPIに送信し、Google Apps Scriptを通じてGoogle スプレッドシートから対応する料理名を取得します。
Google スプレッドシートの準備
- 新しいGoogle スプレッドシートを作成し、2列を用意します。このあたりはChatGPTに適当に提案してもらいました。
- 列A: 料理番号(例:1001, 1002, 1003, ...)
- 列B: 料理名(例:寿司、ラーメン、天ぷら、...)
Google Apps Scriptの作成
エディタを開く
- スプレッドシートの「拡張機能」>「Apps Script」を選択して、エディタを開きます。
スクリプトの貼り付け
- 以下のスクリプトをエディタに貼り付けます:
function doGet(e) {
// URLのパラメータからidを取得します。
var searchQuery = e.parameter.id;
// idが正しくない(存在しないか、4桁の数字でない)場合はエラーを返します。
if (!searchQuery || !/^\d{4}$/.test(searchQuery)) {
return ContentService.createTextOutput(
JSON.stringify({ "error": "Invalid request. Please provide a 4-digit number." })
).setMimeType(ContentService.MimeType.JSON);
}
// Googleスプレッドシートを開き、データを取得します。
var sheet = SpreadsheetApp.openById('17WqvBLUb1VTgIjFl4LG6kYzepQAeqk1y2hVVoKglnOc').getSheetByName('シート1');
var data = sheet.getDataRange().getValues();
// スプレッドシートのデータを1行ずつ検索します。
for (var i = 1; i < data.length; i++) {
// 指定されたidが見つかった場合、対応する料理名を返します。
if (data[i][0].toString() === searchQuery) {
return ContentService.createTextOutput(
JSON.stringify({ "dishName": data[i][1] })
).setMimeType(ContentService.MimeType.JSON);
}
}
// 指定されたidに対応する料理が見つからなかった場合はエラーを返します。
return ContentService.createTextOutput(
JSON.stringify({ "error": "No dish found for the provided number." })
).setMimeType(ContentService.MimeType.JSON);
}
スプレッドシートIDの調整
- スプレッドシートIDをスクリプトの指定箇所に貼り付けます。
Google Apps Scriptの解説
リクエストの受け取り
function doGet(e) {
- この行では、
doGet
という名前の関数を定義しています。この関数はHTTP GETリクエストを処理するために使用されます。 - 引数
e
は、リクエストの情報を含んでいます。
リクエストからパラメータを取得
var searchQuery = e.parameter.id;
- ここで、リクエストから
id
という名前のパラメータを取得しています。 - この
id
は、スプレッドシート内で検索するために使用される4桁の数字です。
パラメータの検証
if (!searchQuery || !/^\d{4}$/.test(searchQuery)) {
return ContentService.createTextOutput(
JSON.stringify({ "error": "Invalid request. Please provide a 4-digit number." })
).setMimeType(ContentService.MimeType.JSON);
}
- このコードブロックでは、
searchQuery
が正しい形式(4桁の数字)であるかを検証しています。 - 形式が正しくない場合、エラーメッセージを含むJSONレスポンスを返します。
スプレッドシートの取得
var sheet = SpreadsheetApp.openById('17WqvBLUb1VTgIjFl4LG6kYzepQAeqk1y2hVVoKglnOc').getSheetByName('シート1');
var data = sheet.getDataRange().getValues();
- ここで指定されたIDを持つGoogleスプレッドシートを開き、'シート1'からデータを取得しています。
getDataRange().getValues()
は、シートの全データを二次元配列として取得します。
スプレッドシートのデータを検索
for (var i = 1; i < data.length; i++) {
if (data[i][0].toString() === searchQuery) {
return ContentService.createTextOutput(
JSON.stringify({ "dishName": data[i][1] })
).setMimeType(ContentService.MimeType.JSON);
}
}
- このループは、スプレッドシートの各行を走査して、最初の列の値が
searchQuery
と一致するかを確認します。 - 一致する行が見つかった場合、その行の第2列の値(料理名)を含むJSONを返します。
一致するデータがない場合の処理
return ContentService.createTextOutput(
JSON.stringify({ "error": "No dish found for the provided number." })
).setMimeType(ContentService.MimeType.JSON);
}
- もし一致するデータがスプレッドシートにない場合、エラーメッセージを含むJSONレスポンスを返します。
このスクリプトは、リクエストされた id
に基づいてスプレッドシートから特定のデータを検索し、その結果をJSON形式で返すAPIとして動作します。
APIのデプロイ
- Apps Scriptエディタで「デプロイ」ボタンをクリックし、「新しいデプロイ」を選択します。
- 「タイプを選択」で「ウェブアプリ」を選択し、必要な設定を行います。
- 「デプロイ」をクリックし、生成されたURLを控えます。
GPTsの設定とテスト
- GPTsのダッシュボードで、新しいCustom Actionsを作成します。
- 以下のSchemaを設定します:
{
"openapi": "3.1.0",
"info": {
"title": "Get dish name",
"description": "Get dish name by id",
"version": "v1.0.0"
},
"servers": [
{
"url": "https://script.google.com"
}
],
"paths": {
"/macros/s/[デプロイしたURLの/macros以下]": {
"get": {
"description": "Get dish name by id",
"operationId": "GetDishNameByid",
"parameters": [
{
"name": "id",
"in": "query",
"description": "Dish ID No.",
"required": true,
"schema": {
"type": "string"
}
}
]
}
}
}
}
- テストとして、料理番号を入力し、対応する料理名が返ってくるかを確認します。
Actions Schemaの解説
基本情報の定義
{
"openapi": "3.1.0",
"info": {
"title": "Get dish name",
"description": "Get dish name by id",
"version": "v1.0.0"
},
"openapi": "3.1.0"
: この行は、使用しているOpenAPIのバージョンを指定しています。ここではバージョン3.1.0を使用しています。"info"
: このセクションではAPIに関する基本情報を提供します。"title"
: APIの名前です。"description"
: APIが何をするかについての簡単な説明です。"version"
: APIのバージョン番号です。
サーバー情報の設定
"servers": [
{
"url": "https://script.google.com"
}
],
"servers"
: このセクションでは、APIがホストされているサーバーのURLを指定します。"url"
: このAPIがデプロイされているサーバーのURLです。
APIのエンドポイントと操作の定義
"paths": {
"/macros/s/[デプロイしたURLの/macros以下]": {
"get": {
"description": "Get dish name by id",
"operationId": "GetDishNameByid",
"parameters": [
{
"name": "id",
"in": "query",
"description": "Dish ID No.",
"required": true,
"schema": {
"type": "string"
}
}
]
}
}
}
}
"paths"
: このセクションでは、APIが提供するエンドポイント(URLパス)と、それぞれのエンドポイントで利用可能な操作(メソッド)を定義します。"/macros/s/[デプロイしたURLの/macros以下]"
: これはAPIのエンドポイントです。実際のデプロイされたURLに置き換える必要があります。"get"
: このセクションでは、GETメソッドによる操作を定義しています。"description"
: この操作が何をするかの説明です。"operationId"
: この操作の一意の識別子です。"parameters"
: この操作で必要とされるパラメータを定義します。"name": "id"
: パラメータの名前です。"in": "query"
: このパラメータがクエリパラメータとして渡されることを指定します。"description"
: パラメータに関する説明です。"required": true
: このパラメータは必須であることを示します。"schema"
: パラメータのデータ型を定義します。ここでは文字列型("string"
)が使用されています。
このスキーマは、クライアントがAPIにどのようにアクセスし、どのようなパラメータを提供する必要があるかを定義するために使用されます。これにより、クライアントはAPIを正しく使用し、必要な情報を取得することができます。
プライバシーポリシーと公開
Custom Actionsを公開するためには、プライバシーポリシーのページが必要です。Google Siteなどでプライバシーポリシーを作成し、公開することができます。
コピペ用
1. はじめに
このプライバシーポリシーは、GPTs Actions API(以下、「当アプリ」とします)における個人情報の取り扱いについて説明しています。当アプリを利用することで、ユーザーはこのプライバシーポリシーの条項に同意したものとみなします。
2. 収集する情報
当アプリは、以下の情報を収集します:
ユーザーが当アプリに提供する4桁の数字。これはGoogleスプレッドシートの検索に使用されます。
3. 情報の使用目的
収集した情報は以下の目的で使用されます:
当アプリの基本機能であるスプレッドシート検索を提供するため。
4. 情報の共有
収集した情報は、当アプリの機能を提供する目的でのみ使用され、第三者には共有されません。
5. 情報の保護
当アプリは、収集した情報の安全を保護するために合理的な予防策を講じています。
6. ユーザーの権利
ユーザーはいつでも自身の個人情報にアクセスする権利、それを訂正または削除する権利を有します。
7. プライバシーポリシーの変更
当アプリは、法令の変更または当アプリのアップデートに伴い、このプライバシーポリシーを随時更新することがあります。
8. お問い合わせ
このプライバシーポリシーに関するご質問や懸念がある場合は、こちらのフォームにてご連絡ください。
GAS 修正後の対応
Google Apps Scriptを編集した後の再デプロイ方法を説明します。エディタで「デプロイを管理」を選択し、
ペンのアイコンをクリックして、
新しいバージョンを選択し、デプロイします。
URLが同じことを確認します。
おわりに
この記事では、Google Apps Script(GAS)とGPTsを用いて独自のAPIを作成する方法をご紹介しました。GPTsのKnowledge機能だけでは代替できないような、汎用性の高い処理をGASを介して実現することが可能です。
例えば、GPTsのKnowledgeでは現在のアプリの機能を代替できてしまうかもしれませんが、GASを挟むことにより、スプレッドシートに処理内容を送信してデータをプールしたり、最新情報をスクレイピングしてからGPTsに渡すような処理が可能になります。特に、大規模なデータを扱う際には、トークン数が限られているため、このような前処理が必要になります。
GASとGPTsの連携は、今後も多くの可能性を秘めています。さらに、GASを使ってLINEなど他のサービスともフレキシブルに連携できる点も、大きな魅力の一つです。
是非この知識を活用して、さまざまなアプリケーションを開発し、新しい可能性を探ってみてください。
作成したGPTs
プロンプトインジェクション用GPTs
プロンプトインジェクション用GPTsです。
好きに攻撃してください。
コメント