ソースコードの入力をやめる

NetBeans 4.0 を使用した、入力の省力化によるより迅速なソースコード作成の紹介

はじめに

標準キーボード上のキーが、入力速度を低下させるように意図的にレイアウトされていることを知っていましたか。実際にそうなのです。QWERTY レイアウトと呼ばれるこのレイアウトはもともと、ユーザーが機械式のタイプバーがぶつかるほど速くは入力できないようにするという理由で、1872 年に最初のタイプライタ用に選択されました。

これがまさに、ソースコードの入力をやめるべき多くの理由、正確に言うと、NetBeans にソースコードを自動作成させるべき多くの理由のうちの 1 つです。この記事には、できるだけ少ないキーボード入力を使用して、NetBeans 4.0 でソースコードをより迅速に記述できるようになる方法に関する一連のヒントが含まれています。

ヒント

ヒント 1: 用語の検索を使用する

ソースファイルに単語を入力したら、最初に数文字を入力したあとに Ctrl+K キーを押すことによって、この単語をどこでも再入力できます。この機能は用語の検索と呼ばれ、今入力した文字で始まる単語を検索することによって機能します。Ctrl+K キーはソースファイル内を上に向かって検索し、Ctrl+L キーは下に向かって検索します。

一連の個人に対して処理を繰り返す次に示す for ループ

for(Person person : personSet) {

}

を記述したら、カーソルを中括弧の間に置き、「pe」を入力したあとに Ctrl+K キーを押すことができます。NetBeans はただちに、「pe」で始まるもっとも近い単語である単語「personSet」を提案し、2 回目に Ctrl+K キーを押すと NetBeans は 2 番目に近い単語である「person」を提案します。

実際、この特殊なケースでは「pe」を入力する必要さえありません。ループの内部で Ctrl+K キーを押すだけでも、識別子「personSet」と「person」が自動的に入力されます。この動作が行われるのは、これらの 2 つの識別子が、NetBeans がソースファイル内を上に向かって検索したときに検出される最初の単語であるためです。ただし、ループの先頭とカーソルの間に 10 個の単語を記述しているとすると、Ctrl+K キーを押しただけでは、最終的に「personSet」、次に「person」を提案するまでに NetBeans はこれらの 10 個のすべての単語を順番に表示します。この場合は、Ctrl+K キーを押す前に「pe」を入力すると、「pe」で始まらないすべての単語を NetBeans がスキップするようになるため有効です。

誤って Ctrl+K キーを押す回数が多くなりすぎて、目的の単語の前に置かれている単語に達した場合は、単に Ctrl+L キーを何回か押すと、飛び越した単語まで NetBeans が前方に移動します。最後に、この機能はすべての種類のファイル内のどの場所でも動作します。実際に、XML ファイル内で使用するとファイル内にすでに存在するタグの名前を入力できるため、きわめて便利です。

ヒント 2: 識別子マクロを作成する

長い識別子名を記述すると、コードが読みやすくなります。「i」という名前の識別子が、実際に「Iterator」や「ItemListener」ではなく、型「Invoice」のインスタンスを識別していることを覚えるのは、特に非常に長いメソッドでは難しい場合があります。必要な入力のことさえなければ、「invoice」のような名前の方がより優れた選択になります。ここで、NetBeans に自動的に「invoice」と記述させることさえできれば、「i」を選択する理由はなくなります。ここでは、まさにそれを行うマクロを提供します。

カーソルが、次のコードの「Invoice」の直後 (「|」で示されています) に置かれているとします。

public class Order {
	public void setInvoice(Invoice |) {

	}
}

マクロを起動すると、NetBeans によって、コード内にすでに存在する型名「Invoice」を使用して「invoice」が自動的に入力されます。このマクロは、単純に前の単語を再入力し、再入力された単語の最初の文字を小文字に変更するだけです。ここで、NetBeans に単語「invoice」を最初に入力させたら、「ヒント 1」で説明した用語の検索機能 (Alt+K) を使用して識別子を再入力することを忘れないでください。

このマクロの作成は、次の 5 つの手順に従うことによって実行されます。

  1. 「ツール」>「オプション」の各メニューを選択します。
  2. 「編集」および「エディタの設定」を展開します。
  3. 「Java エディタ」を選択します。
  4. ウィンドウの右半分で「マクロ」という名前のプロパティーを探し、右端にある「...」ボタンをクリックします。
  5. 次のマクロコードを含む「Type identifier name using previous word」という名前の新しいマクロを追加します (単純にここからコピーしてください)。
    selection-previous-word copy-to-clipboard
    caret-next-word " " paste-from-clipboard caret-previous-word
    selection-forward to-lower-case caret-next-word
    

最後に、「マクロ」ウィンドウの「了解」ボタンをクリックして閉じますが、「オプション」ウィンドウは開いたままにします。このウィンドウは、新しいマクロのためのショートカットキーの組み合わせを作成するために必要です。

  1. 「キーの割り当て」という名前のプロパティーの「...」ボタンをクリックすることによって、「キーの割り当て」ウィンドウを開きます。
  2. 「名前でソート」をクリックし、「macro-Type identifier name using previous word」という名前で表示される新しいマクロを選択します。
  3. 「追加」ボタンをクリックすることによって、「Alt+N」ショートカットを追加します。

マクロを作成する場合は通常、マウスとキーボードのジェスチャーを記録したり、それをマクロとして保存したりすることができるマクロ記録機能を使用します。ただし、ここに示されているマクロには「小文字へ」のアクションが含まれており、このアクションはまだマウスやキーボードのジェスチャーでは表されないため、この操作を手作業で追加する必要があります。

ヒント 3: 割り当てマクロを作成する

これは、筆者が気に入っているマクロの 1 つです。コンストラクタを定義する場合は通常、次の例のように、コンストラクタパラメータの値をクラス変数に割り当てる必要があります。

public Person(String name, String emailAddress) {
	this.name = name;
	this.emailAddress = emailAddress;
}

次のマクロを定義して Alt+= キーに割り当てると、「this.emailAddress = emailAddress;」と入力する代わりに、単純に「this.e」と入力したあとに Ctrl+K キーを押して「this.emailAddress」を取得し、そのあとに Alt+= キーを押して残りが入力されるようにすることができます。

このマクロを作成する方法については、「ヒント 2」を参照してください。このマクロコードを次に示します。

selection-previous-word copy-to-clipboard caret-next-word " = " paste-from-clipboard ";"

Alt+= マクロを使用する習慣がついたら、それが、ほかのどの方法よりも速いことがわかります。

ヒント 4: 省略名を使用する

NetBeans には、よく知られた単語や、場合によっては複数行のコード構成を入力するための、豊富な組み込みの省略名があります。「sout」と入力したあとにスペースバーを押すことによって、これを試してみることができます。これにより、NetBeans は完全な標準出力の文、つまり、次の文を自動的に入力します。

System.out.println("|");

ここに示す「|」文字が NetBeans によって入力されるわけではなく、省略名が置き換えられたあと、IDE がその場所にカーソルを置きます。

組み込みの省略名によって実際に時間が節約されますが、ユーザー独自のカスタム省略名を定義することによって、省略名機能からさらに多くの利点を得ることができます。

開始するための良い方法は、既存のコードファイルをひととおり調べて、頻繁に使用しているコード構成を見つけることです。頻繁に使用される構造の代表的な例として、このメソッドに見られる if/throw 構造があります。

public void remove(int lower, int upper) {
	if(lower < 0)
		throw new IllegalArgumentException(
			"Parameter \"lower\" has to be a " +
			"non-negative number."
		);
}

このメソッドは、最初のパラメータが正当な引数であることを表明するガーディアン文で始まります。正当でない場合は、IllegalArgumentException がスローされます。

このようなガーディアン文を置くことは一般的な良い習慣であるため、NetBeans によって if/throw 構造に展開される省略名を追加するとメリットがあります。これは次のように実行できます。

  1. 「ツール」>「オプション」の各メニューを選択します。
  2. 「編集」、「エディタの設定」、「Java エディタ」の各ノードを展開します。
  3. プロパティー「省略名」が含まれている行の「...」ボタンをクリックします。
  4. 「ill」という名前の省略名を追加します。これは次のように展開されます。
    if(|)
    	throw new IllegalArgumentException("");
    

NetBeans は、展開のあとにカーソルを置くべき場所を示す「|」文字の使用を理解していることに注意してください。

では「ill」を入力してスペースを押してみましょう。うまくいきました。

もちろん、正確に同じ内容を入力するためのマクロを作成することもできますが、省略名の重要な利点は、「Ctrl+Alt+I キー」などの暗号のようなキーボードの組み合わせではなく、「ill」や場合によっては「illarg」のようなニーモニック名を付けることができるため覚えやすい点にあります。省略名のマイナス面は (少なくとも今のところは) マクロを起動できないことです。

ヒント 5: ソーステンプレートを使用する

実際に使いやすい NetBeans のテンプレート機能を、多くの開発者は完全に見過ごしています。多くの側面が共通しているソースファイルを多数作成する必要がある場合は、これらの共通の側面が含まれたテンプレートを定義するようにしてください。

たとえば、多くのシステムには、例外クラスを定義する方法に関する規則や、クラス X を拡張するすべてのクラスには特定のメソッド、変数、ドキュメントなどが含まれているべきであることを規定した規則があります。

新しいクラスを記述する場合、多くの開発者は空の「Java クラス」テンプレートから始めて、すべてを手作業で記述します。多くの場合、これには前に記述したコードの入力が必要になります。代わりに、良い開始点になるクラスを見つけ、そのツリーノードを右クリックして、「テンプレートとして保存...」を選択するようにしてください。これで、類似のクラスを作成する必要が生じた場合は常に、単に新しいクラスを配置するパッケージを右クリックし、「新規」>「ファイル/フォルダ...」の各メニュー項目を選択してテンプレートを選択できます。

既存のソースファイルからテンプレートを定義すると、実際には必要以上の内容が含まれる可能性がありますが、テンプレートが定義されたあと、「ツール」>「オプション」の各メニュー項目を選択し、「ソースの作成と管理」の下にあるテンプレートを見つけることによって、そのテンプレートをカスタマイズして不要なコードをすべて削除できます。単純にそのツリーノードを右クリックし、「編集」を選択して、そのファイルを編集および保存します。

ある API を仕事仲間に提供し、その仲間がきわめて頻繁にその API の同じインタフェースを実装する必要がある場合は、API とともにソーステンプレートを提供することによって仲間を助けることができます。テンプレートの共有は、そのテンプレートをあるマシンから次のマシンにコピーするだけで済みます。テンプレートは次のフォルダに格納されます。

"... [ユーザーのホームディレクトリ]\.netbeans\4.0\config\Templates\[自分のテンプレートフォルダ]"

バージョン管理を使用する場合は、一連のプロジェクトテンプレートを作成し、バージョン管理システムを通して共有することをお勧めします。

ヒント 6: 取得メソッドと設定メソッドを効率的に編集する

Java Beans を手作業で記述すると、ささいな取得メソッドや設定メソッドの記述と保守に膨大な時間が浪費される可能性があります。幸いにも、NetBeans はこれらのメソッドの両方を自動的に生成でき、また IDE には、これらのメソッドを効率的に保守するための組み込みのメカニズムもあります。NetBeans 4.0 以降、リファクタリングのメカニズムは、クラスの変数からのデフォルトの取得メソッドと設定メソッドの生成をサポートしています。次に示す getName および setName メソッドを作成するには、

public class Customer {
  private String name;

    public String getName() {
      return name;
    }

    public void setName(String name) {
      this.name = name;
    }
}
		

name プロパティーを宣言し、それを右クリックして、ポップアップメニュー項目の「リファクタリング...」>「フィールドをカプセル化...」を選択するだけで済みます。

メソッドが生成されたら、プロパティー「name」の名前を変更することもできます。「name」や「Name」という単語は現在、ソースファイル全体に散らばっているため、これには大量の入力が必要になる可能性があります。幸いにも、NetBeans には、この問題を解決するための、「Bean パターン」と呼ばれる実にすばらしい機能があります。「プロジェクト」ツリー内のクラスを見つけ、そのツリーノードを展開すると、NetBeans はそのクラスの Bean プロパティーごとのサブノードを含む、「Bean パターン」という名前のノードを表示します。このノードは、F2 キーを押すか、または右クリックして「名前を変更...」を選択することによって名前を変更でき、この方法でプロパティーの名前を変更した場合は、必要なすべての変更が NetBeans によって自動的に行われます。

Bean パターン機能を使用すると、プロパティーの型も効率的に変更できます。プロパティーのツリーノードを右クリックし、ポップアップメニュー項目の「プロパティー」を選択すると、そのプロパティーに関する情報を含むウィンドウが開きます。ここで型を変更することができ、それに応じてソースコードが NetBeans によって変更されます。

ヒント 7: 「インポートを修正」ツールを使用する

簡単に言うと、決してインポート文を記述してはいけません。NetBeans 4.0 では、キーボードの組み合わせ Alt+Shift+F キーでアクセスできる、「インポートを修正」と呼ばれる実にすばらしい機能が導入されました。この機能はソースコードを分析し、まだインポートされていないクラス名を探します。クラス X がまだインポートされておらず、X という名前のクラスがプロジェクト全体で 1 つしかない場合は、このクラスが NetBeans によって自動的にインポートされます。X という名前の 2 つのクラスが 2 つの別のパッケージ内に存在する場合は、どのクラスをインポートするかを尋ねるダイアログが NetBeans によって起動されます。「インポートを修正」はきわめてうまく動作し、使用されなくなったインポートを自動的に削除します。

まとめ

これらのヒントを使用すると、より優れたコードを、構文上のエラーも少なく、より少ない時間で生成していることにすぐに気付きます。また、集中的なプロジェクトのコーディングで指が痛くなった経験を持つ多くの開発者にとっても、NetBeans によるコードの自動的な記述は間違いなく、もっとも優れた方法です。

IDE をプロジェクト固有のニーズを満たすようにカスタマイズすればするほど、システムをより迅速に実装できるようになります。NetBeans 4.0 は完璧なレーシングカーのように高速で、かつ乗り心地は快適です。ただし、レーシングカーと同様に、調整が不可欠です。プロジェクト固有のニーズを満たすように省略名、マクロ、およびテンプレートをカスタマイズすることによって IDE を調整し、NetBeans 4.0 の本来の力を解き放ってください。

筆者について

は、デンマークのソフトウェア会社 ROCK IT の創業者であるとともに、完全に NetBeans で開発された、画期的で、オール Java の、コンポーネント指向のコンテンツ管理システム Puls (2005 年春にリリース予定) の背後にいる指導者です。