こんにちは。クックパッドでエンジニアをしている @morishinです。4年前に Bdash Serverというデータ分析 SQL を共有・再利用するアプリケーションを作って紹介しましたが、今回はそれをさらに発展させて AI にデータ分析 SQL を書かせる仕組みを作ったのでその紹介をします。
背景
データ分析において SQL を書くのは避けて通れない作業ですが、毎回ゼロから書くのは効率的ではありません。特に複雑な分析クエリや過去に似たような分析を行ったことがある場合、既存のクエリを参考にしたり再利用したりできれば大幅な時間短縮になります。
そこで4年前に分析 SQL の共有・検索ができる Bdash Server というアプリケーションを開発しました。これにより過去に書かれた分析クエリを蓄積し、キーワード検索で参考になるクエリを見つけることができるようになりました。今でも20件/日ほどのデータ分析結果がアップロードされシェアされています。
しかし、参考になるクエリを見つけても多くの場合は結局は手作業で SQL を書く必要があり、まだまだ効率化の余地がありました。そこで今回、AI に過去のクエリを参照させながら新しい分析 SQL を書いてもらう仕組みを作ってみました。 AI に「新しく提供した○○という機能はどれぐらい使われてますか?」って聞いて SQL が出てきたらうれしくないですか?
作ったもの
今回作ったのは主に2つです。
1. Bdash Server MCP サーバー
MCP (Model Context Protocol)は AI エージェントが外部のデータソースにアクセスするための標準プロトコルです。Bdash Server に MCP サーバーを実装することで、AI が過去にアップロードされたクエリを検索・参照できるようになりました。重要な点として、MCP サーバーは SQL 文とその説明のみを取得するため、AI が実際の顧客データにアクセスすることはありません。あくまでクエリの構造やロジックを参考にするだけです。
実装は https://github.com/bdash-app/bdash-server/pull/42のようになっており、search_bdash_queries
というツールを提供します。
Bdash Server の /settings にページの Add to Cursor ボタンからワンクリックでインストールできます。
2. データ分析用 Cursor ワークスペース
Cursorは AI エージェントが組み込まれたコードエディタです。データ分析のためのワークスペースの Git リポジトリを作成し、AI が分析 SQL を書くのに参考にすべき情報を思いつく限りリポジトリに詰め込みました。ディレクトリ構造はこんな感じです。
. ├── .cursor │ └── rules │ └── knowledge.mdc # Cursor ルール (後述)├── explain-dwh-query # クエリの実行プランを確認するスクリプト (後述)└── references ├── # ユーザーの行動ログの定義ファイルのリポジトリ├── # アプリケーションのデータベーススキーマファイル├── # 過去の分析クエリが詰まってるリポジトリ├── # 社内ダッシュボード (Tableau Server) にアップロードされてる SQL クエリが詰まってるフォルダ└── # 社内ダッシュボード用の集計テーブルを作るジョブが詰まってるリポジトリ
その上で Cursor の Project Rulesである knowledge.mdc
にその知識やツールの使い方を記述しています。例えば references
フォルダの中のどこに何があるかという情報、分析 SQL のスタイルガイドとベストプラクティス、Bdash Server MCP の使い方、クエリの実行プランの確認方法と最適化の指示などです。Project Rules も多くは自動生成であり、上記の情報をリポジトリに詰め込んでからルールの生成を Cursor 自身に指示することで大枠を作りました。
クエリの実行プランの確認のために、explain-dwh-query
という、標準入力にクエリを受け取って EXPLAIN 結果を返すスクリプトを作成して配置しています。これがあると AI がクエリコストの最適化をしてくれるだけでなく、カラム名が間違っていたりして実行できないクエリを事前に修正してくれたりします。専用のスクリプトを用意しているのは AI に自由にクエリを実行する権限を与えたくないからで、EXPLAIN しかできないツールを与えたかったためです。
実際の動作例
実際に使ってみると、次のような流れで分析 SQL が生成されます。
- 自然言語で分析したい内容を指示
- AI がリポジトリ内を grep したり Bdash Server から関連するクエリを検索
- 過去のクエリを参考にしながら新しい SQL を生成
- EXPLAIN で実行プランを確認しながらコストを最適化
例えばある機能をよく使っているユーザーを抽出したいと指示すると、下のスクリーンショットのように AI は過去の類似クエリを検索して SQL を生成してくれました。
また、クエリを書かせるだけでなくログに関する質問にも情報を漁りながら答えてくれます。
コスト最適化はこのように動作しています。
SQL を生成してもらうだけでなく、あの機能のログのイベント名なんだっけ?のようなライトな質問にも答えてくれて便利です。
今後の展望
AI の進歩により、これまで人間が手作業で行っていた多くの作業が自動化されつつあります。やっと分析 SQL を書く作業からも解放されそうです。この記事も一旦 AI に書かせてから加筆・修正しました。
Cursor のワークスペースという形で作りましたが、GitHub Copilot Agent や Cline や Claude Code でもルールと MCP サーバー設定を参照させれば同じように動くと思います。また Devin にも同じリポジトリを参照させれば Cursor を使うまでもなく Slack で指示をして SQL を納品してもらうこともできるのではないかなと思っています。(Bdash Server は社内ネットワークからしか接続できない場所にあるのでそれを使わせるのだけ難しいのですが...)
クックパッドのデータウェアハウスには dmemoというデータベースドキュメントがあり、最新のスキーマ情報と人間が書き込んだメモが閲覧できます。先日社内の別のメンバーが dmemo の MCP サーバーを作っていたことを知ったので、それも接続することで正確なスキーマ情報や人間が書いたカラムの説明文を取得することができるはずで、クエリ生成の質が上がりそうです。
さいごに
今回の取り組みは、過去に蓄積された知識を AI に活用させることで、より効率的な分析を実現する一例です。データ分析に携わる方々の参考になれば幸いです。
クックパッドでは、データを活用してサービスを改善していけるエンジニアの仲間を募集しています。興味のある方はお気軽にお声がけください!