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

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

Eclipse にはコード・テンプレートを定義、使用できる機能が含まれており、これらの機能を使うことで生産性を向上させることや、予測しやすいコードにすることができます。このヒントでは、既存のコード・テンプレートを編集する方法と新しいコード・テンプレートを定義する方法を説明します。また Eclipse に組み込みの変数の例も挙げ、これらの変数を Eclipse のエディターで使用すると何を解決できるのかを説明します。

Nathan A. Good, Senior Information Engineer, Freelance Developer

Nathan GoodNathan A. Good はミネソタ州の Twin Cities エリアに住んでいます。彼はプロとしてソフトウェア開発やソフトウェア・アーキテクチャー、システム管理などを行っています。彼はソフトウェアを書いている時以外は、PC やサーバーを構築したり、新しい技術について資料を読んだり、そうした技術に取り組んだり、彼の友人達をオープソース・ソフトウェアに移行させようとしたりしています。彼は数多くの本や記事を執筆、あるいは共同で執筆しており、その中には『Professional Red Hat Enterprise Linux 3』や『Regular Expression Recipes: A Problem-Solution Approach』、『Foundations of PEAR: Rapid PHP Development』などがあります。



2009年 12月 01日

問題

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

コード・テンプレート

コード・テンプレートは生産性を向上させるための優れた方法ですが、さまざまな場所で使用できるようにメソッドや関数を作成するという真の再利用をコード・テンプレートで置き換えてしまうことがないようにする必要があります。大きなコード・セクションがある場合には必ず、コード・テンプレートを使う前に、変数を使用するメソッドを作成することを考えてください。

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

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


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

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

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

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

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

テンプレートを呼び出す

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

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

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

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

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


テンプレートを編集する

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

図 2. テンプレートを編集する
図 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 にインポートすることでそのテンプレートを共有することができます。

参考文献

学ぶために

製品や技術を入手するために

議論するために

  • Eclipse に関する質問を議論するための最初の場所として、Eclipse Platform newsgroups があります (このリンクをクリックすると、デフォルトの Usenet ニュース・リーダー・アプリケーションが起動し、eclipse.platform が開きます)。
  • Eclipse newsgroupsには、Eclipse を利用し、拡張することに関心を持つ人達のために、さまざまなリソースが用意されています。
  • developerWorks blogs から developerWorks のコミュニティーに加わってください。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


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