JetBrainsは,同社の人気製品であるIDEの最新バージョンとなるIntelliJ IDEA 2016.1をリリースした。このバージョンでは多言語開発者が想定されているらしく,多くの言語やテクノロジを対象としたさまざまな拡張が実施された。しかし,最も注目すべき拡張の対象はやはりJavaで,特にJava 8をフル活用するための支援が目標とされている。
まず最初に注目すべき点はバージョン番号だ。JetBrainsでは,すべての自社製品のバージョニング方式を変更中である。通常のセマンティックバージョニング(APIのバージョンに向いている)は使用していないが,従来よりも意味のあるフォーマットになっている。新しいバージョニング方式は2つの項目 — 公開年と,年内の順序数で構成される。変更の主な目的としては,メジャーリリース対マイナーリリースという考え方を廃して全リリースを前回リリースからの同等なインクリメントとして扱うこと,製品間のバージョンに整合性を持たせること,などが挙げられる。例えばバージョン2016.2のIntelliJ IDEAは,WebStorm 2016.2と同等の新機能を備える,という意味になる。
バージョン番号以上に,IntelliJ IDEA 2016.1を使用するJavaプログラマが最初に毎日経験することは,新たなインスペクションが追加されたことによる警告数の増加だろう。例えばOptionalというコンセプトは,Java 8以前はGoogle Guavaを使用することで可能になるものだったが,ネイティブなJava構造として追加されたことによって,一般的に利用されるようになったという経緯がある。比較的新しい概念であることから,最初にisPresent()によるチェックをしないでget()をコールしたり(NoSuchElementExeptionを被ることになる),あるいは配列やコレクションにOptionalを用いたり(空の配列やコレクションを用いた方が,定型的なコードを必要とせずに同じ概念を表現できる)といった,アンチパターンに陥るプログラマも多い。今回のIntelliJ IDEAでは,これらのシナリオすべてに対してインスペクションを行なえるようになった。
GuavaのOptionalは現在でも多くのコードベースで使用されているため,インスペクションでは,プログラマがどちらのタイプのOptionalを使用しているかをチェックする。ただし,IntelliJ IDEAがGuavaのOptionalのインスタンスを検出した場合には,別のインスペクションがJavaネイティブ版にマイグレートするチャンスとしてフラグを立てる。この処理パターンが成功すれば,同様のインスペクションを追加することで,同じような移行をプログラマに促すことができる可能性がある。例えば,現在よく使われているJodaTimeについて作者自身が推奨しているような,Java 8の新しい日付時刻ライブラリへの移行などだ。
最新バージョンの恩恵を受けられるのはJava言語だけではない。Kotlin 1.0がデフォルトでサポートされた,Scalaのコード補完が改良されてプロパティ名のサジェスチョンが可能になった,デバッグ時のWatch変数のセットアップにGroovyが使用できるようになった,JavaScriptにES6およびTypeScript 1.8のサポートが含まれた,などの改良点もある。さらにIntelliJ IDEA 2016.1では,Spring FrameworkとThymeleafのコーディング支援,Android用のメモリリークアクティビティのプロファイラ,Docker用の新プラグインなど,その他のテクノロジについてもサポートの改善が図られている。
新リリースにはよくあることだが,ユーザによる初期トラブルの報告が,特にSpring Framework関係で寄せられている。それでもJetBrainのブログや,あるいはRedditやHacker Newsなどのサイトでの同社の対応を見る限り,問題の大部分は迅速に対処されているようだ。