rksoftware

Visual Studio とか C# とかが好きです

「コード理解の強化: Visual Studio 2022 17.11 の GitHub Copilot の機能」の確認

翻訳すると「コード理解の強化: Visual Studio 2022 17.11 の GitHub Copilot の機能」というブログ記事が公開されました。
devblogs.microsoft.com

内容気になるので見てみましょう。

■ 内容

チャットで次の機能が使えるとのこと

  • @workspace
    ソリューション全体を見て答えてくれるとのこと。プロジェクトでなくソリューションと書いてあるところが気になりますね。
  • #methodName, #classeName, #functionName
    メソッド、クラスが指定できるようですが、前述のソリューションと同じくどこまで見てくれるか気になります。
  • @github
    GitHub.com でリポジトリのインデックスを作成し、リポジトリ全体を見て答えてくれます。
    使用するには GitHub Copilot Enterprise が必要です。
  • Bing 検索
    問い合わせの内容に対して Bing 検索もして、その結果も踏まえて答えてくれるとのこと。例えば Copilot 自体が知っていることは学習時点 (過去のデータ) ですが、Bing 検索で最新の情報で答えてくれるということのようです。
    使用するには GitHub Copilot Enterprise が必要で管理者の許可がいるようです。またこの機能が使われるタイミングとして @github を使った時というのが例示されているようですが、ほかの使用パターンは言及がありません。@github でだけ使われるのかほかのパターンもあるけれど書かれていないのか......不明瞭です。

@githubBing 検索 は動作を確認してみるのに少し手間がかかるので他の機能を見てみましょう。

■ @workspace

ソリューションに実行プロジェクトとクラスライブラリプロジェクトを作ってクラスライブラリプロジェクトに 12 のクラスを 1 クラス 1 ファイルで作ってみました。
エディタのタブには実行プロジェクトの Program.cs だけを開いた状態にしました。

結果、両方のプロジェクトを見て (ソリューションを見て) 答えてくれました。が、全部は見てくれませんね。ソリューションの中から 3 ファイルが選ばれてその 3 ファイル (1クラス 1 ファイルなので 3 クラス) しか見ていません。

問い合わせの内容

@workspace クラスの数

回答

提供されたコードには以下のクラスが含まれています:
1.  Class8 (ClassLibrary1/Class8.cs)
2.  Class11 (ClassLibrary1/Class11.cs)
3.  Class12 (ClassLibrary1/Class12.cs)
合計で3つのクラスがあります。

■ #methodName, #classeName, #functionName

今回、12 のクラスを作りましたがそのクラスにはそれぞれ Test というメソッドがオーバーロードで 2 つ定義されています。
きちんとメソッド名として認識し、その名前を持つメソッド複数を見て答えてくれています。これはすごい。しかし別クラスの同名メソッドを見てしまうのがいいのかわるいのか。概要を理解するためと考えればいいのかもしれません。
しかし、ここでもすべてのクラスを見てくれないことは注意が必要です。Class11 と Class1 しか見ていません。本当は Class1 から Class12 まで 12 のクラスがあるのに。

問い合わせの内容

@workspace #Test

回答

提供されたコードには、Class11 と Class1 の2つのクラスが含まれています。それぞれのクラスには、Test メソッドが2つずつ定義されています。以下に各クラスの詳細を説明します。

~~ブログ執筆中略~~

メソッドの説明
• Test(short a): short 型の引数を受け取り、"ClassLibrary v2: short" とコンソールに出力します。このメソッドには OverloadResolutionPriority 属性が付いており、オーバーロード解決の優先度が低く設定されています。
• Test(long a): long 型の引数を受け取り、"ClassLibrary v2: long" とコンソールに出力します。
オーバーロード解決の優先度
OverloadResolutionPriority 属性は、メソッドのオーバーロード解決時に優先度を設定するために使用されます。ここでは、short 型の引数を受け取る Test メソッドの優先度が低く設定されています。
使用例
以下は、これらのメソッドを呼び出す例です。

~~ブログ執筆中略~~

このように、Class11 と Class1 の Test メソッドは、それぞれの引数の型に応じて適切なメソッドが呼び出されます。

本題ではないですが、OverloadResolutionPriority 属性を認識していますね。まだプレビュー機能なのに。これが Bing の力か……? ここも少し今後検証したいですね。

■ 素晴らしい機能だが注意も必要

素晴らしい機能です。特に #methodName は想像を超える機能でした。
しかしこれは仕方がないことなのですが見てくれるファイル数に制限があるようで、全部のコードは見てくれません。全部のコードを見たうえでの回答だと期待すると失敗します。そこだけは注意点ですね。
そういった すべての という場合は @github を使えということなのでしょう。