For the complete documentation index, see llms.txt. This page is also available as Markdown.

Supabase を使った Text to SQL

本記事では、MaiAgent で Supabase を使って Text to SQL 機能を利用する方法をご紹介します

Supabase とは?

Supabase は、現代的なアプリケーションの開発フローを簡素化することを目的としたオープンソースのプラットフォームサービスです。その主な特長は次のとおりです。

  • データベース: さまざまなデータを保存できます。

  • リアルタイム更新: データに変更があると、お客様のアプリケーションがすぐにそれを検知します。

  • アカウント管理: ユーザーのアカウントとパスワードを管理します。

  • 組み込みの認証機構:組み込みの認証機構により、ユーザー認証の管理フローを簡素化し、さまざまな認証方式を提供します。

  • API(データを取得する手段)の自動生成: シンプルな方法で、データベースからデータを取得できます。

Supabase を統合するメリットは?

  • 複数のレポートを横断的にクエリ:Supabase は複数のテーブルを相互に関連付けることをサポートしており、A レポートの値から B レポートとの関連を検索できます

  • インデックスを作成して検索効率を向上:ং繁にクエリする内容に対してインデックスを作成することで、AI アシスタントが必要な内容をより正確に検索できるようになります

Supabase を作成する

1. Supabase アカウントを作成する

  • まず、Supabase 公式サイト にアクセスし、「Sign in / Start your project(登録)」をクリックします。

まだ登録していない場合は、後続のステップに進めるよう、先にアカウントを登録してください

  • ログイン後、新しい組織を作成するか、既存の組織を使用して作業できます。組織の中でさらに project を作成します。各 project はそれぞれ独立したデータベースを持ちます。

2. Database(データベース)ページに入る

プロジェクトに入ったら、左側のナビゲーションメニューから Database > Tables ページを選択してデータを追加します

新しいテーブルを作成する

「New Table」をクリックして新しいテーブルを作成し、テーブルに名前を付けます。

Supabase では、新しいテーブルを作成する方法が複数用意されています。

  • 手動で列を追加: ゼロからテーブル構造を設計するのに適しています。列を一つずつ追加し、各列のデータ型やデフォルト値などを設定できます。

  • .csv/.tsv またはプレーンテキストをインポート: 特に既存のデータがある場合に、テーブルをすばやく作成するのに適しています。

    • 注意事項:

      • プレーンテキストファイルの 1 行目は列名でなければなりません。列同士はカンマ(CSV)または Tab(TSV、つまりキーボードの Tab キーを押したときのスペースの大きさ)で区切ります。

ここではデータのインポートを選択します。「Import data from CSV」をクリックし、Tab で区切られたテキストファイルを貼り付けて、下にスクロールするとテーブル化された結果を確認できます。インポートが完了したら「Save」を押します。

インポート方法を選択
プレーンテキストをインポート
結果のプレビュー

主キー(Primary Key)

インポートが完了すると設定ページに戻ります。このとき、必ず主キーを 1 つ指定する必要があります。主キーは身分証番号のようなもので、各データを識別するための一意の値として機能します。ここでは、顧客番号を主キーとして選択します。

外部キー(Foreign Key)

下にスクロールすると、Foreign key の指定が表示されます。Foreign Key(外部キー)は住所のようなもので、この住所を通じてそのデータの出所や、その他のより詳細なデータを対応付けることができます。

たとえば、「顧客データテーブル(Customers)」と「注文データテーブル(Orders)」の 2 つのテーブルがあるとします。

  • 顧客データテーブル(Customers):

    • 顧客番号(CustomerID) - 主キー

    • 顧客名(CustomerName)

    • 電話(Phone)

    • 住所(Address)

  • 注文データテーブル(Orders):

    • 注文番号(OrderID) - 主キー

    • 顧客番号(CustomerID) - 外部キー(顧客データテーブルの CustomerID を参照)

    • 注文日(OrderDate)

    • 合計金額(TotalAmount)

この例では、「注文データテーブル(Orders)」の「顧客番号(CustomerID)」が外部キーであり、「顧客データテーブル(Customers)」の主キーである「顧客番号(CustomerID)」を参照しています。この外部キーを通じて、各注文がどの顧客によって行われたかを知ることができます。

この例では、外部キーは Order Table に置くべきです。

関係の方向:

  • 1 人の顧客 → 複数の注文を持てる(一対多の関係)

  • 1 件の注文 → 1 人の顧客にのみ属する

外部キーの原則:

外部キーは「多」の側に置くべきです

したがって:

  • ✅ Order Table に customer_id(外部キー)を設定します。一対多の関係において「多」に対応する側だからです

  • ❌ Customer Table に注文情報を保存する必要はありません

したがって、Order Table 内に Customer Table の Customer ID を Order Table の Customer ID に対応付けるリンクを設定します。

関連付けが完了したら、「Save」を押すとデータベース間の関連付けを作成できます。

3. 作成完了

テーブルの作成が完了すると、完全なデータベースが手に入り、SQL 構文を通じてデータベース内のデータを検索できるようになります!

Supabase ツールの作成方法

MaiAgent で Supabase ツールを使用するには、AI アシスタントが Supabase 機能を利用できるよう、これを MCP ツールとして作成する必要があります。

ツールの紹介については、ツール機能の概要 をご参照ください

1

MCP サービスプラットフォームで Server を作成し、Supabase サービスと連携する

MCP ツールの連携方法については、Remote MCP サービスの概要 をご参照ください。現在、Supabase プラットフォームとの連携をサポートしているのは Composio プラットフォーム のみです

2

Composio で利用可能な機能を有効にする

Composio と連携する際は、追加、削除、クエリなどの基本的なデータベース操作の内容を有効にしてください。

3

構築した Supabase ツールを利用可能なツール一覧に追加する

MCP ツールの作成方法については、MCP ツールの作成 をご参照ください。

Supabase ツールの接続 URL

MCP サービスプラットフォーム上で server サービスを作成したら、URL に以下の処理を行ってください。

  1. ?include_composio_helper_actions=true」を直接削除します

  2. 新しい URL(MaiAgent のツールページに貼り付けます): https://backend.composio.dev/v3/mcp/12345678/mcp

ツールの作成が完了したら、AI アシスタントの設定で Supabase ツールをアシスタントの利用可能なツール一覧に追加してください。

Supabase ツールを使用した効果

MaiAgent の AI アシスタントと Supabase ツールを組み合わせることで、検索したいデータを日常的な言葉で記述するだけで、Supabase が自動的に対応する SQL 構文を生成し、リレーショナルデータベースから必要な情報を抽出します。

サンプルデータベース

🏢 1. Customers テーブル(顧客情報)

列名
主キー
必須
説明

顧客番号 (CustomerID)

顧客の一意の識別子

顧客名 (CustomerName)

顧客の企業名または個人名

顧客タイプ (CustomerType)

顧客の分類(例:小売業者、飲食店、販売代理店)

担当者名 (ContactName)

主要担当者の氏名

電話 (Phone)

連絡先電話番号

Email

メールアドレス

住所 (Address)

顧客の住所

地域 (Region)

地理的地域(例:北部、南部)

顧客ランク (CustomerLevel)

顧客の重要度ランク(A、B、C級)

🔑 主キー: 顧客番号 (CustomerID) 🔗 外部キー関連: なし


📦 2. Orders テーブル(注文情報)

列名
主キー
必須
説明

注文番号 (OrderID)

注文の一意の識別子

顧客番号 (CustomerID)

Customers テーブルに関連付け

注文日 (OrderDate)

注文の作成日

納品日 (DeliveryDate)

予定または実際の納品日

支払方法 (PaymentMethod)

支払方法(現金、クレジットカード、振込)

注文ステータス (OrderStatus)

注文の処理ステータス

合計金額 (TotalAmount)

注文の合計金額(数値型)

送料 (ShippingFee)

配送費用

🔑 主キー: 注文番号 (OrderID) 🔗 外部キー関連:

  • 顧客番号 (CustomerID)Customers.顧客番号 (CustomerID) (Orders の CustomerID が Customer テーブルの CustomerID に対応)


🛍️ 3. Products テーブル(商品情報)

列名
主キー
必須
説明

商品番号 (ProductID)

商品の一意の識別子

商品名 (ProductName)

商品名

商品説明 (Description)

商品の詳細説明

商品カテゴリ (Category)

商品の分類

ブランド (Brand)

商品のブランド

規格 (Size)

商品の規格またはサイズ

原価 (Cost)

商品の原価(数値型)

価格 (Price)

商品の販売価格(数値型)

在庫数 (StockQuantity)

現在の在庫数量(数値型)

🔑 主キー: 商品番号 (ProductID) 🔗 外部キー関連: なし

シナリオ 1:未完了の注文を追跡する

  • データベースの状態: Orders テーブルには、まだ完了していない注文が 2 件あり、それぞれ OR003OR004 です。

  • 自然言語の入力: AI アシスタントの問い合わせで、「まだ完了していない注文を教えてください」と入力するだけです。AI アシスタントが自動的にツールを呼び出し、SQL の構造化クエリ文を生成します。

  • Supabase の自動クエリ: AI アシスタントは自動的に Supabase ツールを呼び出し、お客様の自然言語を SQL クエリ文に変換します。例:

クエリ結果の応答と AI アシスタントの分析を総合し、AI アシスタントは以下の注文内容を優先度順に並べ替えて応答します。

Supabase ツールと AI アシスタントの協調により、未完了の注文を簡単に追跡でき、AI アシスタントが提供する分析と並べ替えの提案を得られます。これにより、注文をより効率的に処理し、顧客満足度を高めることができます。

シナリオ 2:未完了注文の顧客連絡先情報を照会する

  • OR003 はまだ処理中の注文で、顧客は CU003、担当者は黄採購です

  • 自然言語の入力: AI アシスタントの問い合わせで、「まだ処理中の注文について、誰に連絡すればよいですか」と入力します。AI アシスタントが自動的にツールを呼び出し、SQL の構造化クエリ文を生成します。

  • Supabase の自動対応クエリ:AI アシスタントとの対話内容はすべて注文テーブルに属するものですが、設定した外部キーの対応関係により、Supabase はここでの Customer IDCustomers テーブルの ID に対応していることを認識できます。そのため、返される内容は Customers テーブルの内容になります。

  • AI アシスタントの応答:ߙいて AI アシスタントが総合的に分析し、正しい担当者情報とその他の連絡方法を応答します

Supabase ツールを使えば、データベース内のテーブル間の対応関係を十分に活用し、複数の関連テーブルから情報を簡単に抽出して、AI アシスタントが提供する顧客名の一覧を得ることができます。テーブル間の対応関係と明確な定義により、データの関連性と一貫性が確保され、クエリ結果がより信頼できるものになります。

補足:

  • 実際のニーズに応じて自然言語の入力を調整できます。たとえば「今日まだ完了していない注文を教えてください」「VIP 顧客のまだ完了していない注文を教えてください」など、Supabase ツールはいずれも正確に解析してクエリを実行できます。

  • AI アシスタントは、在庫状況や物流情報など、その他の情報をさらに統合し、より包括的な注文分析を提供できます。

最終更新

役に立ちましたか?