31日間ReSharper一周 ... それIDEAでもできるよ(その2)

Day 4: 自動閉じデリミタ(http://matarillo.com/resharper/day04.php

{, (, [, "などを入力すると自動的にペアで閉じデリミタを挿入。自分が閉じデリミタをタイプしても,すでに自動挿入された閉じデリミタを上書きするだけってアレ。
NetBeansでは「ペア補完」って名前が付いてた。


ちょっと調べてみたら,IDEAやEclipseは当然のこと,NetBeansJDeveloperですら,この機能を備えている。だからJava屋にとっては,当たり前すぎて何がすごいのか分からないくらいなんじゃないだろうか。むしろ,ペア補完すら備えていないVisual Studioって何なの?って感じ。


JavaIDE陣営は,ペア補完がJava以外のどれだけのフォーマットに対応しているかで優劣を語り始めるだろうけど,そんなのドングリの背比べだよね。


この当たり前すぎるペア補完だけど,改めて言われてみれば確かにスゴイ機能なんだと思う。でも,XML文書とかなると,ペア補完だけでは物足りなくて「Start New Line」とか「Complete Current Statement」あたりが必要になる。
たぶん,似たような機能はEclipseNetBeansも持ってると思う。少なくとも「Start New Line」はNetBeansのキーマップ設定画面で見たぞ。

Day 5: 統合されたユニットテストランナー(http://matarillo.com/resharper/day05.php

IDEAもJUnitのテストランナーを組み込んでいるけど,今日日のJava IDEJUnitに対応してない方が珍しいくらいで,特筆するほどのことではない。それに,IDEAのJUnitサポートはホントに地味だ。ふつーにテストを実行して,NGだったらレッドバーを表示して,エラーの起きたテストコードを表示するくらい。そんなのIDEAじゃなくたって誰でも出来る。あと記事を読む限りじゃ,ReSharperのほうが便利な機能を持っている。

キー割り当て可能。上でも書いたが、1キーストロークが「全部ビルドして、全部テストして、結果を赤や緑のバーで表示する」に割り当てられているのは超楽。マジで楽。

IDEAのキーマッピングはAntのターゲットにまで設定できるのに,「Run/Debug Configurations」には出来ない。今日初めて気がついたけど,何でだろ?それくらいあっても良さそうなのに...
それでも,今カーソルを置いてあるテストメソッドを実行したかったら「Ctrl+SHIFT+F10」を押せばOK。ただ,HHK Lite2でファンクションキー押すのはしんどいから,ついついマウスで操作しちゃうけど。:-P

注意を払う。コードを変更してリビルドすると、テストツリーの全アイコンが小さいクエスチョンマークに変わるから、まだテストされていないことが見てわかる。でも色はそのままだから、前回はどれが成功でどれが失敗だったかも見ればわかる。

んー,これはIDEAには無いな。一応ヘルプ読んでみたけど,クエスチョンマークが出るとは書いてなかったし,実際見たこともない。ヘルプに書いてあったテストランナーの状態アイコンは以下の通り。まあ,普通だね,普通。

こういっちゃ何だけど,ホントにIDEAのJUnitサポートは質素なもんだ。テストコードのひな形を作ったり,Quick JUnit Plugin for Eclipseみたく,テストコードとプロダクトコードを行き来する機能もない。もし欲しかったら,それっぽいプラグインがあるから好きにしてよって感じ。


質素,質素って言ってるけど,別段不満もないから気にしたこと無い。
#そもそも,あたしがマメにテストコードを書かないってのもあるけど。:-D


あえて気に入っている所を上げるとすれば,プロジェクトに「テストコード置き場」って概念があること。これはNetBeansにもあるけど,IDEがプロダクトコードとテストコードを分類してくれるってのは,地味ながら便利な機能だ。

もう一つの良いところは,カバレッジを測定してくれること。これはホント便利。ただ,JDK5じゃないとダメっていう制限付きなのが玉に瑕だ(いつになったら仕事でJDK5が使えるようになるんだろう)。:-(

Day 6: 共有設定は.resharperファイルの中に(http://matarillo.com/resharper/day06.php

IDEAの場合だと.iprファイルのことを指すのかな?でもプラグインサイトのWishListこんなの出てるくらいだから,いろいろ共有したい場合,今のままだと物足りないのかも知れない。


この分野は正直どーでもいい。何しろIDEAを使っている奇特なヤツなど,アタシ以外に居ないからな。

Day 7: コードフォーマット(http://matarillo.com/resharper/day07.php

IDEAもコードフォーマットについては随分細かく設定できる。細かすぎて鬱陶しいくらいだ。
当然のようにプロジェクトごとに独自の設定を持てるんだけど,ヘンにいじると予想だにしないところがリフォーマットされるので,恐ろしくて今の設定を変えられない。特にJavadoc関係は鬼門だ。気を利かせてHTMLタグとかpreタグの中身をリフォーマットしてくれて泣きそうになったことは一度や二度ではない。


ちなみに,IDEAのリフォーマットのショートカットは「Ctrl+ALT+L」だ。「Ctrl+ALT+F」は"Introduce Field」にバインドしてある。機能はReSharperと同じ。でもサイレントモードは聞いたこと無い。
でも,このショートカットはあまり使ったことはない。だってコード片をペーストするときは,適切なインデント位置にフォーマットされるし,なによりコミット時に一括リフォーマットするので,個別にリフォーマットすることはほとんど無い。

話はズレるが,コミット直前にやってくれることは

  • Optimize imports
  • Reformat code
  • Perform code analysis for affected files

の3つ。実はこれ,とっても気に入っている機能の一つで,特に最後のコード検査がお気に入り。CheckstyleFindbugsを使ったことある人は分かると思うけど,これらのツールは全コードを検査して,アレが悪い,コレがダメって教えてくれる。それはそれで良いんだけど,正直,自分が書いたコード以外はどうでもいい。その点,これはコミットするコードだけが対象になるので,そんなこと気にしなくてもイイ。


でも,一つだけ欠点があって,IDEAは当然CVSをサポートしてるんだけど,コミットログに日本語書くとUTF-8で送信する。「CVS使っててコミットログはUTF-8」なんてプロジェクトはそうないので,IDEAでコミットすると困ったことになる。
だから,「SCMなにがいい?」て聞かれたら「Subversionがいいよ」って言うようにしてる。:-D


話を戻そう。IDEAのコードフォーマットはJavaに限らず,いろんな形式に対応してる。HTMLに代表されるXML文書,CSSJavaScript,それらが入り交じったJSPもOKだ。でも経験上,XML文書,とくにHTMLはリフォーマットしないほうが幸せなことが多い。メンド臭いから例示しないけど,なんとなく言いたいことはわかるでしょ?


ps.
コードフォーマットについても結構プラグインが出てるんだけど,ビルトインの機能で満足してるので,どれも使ったことはない。