minimize

事業拡大のため、新しい仲間を募集しています。
→詳しくはこちら

Eclipseを便利に使うための方法をいくつか紹介します。
ちなみに、新しく書いたものが上になるように並べてあります。

Subversive インストールについて
補完時のエラー
コードアシスト時のCtrlキー
進化したHistory
CVSでの文字化け
補完機能時の「<」
Linked Resourceとは
Folding機能
便利なQuick Fix
ステップ・フィルタリング
テンプレート機能
ローカル履歴
Fast View
CVSとの連係

Subversive インストールについて

いつもハマるのでメモ。
まず、デフォルトではSubversiveはインストールされていない。
Install New Software... から、'Available Software Sites' を選び、Subversive Site をEnableにする。

http://download.eclipse.org/technology/subversive/0.7/update-site/

さらに、SVNクライアントの為に以下のURLを手で追加。

http://www.polarion.org/projects/subversive/download/eclipse/2.0/update-site/

これで、Subversive および SVNConnector(JavaHLなど)を入れれば無事 Subversion を
Eclipse 上から使える。
正直、すごく面倒くさい。早く何とかしてほしい。

補完時のエラー

コードアシスト(Content Assist)のとき、たまにエラー(例外)が発生して
直らなくなること、ありませんか?

java.lang.IllegalArgumentException: Class file name must end with .class

こんなようなエラーが出たりします。
そんなときは、怪しいと思うプロジェクトを Close Project で閉じて、Open Project で開き直します。
これで直っているはずです。

コードアシスト時のCtrlキー

コードアシスト(Content Assist)には2つのモードがあります。
一つは「挿入モード」で、もう一つは「上書きモード」です。
例えば、

comp.setTitle("...");

というコードがあり、T の位置にカーソルを置いて Ctrl+Space を押すと
コードアシストが発動します。
ここで setName を選んだとしましょう。

挿入モードの場合、結果は

comp.setNameTitle("...");

となり、上書きモードの場合は

comp.setName("...");

となります。

これらのモード選択はPreferenceから Completion inserts / Completion overwrites によって
切り替えられるのですが、コードアシスト時にも一時的に変えられるのです。
コードアシスト発動中にCtrlキーを押下すると、その間だけハイライトが黄色く光り
挿入/上書きモードが切り替わります。
これは結構役に立つので覚えておいて損は無いです。

進化したHistory

Eclipse3.2では、History機能がさらに進化しています。
今までもあったCVS HistoryとLocal Historyが合体し
同一のビュー内に表示されるようになりました。
これにより、ローカル履歴とCVSリビジョン間の比較なども
簡単に行えるようになりました。

ただ、残念ながら2006/9現在SVN(Subversion)はまだこの機能に対応していません。
進化したHistory機能は非常に便利ですので、これを理由に
現場のプロジェクトでSVNを使うのはまだ少し早いかなという気もします。

CVSでの文字化け

※ 2006/1/12時点、Eclipse3.2M4ではCVSでの文字化けが一部解消しています。
   さらに、SubversionのプラグインであるSubclipse(0.9.102)では完全に文字化けが解消しました。
   Subclipseのパッチをあてた人は日本の方みたいですね。ありがとうございます!

Tipsに書くのも何ですが、Eclipse3のバグに関する話を一つ。
Eclipse3では、プロジェクトやディレクトリ、ファイル単位で文字コードが変えられるのは
ご存知かと思います。
が、CVSやSVNの履歴を表示したりdiffを取ったりするときに使われる文字コードは
これらの設定に従いません。

で文字コードに何を使ってるかというと
Preferences にある Text file encoding だっていうじゃありませんか。
何という事でしょう。この設定は「Eclipse共通」です。
つまり、プロジェクトやディレクトリ単位で変えることは出来ないという事になります。
しかもこの値を変えるとプロジェクトがリビルドされるので、頻繁に変えるのも面倒です。

EclipseのBug Reportには2004年の10月に挙がっているというのに
未だに直っていないというのは、同じ開発者として耐えられません。
というわけで、Eclipseの標準プラグインを改造してみました。
ちょっと綺麗なプログラムではないので、こっそり(笑)公開します。
3.1専用です。

まず、pluginsフォルダにある

を削除(jar以外の拡張子にリネームした方が吉)します。
そして、plugingフォルダ(外部フォルダでも可)に

/archive/eclipse3_1_cvscharset_plugin.tar.bz2

を展開します。
これで、CVSの履歴やdiffを見るときにローカルファイルの文字コードが
使われるはずです。

補完機能時の「<」

Open Type... などでクラスを検索するとき、ワイルドカードが使えるのは
皆さんご存知だと思いますが、もう一つ便利な記述法があります。
それは < です。これは「終端記号」を意味しています。

例えば、任意の文字で始まり「Plugin」の文字で終わるクラスを検索するとき
ただ「*Plugin」と入力したのでは「Pluginを含む全てのクラス」が検索対象になってしまいます。
このとき「*Plugin<」と入力すると、「Pluginで終わるクラス」のみが検索対象となります。

Linked Resourceとは

Unixでいうところのシンボリックリンク機能と同じものをEclipse上で再現したものがこれです。

作成方法は、 まず通常のファイルやフォルダを作成する要領でダイアログを開き
その中にある「Advanced」ボタンをクリックします。
すると、「Link to folder in the file system」という項目が現れるので
これをチェックしてリンク先のファイルやフォルダを指定します。

Linked Resource も通常のファイルやフォルダと同じように扱えますが
いくつか異なる点があります。

ファイルの場合

ファイルへの修正は、リンク先のファイルを直接修正することになります。
ファイルを削除するときは、リンク情報を削除するだけでリンク先のファイルは削除されません。

フォルダの場合

フォルダ内のファイルへの修正は、リンク先のファイルを直接修正することになります。
フォルダ内のファイルを削除すると、リンク先フォルダ内のファイルが直接削除されます。
フォルダそのものを削除するときは、リンク情報を削除するだけで
リンク先のフォルダ(およびフォルダ内のファイル)は削除されません。

Folding機能

Folding とは、ソースの一部分をエディタ内で「隠す」機能です。
例えば、長すぎるImport宣言やインナークラス等を隠すことによって
ソースの見た目をすっきりさせることが出来ます。

隠れた部分は Foldingバー 上にマークが表示され、
ここをクリックするとその部分が表示されます。再びクリックすればまた隠れます。

便利なQuick Fix

Eclipseにある補完機能、Content Assistはよく知られていると思いますが
意外に気付かないのがこのQuick Fixです。

これは、現在のカーソル位置に応じたアクションを実行できるもので
今いち使い勝手が判りにくいという欠点はあります(事実僕も最近まで使っていなかった)が、
結構便利な機能があります。

個人的に一番便利だと思うのが、Assign statement to new local variable というアクションです。
これはメソッド戻り値の型に合わせた変数を定義してくれるものです。例えば

obj.getFile();

と書いた後で Ctrl+1 を入力すれば、

File file = obj.getFile();

という風に変数定義文を生成してくれます。あら便利。

ステップ・フィルタリング

通常、デバッガのステップ実行(Step Intoコマンド)では
プログラムの制御を「すぐ次に実行されるメソッドの先頭行」に移します。
ですが、この処理が少々うっとおしい時もあります。
例えば以下のような文に制御が移ったときにステップ実行をしたとします。

MyClass.myFunc(str.toString());

もしstrjava.lang.String型だった場合、ステップ先は
String.toStringメソッド、つまりJava標準ライブラリの中ということになります。
もちろんソースをアタッチしていればStringクラスの中までデバッグすることは可能ですが
実際には「myFuncメソッドの先頭へ制御を移してほしい」という状況の方が多いはずです。

この場合、Step With Filtersコマンドを使うことによってその要求は叶えられます。
このコマンドは、特定のクラス(あるいはパッケージ)を無視してステップ実行を行います。
例えばjava.*以下のパッケージを無視するようにすれば
Java標準ライブラリの中に制御が移ることを防ぐことが可能になります。
これらの設定はPreferencesのJava->Step Filteringで行えます。

テンプレート機能

Eclipseには強力なテンプレート機能があります。
この機能を使うのは、テンプレート文字列を入力した後で
Content Assist コマンドを呼び出します。
キーバインドは「Ctrl + Space」または「Alt + /」に割り当てられているはずです。

例として、変数宣言のテンプレートを紹介します。
まず、テンプレート文字列である new を入力して Content Assist を実行します。

type name = new type(arguments)

という風に表示されたはずです。まぁこれだけでも便利なのですが、
Eclipseのテンプレート機能が凄いところはここからです。

初めの状態では先頭の type にフォーカスが当たっています。
ここで何らかのクラス名を入力しましょう。
すると先頭の type が入力したクラス名に置き換わるのはもちろん、
後ろにあるもう一つの type も自動的に置き換わります。

さらにここでTABキーを押すと、フォーカスは name の部分に移動します。
そしておもむろに適当な変数名を入力し、再びTABキーを押します。
もうお分りですね。今度は arguments にフォーカスが移り
コンストラクタに渡すパラメータ群を記述することが出来ます。

全てを入力し終えたらEnterキーを入力しましょう。
無事カーソルは行の最後に移動し、次の作業に移る事が出来ます。
前のフォーカスに戻りたいと思ったら、Shift + TAB キーを押しましょう。

これらのテンプレート文字列は全てカスタマイズできます。
Window->Preferences から Java->Editor->Templates を開くと
デフォルトで用意された沢山のテンプレートが確認できるはずです。
これを参考にすれば、自分で新しいテンプレート機能を作成する事も簡単でしょう。

ローカル履歴

Eclipseは、プログラムが修正/保存される度にその履歴をファイルに保存します。
これにより、CVS等でソース管理をしていなくても
ある程度の修正履歴を得ることが出来ます。
この機能をローカル履歴(Local History)といいます。

ローカル履歴に関するコマンドはいくつかあるのですが、
これらのコマンドは何故かメニューバーに表示されません。
エディタ内で右クリックした時のポップアップメニューにしか存在しないのです。

したがって、意外に知らない人も多いのではないでしょうか。
しかし、非常に便利な機能ですので是非知っておきましょう。
また、細かい設定は Window->PreferencesメニューのLocal Historyで変更できます。

これらのコマンドを使う際には、カーソル位置が重要になってきます。

クラス宣言の中

そのクラスに関する変更を検出

メソッド宣言の中

そのメソッドに関する変更のみ検出

フィールド宣言の上

そのフィールドに関する変更のみ検出

という感じで、履歴の絞り込みを行うことが出来ます。
また、Javaコードとして不完全(括弧が足りない等)な場合
そのファイルは履歴として利用できません。

Fast View

各ビューにはFast Viewモードというものが用意されています。
これは、普段は非表示になっていてアイコンをクリックした時だけ表示されるビューのことです。
よくある使い方としては、大きなサイズで見たいビューをFast Viewモードにしておく方法です。
こうすると、見たくないとき以外は非表示なので邪魔になりません。

これを有効にするには、ビューのタイトルバーを右クリックして、
コンテキストメニューから「Fast View」を選択します。
以上で、Eclipseメインウィンドーの左端にあるPerspectiveアイコンにそのビューのアイコンが追加されます。
このアイコンをクリックすると、左側に対応するビューが現れます。
このビュー内でダブルクリックをするか別のビューをクリックした時点でこのビューは姿を消します。
今後使用したい場合にはまたビューのアイコンをクリックします。

CVSとの連係

EclipseはCVSと連係させることができます。

ただし、そのためにはUNIXマシン上でCVSを立ち上げておく必要があります。
ほとんどの人はEclipseをWindowsマシンで使っているでしょうから
Linuxなどを乗せた別マシンと併用することになります。

なお、Windowsで使えるWinCVSというものもありますが
これとEclipseを連動させる方法はよくわかりません。
しかしWinCVSにはとても使いやすいサーバ&クライアントソフトが付属してますので
バージョン管理にはそれを使ってEclipseプロジェクトを管理することも簡単です。

ここではRedHat Linux上での設定を説明します。
その他のOSでは若干設定方法が違うかもしれません。

CVSのインストール

まずはLinuxマシンにCVSをインストールします。
CVSの基本的な使い方についてはここでは説明しません。
ここなどを参考にして下さい。
なお、デフォルトパッケージとして既に組み込まれている可能性も高いので

rpm -q cvs

として確認してみて下さい。

CVSユーザー登録

CVSのインストールが終ったら、ユーザー設定を行います。
まず、CVSリポジトリのCVSROOTディレクトリに移動します。

cd (CVSリポジトリディレクトリ)/CVSROOT

ディレクトリを移動したら、ここにあるconfigファイルを直接編集します。

SystemAuth=no

これを書かないと、一般UNIXユーザー(とパスワード)でログイン出来てしまいます。
ここではCVS専用のユーザーを登録するので、SystemAuthは使えないようにしましょう。

次にCVSユーザー登録をします。
パスワード作成コマンドが必要なので、ここではApache付属のhtpasswdを使用します。

/usr/local/apache/bin/htpasswd -c passwd ユーザー名

するとパスワードの入力を求められるので入力します。
これで、現在のディレクトリにpasswdというファイルが作成されました。
後でCVSサーバに接続するときは、このユーザーとパスワードを使用します。

CVSサービスを設定する

RedHat Linuxではxinetdというデーモンを使用しています。
inetdを使用しているOSでは、以下の設定は使えません。

/etc/xinetd.d/cvspserver ファイルを以下の内容で作成します。

service cvspserver
{
    socket_type = stream
    user = root
    wait = no
    server = /usr/bin/cvs
    server_args = -f --allow-root=(CVSリポジトリのディレクトリ) pserver
}

allow-root には、外部接続を許可するCVSリポジトリを(全て)記述する必要があります。

CVSサーバを立ち上げる

以下のコマンドでxinetdを再起動します。

service xinetd restart

これで、このCVSリポジトリをEclipseで使用することが出来ます。

ファイアウォールの設定

デフォルトでは、CVSのポート番号は2401です。
ファイアウォールが設定されている場合は、このポートを外部に公開する必要があります。

Eclipseの設定

先程作成したCVSリポジトリをEclipse上で使うには、
CVS Repositoriesビューから「New Repository Location」コマンドを使います。

Connection typeは「pserver」です。