06

データベースとの連携:AIにデータを扱わせる

2025年7月17日
MCPデータベースSQLiteデータ連携SQL

AIが、あなたのデータを知っていたら

AIは膨大な一般知識を持っていますが、あなたの会社の顧客リストや、個人のタスクリストといったプライベートなデータについては何も知りません。もし、AIがこれらのデータに安全にアクセスし、活用できるとしたら、その可能性は大きく広がります。

この記事では、MCPを使って AIとデータベースを連携させる 具体的な方法を解説します。手軽に始められる SQLite を例にとり、データベースから情報を取得したり、新しい情報を書き込んだりするツールを作成するプロセスを学びます。

なぜデータベース連携が重要なのか

AIとデータベースを連携させることには、計り知れない価値があります。

  • パーソナライズされた応答: AIがあなたの過去の購入履歴や好みをデータベースから参照できれば、「あなたへのおすすめ」は格段に精度が上がります。
  • 業務の自動化: 「先月の新規顧客リストを作成して」という指示で、AIが顧客データベースにアクセスし、レポートを生成できます。
  • リアルタイムな情報活用: 株価や在庫状況など、常に変動するデータをAIが参照し、最新の情報に基づいた判断を下せるようになります。

要するに、「AIに静的な知識だけでなく、動的でパーソナルなデータを与えることで、その価値を飛躍的に高めることができる」からです。

ステップ1:準備(SQLiteとサンプルデータ)

今回は、セットアップが簡単なファイルベースのデータベースである SQLite を使用します。まず、データベースファイルと、簡単なテーブルを作成しましょう。

以下のPythonスクリプトを実行して、tasks.db というデータベースファイルを作成し、tasks テーブルにサンプルデータを挿入します。

# setup_db.py import sqlite3 conn = sqlite3.connect('tasks.db') cursor = conn.cursor() # テーブル作成 cursor.execute(''' CREATE TABLE IF NOT EXISTS tasks ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, status TEXT NOT NULL DEFAULT 'pending' ); ''') # サンプルデータ挿入 cursor.execute("INSERT INTO tasks (title) VALUES (?)", ('MCPの記事を書く',)) cursor.execute("INSERT INTO tasks (title, status) VALUES (?, ?)", ('牛乳を買う', 'done')) conn.commit() conn.close() print("データベース 'tasks.db' を作成しました。")

このスクリプトを実行すると、tasks.db ファイルが生成されます。

ステップ2:データを取得するツールを作成する

次に、このデータベースからタスクの一覧を取得するMCPツール get_tasks を作成します。このツールは、オプションでステータスによる絞り込みもできるようにします。

# server.py (一部抜粋) import sqlite3 def get_tasks(status: str = None): """タスクのリストを取得する。オプションでステータスによる絞り込みが可能。""" conn = sqlite3.connect('tasks.db') # 辞書形式で結果を取得できるようにする conn.row_factory = sqlite3.Row cursor = conn.cursor() if status: cursor.execute("SELECT id, title, status FROM tasks WHERE status = ?", (status,)) else: cursor.execute("SELECT id, title, status FROM tasks") tasks = [dict(row) for row in cursor.fetchall()] conn.close() return tasks

このツールのポイントは、sqlite3.Row を使って、結果を辞書(JSONオブジェクトに変換しやすい形式)のリストとして取得している点です。これにより、AIが扱いやすい構造化データを返すことができます。

ステップ3:データを追加するツールを作成する

続いて、新しいタスクをデータベースに追加するツール add_task を作成します。

# server.py (一部抜粋) def add_task(title: str): """新しいタスクをデータベースに追加する""" if not title: raise ValueError("タスクのタイトルは必須です") conn = sqlite3.connect('tasks.db') cursor = conn.cursor() cursor.execute("INSERT INTO tasks (title) VALUES (?)", (title,)) new_task_id = cursor.lastrowid conn.commit() conn.close() return {"status": "success", "added_task_id": new_task_id}

このツールでは、引数 title が空でないことをチェックする簡単なバリデーションを入れています。また、戻り値として、成功したことと、新しく追加されたタスクのIDを返しています。

AIとの対話シナリオ

これらのツールをMCPサーバーに登録すると、AIと以下のような対話が可能になります。

あなた: 「保留中のタスクを教えて」 AI: ( get_tasks(status="pending") を実行し、結果を受け取る) AI: 「『MCPの記事を書く』というタスクが保留中です。」

あなた: 「『プレゼンの資料を準備する』というタスクを追加して」 AI: ( add_task(title="プレゼンの資料を準備する") を実行し、結果を受け取る) AI: 「承知しました。新しいタスクとして追加しました。」

このように、AIがデータベースという「長期記憶」を持つことで、よりパーソナルで実用的なアシスタントになることができます。

まとめ

今回は、MCPを通じてAIとデータベースを連携させる方法を、SQLiteを例に解説しました。

  • データベース連携により、AIはパーソナルでリアルタイムなデータを扱えるようになる。
  • SQLiteを使えば、手軽にデータベース連携を試すことができる。
  • データを取得するツールでは、AIが扱いやすいように構造化されたデータを返すことが重要。
  • データを変更するツールでは、入力チェックや、処理結果を明確に返す設計が求められる。

データベースは、AIの能力を拡張するための最も強力な武器の一つです。あなたの身の回りにあるデータをAIと連携させることで、どのような新しい価値が生まれるか、ぜひ想像してみてください。

次回は、応用編の最後として、さらに外の世界と繋がる「API連携とWebサービス」について学びます。