Azure Data Studio (ADS) 1.44 以降は、GitHub Copilot の拡張機能 (Extension) が含まれるようになり、SQL を記述する際に GitHub Copilot を活用することができるようになりました。
個人向けの GitHub Copilot (GitHub Copilot for Individuals) は使用できるようにしているので、Azure Data Studio ではどのように活用できるようになっているのかを確認してみました。
Contents
GitHub の設定
ADS に Extension の導入 / 設定については実際に試してみるとわかるので、GitHub 側の設定について触れておきたいと思います。
私が使用しているのは、個人向けの GitHub Copilot Individuals になり、GitHub copilot for Business については初期の設定が異なっています。
個人向けの GitHub Copilot の設定については、次のドキュメントから確認することができます。
実際の設定画面が以下となります。
- Suggestions matching public code
- Allow GitHub to use my code snippets for product improvements
の 2 つが GitHub Copilot として変更できる設定となります。
これらの設定の内容については、GitHub Copilot / Privacy ? Copilot for Individuals の情報も参考となります。
私はどちらも無効の状態としていますが、AI 生成の情報だけでなく、GitHub 上に Public に公開されているコードからのコード候補の検出と、プロンプトに使用した情報 / 候補としてサジェストされた内容を今後の製品改善のために活用することを許可するかの設定を行うことができるようになっています。
ADS + GitHub Copilot についての情報
既に公開から数か月経過していますので、冒頭で記載した Introducing GitHub Copilot for Azure Data Studio 以外にも次のような情報が公開されています。
- GitHub Copilot 拡張機能
- GitHub Copilot for SQL Developers: Turbocharge your SQL Development Workflow
- GitHub Copilot for Azure Data Studio to Boost Database Development Productivity – Part 1
- GitHub Copilot to Auto Generate Code for SQL Server Stored Procedures and Functions – Part 2
ADS で使用されている拡張機能は Visual Studio Code で使われているものと同等なはずですので、次の情報も参考になります。
Visual Studio Code については GitHub Copilot Chat も使用することができますが、ADS についてはこちらはまだ実装されておらず、GitHub Copilot のみ利用することができます。(Marketplace から vsix をダウンロードして加工すれば無理やり導入はできそうですが)
ADS + GitHub Copilot でできること
使用できる機能
機能として大きなものとしては次の 2 種類となるのではないでしょうか。
- コメントとして入力したテキストを基に自動的にコードを生成
- クエリの入力中に入力補完としてクエリの候補を生成
ショートカット
ショートカットとしては次の組み合わせを覚えておくとよさそうです。
- 次の候補: Alt + ]
- 前の候補: Alt + [
- 複数の候補の情報を新しいタブで表示: Ctrl + Enter
試してみる
コメントを使用した自動的なコード生成を試してみます。今回は次のようなコメントを入力して、Ctrl + Enter で複数の候補を出しています。
-- frontdoor.accesslog と frontdoor.ip_info を JOIN して、国ごとのアクセス数を PIVOT で集計する
実際に候補として提示された内容には次のような情報となっていました。
PIVOT を使用したクエリが提示されていますね。
クエリの入力補完として使用した場合は、次のような情報を提示してくれます。
候補の精度を高める
GitHub Copilot 拡張機能 には次のように記載されています。
エディターで T-SQL を作成する場合、Copilot は一般的な SQL 構文の候補を提供できます。 たとえば、2 つのテーブルを結合するクエリを作成する場合、Copilot は、開いているエディター内の列、ワークスペース内の他のファイル、および一般的な構文パターンから結合条件を提案します。
今回は ADS で試しているので、GitHub Copilit をサポートしている SSDT / Visual Studio で使用する場合は動作が異なっているのかもしれませんが、ADS では「開いているエディター内の列」しか提案される候補の内容に反映されていないように見えました。
DB のスクリプトを保存したディレクトリを開いた状態 / Database Project として開いた状態では、実際のテーブル定義の内容を考慮した候補は提示されませんでした。
-- frontdoor.accesslog と frontdoor.ip_info を JOIN して、先頭の 10 件を表示
このようなプロンプトを使用して候補を出してみたとします。
DB を構成するスクリプト (.sql) のディレクトリを開いた状態で候補を出してみると、次のようなクエリが候補として提示されます。
-- frontdoor.accesslog と frontdoor.ip_info を JOIN して、先頭の 10 件を表示するクエリ SELECT * FROM frontdoor.accesslog AS accesslog INNER JOIN frontdoor.ip_info AS ip_info ON accesslog.ip = ip_info.ip LIMIT 10
LIMIT で件数を制限されているのでそもそもとして SQL Server 向けのクエリではないのですが、結合列が実際のテーブル定義に合わせれた状態にはなっていません。
ディレクトリを開いた状態ではなく、クエリを構成する .sql ファイルを開いた状態で再度候補を表示してみると次のようなクエリが提示されます。
SELECT TOP (10) a.[time], <省略> FROM [frontdoor].[accesslog] a LEFT JOIN [frontdoor].[ip_info] i ON a.[clientIp] = i.[ip] ORDER BY a.[time] DESC;
JOIN で使用している結合列は実際のテーブル定義に即したものであり SQL Server 向けのクエリとなっていますね。
この辺の動作の違いについては、GitHub Copilit の拡張機能のログからも確認できます。.sql を開いていない場合は付加情報は送信されていないのですが、ファイルを開いている場合にはログに次のような情報が出力されています。
プロンプトとして使用する情報として、開いているファイルの内容が送信されていることが確認できますね。
ディレクトリや Database Project を開いていた状態 / Database に接続した状態であればファイルを開いていなくても自動的に関連する情報がプロンプトに含まれるようになると便利なのですが、現時点では明示的にファイルを開いておく必要があるようです。(自動的にプロンプトに含まれてしまうとセキュリティ的な懸念出てくるかもしれませんので、明示的に開くのが一番リスクが低いのかもしれませんね)