🙂

お手軽簡単、Github CopilotにSQLを生成してもらうやつを作ったよ

2024/10/31に公開

これはなに

ども、レバテック開発部のもりたです。
弊社は開発体験向上/生産性向上施策の一環として、勤務しているメンバーにはデフォルトでGithub Copilotの利用が認められています。せっかくなので、今回はCopilotを使ってお手軽にSQLを生成してもらえる仕組み作りをやってみました。

なぜChatGPTを使わないんですか

できたら嬉しいクエリの自動生成ですが、実現するにあたって以下の要件がありました。

  • 会社のガバメント的にシステムの情報を流しても良いツールを使いたい
  • (本文記載の理由により)スキーマ情報にアクセスしやすい場所で実現したい

上記のニーズを満たす意味で、すでに会社で使用を認められている&VSC上で利用できるCopilotが採用されました。

やりかた

概要

今回工夫したのは次の3点です。

  • スキーマ情報
  • サンプルクエリ
  • プロンプト

それぞれ以下の通り解説します。

スキーマ情報

生成してもらうテーブル情報が必要となるため、テーブルを定義するものを用意しました。
ここはどんな方法で用意してもらってもいいんですが、もりたはMySQL Workbenchユーザなのでtable inspector機能からDDLを取ってきました[1]。また、ORMのスキーマ定義を流用できるならそれでも良いでしょう。

サンプルクエリ

こちらはCopilotに渡す「スキーマ情報を使ってどんなクエリを書くことができるか?」の参考情報です。
普段の運用作業だったり、過去の障害対応だったりで使ったクエリを引っ張ってきて、クエリの解説文とともに貼り付けました。

プロンプト

生成AIを使う時って、プロンプトを考えるのが面倒くさいですよね。なのであらかじめ大枠を用意しておきました。

@workspace
以下の「作成したいクエリの情報」「参考情報」をもとにクエリを作成し、作成したクエリの解説をしてください。
なお、「注意事項」の内容を守る他、スキーマ構成は「参考情報」にあるschemas.sqlのDDLを参照してください。
## 作成したいクエリの情報
/* ここに実行してほしいクエリの情報を載せる */
## 注意事項
- クエリパフォーマンスに留意してください
- whereで適切に対象を絞ってください
- 特に指示がない場合、limitで30件に絞ってください
- その他リスクがあるクエリを作成した場合は、どの点がリスクであるか示してください
## 参考情報
path/to/schemas.sql - スキーマ情報
path/to/sample_queries.sql - サンプルクエリ

このプロンプトは使い回しやすいよう、READMEに貼り付けています。

留意事項

上記のプロンプトでうまく動かすにはいくつかの前提があります。

  • 複雑だったりドメイン知識が要求されたり汚いテーブル設計だと精度が落ちる
  • その場合でも、サンプルクエリがあったりスキーマ情報のカラムコメントがしっかりしていれば良いクエリが出力される[2]

おわりに

今回はお手軽簡単にCopilotでのSQL生成をやってみました。工数ほぼかからないのと意外なほどちゃんとクエリを書いてくれるので、Copilotを入れてるところはやってみてはどうでしょうか。

参考情報

脚注
  1. テーブルが多い場合はinformation schemasから取るなどすると良さそう。あとできたら自動で更新されるようなGithub Actionsを仕込みたい ↩︎

  2. サンプルクエリを増やした時にどれくらい精度が上がるのかを検査したかったんですが、時間もなかったので割愛 ↩︎

レバテック開発部

Discussion