EclipseとIntelliJ IDEAの比較

仕事でIntelliJを使うことになって大体1年くらいが経過した。今までEclipseしか使ったことがなかったが、世間的な評価はどちらかというとIntelliJのほうが高い気がするので、どんなもんかはある程度気にはなっていた。とりあえず使ってみるといいところもあるがいくつか気になった点もあったので、自分の主観で簡単にまとめてみた。

IntelliJ IDEAの良い点

修正の提案が優秀

例えば以下のようなコードがある。

public class Main {
    public static void main(String[] args) {
        Collection<Integer> nums = Arrays.asList(1, 2, 3);
        if (nums.stream().filter(num -> num % 2 == 0).findAny().isPresent()) {
            System.out.println("偶数あり");
        }
    }
}

配列の中から偶数があるかどうかを確認するコードだが、IntelliJで実際に記述するとfilter以降が黄色?で表示され、修正を提案してくる。Alt+Enterで提案通りに修正すると、以下のようなコードに修正してくれる。

public class Main {
    public static void main(String[] args) {
        Collection<Integer> nums = Arrays.asList(1, 2, 3);
        if (nums.stream().anyMatch(num -> num % 2 == 0)) {
            System.out.println("偶数あり");
        }
    }
}

要はもっといい記述があればそれを提案してくれる。どの程度まで提案してくれるかは不明だが、自分は特にStream API関係でシンプルな記述が出来ていないことがよくあったので、そのあたり何度も助けてもらったし、勉強にもなった。
もっとも、はじめからちゃんとシンプルな記述ができていればお世話になることもないが……

コード補完が優秀

体感だがコード補完の提案速度がEclipseよりも早い気がする。コードを打ち込んでいる最中でも提案をしてくれるのも助かる。
後者はEclipseでも設定することでなんとかなるが、いちいち設定するのも面倒だしなぜか自分のEclipseだとバグることが多い。

不要なクラスやメソッドを教えてくれる

プロジェクト内でどこからも参照されていないクラスやメソッドがあると、そのクラス名(およびメソッド名)が灰色で表示されるようになる。ちゃんとバージョン管理できていれば不要になったクラスやメソッド等は削除してしまいたいので、地味に助けになる。

デフォルトでオートセーブ

ひょっとしたらEclipseでも同じことはできるのかもしれないが、オートセーブは結構便利なことが分かった。これもデフォルトで有効になっているので、いちいち設定しなくていいものありがたい。

IntelliJのいまいちなところ

警告が若干過剰

以下のようなメソッドがあったとする。

public void test1(String str) {
    test1(str, 1);
}

public void test1(String str, int num) {
    System.out.println(str + num);
}

普通にオーバーロードしてあるだけだが、これでプロジェクト内で上のメソッドしか呼び出されていない場合、下のメソッドのほうは「privateでよくない?」的なメッセージを出してくる。こういう提案に助けられることもあるが今後の拡張性を考えて別メソッド等を用意していることもあるので、全部ひとまとめにメッセージを出してくるのは正直邪魔に感じることがある。

保存時のコードフォーマットがない

Eclipseだとオプションでコード保存時にフォーマットをかけることが出来るが、IntelliJだとできない気がする。何か見落としているだけかもしれないが。
一応マクロ的なのを設定することでなんとかできるというのを見たことはあるが正直そこまでしないといけないのは面倒だし、できればEclipseのようにオプション一つでなんとかなってほしい。
チーム開発しているとフォーマットされていないコードに出会うことが何度もあったので、地味に一番困った。

※追記
プラグイン入れればいけるらしい。
Save Actions - IntelliJ IDEs Plugin | Marketplace

※2023/04追記
上記のプラグインはいつの間にかdeprecatedになっていた。ただその代わりデフォルトで保存時のフォーマットが出来るようになっていた。

nulltemp.hatenablog.com

リソースの閉じ忘れは警告してこない

Scannerクラス等クローズ処理が必要なクラスを宣言してクローズ処理を書いていないと、Eclipseの場合は警告を出してくる。ただ、IntelliJだと特に何も言ってこない。
他の補完は優秀なのに、こういう違いがあるのは何なんだろうか……

まとめ

結構一長一短あるような気がするが、まだ使いこなせている感じがしないので多分もっと色んな利点がIntelliJにはあるのだろう。まだプライベートではEclipseを使っているが、ひょっとしたらプライベートでもIntelliJを使うようになるかもしれない。
ちなみにIntelliJは日本語化して使っていたが、この状態でIntelliJ自体をアップデートすると立ち上がらなくなることがあったので、IntelliJは日本語化せず使うか、日本語化する場合はIntelliJ自体のアップデートをしてはいけない。