AIを利用して効率的なコーディングを実現しようという「IntelliCode」。その概要と、Visual Studio以外の環境で試す方法を紹介。
2018年5月に開催されたBuild 2018では多くの発表があったが、中でも開発者の心を躍らせたであろうものの1つがIntelliCodeだ。簡単にまとめれば「AIのチカラを借りてコードを記述する」というこの機能について本稿では見ていこう。
本稿執筆時点(2018年5月14日)ではプレビュー状態であり、IntelliCodeを使える環境はVisual Studio 2017 15.7以降、対応言語もC#のみとなっている(以降、Visual StudioはVSと表記)。また、現在のところは拡張機能として提供されている。
今も述べた通り、IntelliCodeは「AIを利用して、ソフトウェア開発の効率を向上させる」ためのもの。これまでのIntelliSenseも同様なツールといえるが、そこに「GitHubにある100以上のスターが付けられている2000超のリポジトリ」のコードを学習させた結果を適用することで、これまでよりもさらに高精度なサジェスチョンを行えるようにしようというものだ。
IntelliCodeは主に次のような機能を提供する(ことになっている)。
多くの機能については、MSDNブログの紹介記事「Introducing Visual Studio IntelliCode」の冒頭にある動画を見ることで、IntelliCodeがどんな機能を提供しようとしているかを把握できるだろう。ただし、この動画では前述のMSDNブログで「What's next?」に書かれているようなことも紹介されているが、本稿執筆時点のプレビュー版では利用できない機能が多いようだ。以下は、プレビュー版のIntelliCode拡張機能をインストールして、使用してみたものだ。
以下はIntelliCodeを無効化した状態で、文字列sに対して何かを操作しようとして、IntelliSenseによるサジェスチョンが表示されたところだ。
IntelliCodeを有効化すると、サジェスチョンは次のように変わる。「★」が付いているのがIntelliCodeによるサジェスチョンだ。上の画像ではアルファベット順に並んでいたものが、「2000以上のリポジトリから学習した」結果、先頭にLengthプロパティが表示されるようになった。
また、表示される候補はコンテキストに応じて変わる。つまり、現在、自分が入力している内容をIntelliCodeが(ある程度)理解して、その状況に応じた候補を提示してくれる。これが冒頭で述べた「コンテキストに対応したコード補完」である。
例えば、次のFooメソッドについて考えてみよう。
static void Foo(string filename)
{
if (File.Exists(filename))
{
var content = File.ReadAllText(filename);
Console.WriteLine(content);
}
}
ここではFile.Existsメソッドでファイルの存在確認を行った後に、File.ReadAllTextメソッドでその内容を一度に読み込んで、それをコンソールに出力している。実際に、コードを記述しているところを以下に示す。
上の画像を見ると分かるが、Fooメソッドにある2つの「File.」では異なる候補が提示されている。最初の「File.」では「Existsメソッド」が候補の先頭にある。まずはファイルの存在確認をしたいので、これは好都合だ。だが、ファイルがあることを確認した後は、実際にそれに対して何らかの操作をする段階となる。そのため、2つ目の「File.」では「Delete」「ReadAllText」の2つのメソッドの方が優先的に表示されるようになるということだ。
このように、現在入力しているコードの内容まで考慮して、適切と思われる候補を提示してくれるのは便利だ(VSでは既にRoslynによる動的なコード解析が行われていて、これにより例えば型スイッチやif文での型による分岐を行う際には、コンテキストに合わせた適切なコード補完が行われるようになっている。IntelliCodeはそうした機能をさらに進化させたものと考えてもよいだろう)。
ちなみにVS Live Shareでコラボレーションしている場合、ホストがVS 2017であれば、VS CodeからもIntelliCodeがどんなものかを確認できる。以下は先ほどのコードをVS Live Shareで共有して、macOS版のVS Codeから触っているところだ。候補に「★」が出ていることに注目されたい。
IntelliCodeのFAQページ(英語)では、「将来的にはC#以外の多くの言語、VSファミリーへの展開」も考えているとのことなので、VS CodeのユーザーやC#以外の言語のユーザーも対応版のIntelliCodeがリリースされるのを期待してよいだろう。
IntelliCodeを実際に試してみる方法はもう1つある。Try .NETはWebブラウザ内でC#コードを試せる「プレイグラウンド」だが、このサイトには既にIntelliCodeが実装されている。
手軽にIntelliCodeを試してみたい、Windows以外の環境を使っているが気になるという方はこちらで試してみるのもよいだろう。
ここで見た程度の小規模なコード(それから、本稿執筆時点でのプレビュー版の拡張機能の機能)では、それほどの価値は感じられないかもしれない。だが、GitHubはコードの宝庫であり、そこに蓄えられた知恵を機械学習によって精錬させた成果を自分のプロジェクトにも適用できることには大きな価値がある。
また、VSやその周辺ツールとIntelliCodeとの統合が進めば、単なる「コード補完ツール」ではなく、これまでには発見が難しかったバグの検出や、経験から得られる怪しいコードの発見、チーム内でのコーディングスタイルの順守などの面でも大きな価値が得られるはずだ。現在はまだプレビュー版だが、その進化に期待したい。
Copyright© Digital Advantage Corp. All Rights Reserved.