目次


Eclipse Galileo でJava コーディングを迅速に行うための追加事項

コード・テンプレートを使う

Comments

問題

プロジェクトやチームのサイズにかかわらず、コード・ベースを編集する際には下記の 2 つの問題が起こります。

  • 一貫性の欠如 — チームの多くの人達がファイルを編集する際には、コーディングに少しずつ違いが生じ、コードの理解や保守がしにくくなります。コードが異なっていると、同じ内容のコードを検索することが困難になります。たとえ 1 人で作業する場合であっても、以前どのようにコードを作成したかを忘れてしまうと、日によって作成するコードに違いが生じてしまいます。
  • 生産性の欠如 — キー入力の回数を減らすと時間を節約することができます。キー入力はコード編集の中心だからです。コード・セクションが大きい場合には、キー入力するにも、現在のコンテキストに合うようにコピー、貼り付け、そして変更を行うにも時間がかかるかもしれません。

テンプレートを使用せずに、一貫性と生産性の欠如をなくすための手作業による一般的な方法として、コピー・アンド・ペーストがあります。この方法では、既存のコード・ベース (あるいはインターネット) を検索し、実現したい内容に最も近いコードをコピーします。そして必要に応じて変更することで、皆さんのアプリケーションに適用するというわけです。

ソリューション: テンプレートを使う

Eclipse のテンプレートは定義ずみのコード・リストであり、使用状況が変わっても変更する必要がないコード部分を含んでいます。例えば Java™ コードの for ループは、どこで使われる場合も同じ方法で作成されます (ただしループを変更するための inside 条件または変数を除きます)。常に同じである部分がテンプレートに含まれ、変更される部分には変数が使われます。

Eclipse でテンプレートを使用する方法は、一貫性や生産性の問題を解決するための優れた方法です。テンプレートを使用すると、1 度作成したコードをアプリケーション全体で安心して使用することができます。あるいは、そのコードをアプリケーション全体で使用しても問題がないかどうかを考える必要すらないかもしれません。それこそがポイントなのです。

この記事では以下について説明します。

  • テンプレートを呼び出す方法
  • テンプレートを編集する方法
  • テンプレートを作成する方法
  • テンプレートの変数を利用する方法
  • テンプレートをエクスポートする方法
  • テンプレートをインポートする方法

テンプレートを呼び出す

テンプレートは簡単に呼び出すことができます。エディターの中で入力を行う際に、テンプレートの名前を先頭から入力していき、Ctrl+ Space を押すと、コード補完が呼び出されます。入力された内容と一致する名前を持つテンプレートが一覧に表示されます (図 1)。

図 1. 一覧からテンプレートを選択する
図 1 では、入力された内容と一致する名前を持つテンプレートが一覧として表示されています。
図 1 では、入力された内容と一致する名前を持つテンプレートが一覧として表示されています。

Ctrl+ Space を再度押すと、Eclipse は、さまざまなタイプのテンプレートを巡回表示していきます。

テンプレートを挿入するためには、矢印キーを使用して一覧からテンプレートを選択して Enter を押します。あるいはマウスを使用して、一覧の中にあるテンプレートの名前をダブルクリックします。

テンプレートを挿入できると、変数の値を入力することができます。ある変数から別の変数に移動するためには Tab キーを使用します。

テンプレートを編集する

テンプレートを編集するためには、「Window (ウィンドウ)」 > 「Preferences (設定)」の順に選択して Eclipse の「Preferences (設定)」画面を開きます。この画面では、「Java」 > 「Editor (エディター)」 > 「Templates (テンプレート)」の順に選択し、既存のテンプレートを調べます。既存のテンプレートを編集するためには、そのテンプレートを一覧から選択し、「Edit (編集)」をクリックします。すると「Edit Template (テンプレートの編集)」ウィンドウが表示されます (図 2)。

図 2. テンプレートを編集する
図 2 には、「Edit Template (テンプレートの編集)」ウィンドウが表示されています。
図 2 には、「Edit Template (テンプレートの編集)」ウィンドウが表示されています。

表 1 は「Edit Template (テンプレートの編集)」ウィンドウの各フィールドの説明です。

表 1. 「Edit Template (テンプレートの編集)」ウィンドウの各フィールドの説明
フィールド説明
Name (名前)テンプレートの名前
Context (コンテキスト)テンプレートのコンテキスト。Eclipse では、そのコンテキストに対して有効なテンプレートしか選択できません。例えば、XML ファイルを編集する際には Java ステートメントは表示されません。
Automatically insert (自動的に挿入)このフィールドが選択されている場合には、テンプレートの完全な名前が (例えば Ctrl+Space によって) 入力されると、テンプレートの挿入が呼び出され、Eclipse はそのテンプレートを自動的に挿入します。
Description (説明)テンプレートに関する説明を記述するフィールドで、ドロップダウン・リストに表示されます。テンプレートの名前は一意であるとは限らないため、このフィールドはテンプレートの識別に役立ちます。
Pattern (パターン)実際にテンプレートとして挿入されるコードであり、このコードには Eclipse によって解決したい変数も含まれます。

テンプレートの内容を編集し、編集を終えたら「OK」をクリックします。テンプレートを編集する際、組み込みの変数を挿入するためには、「Insert Variable (変数の挿入)」をクリックします。どんな変数を利用できるかに関しては、「テンプレートの変数を利用する」を参照してください。

テンプレートを作成する

テンプレートを作成するためには、テンプレートの一覧が表示されている画面で、「New (新規)」をクリックします。「テンプレートを編集する」で説明したようにテンプレートの内容を編集し、編集を終えたら「OK」をクリックします。すると新しいテンプレートが一覧に表示されるようになります。ファイルの編集が終わったら「OK」をクリックします。

テンプレートの変数を利用する

テンプレートを使用する際の最大の課題のひとつは、組み込みの変数をコードに挿入することで何が解決できるのかを理解することです。これらの変数を使うことで、現在の型の名前、カーソルの位置、選択された値などを自動的に挿入することができます。変数を使用するとテンプレートは遥かに動的になり、テンプレートを挿入した後に手作業でテンプレートに加える必要がある変更の量を減らすことができます。

リスト 1 のテンプレートのコードを考えてみてください。

リスト 1. ログの記録を宣言するテンプレート
${imp:import(java.util.logging.Logger)}
private static Logger logger = Logger.getLogger(${enclosing_type}.class.getName());

このコードを Automobile クラスに挿入すると、リスト 2 のようになります。

リスト 2. ログの記録の宣言が挿入された後の Automobile クラス
private static Logger logger = Logger.getLogger(Automobile.class.getName());

上記リスト 2 では、クラスの名前が解決されていることがわかるはずです。これは、クラス名を更新することを忘れがちな「コピー・アンド・ペースト」手法よりも優れた方法です。宣言の中でクラス名に誤りがあってもコンパイル・エラーはスローされないため、ログを調べ、あるべきところにステートメントがない理由を考えるまで、クラス名の誤りを見落としがちです。

Logger のための import 文もクラスの先頭で自動的に Logger 用に追加されます。

表 2 は Java テンプレート用として Eclipse に組み込まれている変数の一覧とその説明です。

表 2. Java テンプレート用に Eclipse に組み込まれている変数
変数説明
cursorこの場所にエディターのカーソルを配置します。--
date現在の日付を挿入します。Oct 20, 2009
dollarリテラルのドル記号を挿入します。$
elemType指定の ID を持つ要素の型を推測しようとします。MyType
enclosing_methodテンプレートの挿入対象となるメソッドの名前を挿入します。method()
enclosing_method_argumentsテンプレートを包含するメソッドの引数を挿入します。arg1, arg2
enclosing_package現在のクラスのパッケージの名前を挿入します。com.example.ui
enclosing_project編集対象のクラスを含むプロジェクトの名前を挿入します。myProject
enclosing_type編集対象の型 (クラス) の名前を挿入します。MyType
exception_variable_name最大限の推測をしながら例外変数の名前を挿入します。e, ioe
fileファイルの短縮名。MyType.java
import特定の型がまだインポートされていない場合には、その型に対する import 文を挿入します。import com.example.ui.MyOtherType
importStaticimport と同じですが、静的なインポートです。import static com.example.ui.MyOtherType.*
line_selection選択された行をその場所に挿入します。テンプレートによって行をラップするのに便利です。選択された行を本体とする do-while ループ
primary_type_nameファイルの短縮名 (拡張子を含まず)。MyType
time現在の時刻を挿入します。9:09:35 a.m.
todoコメントの TODO タグTODO
user現在のユーザー名ngood
var解決されてローカル変数となり、複数ある場合にはリストを提供します。myvar
word_selection現在選択されている単語を挿入します。--
year現在の年をコードに挿入します。2009

テンプレートの変数には、独自の変数を作成することができるという優れた特徴があります。独自の変数は自動的に解決されて任意の値になるわけではありませんが、テンプレートを挿入するとすぐに、そのテンプレートに値を挿入することができます。ある変数に値を入力すると、コード中のその変数にはすべて、その値が挿入されます。リスト 3 のテンプレートを考えてみてください。

リスト 3. 独自の変数を作成する
public void test${my_variable}() {
    String expected = "value";
    ${my_object}.set${my_variable}(expected);
    assertEquals("${message}", expected, ${my_object}.get${my_variable});
}

このテンプレートを挿入すると、図 3 のようになります。

図 3. 自動的に値を挿入する
自動的に値を挿入する画面のスクリーンショット
自動的に値を挿入する画面のスクリーンショット

必要なことは、変数が最初に出現する箇所で値を入力することだけです。すると、それ以外の箇所の変数の値は自動的に置き換えられます。その置き換えが終わったら、Tab を押して次の変数に移ります。

テンプレートをエクスポートする

他のユーザーとテンプレートを共有するためには、それらのテンプレートをファイルにエクスポートします。このファイルはテンプレートの情報を含む XML ファイルであり、Eclipse の他のインスタンスにインポートすることができます。

テンプレートをエクスポートするためには、そのテンプレートを選択し、「Export (エクスポート)」をクリックします。すると、Eclipse はファイルの保存場所を指定するように促します。テンプレートのエクスポートが終わったら、「OK」をクリックして「Preferences (設定)」ウィンドウを閉じます。

テンプレートをインポートする

エクスポートされたテンプレートを含むファイルからテンプレートをインポートすることができます。テンプレートをインポートするためには、「Import (インポート)」をクリックします。すると、Eclipse はインポート対象のファイルを指定するように促します。

必要なテンプレートをインポートしたら、「OK」をクリックします。すると、この新しいテンプレートをエディターの中に挿入することができます。

まとめ

Eclipse のコード・テンプレートを使用することで、アプリケーションの生産性と一貫性を向上させることができます。コード・テンプレートを作成すると、コードを編集する際に、よく使用するセクションを容易にコードに挿入することができます。コードの中で変数を定義すると、型の名前やメソッド、さらには特定のコードも自動的にテンプレートに挿入することができます。自分の気に入ったテンプレートを作成した場合、それをエクスポートしておけば、Eclipse にインポートすることでそのテンプレートを共有することができます。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Open source
ArticleID=460673
ArticleTitle=Eclipse Galileo でJava コーディングを迅速に行うための追加事項
publish-date=12012009