SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Azure Data Studio で GitHub Copilot を使用する

leave a comment

Azure Data Studio (ADS) 1.44 以降は、GitHub Copilot の拡張機能 (Extension) が含まれるようになり、SQL を記述する際に GitHub Copilot を活用することができるようになりました。

image

個人向けの GitHub Copilot (GitHub Copilot for Individuals) は使用できるようにしているので、Azure Data Studio ではどのように活用できるようになっているのかを確認してみました。

GitHub の設定

ADS に Extension の導入 / 設定については実際に試してみるとわかるので、GitHub 側の設定について触れておきたいと思います。

私が使用しているのは、個人向けの GitHub Copilot Individuals になり、GitHub copilot for Business については初期の設定が異なっています。

個人向けの GitHub Copilot の設定については、次のドキュメントから確認することができます。

実際の設定画面が以下となります。

image

  • 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 以外にも次のような情報が公開されています。

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 で集計する

 

実際に候補として提示された内容には次のような情報となっていました。

image

PIVOT を使用したクエリが提示されていますね。

クエリの入力補完として使用した場合は、次のような情報を提示してくれます。

image

 

候補の精度を高める

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 を開いていない場合は付加情報は送信されていないのですが、ファイルを開いている場合にはログに次のような情報が出力されています。

image

プロンプトとして使用する情報として、開いているファイルの内容が送信されていることが確認できますね。

ディレクトリや Database Project を開いていた状態 / Database に接続した状態であればファイルを開いていなくても自動的に関連する情報がプロンプトに含まれるようになると便利なのですが、現時点では明示的にファイルを開いておく必要があるようです。(自動的にプロンプトに含まれてしまうとセキュリティ的な懸念出てくるかもしれませんので、明示的に開くのが一番リスクが低いのかもしれませんね)

Share

Written by Masayuki.Ozawa

8月 9th, 2023 at 5:19 pm

Leave a Reply