> For the complete documentation index, see [llms.txt](https://docs.maiagent.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.maiagent.ai/maiagent-user-guide/maiagent-user-guide-ja/tools/text-to-sql-supabase.md).

# Supabase を使った Text to SQL

## Supabase とは？ <a href="#what-is-supabase" id="what-is-supabase"></a>

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

* **データベース：** さまざまなデータを保存できます。
* **リアルタイム更新：** データに変更があると、お客様のアプリケーションがすぐにそれを検知します。
* **アカウント管理：** ユーザーのアカウントとパスワードを管理します。
* **組み込みの認証機構：**&#x7D44;み込みの認証機構により、ユーザー認証の管理フローを簡素化し、さまざまな認証方式を提供します。
* **API（データを取得する手段）の自動生成：** シンプルな方法で、データベースからデータを取得できます。

### Supabase を統合するメリットは？ <a href="#supabase-integration-benefits" id="supabase-integration-benefits"></a>

* **複数のレポートを横断的にクエリ：**&#x53;upabase は複数のテーブルを相互に関連付けることをサポートしており、A レポートの値から B レポートとの関連を検索できます
* **インデックスを作成して検索効率を向上：**&#x982;繁にクエリする内容に対してインデックスを作成することで、AI アシスタントが必要な内容をより正確に検索できるようになります

## Supabase を作成する <a href="#create-your-supabase" id="create-your-supabase"></a>

### 1. Supabase アカウントを作成する <a href="#step-1-create-supabase-account" id="step-1-create-supabase-account"></a>

* まず、[Supabase 公式サイト](https://supabase.com/) にアクセスし、「Sign in / Start your project（登録）」をクリックします。

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

<figure><img src="/files/n2DnelJAXPHblbIwNkvF" alt=""><figcaption></figcaption></figure>

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

<div><figure><img src="/files/DOQNy6dHXyEJEK8EcMMQ" alt=""><figcaption></figcaption></figure> <figure><img src="/files/9PV02oj2gcQm5lc5olIG" alt=""><figcaption></figcaption></figure></div>

### 2. Database（データベース）ページに入る <a href="#step-2-enter-database-page" id="step-2-enter-database-page"></a>

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

<div><figure><img src="/files/UrUSw4zQaccxD2y5uvuS" alt=""><figcaption></figcaption></figure> <figure><img src="/files/h5bZLEB4B3vvvPkUiwAV" alt=""><figcaption></figcaption></figure></div>

#### 新しいテーブルを作成する <a href="#create-new-table" id="create-new-table"></a>

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

<div><figure><img src="/files/5k8ViWkQVDA57FBwtC2v" alt=""><figcaption></figcaption></figure> <figure><img src="/files/XIkPgkGGaKqpclmBfl3e" alt=""><figcaption></figcaption></figure></div>

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

<figure><img src="/files/2EHvCXTRYqgrEkiqCpvn" alt=""><figcaption></figcaption></figure>

* **手動で列を追加：** ゼロからテーブル構造を設計するのに適しています。列を一つずつ追加し、各列のデータ型やデフォルト値などを設定できます。
* **.csv/.tsv またはプレーンテキストをインポート：** 特に既存のデータがある場合に、テーブルをすばやく作成するのに適しています。
  * **注意事項：**
    * プレーンテキストファイルの 1 行目は列名でなければなりません。列同士はカンマ（CSV）または Tab（TSV、つまりキーボードの Tab キーを押したときのスペースの大きさ）で区切ります。

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

<div><figure><img src="/files/SFp2iW0avk4JDaTxdpd7" alt=""><figcaption><p>インポート方法を選択</p></figcaption></figure> <figure><img src="/files/IY9agYvXmRBgxBaWhWh7" alt=""><figcaption><p>プレーンテキストをインポート</p></figcaption></figure> <figure><img src="/files/cTjhJCR9JgkJOmKZbSkW" alt=""><figcaption><p>結果のプレビュー</p></figcaption></figure></div>

#### 主キー（Primary Key） <a href="#primary-key" id="primary-key"></a>

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

<figure><img src="/files/ODdocpCwkx5fdlsAqXfn" alt=""><figcaption></figcaption></figure>

#### 外部キー（Foreign Key） <a href="#foreign-key" id="foreign-key"></a>

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

<figure><img src="/files/as5rHxsZzL9OkcPYzKxa" alt=""><figcaption></figcaption></figure>

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

* **顧客データテーブル（Customers）：**
  * 顧客番号（CustomerID） - 主キー
  * 顧客名（CustomerName）
  * 電話（Phone）
  * 住所（Address）
* **注文データテーブル（Orders）：**
  * 注文番号（OrderID） - 主キー
  * 顧客番号（CustomerID） - 外部キー（顧客データテーブルの CustomerID を参照）
  * 注文日（OrderDate）
  * 合計金額（TotalAmount）

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

{% hint style="info" %}
この例では、外部キーは Order Table に置くべきです。

**関係の方向:**

* 1 人の顧客 → 複数の注文を持てる（一対多の関係）
* 1 件の注文 → 1 人の顧客にのみ属する

**外部キーの原則:**

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

したがって:

* ✅ Order Table に `customer_id`（外部キー）を設定します。一対多の関係において「多」に対応する側だからです
* ❌ Customer Table に注文情報を保存する必要はありません
  {% endhint %}

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

<div><figure><img src="/files/OBnQVZ0ySfeYwMLL5FYW" alt=""><figcaption></figcaption></figure> <figure><img src="/files/Ox1PQQe8ENqCg2U6eq6V" alt=""><figcaption></figcaption></figure></div>

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

### 3. 作成完了 <a href="#step-3-setup-complete" id="step-3-setup-complete"></a>

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

<figure><img src="/files/g0ZuLE3tDIR77qsU0rrl" alt=""><figcaption></figcaption></figure>

## Supabase ツールの作成方法 <a href="#how-to-create-supabase-tool" id="how-to-create-supabase-tool"></a>

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

{% hint style="info" %}
ツールの紹介については、[ツール機能の概要](/maiagent-user-guide/maiagent-user-guide-ja/tools/tool_description.md) をご参照ください
{% endhint %}

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

MCP ツールの連携方法については、[Remote MCP サービスの概要](https://docs.maiagent.ai/tech/remote-mcp/remote-mcp) をご参照ください。現在、Supabase プラットフォームとの連携をサポートしているのは [Composio プラットフォーム](https://docs.maiagent.ai/tech/remote-mcp/composio) のみです
{% endstep %}

{% step %}
**Composio で利用可能な機能を有効にする**

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

{% hint style="warning" %}
Composio では基本的な内容が Important 内であらかじめチェックされているため、追加で設定する必要はありません。Important オプションがチェックされていることを確認するだけで十分です
{% endhint %}

<figure><img src="/files/23fKENQrSlWGI5mtt4n0" alt=""><figcaption></figcaption></figure>
{% endstep %}

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

MCP ツールの作成方法については、[MCP ツールの作成](/maiagent-user-guide/maiagent-user-guide-ja/build/setup.md) をご参照ください。

**Supabase ツールの接続 URL**

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

1. 元の URL（MCP Server から取得）：\
   [https://backend.composio.dev/v3/mcp/12345678/mcp?include\_composio\_helper\_actions=true](https://backend.composio.dev/v3/mcp/5987158a-806a-4c32-9ff6-4236e8891ac2/mcp?include_composio_helper_actions=true)
2. 「[?include\_composio\_helper\_actions=true](https://backend.composio.dev/v3/mcp/5987158a-806a-4c32-9ff6-4236e8891ac2/mcp?include_composio_helper_actions=true)」を直接削除します
3. 新しい URL（MaiAgent のツールページに貼り付けます）：\
   [https://backend.composio.dev/v3/mcp/12345678/mcp](https://backend.composio.dev/v3/mcp/5987158a-806a-4c32-9ff6-4236e8891ac2/mcp?include_composio_helper_actions=true)

{% hint style="danger" %}
上記の内容は必ず削除してください。削除しない場合、AI アシスタントは Supabase ツールを正しく使用できません
{% endhint %}
{% endstep %}
{% endstepper %}

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

<div><figure><img src="/files/Hibxt7C609QT6lkq9KjB" alt=""><figcaption></figcaption></figure> <figure><img src="/files/Ll0Esq5lZGlfij7yau6f" alt=""><figcaption></figcaption></figure></div>

{% hint style="danger" %}
ツール使用ページで必ず保存を押してください。押さないと AI アシスタントは依然として Supabase ツールを使用できません
{% endhint %}

## Supabase ツールを使用した効果 <a href="#supabase-tool-result" id="supabase-tool-result"></a>

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

### サンプルデータベース <a href="#example-database" id="example-database"></a>

#### 🏢 **1. Customers テーブル（顧客情報）** <a href="#id-1.-customers-biao-ge-gu-ke-zi-xun" id="id-1.-customers-biao-ge-gu-ke-zi-xun"></a>

<table><thead><tr><th width="242.3333740234375">列名</th><th width="98.6666259765625">主キー</th><th width="92.77777099609375">必須</th><th>説明</th></tr></thead><tbody><tr><td><code>顧客番号 (CustomerID)</code></td><td>✅</td><td>✅</td><td>顧客の一意の識別子</td></tr><tr><td><code>顧客名 (CustomerName)</code></td><td>❌</td><td>❌</td><td>顧客の企業名または個人名</td></tr><tr><td><code>顧客タイプ (CustomerType)</code></td><td>❌</td><td>❌</td><td>顧客の分類（例：小売業者、飲食店、販売代理店）</td></tr><tr><td><code>担当者名 (ContactName)</code></td><td>❌</td><td>❌</td><td>主要担当者の氏名</td></tr><tr><td><code>電話 (Phone)</code></td><td>❌</td><td>❌</td><td>連絡先電話番号</td></tr><tr><td><code>Email</code></td><td>❌</td><td>❌</td><td>メールアドレス</td></tr><tr><td><code>住所 (Address)</code></td><td>❌</td><td>❌</td><td>顧客の住所</td></tr><tr><td><code>地域 (Region)</code></td><td>❌</td><td>❌</td><td>地理的地域（例：北部、南部）</td></tr><tr><td><code>顧客ランク (CustomerLevel)</code></td><td>❌</td><td>❌</td><td>顧客の重要度ランク（A、B、C級）</td></tr></tbody></table>

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

***

#### 📦 **2. Orders テーブル（注文情報）** <a href="#id-2.-orders-biao-ge-ding-dan-zi-xun" id="id-2.-orders-biao-ge-ding-dan-zi-xun"></a>

<table><thead><tr><th width="235.88897705078125">列名</th><th width="92.66668701171875">主キー</th><th width="94.3333740234375">必須</th><th>説明</th></tr></thead><tbody><tr><td><code>注文番号 (OrderID)</code></td><td>✅</td><td>✅</td><td>注文の一意の識別子</td></tr><tr><td><code>顧客番号 (CustomerID)</code></td><td>❌</td><td>❌</td><td>Customers テーブルに関連付け</td></tr><tr><td><code>注文日 (OrderDate)</code></td><td>❌</td><td>❌</td><td>注文の作成日</td></tr><tr><td><code>納品日 (DeliveryDate)</code></td><td>❌</td><td>❌</td><td>予定または実際の納品日</td></tr><tr><td><code>支払方法 (PaymentMethod)</code></td><td>❌</td><td>❌</td><td>支払方法（現金、クレジットカード、振込）</td></tr><tr><td><code>注文ステータス (OrderStatus)</code></td><td>❌</td><td>❌</td><td>注文の処理ステータス</td></tr><tr><td><code>合計金額 (TotalAmount)</code></td><td>❌</td><td>❌</td><td>注文の合計金額（数値型）</td></tr><tr><td><code>送料 (ShippingFee)</code></td><td>❌</td><td>❌</td><td>配送費用</td></tr></tbody></table>

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

* `顧客番号 (CustomerID)` → `Customers.顧客番号 (CustomerID)` （Orders の CustomerID が Customer テーブルの CustomerID に対応）

***

#### 🛍️ **3. Products テーブル（商品情報）** <a href="#id-3.-products-biao-ge-shang-pin-zi-xun" id="id-3.-products-biao-ge-shang-pin-zi-xun"></a>

<table><thead><tr><th width="202.3333740234375">列名</th><th width="88.5555419921875">主キー</th><th width="100">必須</th><th>説明</th></tr></thead><tbody><tr><td><code>商品番号 (ProductID)</code></td><td>✅</td><td>✅</td><td>商品の一意の識別子</td></tr><tr><td><code>商品名 (ProductName)</code></td><td>❌</td><td>❌</td><td>商品名</td></tr><tr><td><code>商品説明 (Description)</code></td><td>❌</td><td>❌</td><td>商品の詳細説明</td></tr><tr><td><code>商品カテゴリ (Category)</code></td><td>❌</td><td>❌</td><td>商品の分類</td></tr><tr><td><code>ブランド (Brand)</code></td><td>❌</td><td>❌</td><td>商品のブランド</td></tr><tr><td><code>規格 (Size)</code></td><td>❌</td><td>❌</td><td>商品の規格またはサイズ</td></tr><tr><td><code>原価 (Cost)</code></td><td>❌</td><td>❌</td><td>商品の原価（数値型）</td></tr><tr><td><code>価格 (Price)</code></td><td>❌</td><td>❌</td><td>商品の販売価格（数値型）</td></tr><tr><td><code>在庫数 (StockQuantity)</code></td><td>❌</td><td>❌</td><td>現在の在庫数量（数値型）</td></tr></tbody></table>

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

### シナリオ 1：未完了の注文を追跡する <a href="#scenario-1-track-incomplete-orders" id="scenario-1-track-incomplete-orders"></a>

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

<figure><img src="/files/WGO6B4f9NVPbe4rxBUe4" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/VThSzTbsFtYEquk5Bjs2" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/Q0psiDNXGdtrmLoBUX1A" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/gbCwKwTtEU5np4yLvTwA" alt=""><figcaption></figcaption></figure>

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

### シナリオ 2：未完了注文の顧客連絡先情報を照会する <a href="#scenario-2-query-customer-contact-for-incomplete-orders" id="scenario-2-query-customer-contact-for-incomplete-orders"></a>

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

<figure><img src="/files/m32L9WKux6Jm7OlZ0K5e" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/CJBz3p5ReKTeEofvTeYy" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/F5RXHYIsLYD1e0D6lkaL" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/cgVKFX7ZfvT0DrhMiWwJ" alt=""><figcaption></figcaption></figure>

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

## **補足：** <a href="#additional-notes" id="additional-notes"></a>

* 実際のニーズに応じて自然言語の入力を調整できます。たとえば「今日まだ完了していない注文を教えてください」「VIP 顧客のまだ完了していない注文を教えてください」など、Supabase ツールはいずれも正確に解析してクエリを実行できます。
* AI アシスタントは、在庫状況や物流情報など、その他の情報をさらに統合し、より包括的な注文分析を提供できます。

{% hint style="warning" %}
ツールはデータベースに保存された内容のみを呼び出せます。分析が必要な場合は、必ずデータをデータベースにアップロードしてから分析を開始してください。
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.maiagent.ai/maiagent-user-guide/maiagent-user-guide-ja/tools/text-to-sql-supabase.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
