SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

Eclipseでマウスを使わずに効率よくプログラムを作成する

Eclipseのショートカット/コード補完/テンプレート機能の活用


自作テンプレートを利用する

 まだ実装していないテストケースとして引き算、掛け算、割り算のメソッドに対するテストケースがあります。ここで、それぞれのメソッドで「assertEquals...」と書いていくのは少し面倒です。そんなときは、assertEqualsテンプレートを自作すると楽になります。

 [ウィンドウ]-[設定]-[Java]-[エディター]-[テンプレート] でテンプレート設定画面を開き、[新規]を押してください。そこで、次のように設定します。

assertEquals簡単テンプレート
assertEquals簡単テンプレート

 この設定をすることで、エディタ上でaeと打つだけで次のようなコードが自動生成されます。

assertEqualsテンプレート
assertEquals("説明", 期待値, 実際値);

 説明、期待値、実際値はそれぞれハイライトされるので、[Tab]で移動して値を埋めていきます。これで、テストケースを作るのが簡単になります。

実装されたテストケース(CalcTest.java)
package hello;

import junit.framework.TestCase;

public class CalcTest extends TestCase {
    private Calc calc;

    public void testAdd() throws Exception {
        calc = new Calc();
        assertEquals("3足す2は5になるはず", 5, calc.add(3,2));
    }

    public void testSub() throws Exception {
        calc = new Calc();
        assertEquals("5引く2は3になるはず", 3, calc.sub(5,2));
    }

    public void testMulti() throws Exception {
        calc = new Calc();
        assertEquals("3かける2は6になるはず", 6, calc.multi(3,2));
    }

    public void testDiv() throws Exception {
        calc = new Calc();
        assertEquals("10割る2は5になるはず", 5, calc.div(10,2));
    }
}

テンプレートの書式

 テンプレートでは、変数と通常の文が定義できます。${}で囲まれた部分が変数となり、それ以外はそのまま通常の文として出力されます。変数にはユーザー変数とビルトイン変数があり、ユーザー変数は上の例で定義した${説明}などで、そのまま文が出力されますがハイライトされた状態になります。ビルトイン変数には、直前に出現したコレクション変数や、クラス名といったコンテキスト情報を取得することができます。

 次の例はSingletonパターンを実現するテンプレート定義です。

Singletonパターンテンプレート
private static ${enclosing_type} instance;

private ${enclosing_type}() { }

public static final ${enclosing_type} getInstance() {
  if (instance == null) {
     instance = new ${enclosing_type}();
  }
  return instance;
}

 このテンプレートを実行すると次のようなコードが生成されます。

Calcクラスへのテンプレート適用
private static Calc instance;

private Calc() {
}

public static final Calc getInstance() {
    if (instance == null) {
        instance = new Calc();
    }
    return instance;
}

 テンプレートは便利な機能ですが、ビルトイン変数のようにコンテキストを参照する機能を追加することができません。よって、凝ったテンプレートは作ることができません。Getter/Setter生成のような本格的なコード生成機能はソースメニューから実行可能です。ソースメニューにも存在しないような機能はプラグインを利用するしかありません。

リファクタリング/ソース

 テストはうまくいきましたが、いくつかの点で不満があります。まずは、割り算なのに返却値が整数型なのは不自然ですし、クラス名もCalcという省略形よりもCalculatorという完全名の方が好ましいでしょう。

 一度書いたコードに変更を加えるときは、なるべくリファクタリング機能を使うことをお勧めします。ここでは、良く使うリファクタリング機能に関しての紹介だけに留めさせていただきます。

リネーム([Alt]+[Shift]+R)

 最も良く利用するリファクタリング機能はこのリネーム機能でしょう。リネーム機能を使って名前を変更することで、プロジェクト内での名前の整合性をとることができます。例えば、あるXMLファイルにクラス名が記述されているような場合、普通に名前を変更しただけでは外部ファイルとの整合性がとれなくなってしまいます。リネーム機能を使うことで、Javaクラス内での命名の一致のほかに、任意の外部ファイル内に出現する名前も自動的に変換してくれます。

移動([Alt]+[Shift]+V)

 クラスをパッケージ間をまたがって移動したりする場合に利用します。移動をすることで、自動的にパッケージ構成の変更や、利用しているクラスのJavaDocタグまで変更することができます。

メニュー([Alt]+[Shift]+T, [Alt]+[Shift]+S)

 [Alt]+[Shift]+Tを押すことでリファクタリングメニューが開きます。また、コンストラクタやGetter/Setterの生成などの機能は[Alt]+[Shift]+Sによるソースメニューから実行できます。この2つのメニューは非常に重宝する機能がそろっていますので、ぜひ活用することをお勧めします。

番外編:自作プラグイン

 もっとコーディングを簡単にしたい、Java以外の言語も開発したいといった要望に応えるために、Eclipseにはプラグインとして機能を拡張していく仕組みがあります。

 プラグインは国産、海外問わず、大量に作成されているため、探せば大概必要なものは手に入ると思います。しかし、プラグイン作成者は汎用的な目的でプラグインを作っている場合が多いため、本当に小さなことだけを行うプラグインは意外と少ないものです。

Getter/Setter自動生成機能の改造

 例えば、Eclipse JDTではGetter/Setterを自動生成する機能があり、同時にメソッドにJavaDocを追加してくれますが、追加するJavaDocコメントは次のような形式になってしまいます。

JDTによるGetter/Setterの自動生成
/**
 * 挨拶.
 */
private String hello;

/**
 * @return hello を戻します。
 */
public String getHello() {
    return hello;
}

/**
 * @param hello 設定する hello。
 */
public void setHello(String hello) {
    this.hello = hello;
}

 メソッドコメントの形式は設定である程度調整することは可能ですが、helloというフィールドを挨拶というJavaDocコメントに置き換えるというちょっとしたことができません。そこで、自作プラグインとしてJDTを拡張して、次のような形で自動生成を行うような機能を追加してみました。ソースメニューに、アクションを追加しています。

拡張されたJDT
拡張されたJDT
自作プラグインによるGetter/Setterの自動生成
/**
 * 挨拶.
 */
private String hello;

/**
 * 挨拶を取得する.
 * @return 挨拶.
 */
public String getHello() {
    return hello;
}

/**
 * 挨拶を設定する.
 * @param hello 挨拶
 */
public void setHello(String hello) {
    this.hello = hello;
}

 今回はこのプラグインをサンプルコードとして添付します。皆さまのプラグイン開発理解の手助けや、開発の取っ掛かりになればと思います。

終わりに

 今回の記事は私が実際にコードを書くときによく使うショートカットキーをまとめたものです。このほかにもEclipseが持っているショートカットキーはまだまだあります。

 [Ctrl]+[Shift]+[スペース]でEclipseショートカットキー一覧が表示されますので、自分なりの使い方を開拓していただければと思います。

参考資料

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
特集記事連載記事一覧

もっと読む

この記事の著者

NTTデータ先端技術株式会社 志田 隆弘(シダ タカヒロ)

<NTTデータ先端技術株式会社について>データベース、ネットワーク、OS、ミドルウェアの基盤技術を武器にシステムの技術面でのコンサルテーションや最新製品の調査を行う専門家集団。<筆者について>Ja-Jakartaプロジェクトの末席にこっそりと参加しています。たまにJavaなイベントに出没します。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/366 2006/07/12 17:38

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー