J2EE関連の最新トピックをわかりやすく解説

J2EE Watch [8]


Java開発用のIDEとしてEclipseはどう変わったか



スティルハウス
吉川和巳
2005/8/4




「もっさり感」が軽減された新バージョン

 今回は、Eclipseの新バージョン「Eclipse 3.1」を、プラットフォームという広い観点(eclipse.orgで新たに展開しているプロジェクトや、あらゆる言語の開発環境としての側面、リッチクライアントとしての側面など)からではなく、Java開発に使えるIDEとして、どのように使いやすくなったかについてレポートしよう。開発プラットフォームとしてのEclipse 3.1の紹介は、「Eclipse 3.1を使おう」(Java Solution)や他の機会に譲ることにする。

図1 Eclipse 3.1のWelcome画面

 Eclipse 3.1に触って最初に気付くのは、全体を通して比較的「さくさく動く」ようになった点です。本体の起動や終了は明らかに速くなっており、またEclipseユーザにはおなじみのコードアシスト(クラス名やメソッド名の選択肢のポップアップ表示機能)やクイックフィクス(コード修正機能)も高速化されています。例えば前バージョンの3.0では、Javaコード上でCtrl+1を押してからクイックフィクスがポップアップするまでワンテンポ遅れるようなこともありましたが、そうした「もっさり感」が全般的に解消されています。

 またJavaエディタ以外で目を引く変更点としては、新たに追加された「Helpビュー」があります。Eclipseのヘルプだけでなく、JavadocやGoogle、Eclipse.orgなどネット上のリソースの検索結果もワークベンチ内に表示できます(図2)。

図2 ワークベンチ内でJavadocやGoogleの検索が可能

J2SE 5.0を試したくなる支援機能

 今回のバージョンアップの目玉といえる部分は、J2SE 5.0で拡張された新しい言語仕様への対応です。特に、コードアシストやクイックフィクス、リファクタリングの各機能において「ジェネリック型」がサポートされ、Eclipse上でジェネリック型を積極的に活用する環境が整っています。例えば、以下のような“従来どおり”のコードを記述したとします。

  final List msgs = new LinkedList();
  msgs.add("hello");
  String msg = (String) msgs.get(0);

 するとJavaエディタ上には、ジェネリック型の利用を推奨するワーニングが図3のように表示されます。

図3 ジェネリック型の利用を推奨するワーニング

 そこで右クリック→Refactor→Infer Generic Type Arguments(ジェネリック型引数の推測)を選択すると、上記コードが以下のようにリファクタリングされます。addメソッドの引数の型から、赤色の部分が自動的に推測されるのが分かります。

    final List<string> msgs = new LinkedList<string>();
    msgs.add("hello");
    String msg = msgs.get(0);

 またJ2SE 5.0のもう1つの新機能であるアノテーションにも対応しており、例えば@Overrideや@Deprecatedなどのアノテーションを指定すべき部分を見つけると、クイックフィクスで指摘してくれます(図4)。

図4 @Overrideアノテーションの利用を促すクイックフィクス

 これらのほかにも、J2SE 5.0より導入されたコレクション操作用for文を生成するテンプレートをはじめ、クイックフィクスによる列挙型の定数の自動追加、意図しないオートボクシングの警告などが実装されています。もちろん、これらのJ2SE 5.0対応機能を利用するかどうかはプロジェクト単位で指定できます。

かゆいところに手が届くエディタとデバッガ

 Eclipse 3.1では、J2SE 5.0の新機能に限らずIDEとしての基本機能も強化されており、「かゆいところに手が届く開発環境」としての魅力がさらに増しています。例えばコード上で変数やメソッド、クラス名などのJavaエレメントをクリックすると、そのオカレンス(同ファイル内の同じJavaエレメントの記述)がすぐさまハイライト表示されます(図5)。これにより、コードの流れを目で追うのがぐっと楽になります。またcatch節内の例外クラス名をクリックすると、その例外をスローするコード部分をハイライト表示してくれます。

図5 クリックするとオカレンスをハイライト表示

 クイックフィクスも一段と進化しています。例えば以下のようなif文内の条件式を選択し、Ctrl+1を押します。

if (msg != null && msg.trim().length() > 0) {
}

 すると、この条件式を以下のようにさまざまに変換する選択肢がポップアップします。

操作 変換例
真偽を反転 msg == null || msg.trim().length() <= 0
丸カッコを追加 (msg != null) && (msg.trim().length() > 0)
左右を入れ替え msg.trim().length() > 0 && msg != null
否定で囲む !(msg == null || msg.trim().length() <= 0)
if文を分割 if (msg != null) {
  if (msg.trim().length() > 0) {

 この機能は、else節の前後のコードを入れ替えたいようなときに重宝するはずです。これまでのように「ドモルガンの法則を当てはめて……」と頭をひねりながら条件文を変更しなくても済みます。

 デバッガの新機能としては、モニタ取得の状態表示とデッドロック検出が目を引きます。Javaアプリケーションの実行を一時停止した状態で、デバッグビューのメニューに新たに追加された項目Show Monitorsを選択します。すると、各スレッドがどのモニタを取得しているか表示され、さらにデッドロック状態にあるスレッドが赤く示されます(図6)。

図6 スレッドのモニタ保持状態とデッドロック検出

Ant対応機能も大幅強化

 またJavaエンジニアであればJavaコードと同様にAntスクリプトを書く機会も多いと思いますが、Eclipse 3.1ではAnt対応機能もかなり強化されています。新バージョンでは「Antデバッガ」が用意されており、Antスクリプトのブレークポイント設定やステップ実行、プロパティ値の表示などが可能です(図7)。

図7 Antスクリプトもデバッグ可能に

 Antエディタも、以前より一段階レベルアップしています。上述した「クリックしてオカレンス表示」がAntエディタでも使えるだけでなく、Javaエディタと同様のハイパーリンク・ナビゲーションに対応します。Ctrlキーを押しながらターゲット名やプロパティ名をクリックすると、それらが定義されている部分にジャンプできます。

 以上、Eclipse 3.1の新機能を駆け足で紹介しました。バージョンアップとともに動作が重くなりつつあったEclipseでしたが、今回はそうした懸念も払拭されています。また、ジェネリック型やアノテーションをつい試してみたくなるJ2SE 5.0のサポート機能に食指を動かすプログラマーも多いはずです。「豊富なコンピューティング・パワーでプログラマーの創造性を引き出す」という、かつてのSmalltalkを思わせるプログラミング環境が、新しいEclipseの魅力といえるでしょう。




Java Solution全記事一覧

 



Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間