Eclipseコードフォーマッター
コードフォーマッターとは?
Eclipseには、ソースコードを自動整形する機能(フォーマッター)が備わっています。
フォーマットの仕方を少し紹介
Javaエディタ上で (Macなら) "shift + command + F" と押すとフォーマッターを利用できます。
ですが、Save Actions の設定がされていれば、保存ボタン (command+S) を押すだけでフォーマットされるようにもできます。 フォーマットはみなで統一的にやってこそ意義があるので、こちらがオススメです。 (ショートカットを手に馴染ませてる人も少ないでしょうし)
プロジェクト設定なので共有できる
プロジェクト設定 (Properties: .settingsディレクトリ) に組み込むことができるので、最初の一人が設定すれば他の開発者が設定する必要はなく、共通の設定を簡単に横展開できます。
ただ、ワークスペース設定 (Preferences: .metadataディレクトリ) にもフォーマッター設定があり紛らわしいので注意しましょう。 (ワークスペース設定だと共有ができず、フォーマット定義の統一が崩れやすいので、プロジェクト設定を使うのがオススメです)
フォーマッターの概要
Eclipseには、ソースコードを自動で整形する機能が備わっています。
e.g. Eclipseのコードフォーマッターを利用すると @Java
// フォーマットする前
if(true)
{ foo = null;
}
// フォーマットした後
if (true) {
foo = null;
}
Javaエディタ上で (Macなら) "shift + command + F" と押すとフォーマッターを利用できます。
ただし、Eclipseのデフォルトのフォーマット定義はプロジェクトによっては若干利用しづらいものである可能性があります。 具体的には以下の通りです。
- 横幅 80 文字で改行されてしまう
- コメントの中までフォーマットされてしまう
そのため、独自のフォーマット定義を用意した方が利用しやすいでしょう。
フォーマット定義の設定
独自のフォーマット定義は、Eclipseプロジェクトのプロパティ(Eclipseプロジェクトを選択して alt + enter)にて設定できます。 [Java Code Style] - [Formatter] において [Enable project specific settings] をチェックし、Editボタンを押すと独自のフォーマット定義を細かく設定できます。
例えば dbflute では、横幅を 140 文字に、コメント内のフォーマットを OFF にしています。
フォーマット定義は、プロジェクト直下の .setting ディレクトリに保存されます。このディレクトリをGit経由で共有すれば、他のディベロッパーもそのまま同じ設定を利用することができます。
フォーマット定義のインポート
フォーマット定義をXMLファイルにエクスポートし、別のEclipseプロジェクトでインポートすることができます。フォーマット定義は .setting ディレクトリに保存されるので、他のディベロッパーと共有したい場合はGit経由で可能ですが、 別の開発プロジェクトなどで共有したい場合は、このXMLへのエクスポート、インポート機能が利用できるでしょう。
例えば、おすすめプロジェクト設定では、dbfluteスタイルのフォーマット定義xmlを公開して誰でもダウンロード利用できるようにしています。
保存時アクションへの関連付け
ファイルを保存 (ctrl + S) した時に、自動でフォーマットされるように設定できます。 そうすることで、プロジェクト全体でフォーマッターの利用を統一化することができます。
Eclipseプロジェクトのプロパティ(Eclipseプロジェクトを選択して alt + enter)の [Java Editor] - [Save Actions] において、[Enable project specific settings] をチェックし、[Perform the selected actions on save] をチェックし、[Format source code] をチェックすることで、保存時に自動でフォーマッターが動作します。
ついでではありますが、[Organize imports] にもチェックしておくと(デフォルトでチェックがついている可能性あり)、 "インポートの編成" も同様に保存時に自動で実行されるようになります。
この保管時アクションの設定自体も、.settings ディレクトリに保存されるので、Git経由で共有することができます。
ワークスペースでも設定できる
Eclipseプロジェクトごとではなく、ワークスペースに対してフォーマット定義を設定することもできます。 ただ、その場合はGit経由での他のディベロッパーへの共有はできないので、複数人プロジェクトではあまり有効ではないと考えられます。