- PR -

IntelliJ IDEA 3.0の新機能

投稿者投稿内容
miki
大ベテラン
会議室デビュー日: 2001/09/21
投稿数: 174
お住まい・勤務地: 東京都八王子市
投稿日時: 2002-05-01 12:28
IntelliJ IDE 3.0の新機能についてご紹介します。
(企業向きでも、メジャーでもなく、趣味の範疇なので「開発ツールはどこがメジャーなのでしょうか?」のスレッドから引っ越しました)

リファクタリング機能を持つJava IDE IntelliJ IDEA は米国では人気のあるIDEのひとつだと思いますが、現在のバージョンの2.5.xでは日本語を正しく扱えないという致命的な欠陥があるため、日本では利用者はまだそれほどいないと思います(IntelliJのサポートからの情報によると、この夏にリリース予定のIDEAの次のメジャーバージョン 3.0ではunicode対応をおこなうということです)。

さて、このIntelliJでは3.0のearly access版が公開されていましたので、早速ダウンロードして使ってみました。この版(ビルド番号620)はunicode対応はまだ入っていませんが、昨日1日使ってみて次のような便利な機能が追加されていることに気が付きました。

[新機能リスト]
・使用されていないimport文や変数をハイライトする。
・文法エラーではなく警告はスクロールバー右横の該当する場所に黄色い横線が引かれる。
・javadoc内のコメントの文法エラー(@seeの参照先が存在しない場合等)を赤色で表示する。
・マウス右ボタンメニューでGo to Implementation(s)が追加された。
・Project Viewでパッケージの右ボタンメニューでLayout Codeが追加された。
・Project Viewでパッケージの右ボタンメニューでInspect Codeが追加された。
・XMLの編集が強化された。DTDに従ったエラー表示とコード補完。

この中で本当に便利だと感じたのはGo to Implementation(s)です。
Javaではファクトリなどでintefaceを使うことが多く、その実装を簡単に特定できる機能は他人の書いたコード解析に役立ちます。

IDEAではすでにソースコード上の右ボタンメニューで次の機能をもっています:
・Find Usages: メソッドの呼び出し元(caller)と実装の検索
・Go to Declaration: クラス、フィールド、メソッドの定義箇所へジャンプ
・Go to Type Declaration: 型の定義箇所へジャンプ
・Go to Super Method: オーバライドしている場合、superメソッドへジャンプ

IDEAではとかく見た目の派手な機能が注目されると思いますが、膨大な量のソースを読む必要があるとき、これらのコード検索機能を使うと、grepのような単純な検索よりもはるかに生産性が向上します。私がIDEAの機能で最もすばらしいと感じるのはこのような検索機能・ソースブラウザとしての当たり前の機能をキチンと実装していることです。

たとえば、Container#invoke()というメソッドの利用状況を検索したいときに、InvocationHandler#invoke()を検索結果から除外したいという場合、grepの場合は切り分けが面倒ですが、IDEAならContainer#invoke()の上のキャレットを置いてFind Usagesを選択するだけで、レシーバがContainerの検索結果だけを返します。

このような新機能をもつIDEA 3.0 early access版ですが、所詮まだ製品以前のものです。私は、1日使ってみてある程度の安定しているという印象を持ちましたが、使用に際しては当然リスクを覚悟する必要がありますので注意してください。

IDEA 3.0には、他にもJSPやEJBのサポート、OpenAPIが追加されているようですが、マニュアルがないので使い方がよくわかりません。
また、他の新機能に気づいたら報告します。

[ メッセージ編集済み 編集者: miki 編集日時 2002-05-01 12:38 ]


[ メッセージ編集済み 編集者: miki 編集日時 2002-05-02 23:11 ]
miki
大ベテラン
会議室デビュー日: 2001/09/21
投稿数: 174
お住まい・勤務地: 東京都八王子市
投稿日時: 2002-05-02 11:14
JavaDocの編集機能も強化されていました。

たとえば、protected void createDomain(StringBuffer buf, String domain, List entries)というメソッドの直前で/**を入力すると、

/**
*
* @param buf
* @param domain
* @param entries
*/

が挿入されます。

コメント内の補完も強力です。JavaDoc内で@の次にキャレットを置いてCtrl+spaceを叩くと、JavaDocのタグの候補がメニューで表示されます。もちろん、クラスとメソッドではメニュー表示される候補の内容は異なります。

さらに、@seeではクラス名の補完もできます。@see jp.と叩くとjp.xxxのパッケージの候補がメニュー表示されます。当然、@paramでは引数名がメニュー表示されます。

クラス/インタフェースのコメントに関してはカスタマイズも可能です。

/*
* Created by IntelliJ IDEA.
* User: $USER$
* Date: $DATE$
* Time: $TIME$
* To change template for new class use
* Code Style | Class Templates options (Tools | IDE Options).
*/

コメントを書くのも楽しい。
あぁ、Develop with pleasure!(TM)

[ メッセージ編集済み 編集者: miki 編集日時 2002-05-07 23:42 ]
miki
大ベテラン
会議室デビュー日: 2001/09/21
投稿数: 174
お住まい・勤務地: 東京都八王子市
投稿日時: 2002-05-02 18:07
メソッドや変数の補完時に存在しない識別子を入力すると(文法エラーという意味で)赤い文字になるのですが、そのとき3.0ではメソッドや変数のテンプレートコードを生成できるようです。

ちょっと込み入った話なので具体例を示します。
たとえば次のような行を入力したとします。キャレットは最後の閉じ括弧の右にあります。

String result = obj.getResult("123")

ここで、objにはgetResult()というメソッドが存在しないとすると、getResultの部分が赤くなります。そして、カーソルの近くに小さな「電球のアイコン」が現れます(宙に浮いているような感じ)。この電球を叩くとCreate Method 'getResult'という項目を含むメニューが出てくるので、その項目を選択するとobjのクラスに次のようなコードが挿入されます。

public String getResult(String s)
{
return null;
}

ローカル変数やフィールドについてもまったく同様です。ローカル変数は宣言文がその場所に挿入され、フィールドについてはクラスにpublic fieldが挿入されます。

ここで面白半分にnew ABCとやって電球を叩いたらなんとクラスABCができました。 うーん。期待を裏切らない奴。

この機能を使うと、JUnitのテストケースを書いていくうちにクラスの雛型ができてしまうといったこともありそうです。

でも、実際には使わないだろうな、きっと。


[ メッセージ編集済み 編集者: miki 編集日時 2002-05-06 21:36 ]
asip
ベテラン
会議室デビュー日: 2001/12/27
投稿数: 77
投稿日時: 2002-05-03 12:49
「はんばあぐ」さんがhttp://www.sgtpepper.net/hyspro/でIDEAのレビューを執筆中です。連休明けには正式公開の予定になっています。反響があれば、掲示板かメーリングリストを開設するそうです。

「はんばあぐ」さんは2.5.2のレビューを執筆されているので、mikiさんのこの会議室での3.0開発版のレビューを「はんばあぐ」さんのサイトのレビューとドッキングすればよりよいレビュー記事になると思うのですがいかがでしょうか?


[ メッセージ編集済み 編集者: asip 編集日時 2002-05-03 13:28 ]
miki
大ベテラン
会議室デビュー日: 2001/09/21
投稿数: 174
お住まい・勤務地: 東京都八王子市
投稿日時: 2002-05-06 21:38
asipさん、情報ありがとうございます。
IDEAの掲示板やメーリングリストができたら是非参加したいと思います。
miki
大ベテラン
会議室デビュー日: 2001/09/21
投稿数: 174
お住まい・勤務地: 東京都八王子市
投稿日時: 2002-05-07 11:13
build 621を今朝ダウンロードして使い始めています。

このbuildではMethod Hierarchy browserという機能が入りました。
これはソース上のメソッドの上にキャレットを置いて、ctrl-shift-Hを押すとメソッドのクラス階層を図示するブラウザが開きます。

たとえば、MBeanServerというインタフェースを実装するMBeanServerImplというクラスがあったとして、MBeanServer#createMBeanのメソッド宣言の上でMethod Hierarchy browserを開くと、次のようなクラス階層が表示されます。

コード:
(I) MBeanServer
  (C) MBeanServerImpl



このクラス階層上のMBeanServerをダブルクリックすれば、そのcreateMBeanメソッドのソースが表示されますし、MBeanServerImplをダブルクリックすれば、同様のそのメソッドのソースが表示されます。

抽象クラスでも同様です。次の例ではsendNotificationメソッドのクラス階層を表示したもので、抽象クラスMonitorのサブクラスである3つの具象クラスが表示されています。

コード:
(C) Monitor
  (C) CounterMonitor
  (C) GaugeMonitor
  (C) StringMonitor



この文章では表現しづらいのですが、このクラス名の左側には小さな△の形をしたアイコンが付いていて、その色によって緑ならそこで定義されている、ピンクならスーパークラスで定義されている、赤なら未定義ということがわかります。上のMonitorの例ではMonitorでsendNotificationを実装しているので、Minitorは緑、そのサブクラスはピンクの△が表示されています。

このようにMethod Hierarchy browserは、インタフェースや抽象クラスのメソッドの実装クラスを特定したり、そのメソッドを実装するクラス間で行ったり来りしながらソースを見比べたりするときに便利そうです。
miki
大ベテラン
会議室デビュー日: 2001/09/21
投稿数: 174
お住まい・勤務地: 東京都八王子市
投稿日時: 2002-05-08 09:54
IDEAの優れた点のひとつとして、ほとんどの操作がマウスを使わずにキーボードからできるということがあげられると思います。

3.0ではAnt Buildで各ターゲットに対して自分でキーバインドを設定できるようになりました。
2.5まではAnt Buildウィンドウを開いてからターゲットを選択していましたが、3.0では直接Antのターゲットをキー入力一発で実行できるようになったわけです。単純ですが、実用的な機能です。

キーバインドの設定は、IDE OptionsのKeymap設定画面でおこないます。この画面のCategoriesにAnt Tagetsが追加されていて、そのコマンドのリストにXXX_all, XXX_clean, XXX_compiler...などの項目が追加されています(XXXの部分はbuild.xmlのプロジェクト名です)ので、ここで自分で好きなキーの組み合わせをマップします。

どのターゲットに対してキーバインドを設定可能にするかはAnt Buildウィンドウで指定します。3.0では各ターゲット名がcheck boxになっていて、ここでチェックしたターゲットだけがKeymap設定画面に現れるようになっています。
miki
大ベテラン
会議室デビュー日: 2001/09/21
投稿数: 174
お住まい・勤務地: 東京都八王子市
投稿日時: 2002-05-09 12:47
JSPにも補完が効きます。

<%@

と入力してCtlr+spaceを叩くと、

inculde
page
taglib

というメニューがポップアップします。ここでpageを選択すると

<%@page %>

になり、さらにここでCtrl+spaceを叩くと、

autoFlush
buffer
contentType
errorPage
...

のメニューがポップアップします。ここでimportを選ぶと、

<%@page import="" %>

となって、""の中はIDEAが提供する通常のクラス補完が機能します。
もちろん識別子を選択するのに十分な情報があれば即座に展開されます。
たとえば、<%@pならば、Ctrl+spaceで一発で<%@page %>になります(あたりまえか)。

Javaコードと同様に間違ったつづりをすると赤くなります。
<%@miki %>とすれば、mikiという識別子は無いので赤くなります。

IDEA 3.0ではtablibの補完もサポートしているそうな。
こちらはまだためしてません。

スキルアップ/キャリアアップ(JOB@IT)