GitHub CopilotをVRChatのUdonSharpで使えるようにする方法

# はじめに
Github CopilotはGithubが提供するプログラマー向けAIアシスタントである。

https://docs.github.com/ja/copilot/getting-started-with-github-copilot

ChatGPTのように全文書かせるギャンブルをするのではなく、ある程度自力でできる人が補助的に使うことで開発を加速することができる。
これがなんか知らんけどUdonもバリバリ書いてくれて嬉しかったのでここに手順を残しておくことにする。

# 設定手順
## Github Copilotを契約する
何はともあれCopilotをゲットしよう。契約にはGitHubのアカウントが必要。
これは公式に詳しい説明があるので略。

https://docs.github.com/ja/billing/managing-billing-for-github-copilot/about-billing-for-github-copilot

60日間の試用版があるので無料で試せる。

## Visual Studioを2022にアップデートする
VRChatはUnity2019なので、インストール時に自動でセットアップされるのはVisual Studio2017である。
これは古すぎて使えないので、2022にアップデートしよう。
公式ページからVisual Studio Community 2022をダウンロードしてインストールする。

https://visualstudio.microsoft.com/ja/downloads/

これをインストールするとVisual Studio Installerというユーティリティがセットでついてくるので、起動する。
Visual Studio Community 2022の中に「変更」ボタンがあるので押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627722/dc85dad3-9c4c-ac23-1741-e73dd8ca951d.png)
ワークロードの中に「Unityによるゲーム開発」というのがあるので選択してインストールする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627722/6ebdda58-3ed7-98ae-1bc8-1bbe50061415.png)
※もしかしたらVisual Studioをインストールする時に最初から選択できたかもしれない気がしてきた。まあとにかく最終的に入ってればいいです。

## UnityがVisual Studio 2022を使用するように設定する
何でもいいので適当なUnityプロジェクトを開いて、ツールバーのEdit→Preferenceを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627722/fa0862c2-b16c-3ed3-c95b-998058d443e1.png)
External Toolsの項に「External Script Editor」というリストがあり、インストールに成功していればここにVisual Studio 2022が出現しているはず。これを選択して、「Regenerate project files」ボタンを押そう。これでプロジェクトが2022にアップデートされる。

この設定は他の全てのUnityプロジェクトに波及するので、アップデート前の他のプロジェクトを開いてVisual Studioがなんかおかしな動作をしたらこのボタンを押そう。

設定が正しくできていれば、UdonSharpの.csファイルを開いた時にVisual Studio 2022が起動するようになる。

## Visual StudioにGithub Copilotを設定する

UnityからVisual Studio 2022が開けるのを確認できたら、そのままVisual Studio 2022のツールバー→拡張機能→拡張機能の管理を選択して拡張機能の管理ダイアログを出そう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627722/eb3f665b-1b9e-9da3-17cc-ea61272aca77.png)

マーケットプレイスで「GitHub Copilot」と検索すると出てくるので、ダウンロードボタンを押そう。
このマーケットプレイスが曲者で、異常に接続が悪くてなかなか出してくれない。迂回路は無いので辛抱強く検索しよう。

拡張機能のインストールに成功するとGitHubと連携するための画面が出てくるので、ブラウザで連携を許可してVisual StudioとGitHubを連携させよう。
クリップボードに連携用のコードがコピーされた旨がVisual Studioのログに出るので、ブラウザ側ではペーストしてOKボタン押すだけ。
ここは1度しか出て来ないのでスクショは無しです。すみません。まあ見ればわかるって感じだった。

# 実際に使ってみる
インストールに成功したら、適当にUdonを書いてみよう。
何かしら入力すると、続きを想像して補完候補を出してくれる。
Tabキーを押すと候補が実際に入力される。
例えばこんな感じ。シンタックスハイライトされていないグレーの部分が候補である。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627722/9018c19a-0339-6228-7cc8-7bd83f437abe.png)
positionを設定する式を書くと、次の行でrotationもやるか？と訊いてくれる。
うんうん、よくあるもんね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627722/1ccbe427-0de6-99a4-33c0-dbe5826dc43d.png)
VRCPlayerApiのようなUdon特有の要素もちゃんと提案してくれる。
メソッド名と引数がわかりやすく書かれていれば、内容が正しい確率は上がる。
コメントを添えると更にいいらしいけどそれはまだあんまり試せてない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627722/e932a294-44ea-22c6-1837-fa3a31bf3779.png)
これ、Handの処理しかしないクラスなのでHead(=0)を無効値みたいな使い方をしており、_currentHandの宣言時にHeadを代入したりしているのだが、知ってか知らずかちゃんとReleaseと名の付くメソッドにこれを持ってくる辺りよくできている。この補完候補は完全に正しい。やるじゃん。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627722/a7d8a63c-2095-edb5-450f-37cea871049f.png)
定型みたいなのが前後にあると、メソッド1つ分を丸ごと提案してくることもある。
さすがにトンチンカンな内容のことが多いが、たまにほとんど完璧なものも出してくるのでチラッと目を通す価値はある。

# まとめ
ChatGPTのギャンブル性ととろくさい応答にウンザリしたらCopilot使おう。めちゃ速いし頼りになる。
候補が自分の欲しいものかどうか自分で判断できる程度のスキルは必要なので丸投げはできないけどね。