0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Codeで日本語→SQL生成ツールを作った【使い方ガイド】

0
Last updated at Posted at 2025-10-03

1. このツールで何ができるか

「30代の会員は何人?」

こう日本語で質問するだけで、自動でSQLを生成・実行してくれるWebアプリケーション natural2sql を作りました。

demo.gif

データベースに対して自然言語でSQLを生成・実行します。主な特徴は:

  • 自然言語でデータベース検索: 「評価4以上のイタリアンレストランは?」と聞くだけ
  • カスタムDB対応: 自分のSQLite/MySQLデータベースにも接続可能
  • 論理名・ビジネス用語対応: 業務特有の言葉をAIに理解させられる
  • サンプルデータベース付属: すぐに試せます。

GitHub: https://github.com/yo2158/natural2sql


2. 試してみるには

以下は簡略版です。詳細な手順はGitHubのREADMEを参照してください。

前提条件

セットアップ手順

ステップ1: リポジトリをクローン

git clone https://github.com/yo2158/natural2sql.git
cd natural2sql

ステップ2: 依存関係をインストール

pip install -r requirements.txt

ステップ3: 環境変数を設定

cp .env.example .env

.envファイルを編集して、最低限以下を設定:

# Gemini API設定(ここだけ自分のAPIキーに変える)
GEMINI_API_KEY=your_gemini_api_key_here

# データベース設定(設定済み)
DB_TYPE=sqlite
DATABASE_PATH=data/restaurant.db

# 論理名・ビジネス用語定義(設定済み)
LOGICAL_NAMES_PATH=config/logical_names_sample.csv
BUSINESS_TERMS_PATH=config/business_terms_sample.jsonl

ステップ4: アプリを起動

streamlit run app.py

ブラウザが自動で開きます(開かない場合は http://localhost:8501 にアクセス)。

サンプルデータベースについて

付属のサンプルDBはレストラン予約システムのドメインで、以下のデータが入っています:

  • 会員: 10,000人
  • レストラン: 200店舗
  • 予約: 20,000件
  • レビュー: 3,400件

スキーマはドキュメントだけでなく、画面からも呼び出して確認できます。


3. 基本的な使い方

自然言語で質問する

アプリが起動したら、検索ボックスに日本語で質問を入力してみましょう。

例1: 単純な集計

入力: 30代の会員は何人いますか?

→ 自動で以下のようなSQLが生成・実行されます:

SELECT COUNT(*) FROM members WHERE age BETWEEN 30 AND 39

例2: 少し複雑な条件

入力: 評価4以上のイタリアンレストランを表示して

→ 以下のようなSQLも生成されます:

SELECT r.name, AVG(rv.rating) as avg_rating
FROM restaurants r
JOIN reviews rv ON r.id = rv.restaurant_id
WHERE r.genre = 'Italian'
GROUP BY r.id, r.name
HAVING AVG(rv.rating) >= 4
ORDER BY avg_rating DESC

エラー自動修正

SQLに間違いがあってエラーとなった場合、AIが最大3回まで自動で修正を試みます。

例えば「休眠会員は何人?」と質問した場合、もしカラム名を間違えても、エラーメッセージを見て自動修正してくれます。

検索結果の活用

  • テーブル表示: 結果は表形式で表示
  • CSV出力: 「CSVをダウンロード」ボタンで結果をエクスポート可能

4. 自分のデータベースで使う

サンプルDBだけでなく、既存のデータベース(SQLite/MySQL対応)に接続することもできます。

カスタムDB接続(SQLite)

.envファイルを編集:

DB_TYPE=sqlite
DATABASE_PATH=/path/to/your/database.db

カスタムDB接続(MySQL)

DB_TYPE=mysql
DB_HOST=localhost
DB_PORT=3306
DB_USER=your_username
DB_PASSWORD=your_password
DB_NAME=your_database_name

論理名定義(重要!)

このツールは論理名定義CSVがないとまともに動きません。サンプルDBには完備されていますが、カスタムDBを使う場合は自分で生成する必要があります。

もし試される場合は、CUSTOM_DATABASE.mdにガイドを掲載していますので、参照してください。

論理名定義CSVの例:

physical_name,logical_name
users,ユーザーマスタ
orders,注文トランザクション
user_id,ユーザーID
order_date,注文日

ビジネス用語辞書

業務特有の用語をJSONLに定義することで、定義できます。

例(config/business_terms.jsonl):

{"term": "休眠会員", "definition": "90日以上予約していない会員"}
{"term": "常連客", "definition": "月1回以上予約している会員"}

.envで指定:

BUSINESS_TERMS_PATH=config/business_terms.jsonl

5. 重要な注意事項

このツールは技術検証目的で作成しており、以下の制約があります:

⚠️ 完璧な精度は保証できません

  • AIが生成するSQLは必ずしも意図通りとは限りません
  • 特に複雑なクエリほど誤りが含まれる可能性があります
  • 実行結果について開発者は責任を負いません

⚠️ 本番環境での利用は非推奨

  • パスワードは平文保存(.envファイル)
  • あくまで開発・検証用途です

6. まとめ

natural2sql は、AIの力を借りて、日本語でSQL生成、データベース検索ができます。

  • サンプルDBですぐ試せる
  • 自分のDBにも接続可能(論理名定義の準備が必要)
  • ビジネス用語でカスタマイズ可能

詳細については、GitHubのREADMEを参照してください。


このツールの開発につかったClaude Codeについて、別記事で書いています:
Claude Codeと開発した自然言語SQL生成アプリ ― AI駆動開発と私

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?