見出し画像

非エンジニアでもGPTsのActions schemaを簡単に作成できる!BetterActionsGPTの使い方ガイド

はじめに

「GPTsを作るときにActionsで使用をするschemaを書きたいけど、エンジニアではないしどうすればわからない…」と悩んだことはありませんか?

そんな時にはBetterActionsGPTを使えば、専門知識がなくても簡単にschemaを作成することができます。

私自身は非エンジニアなのですが、GPTsで外部サービスと連携をする際に schemaを書く必要があり、BetterActionsGPTのヘビーユーザーなので、この記事ではこのツールで何ができるのか、そして実際にどのように使用しているかを解説していきたいと思います!


BetterActionsGPTはこちら▼


この記事ではActionsやschema、APIという言葉をよく使いますが詳しくは説明しませんので、もしこれらの用語がわからない方は下記記事を読んでからこの記事を読むことをオススメします!



BetterActionsGPTとは?

BetterActionsGPTは、OpenAPI 3.1仕様のAPI仕様書を作成できるGPTです。

こう書くと難しく聞こえますが、要はGPTsで外部サービス(スプレッドシートや天気予報のサービスなど)と連携する際にActionsの箇所に schemaという外部サービスに何をしてほしいのかということを示すコードを書かなければいけないのですが、そのコードを少しの指示でちゃちゃっと書いてくれる便利なGPTsです。

百聞は一見にしかずということで実際にどのように使うかを見ていきましょう!


BetterActionsGPTの具体的な使い方

私のBetterActionsGPTの主な使い方は下記の3点です。

① APIドキュメントのURLを貼り schemaを生成してもらう
② すでに書いているコードを元にschemaに書いてもらう
③エラーの処理

それぞれ説明していきますね!


① APIドキュメントのURLを貼り schemaを生成してもらう

APIに関するドキュメントのURLがわかっている場合はそのURLを貼りましょう!

例えば、郵便番号を入力すると住所を返してくれるGPTsを作成するときには以下のように進めます。

  1. 郵便番号検索APIを探す

  2. そのAPIのドキュメントを調べる

  3. ドキュメントのURLをコピーしてBetterActionsGPTに貼り付けて指示をする

今回は実際にZipCloud APIという郵便番号検索APIのドキュメントURLを使用して、 schemaを作成してもらいましょう!

以下のように指示をします。

https://zipcloud.ibsnet.co.jp/doc/api
郵便番号を入力したら住所を応答してくれるYAMLを書いてください。」

指示に従って即座に schemaを作成してくれます。


 作成できたschemaをGPTsのActions部分に貼り付けて、




実際に郵便番号を聞いてみましょう。

このように「100-0001」という郵便番号に対して、ZipCloud APIが住所を返してくれました。

APIのドキュメントがわかる場合にはそのURLをBetterActionsGPTに貼り付けてschemaを生成してもらいましょう!

以下に無料で使えるwebAPIをまとめたサイトを貼り付けておきますので練習がてらやってみるとさらに理解が深まるかと思います。



② すでに書いているコードを元にschemaに書いてもらう

Google Apps Script(GAS)などで既に書いているコードがある場合、そのコードをBetterActionsGPTに投げることで、対応するschemaを自動で生成してくれます。

例えば以下のようなGASのコードを書いたとします。

// スプレッドシートの(1,1)にデータを入力する関数
function writeToSpreadsheet_(data) {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.getRange(1, 1).setValue(data);
  return 'Data written to Spreadsheet at cell (1,1)';
}

// POSTリクエストを処理する関数
function doPost(e) {
  try {
    if (!e.postData) {
      throw new Error("No post data received");
    }

    const requestBody = JSON.parse(e.postData.contents); // POSTされたデータをJSONとしてパース
    const data = requestBody.text; // JSONの"text"フィールドの値を取得

    const result = writeToSpreadsheet_(data); // スプレッドシートにデータを書き込み
    return ContentService.createTextOutput(result)
      .setMimeType(ContentService.MimeType.TEXT); // 処理結果をテキストとして返却
  } catch (error) {
    return ContentService.createTextOutput(
      JSON.stringify({ "error": error.toString() })
    ).setMimeType(ContentService.MimeType.JSON); // エラーメッセージをJSON形式で返却
  }
}


このGASコードに対応する schemaを書いてもらう場合には以下のように指示をします。

以下の#制約条件を遵守し、#出力例を参考にして#GASコード に対応するスキーマを作成してください。

#GASコード:

```

// スプレッドシートの(1,1)にデータを入力する関数
function writeToSpreadsheet_(data) {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.getRange(1, 1).setValue(data);
  return 'Data written to Spreadsheet at cell (1,1)';
}

// POSTリクエストを処理する関数
function doPost(e) {
  try {
    if (!e.postData) {
      throw new Error("No post data received");
    }

    const requestBody = JSON.parse(e.postData.contents); // POSTされたデータをJSONとしてパース
    const data = requestBody.text; // JSONの"text"フィールドの値を取得

    const result = writeToSpreadsheet_(data); // スプレッドシートにデータを書き込み
    return ContentService.createTextOutput(result)
      .setMimeType(ContentService.MimeType.TEXT); // 処理結果をテキストとして返却
  } catch (error) {
    return ContentService.createTextOutput(
      JSON.stringify({ "error": error.toString() })
    ).setMimeType(ContentService.MimeType.JSON); // エラーメッセージをJSON形式で返却
  }
}

// GETリクエストを処理する関数(任意)
function doGet(e) {
  return ContentService.createTextOutput("This endpoint only accepts POST requests.")
    .setMimeType(ContentService.MimeType.TEXT);
}


```

#制約条件:
1. **`openapi`**: OpenAPIのバージョンは`3.1.0`で統一。
2. **`info`**: APIの基本情報(タイトル、説明、バージョン)を記載。
3. **`servers`**: Google Apps Scriptのエンドポイント`https://script.google.com`を指定。
4. **`paths`**: `scriptId`をパスパラメータとして含むエンドポイントを定義。これはGoogle Apps Scriptのデプロイ時に発行されるID。
5. **`operationId`**: 各エンドポイントに一意の操作IDを割り当てる。
6. **`requestBody`**: リクエストボディの構造を定義し、`application/json`フォーマットを使用。
7. **`responses`**: 成功時、エラー時のレスポンスを定義。


#出力例:

```
openapi: 3.1.0
info:
  title: "{APIのタイトル}"
  description: "{APIの説明}"
  version: "1.0.0"

servers:
  - url: https://script.google.com

paths:
  /macros/s/{scriptId}/exec:
    {HTTPメソッド}:
      operationId: "{操作のID}"
      summary: "{エンドポイントの概要}"
      description: "{エンドポイントの詳細な説明}"
      parameters:
        - in: path
          name: scriptId
          required: true
          description: "The script ID for the Google Apps Script deployment"
          schema:
            type: string
        # クエリパラメータが必要な場合、以下のように追加:
        # - in: query
        #   name: {パラメータ名}
        #   required: true  # 必須かどうか
        #   description: "{パラメータの説明}"
        #   schema:
        #     type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                # 以下に必要なプロパティを定義:
                {プロパティ名}:
                  type: {プロパティの型}
                  description: "{プロパティの説明}"
                # 例:
                # title:
                #   type: string
                #   description: "Title of the item."
      responses:
        '200':
          description: "{成功時の説明}"
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: "Success message"
                  # その他必要なプロパティを追加:
                  {プロパティ名}:
                    type: {プロパティの型}
                    description: "{プロパティの説明}"
        '400':
          description: "Bad request if the request parameters are not correct."
        '500':
          description: "Internal server error."

    # GETメソッドなど、他のメソッドを追加する場合の例:
    # get:
    #   operationId: "{操作のID}"
    #   summary: "{エンドポイントの概要}"
    #   description: "{エンドポイントの詳細な説明}"
    #   parameters:
    #     - in: query
    #       name: {パラメータ名}
    #       required: true
    #       schema:
    #         type: string
    #   responses:
    #     '200':
    #       description: "{成功時の説明}"
    #       content:
    #         application/json:
    #           schema:
    #             type: object
    #             properties:
    #               message:
    #                 type: string
    #                 description: "Success message"
    #     '400':
    #       description: "Bad request if the request parameters are not correct."
    #     '500':
    #       description: "Internal server error."

```


急に長いプロンプトが出てきましたが重要な箇所としては schemaを生成する際にGASのコードを渡してそれに対応する schemaを作ってもらっている点です。

プロンプト内に#制約条件や#出力例が足してあるのは経験上GASのコードだけを貼り付けても一発でうまくいく schemaが生成されないためですね!


実際の設定方法については下記の記事で参考になると思うのでもっと知りたい方は見てみてください!


③エラーの処理

もし schemaにエラーが発生した場合はエラーについても解決をしてくれます。

 schemaにエラーが発生すると以下のように赤字で表示されます。


このエラー文をコピーしてBetterActionsGPTに貼り付けると解析して修正をしてくれます。


まとめ

今回は、BetterActionsGPTを使って非エンジニアでも簡単に schemaを作成する方法をご紹介しました。

schemaの作成には専門的な知識が必要とされましたが、BetterActionsGPTを使えば非エンジニアでも簡単に作成できます。

機能性の高いGPTsを作成するためには schemaの作成は避けることはできないので、ぜひBetterActionsGPTを活用して便利なGPTsを作ってみてください。

記事に不明点などありましたらX(旧Twitter)もやっていますのでお気軽に質問してくださいね。

また、本記事を読んで「良かった!」と思っていただけましたら「いいね」を押していただけると今後のモチベーションにもつながりますので、ぜひともよろしくお願いします!

ではでは〜


関連記事


いいなと思ったら応援しよう!