はじめに
こんにちは、ACS事業部の瀧澤です。
普段Copilotを使っている中で、コード提案の元になるコンテキストはどのファイルまでを読み込んでいるのか、ふと疑問に思いました。
公式ページには以下のような記載があります。
GitHub Copilot は、編集中のファイルや関連ファイルのコンテキストを分析し、テキスト エディター内から候補の提示を行います。
今回はこの「関連ファイル」がどこまでの範囲を指すのか、確認してみます。
検証環境
- OS: macOS
- IDE: VSCode(Version: 1.79.2)
- GitHub Copilot(v1.94.220)
- 言語: python
IDEによって挙動が違うかもしれませんが、今回は個人的に普段使っているVSCodeでの検証をします。
準備
コンテキストとして読み込ませる事前情報を用意します。
github-copilot
という空ディレクトリの直下にcontext.py
という名前でファイルを作成、以下のような簡単なコードを記述します。
context.py
def add_numbers_with_print(a, b): print("aとbの足し算を行います") return a + b
※このコードを元に提案していると判断できるよう、日本語のprint文をつけています。
似たような名前で関数を定義しようとした時、上記コードを踏まえた内容を提案してくれるかどうかでファイルがコンテキストに含まれているか判断します。
同ファイル内だともちろんですが以下のように提案をしてくれます。
検証
同ワークスペース配下の別ファイル
github-copilot
ディレクトリをルートとしてVSCodeワークスペースを開きます。
まずはcontext.py
と同じ階層にファイルを作成した場合です。(サジェストを表示させたい方のファイル名はsuggest.py
にしています)
context.py
の内容を踏まえて提案してくれました。
次に適当なディレクトリ配下にsuggest.py
を置いた場合です。
github-copilot
配下に適当な複数階層ディレクトリ(a/b/c
、d/e
)を作成、その配下にそれぞれsuggest.py
とcontext.py
を配置してみます。(最初に作ったsuggest.py
は削除済)
ディレクトリを跨いでいてもcontext.py
の内容を汲み取ってくれました。
VSCodeのワークスペースで開かれている範囲のファイルはディレクトリの深い階層にあってもコンテキストに含まれる様です。
ワークスペース外のファイル
今度はワークスペース外のファイルについても確認してみます。
先程作成したディレクトリa
をワークスペースのルートとしてVSCodeを開きなおします。
context.py
はワークスペースに含まれていません。
当然と言えば当然ですが、context.py
の内容を反映した提案はされなくなりました。(ここで反映されていたらローカルのファイルシステムを全部読み込もうとしていることになってしまいますね)
しかし公式ページの説明にもあったように、context.py
ファイルを開きVSCodeで編集中の状態にすると、これまでと同様の提案がされる様になりました。
ワークスペースに関わらず編集中のファイルはコンテキストに含まれるということですね。
まとめ
VSCodeでの話になりますが、以下2点がわかりました。
- ワークスペース配下のファイルはコンテキスト対象
- ワークスペース配下外のファイルであっても、VSCodeで編集状態にすればコンテキスト対象となる
振り返ると当たり前の様な気もしますが、import等でコード的な依存関係がなくともワークスペース配下のファイルはコンテキストには入っている、ということがわかったのは収穫でした。
私達ACS事業部はAzure・AKSなどのクラウドネイティブ技術を活用した内製化のご支援をしております。ご相談等ありましたらぜひご連絡ください。
また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。