Visual Studio Codeの拡張機能「Visual Studio IntelliCode」がJavaに対応したとのことで、早速試してみました。
12/2追記
Visual Studio CodeでなぜJava開発が可能か?について調べました。
「なぜVisual Studio CodeでJavaの開発ができるのか?」
Visual Studio IntelliCodeとは?
機械学習を用いてAIがコーディング支援してくれる機能で、GitHubにあるコードを学習データとして使っているそうです。
- AI-assisted coding comes to Java with Visual Studio IntelliCode
-
コーディングをAIが支援してくれる「Visual Studio IntelliCode」、Javaに対応。GitHubにあるコードを機械学習
環境
試したのは次の環境です。拡張機能にJava Extension Packのみ入れた環境を用意して確認しました。Language Support for Java™ by Red Hatは既にJava 11に対応しているため、今回はOpenJDK 11.0.1を利用しました。
- Windows 10 Pro(Azure上のVM)
- Visual Studio Code 1.29.1
- OpenJDK 11.0.1
- Java Extension Pack
- Language Support for Java™ by Red Hat
- Debugger for Java
- Java Test Runner
- Maven Project Explorer
- Visual Studio IntelliCode
結果
Hello World
まずはHello Worldの標準出力レベルで確認してみます。
Visual Studio IntelliCodeがない環境
Visual Studio IntelliCodeを入れる前の環境を試します。System.outでドットを打つとメソッド一覧が表示されますが、普通にアルファベット順に表示されています。
Visual Studio IntelliCodeを入れた環境
続いてVisual Studio IntelliCodeを入れた環境で試してみると、「★」マークが付いたものが表示されます。これがIntelliCodeによって推奨されたメソッドです。appendを指しているよりは嬉しいですね。
コンテキスト
先の例はシンプルすぎてあまり良さがわからないので、次のような例を試してみました。
Integer型の数値
Integerの数値を定義して、メソッドをみると、次のように並びます。
Integer型の数値 + if文
if文の条件で使ってみると先ほどparseIntやtoStringが並んでいたものが、equals、intValueなどが優先されました。このようにコードのコンテキストに合わせてAIが推奨してくれるようです。
現状どこまで有効な表示がでるかわかりませんが、ちゃんと機能しているようです。
おまけ
ちなみにJDK11で入ったHttpClientを試してみると、「★」が付いたものは表示されませんでした。この辺はまだ学習データがないのか、JDK11に対応していないのか、よくわかりませんでした。
[追記]
当初、以下の例で書いていました。
Integer val = new Integer(123);
Integerのコンストラクタは11ではdeprecatedになってるはずだけど警告が出ない?
— きしだൠ (@kis) 2018年11月17日
コメントいただいたとおり、deprecatedでVSCodeでも警告が出ていました。悪い例を書いてしまい、失礼しましたm(_ _)m