Visual Studio IntelliCode

そういえばBuildでIntelliCodeがGAしたんでした。
IntelliCodeはVisual Studioの拡張機能の1つで、コードから推論してより適切なメソッドなどをIntelliSenseで推薦してくれる機能です。

IntelliCode は、使用する可能性が高いものを入力候補一覧の最上位に配置することによって時間を節約できます。 IntelliCode の推奨は、星の獲得数が 100 を上回る、GitHub 上の何千ものオープンソース プロジェクトに基づいています。 コードのコンテキストを結合すると、入力候補一覧が調整されて共通のプラクティスのレベルが上がります。

あるように、基本的にはGitHub上で有名なコードの利用方法から学習したモデルを使って推論します。AI支援とか言われてますね。アルファベット順ではなくより適切そうなものを★付きで先に表示してくれます。
image

折角なんでVisual Studioでの細かいネタなど書いておきたいと思います。

Visual Studio Codeの場合

Visual Studio CodeにもIntelliCodeの拡張機能が用意されています。

今のところPython、Java、TypeScriptとJavaScript向けに機能が提供されてます。C#はまだないです。

Visual Studioの場合

Visual Studio 2019 (16.1)は組み込み機能で利用可。Visual Studio 2017 (15.8)以降であれば拡張機能をインストールすれば使えます。※組み込みといっても拡張機能を使うぽい気はします。

16.1以降であればインストーラーで個別項目のVisual Studio IntelliCodeをチェックすればOKかな?

image

なお拡張機能としてはGAしましたが一部言語などはPreview扱いのままとなります。今後に期待。サポート言語はC#・XAMLで、C++とJavaScript/TypeScriptはPreview扱いとなります。
※C++でのIntelliCodeはVisual Studio 2019以降など細かい制限もあります。(Visual Studio 用 IntelliCode の概要を参照)

インストール後はオプションで言語別にOn/Offなど行えます。
image

GitHubなどオープンなコードベースのモデルを使う場合は特に何もしなくても使えます。

コードスタイルの推論(Preview)

Visual Studioでの面白い点としてEditorConfigを自動生成してくれる機能があります。ソリューションで追加⇒「新しいEditorConfig (IntelliCode)」を選択すると、IntelliCodeがソリューション内のコードをベースに自動的に.editorconfigファイルを生成してくれます。
image

今のところC#のみでPreview機能を有効にしないと使えませんが、既存プロジェクトなどでゼロから沿ったものを作るのがしんどい場合などにどうぞ。(※あまり使いどころは無いかもしれませんね…)

C#のカスタムモデル(Preview)

一般的な推論はいいとしても、一般的ではないローカルのプロジェクトではあまり有効なIntelliSenseではないかもしれません。社内独自フレームワークや、プロジェクト間で利用しているライブラリなどでもAI支援を受けたい場合、IntelliCodeではカスタムモデルを作ることで対応することができます(Preview機能です)。カスタムモデルを使うには最初にコードを学習させてモデルを作成する必要があります。表示メニューから「その他のウィンドウ」→「IntelliCode モデルの管理」を選びます。(検索からIntelliCodeで検索しても可)
image
IntelliCodeのページが表示されるので「新しいモデルの作成」ボタンクリックでモデルを作成します。作成処理はバックグラウンドで実施されます。
image
学習が完了したらモデルの共有や削除などが行えるようになり、IntelliSenseも学習内容が反映されます。
image
コードが増えたりしたら再トレーニングしてみましょう。

注意点

  • C#のカスタムトレーニングは今時点でPreviewです。
  • トレーニングする際はソリューションを開いている必要があります。(フォルダーだとダメ)
  • カスタムトレーニングを使うにはVisual Studioにサインインしている必要があります。またトレーニング済みモデルの情報は自分のアカウントに紐づきます。(PCにも依存してるようで端末変わるとダメな気がする)
    ※アカウントに紐づくので、上記のモデルの管理ページではソリューション関係なく自分が作成したモデルは全部表示されます。(再トレーニングはそのモデルを作ったソリューションを開いていないとダメですが)

モデルの共有

作成したモデルは自分専用です。もし他の人と学習済みモデルを共有したい場合、モデルの管理ページの「モデルの共有」ボタンを選択します。
image

https://prod.intellicode.vsengsaas.visualstudio.com/get?m=xxxxxxxxxxxxxxxx

といったURLがクリップボードに入るので、それを共有したい人に教えます。
URLを受け取った人は「モデルを追加」リンクでURLを貼り付ければ学習済みモデルを利用することができるようになります。
image

もしNuGetパッケージなどでライブラリを公開しているのであれば、そのライブラリを適切に使ったサンプルコードでカスタムモデルを作成して公開することで、利用者が適切なIntelliSenseを得られるかもしれません。ライブラリ作者の人はぜひ検討して頂きたいところですね。

プライバシーとセキュリティ

基本的にカスタムモデルは自分のVisual Studioのアカウント(MSアカウントかな)で情報が管理されます。キーストロークの追跡、式・ステートメントやリテラル値全体のコードからの抽出はしませんが、クラスやメソッドの名前、それらの呼び出し頻度や状況などは抽出されて学習に使われます。

自分のコードに基づいてモデルをトレーニングするため、IntelliCode では、入力候補の値を推奨するためのモデルの作成に必要なコードの要素のみが抽出されます。 たとえば、クラスやメソッドの名前、およびさまざまな状況でそれらが呼び出される頻度が抽出されます。 IntelliCode では、キーストロークの追跡や、式、ステートメント、またはリテラル値 (文字列など) 全体のコードからの抽出は行われません。
抽出されたデータは、HTTPS 経由で IntelliCode サービスに送信されます。 その後、サービスでは、機械学習アルゴリズムを使って自分のコードに対するモデルのトレーニングが行われます。 コンピューターにモデルが返されて、そこで基本モデルと結合されます。

完全にローカルで完結しているわけでなく、管理含めてIntelliCodeのサービスとやり取りが発生していますので注意。
モデルを共有したときに得られるURL(prod.intellicode.vsengsaas.visualstudio.com)を知っていれば誰でもモデルを共有・利用できます。また実際には共有の有無を問わず該当URLでモデルの管理はされています。※prod.intellicode.vsengsaas.visualstudio.comとのやり取りがあります。

まあクラス名やメソッド名に機密情報が含まれたりは無いかもしれませんが(ほんと?)、会社などでNGなポリシーはあり得るので、気になる人はカスタムモデルを作成するのをそもそも止めておきましょう。

実際にどのようなデータが抽出されたかは学習したときのデータを見ましょう。”%TEMP%\Visual Studio IntelliCode” フォルダーに学習時のデータがあります。(学習毎にIDがふられるのでその中)
UsageOutputフィルダー内のJSONファイルが実際に抽出されたデータになります。
image
こんな感じでメソッドなどが抽出されてます。
image
これらのデータを使ってモデルを作るようで、作成されたモデルの実体はAppData内にあるようす。
C:\Users\xxxxx\AppData\Local\Microsoft\VisualStudio\16.0_xxxxx\IntelliCodeModels
フォルダー(IDなどはインスタンスによる)などにおそらく暗号化された学習済みモデルがあります。
image
※このファイルと必要な情報だけ別PCにコピーしてもうまくいかなかった

実体に関しては不明ですが、少なくとも学習時の抽出データについてはドキュメントにもあるので間違いはないです。

モデルの削除

モデルの管理ページでモデルの削除を選択すればオンライン上でもモデルの削除はされると思いますが、より完全にデータを削除したい場合はVisual Studioのアカウントから vsintellicodedata@microsoft.com 宛に削除要求を送りましょう。

全体的な注意点

IntelliSenseを拡張したり変更する拡張機能がインストールされている場合、IntelliCodeとバッティングする場合があります。(IntelliCodeもIntelliSenseを拡張しているので)
またIntelliCodeが推薦した項目が選ばれたかどうかなど一部利用状況などのテレメトリがMicrosoftに匿名で送信されたりします。気になる人は「Visual Studio エクスペリエンス向上プログラム」に参加しないようにしましょう。

あと拡張機能が非同期ロードになったのでVisual Studio起動直後やソリューション開いた直後はうまく表示されなかったり、IntelliCode関連のメニューが表示されないかもしれません。しばらく待ちましょう。

まとめ

IntelliCodeを使ってもっと開発が楽になればいいですね。あと今回の情報他はdocs.microsoft.comに載っているのでそちらを参照ください。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中