
2026/07/12 5:03
Show HN: Sqlsure – AI 生成 SQL 用の決定論的セマンティックチェック
RSS: https://news.ycombinator.com/rss
要約▶
日本語訳:
まとめ
sqlsure は、実行前に論理エラーと晒された機密データ(PII)を瞬時に検出することで絶対的なデータ信頼性を確保するために設計された決定論的な SQL 検証ツールです。マシンが動作可能とする修正を活用することで、AI エージェントに「下書き - 確認 - 修正」という簡略化されたワークフローを通じて自己修復能力を付与します。確率的なツールとは異なり、sqlsure はネットワークアクセスやデータベース接続を必要とせず、決定論的な辞書ルックアップによってエラーの検出を保証し、宣言された事実に基づいて検証が不可能な場合、「検証できない」と素直に返答します。CI パイプラインのためのオフラインセキュリティゲートとして効果的に機能し、CI ゲート、MCP サーバー、Vanna や WrenAI のようなテキストから SQL を生成するツール用のドロップインラッパーなど、様々な統合方法に対応します。ゴールドベンチマークに対する検証でゼロの誤検知を実現し、Mattermost や Fivetran などの主要な本番リポジトリにおいて FANOUT ジョインや可加性違反といった複雑な問題の検出に優れています。本プロジェクトは Apache-2.0 ライセンスを採用しており、詳細な文書は sqlsure.ai で入手可能です。Snowflake や Cube 向けの新しいアダプターは現在開発中であり、互換性を拡大する予定です。
本文
SQL の意味論的検証ツール「sqlsure」
AI が生成する SQL クエリは、構文エラーがない場合でも静的に誤った値を返すリスクがあります。
- JOIN による重複カウント
- 例:売上データを JOIN した際、収益が過大計上されるケース。
- 集計ロジックの不一致
- 例:平均計算なのに合計(SUM)が行われ、結果が爆発的に大きくなるケース。
- セキュリティリスク
- 例:患者 ID など、機密情報が外部に漏洩するケース。
従来のデータベース Lint ツールや独自検証を施した LLM の場合、こうしたロジカルな誤りを検出できません。sqlsure は、クエリを実行する前に 0.1 ミリ秒以内 に決定論的に正誤を判定し、エラーを防ぎます。
実証結果:証拠に基づく検証
既存の AI モデルが生成した SQL を「金標準(Gold Standard)」解答として適用したベンチマークで、以下の成果を検出しました。
- 異常検出
- 専門家によって作成された総数 2,568 のクエリに対し、45 の異常を特定。
- **0 の誤報(False Positive)**を記録。
- BIRD ベンチマークの検証
- BIRD デベロップメント環境の金標準解答では、不整合カテゴリーで厳密に 8 倍 の誤り検出能力を確認。
- スキーマ欠陥の発見
- 現在アップストリームで報告されているスキーマ上の欠陥も同様に検出。
仕組みと導入メリット
基本的な概念
sqlsure は、プロジェクト内で定義済み事実に基づいて SQL クエリを検証します。
- 検証の基準(ルール)
- dbt の「ユニーク性テスト」を
(粒)として使用。grain - 関係性テストを「結合多重度(Join Cardinality)」として使用。
- メタタグで「合計して安全」と明記する項目を管理。
- dbt の「ユニーク性テスト」を
- 維持コストの低さ
- 新しい言語やロジックも学習不要です。
- ルール集は手動でのモデル維持が不要な設計になっています。
- 動作特性
- 辞書検索方式のため、LLM の呼び出しコストがありません。
- 同じ入力に対して常に同じ判定を下します(決定論的)。
- オフライン動作により、ネットワーク依存もありません。
AI エージェントの自己修復
拒否されたクエリには機械が実行可能な修正提案を自動付与し、AI エージェントによる自己修復サイクルを実現します。
- フロー:下書き → 検証 → 修正 → 再検証 → 実行
- ベンチマーク結果:この修正プロセスにより、10 回中 10 回のクエリを正常に通過させることができました。
すぐに始める方法
Python API(推奨)
Python クライアントを使用して、意味論的な安全性を直ちに確認できます。
from sqlsure import SemanticModel, check violations = check(sql, model) # [] なら意味論的に安全
コマンドラインツール
スクリプトや dbt リポジトリ全体への監査も可能です。
# クエリの検証と修正 python check.py # 誤りクエリは拒否され、修正付きで承認される # dbt リポジトリ全体の監査とレポート作成 python -m sqlsure.scan path/to/dbt-repo --report report.md
3 つの活用シナリオ(エンドエンジン)
sqlsure を以下 3 つの方法でプロジェクトに組み込むことができます。
1. CI/CD ゲート
プルリクエストが収益重複カウントなどの違反を含む場合、マージを自動的にブロックします。違反がある場合は
exit 1 を返します。
python -m sqlsure.cli --model model.json query.sql
2. MCP サーバー(Model Context Protocol)
AI エージェントには実行前の検査を通らせた後でないと、アクションを実行させます。Claude や他の LLM にツールとして登録できます。
claude mcp add sqlsure -- python -m sqlsure.mcp_server --model /abs/path/model.json
- 詳細は MCP ドキュメント を参照してください。
3. ライブラリ埋め込み(SemanticGate)
Vanna や WrenAI などの「テキストから SQL」系製品、または AI エージェントフレームワーク内に
check() 関数を埋め込むことで、意味論的な評価指標をスコアリングに利用できます。
検証済みルール集 (v0.1)
以下の表は、sqlsure が検出する主要な問題とその重大度を示しています。
| ルール名 | 重大度 | 検出対象(具体例) |
|---|---|---|
| FANOUT | Error | 1対多の JOIN の後に、加法的度量に対して / を使用した場合 |
| CHASM | Error | 複数のファンアウト JOIN が互いに影響し合い、データが膨張(ブリンキー爆発)する場合 |
| ADDITIVITY | Error | 非加法的度量(割合・平均など)に対して を使用している場合 |
| SEMI_ADDITIVE | Error | スナップショット次元や国勢調査などを合計している場合 |
| JOIN_KEY | Error | 宣言された関係性とは異なる列で JOIN を行った場合 |
| CROSS_JOIN | Error | 条件(predicate)なしの CROSS JOIN を実行した場合 |
| WEIGHTED_AVG | Warning | ファンアウトによる再加重化された平均値が含まれる場合 |
| UNDECLARED_JOIN | Warning | 宣言されていない関係性による JOIN(検証不能=不安全) |
| SENSITIVE_COLUMN | Policy | 出力に PHI(健康情報)や PII(個人識別情報)が含まれている場合 |
- sqlsure は「問題なさそう」と曖昧な回答を返さず、「検証できません」という明確な結論のみ出します。
信頼性とセキュリティ特性
- 決定論的
- 同一の SQL とルール集であれば、常に同じ判定結果が出ます。
- オフライン動作
- ネットワーク呼び出しは不要。SQL クエリはお客様のマシンを離れません。
- データアクセスなし
- クエリのテキストのみをパースし、DB に接続したりデータを参照したりしません。
- テレメトリ収集なし
- 何らかの利用者データの収集を行いません(SECURITY.md を参照)。
- サプライチェーンセキュリティ
- PyPI Trusted Publishing (OIDC) を使用し、タグ付きコミットからの公開を行います。動作依存ライブラリは最小限です。
ルール集のサポート状況(出所)
sqlsure は以下のソースからルールを読み取り、意味論を検証対象とします。
- dbt (対応可能)
やmanifest.json
から既存のテストを強制可能な意味論として活用します。追加設定不要。schema.yml
- プライマリーキー/外部キー宣言 (対応可能)
- ベンチマーク監査の基盤となる簡易な定義に対応。
- ライブデータベース (対応可能)
により、カタログからルールを自動構築できます。sqlsure.introspect- SQLite の PRAGMAs、Postgres/MySQL の
を対象とします。information_schema
- 手書き JSON ファイル
のような独自フォーマットに対応。model.example.json
- MDL (統合ディレクトリ対応済み)
- OSI や WrenAI などの仕様書・マニフェストを読み込み、
などのマッピングを確認します。primaryKey → grain
- OSI や WrenAI などの仕様書・マニフェストを読み込み、
検証結果の再確認
- ベンチマークテスト
- 16/16 のルールテストを通過。
- Recall: 100% / False Positive: 0% を達成(METRICS.md)。
- 実稼動環境での検証
- Mattermost データウェアハウス、Fivetran パッケージ、dbt Jaffle Shop で確認済み。
- 詳細は TEST-REPORTS.md を参照。
- 外部監査
- Spider ベンチマークおよび BIRD の金標準クエリにおいて、ゼロノイズの正確性を証明。
さらに詳しく知る (ドキュメント)
- EVIDENCE: 主張に対する再実行可能な測定結果と機能一覧。
- ARCHITECTURE: ELI5 から専門家レベルまでの仕組み解説と中間出力例。
- FOR-DUMMIES: 初心者向けゼロからの概念解説。
- INTEGRATIONS: GitHub Action、pre-commit hook、Snowflake UDF などへの統合事例。
- CONTRIBUTING: 新ルールやロードャーの追加方法。
ライセンス: Apache-2.0
公式サイト: sqlsure.ai
MCP サーバー名:
io.github.sqlsure/sqlsure