JetBrains社は、Microsoft Visual Studio用の開発者向け拡張機能であるReSharperのAI搭載バージョンをリリースした。リリースされたReSharper 2023.2はAIを搭載した最初のバージョンとなる。
アーリーアクセスプログラム版は、プログラミングに関する質問に回答するAIアシスタントのプレビュー版が含まれている。.NET開発者はVisual StudioとReSharperによりAIアシスタントを使用して、、既存のコードのトラブルシューティングやリファクタリング、コードスニペットやドキュメントの生成、プログラミングに関する一般的な質問ができる。
AI機能を利用するには、JetBrains AI Servicesにログインし、AIアシスタントを有効にする必要がある。開発者がAI機能を使用する場合、ファイルの種類、使用言語、フレームワークなどの一部のコンテキスト情報は、大規模言語モデル(LLM)のプロバイダーと共有されるが、開発者がプロンプトにコードフラグメントを含めない限り、アシスタントがソースコードにアクセスすることはない。JetBrainsはまた、クラウドベースのLLMプロバイダーにデータが送信されないように、ローカルおよびオンプレミスのモデルをサポートする予定だが、機能はかなり制限される。
AIアシスタント機能はプロジェクトの言語とテクノロジーを考慮し、適切にフォーマットされたコード・スニペットを生成する。ユーザーは生成されたコードを自分でコピー&ペーストすることも、エディターにチャットボットがコードを挿入することもできる。この機能にはすぐに利用できるいくつかのプロンプトも含まれている。
以下は、"ソートされた配列から要素を見つけるには? "と入力されたときにAIアシスタント機能が生成した例である。
開発者がプロンプトにソースコードを使用した場合、ソースコードはLLMプロバイダーに送信され、AIモデルはコードを生成、説明、文書化できる。たとえば、"このクエリから値を読み取るにはどうすればよいか"という質問に対して、次のようなコードを生成する。
var connection = new SqliteConnection("DataSource=:memory:");var command = connection.CreateCommand();command.CommandText = "Select * from Item where value > ?";command.Parameters.Add(4);var reader = command.ExecuteReader();
AIアシスタントは、reader
を消利用するコードを生成し、それがどのように動作するかを説明する。
クエリから値を読み取るには、ExecuteReader()が返すSqliteDataReaderオブジェクトを使用する以下はその例であるwhile (reader.Read()){ for (int i = 0; i < reader.FieldCount; i++) { Console.WriteLine($"{reader.GetName(i)}: {reader.GetValue(i)}"); }}
このコードは、クエリが返す各行をループする。各行に対して、各フィールドをループし、フィールド名と値を表示するのだ。
また、AIアシスタント機能は最初のコードの断片で、接続、コマンド、リーダーが解放されていないことを発見し、それらが適切にクリーンアップされるようにコードをリファクタリングした。
コマンドを実行する前に接続し、終了後に接続を閉じることに注意する 以下に完全なコードを示す:using (var connection = new SqliteConnection("DataSource=:memory:")){ connection.Open(); using (var command = connection.CreateCommand()) { command.CommandText = "Select * from Item where value > ?"; command.Parameters.AddWithValue("value", 4); using (var reader = command.ExecuteReader()) { while (reader.Read()) { for (int i = 0; i < reader.FieldCount; i++) { Console.WriteLine($"{reader.GetName(i)}: {reader.GetValue(i)}"); } } } }}
このコードでは、使用後に SqliteConnection、SqliteCommand、SqliteDataReader オブジェクトが正しく破棄されるように using 文を使用している。
ReSharperはプロンプトの修正もサポートしている。元のクエリに修正やさらなる情報が必要な場合、開発者はリクエスト全体を再入力する代わりに、それを編集できる。これにより、元のチャットはそのままに、アシスタントとの新しいチャットが作成される。さらに、開発者はチャットの作成、複製、名前の変更、削除によってチャットを整理できる。
.NETコミュニティは、この発表を複雑な気持ちで受け止めた。元マイクロソフトMVPのSébastien Lachance氏は次のように述べている。
通常、私はベータ版をインストールしないのですが、ReSharperのAIアシスタントを見たとき、我慢できませんでした。最初のトライは成功でした!私の愛用ツールReSharperが劇的に良くなったのです。
.NET用の人気ORM、LLBLGen Proの開発者でありリード・デベロッパーであるFrans Bouma氏はがっかりしていた。
うっ、君もか...。頼むよ!テストには成功するかもしれないが、間違っているかどうかもチェックしないような定型的な、ジェネレーターによって生成されただけのつまらないコードにするのではなく、開発者によりよいコードを書かせることに投資してほしい。
JetBerain社のAIアシスタント機能は、GitHub CopilotやAmazon CodeWhispererのような他のAI搭載ツールと多くの共通点があるが、チャット履歴やALT+Enterなどすべてのショートカットでアクセスできるなど独自の機能も追加されている。
現在、本機能はOpenAIサービスが利用可能な国の限られたユーザーに限定されリリースされているのだ。AI機能はEAPプログラムの一部であり、価格情報については後日発表となる。またAIアシスタント機能はReSharper以外にもReSharper for C++、Riderでも利用可能だ。
また、このリリースではLINQクエリの破棄変数とインレイヒントに関する軽微な修正が含まれている。LINKクエリをデバッグする際に、開発者がクエリの各ステップの中間出力をインレイヒントとして確認できるのだ。