VSCodeでJavaを開発する場合、Formatterを設定しておくと、インデントや空白、改行、波括弧の位置などを自動で整えられます。
コードの見た目を統一できるため、個人開発だけでなくチーム開発でも便利です。
VSCodeでJavaのフォーマット機能を利用する場合は、一般的に「Language Support for Java(TM) by Red Hat」拡張機能が提供するJava Formatterを使用します。
このFormatterはEclipse JDTのFormatterをベースとしており、標準設定だけでなく、Eclipse形式のFormatter XMLを読み込んで細かくルールを指定することも可能です。
Java Formatterとは
Java Formatterとは、Javaコードの書式を一定のルールに従って自動的に整える機能です。
たとえば、次のようなコードがあるとします。
public class Main{
public static void main(String[] args){
System.out.println("Hello");
}
}
Formatterを実行すると、一般的には次のように整形されます。
public class Main {
public static void main(String[] args) {
System.out.println("Hello");
}
}
インデントだけでなく、空白や改行、括弧の配置などもFormatterのルールに従って調整されます。
Java Formatterを利用するための拡張機能をインストールする
Language Support for Javaをインストールする
まずは、VSCodeでJavaのフォーマット機能を利用できる状態にします。
VSCodeの左側にある「Extensions」を開き、次の拡張機能を検索します。
Language Support for Java(TM) by Red Hat
この拡張機能をインストールすると、Javaのコード補完やコードナビゲーション、リファクタリングなどに加えて、コードフォーマット機能も利用できます。
Java開発環境をまとめて導入したい場合は、Microsoftが提供する「Extension Pack for Java」を利用する方法もあります。
この拡張機能パックには、Java開発に必要な複数の拡張機能が含まれています。
Javaファイルを手動でフォーマットする
Format Documentを使用する
Javaファイル全体をフォーマットする場合は、「Format Document」を使用します。
WindowsやLinuxでは、一般的に次のショートカットを使用します。
Shift + Alt + F
macOSでは、次のショートカットです。
Shift + Option + F
エディター上で右クリックし、「Format Document」を選択して実行することもできます。
選択した範囲だけフォーマットする
Javaファイル全体ではなく、特定のコードだけ整形したい場合は「Format Selection」を利用できます。
対象となるコードを選択した状態で「Format Selection」を実行すると、その範囲だけFormatterが適用されます。
大きなJavaファイルの一部だけ修正した場合などに便利です。
Javaの既定Formatterを設定する
複数のFormatter拡張機能をインストールしている場合は、JavaでどのFormatterを使用するか指定しておくと競合を防ぎやすくなります。
Configure Default Formatterから設定する
Javaファイルを開いた状態でコマンドパレットを表示します。
WindowsやLinuxでは、
Ctrl + Shift + P
macOSでは、
Command + Shift + P
を使用します。
続いて、
Format Document With...
を検索し、「Configure Default Formatter」を選択します。
JavaのFormatterとしてRed HatのJava拡張機能を選択すれば、以降はそのFormatterが優先的に利用されます。
settings.jsonから設定する
設定を明示したい場合は、settings.json にJava専用のFormatterを指定できます。
{
"[java]": {
"editor.defaultFormatter": "redhat.java"
}
}
redhat.java は、Red HatのJava拡張機能を指定する識別子です。
このように言語単位で設定しておけば、JavaにはRed HatのFormatterを使用し、JavaScriptやHTMLには別のFormatterを使用するといった使い分けができます。
ただし、Java用Formatterがほかに存在しない環境では、必ずしもこの設定が必要というわけではありません。
複数のFormatterが存在する場合や、利用するFormatterを明示したい場合に設定するとよいでしょう。
保存時にJavaコードを自動フォーマットする
Format On Saveを有効にする
Java開発では、ファイルを保存するたびに自動でフォーマットする設定が便利です。
VSCodeの設定画面で「Format On Save」を検索し、「Editor: Format On Save」を有効にすると、保存時にFormatterが実行されます。
Javaファイルだけに適用したい場合は、settings.json に次のように記述できます。
{
"[java]": {
"editor.defaultFormatter": "redhat.java",
"editor.formatOnSave": true
}
}
この設定にすると、Javaファイルを保存したタイミングで自動的にコードが整形されます。
Java Formatterを有効・無効にする
Red HatのJava拡張機能には、Java Formatter自体を有効・無効にする設定があります。
{
"java.format.enabled": true
}
true にすると標準Java Formatterが有効になります。
通常は有効のままで問題ありません。
一方、ほかのJava Formatterを利用する場合や、フォーマット機能の競合を避けたい場合は、必要に応じて無効化できます。
{
"java.format.enabled": false
}
Java Formatterの細かいルールを設定する
Red HatのJava拡張機能では、Eclipse JDT Formatterの設定を利用できます。
そのため、次のようなルールを細かく調整できます。
- インデント
- タブとスペース
- 改行
- 波括弧の位置
- 空白
- コメント
- メソッド
- if文
- for文
- switch文
- 配列
- 行の折り返し
細かなコードスタイルを統一したい場合は、Formatter XMLを利用する方法が便利です。
Java Formatterの設定画面を開く
Java: Open Java Formatter Settingsを使用する
Red HatのJava拡張機能では、コマンドパレットからFormatter設定を開けます。
コマンドパレットを開き、次のコマンドを検索します。
Java: Open Java Formatter Settings
このコマンドを利用すると、Eclipse Formatterの設定を編集できます。
環境によってはFormatter設定をプレビューしながら調整できる機能が提供される場合もありますが、利用できる機能はJava拡張機能のバージョンによって異なることがあります。
Formatter XMLを読み込む
java.format.settings.urlを設定する
Java Formatterのルールをプロジェクト単位で統一したい場合は、Eclipse Formatter形式のXMLファイルを読み込めます。
たとえば、次の場所にFormatter XMLを配置したとします。
.vscode/java-formatter.xml
settings.json に次のように記述します。
{
"java.format.settings.url": ".vscode/java-formatter.xml"
}
java.format.settings.url には、Formatter XMLのローカルパスやURLを指定できます。
チーム全員で同じXMLファイルを共有すれば、コードスタイルを統一しやすくなります。
Formatterのプロファイルを指定する
java.format.settings.profileを利用する
Formatter XMLに複数のプロファイルが含まれている場合は、利用するプロファイルを指定できます。
{
"java.format.settings.url": ".vscode/java-formatter.xml",
"java.format.settings.profile": "MyJavaStyle"
}
MyJavaStyle の部分には、Formatter XML内に定義されているプロファイル名を指定します。
XML内にプロファイルが1つしかない場合などは、java.format.settings.profile を省略できることもあります。
チーム開発でFormatter設定を共有する
チーム開発では、Formatter XMLとVSCode設定をリポジトリに含めて管理すると便利です。
たとえば、次のような構成にできます。
project/
├── .vscode/
│ ├── settings.json
│ └── java-formatter.xml
├── src/
└── pom.xml
settings.json には次のように記述します。
{
"java.format.enabled": true,
"java.format.settings.url": ".vscode/java-formatter.xml",
"[java]": {
"editor.defaultFormatter": "redhat.java",
"editor.formatOnSave": true
}
}
この2つのファイルをGitで管理すれば、開発メンバーが同じFormatter設定を利用しやすくなります。
Workspace SettingsとUser Settingsを使い分ける
User Settings
User Settingsは、基本的に自分が開くすべてのVSCodeプロジェクトに適用される設定です。
Java開発全般で保存時フォーマットを使用したい場合は、User Settingsに次のような設定を記述できます。
{
"[java]": {
"editor.defaultFormatter": "redhat.java",
"editor.formatOnSave": true
}
}
Workspace Settings
プロジェクトごとにFormatter設定を変更したい場合は、Workspace Settingsを利用します。
通常は、
.vscode/settings.json
に設定を記述します。
プロジェクト専用のFormatter XMLを使用する場合や、チーム内でルールを共有する場合は、Workspace Settingsを利用するほうが管理しやすいでしょう。
java.format.settings.urlとjava.settings.urlの違い
Javaの設定では、似た名前の項目があるため注意が必要です。
java.format.settings.url
java.format.settings.url は、Java Formatter専用の設定です。
主にEclipse Formatter形式のXMLを指定するために使用します。
{
"java.format.settings.url": ".vscode/java-formatter.xml"
}
java.settings.url
一方、java.settings.url はJava Formatter専用の設定ではありません。
Eclipse JDTのJava設定全般を記述したpreferencesファイルなどを読み込むために利用されます。
そのため、java.format.settings.url と java.settings.url は役割が異なります。
Formatterのルールだけを指定したい場合は、基本的に java.format.settings.url を使用します。
Eclipseプロジェクトの設定に注意する
既存のEclipseプロジェクトをVSCodeで開く場合は、次のファイルが存在することがあります。
.settings/org.eclipse.jdt.core.prefs
これはFormatter XMLそのものではなく、Eclipse JDTのプロジェクト固有設定を保存するファイルです。
プロジェクト固有のJava設定が存在すると、グローバル設定より優先される場合があります。
そのため、VSCode側の設定を変更してもFormatterの結果が想定どおりにならない場合は、このファイルの内容も確認するとよいでしょう。
コメントもFormatterの対象にする
コメントもJava Formatterの対象にしたい場合は、次の設定を利用できます。
{
"java.format.comments.enabled": true
}
true にすると、コードのフォーマット時にコメントも対象になります。
コメントの書式を維持したいプロジェクトでは、設定内容を確認してから利用するとよいでしょう。
入力中の自動フォーマットを設定する
java.format.onType.enabledを使用する
Javaでは、コード入力中に自動フォーマットする機能も利用できます。
{
"java.format.onType.enabled": true
}
設定を有効にすると、; や }、改行などの入力をきっかけとしてコードの整形が行われることがあります。
入力中にコードが自動で動くのが気になる場合は、無理に有効化する必要はありません。
基本的には、保存時にFormatterを実行する editor.formatOnSave だけでも十分便利です。
Google Java Styleを利用する場合の注意点
Javaでは、Google Java Styleをコーディング規約として採用するプロジェクトもあります。
この場合、Google Java Styleに対応したEclipse Formatter XMLを用意し、java.format.settings.url に指定する方法があります。
ただし、「Google Java Style」と「google-java-format」は同じものではありません。
Google Java StyleはJavaのコーディングスタイルに関するルールです。
一方、google-java-formatはGoogleが公開しているJavaコードフォーマットツールです。
Red HatのJava FormatterにEclipse Formatter XMLを指定する方法は、google-java-formatそのものを実行しているわけではありません。
Google Java Styleに近い書式をVSCode標準のJava Formatterで適用する方法として理解するとよいでしょう。
Formatterとimport整理は別の機能
Javaでは、コードフォーマットとimport整理は別の処理です。
Formatterでは主に次のような部分が整えられます。
- インデント
- 空白
- 改行
- 括弧
- コードの折り返し
一方、未使用importの削除やimport順序の整理は「Organize Imports」などの機能が担当します。
そのため、保存時Formatterを有効にしただけでは、必ずしもimportまで自動整理されるわけではありません。
importも自動整理したい場合は、保存時Code Actionsなどを別途設定する必要があります。
Java Formatterが動かない場合の対処法
Java拡張機能が有効になっているか確認する
まず、「Language Support for Java(TM) by Red Hat」がインストールされ、有効になっているか確認します。
Default Formatterを確認する
複数のFormatterがある場合は、次の設定を確認します。
{
"[java]": {
"editor.defaultFormatter": "redhat.java"
}
}
java.format.enabledを確認する
次の設定が false になっていると、Red HatのJava Formatterは無効になります。
{
"java.format.enabled": true
}
Formatter XMLのパスを確認する
次のような設定をしている場合は、
{
"java.format.settings.url": ".vscode/java-formatter.xml"
}
実際に指定した場所にXMLファイルが存在するか確認します。
ファイル名のスペルミスやパスの間違いも確認しましょう。
Workspace Settingsを確認する
User Settingsで正しく設定していても、Workspace Settingsで別の値が設定されていると、プロジェクト側の設定が優先される場合があります。
そのため、
.vscode/settings.json
の内容も確認しましょう。
Eclipse由来のプロジェクト設定を確認する
Eclipseから移行したプロジェクトでは、
.settings/org.eclipse.jdt.core.prefs
にプロジェクト固有の設定が含まれている場合があります。
Formatter設定を変更しても結果が変わらない場合は、このファイルも確認してみてください。
おすすめのJava Formatter設定
個人開発であれば、まずは次の設定から始めるとよいでしょう。
{
"java.format.enabled": true,
"[java]": {
"editor.defaultFormatter": "redhat.java",
"editor.formatOnSave": true
}
}
これだけでも、Javaファイルを保存するたびに自動でコードを整形できます。
チーム開発でフォーマットルールまで統一したい場合は、Formatter XMLも利用します。
{
"java.format.enabled": true,
"java.format.settings.url": ".vscode/java-formatter.xml",
"[java]": {
"editor.defaultFormatter": "redhat.java",
"editor.formatOnSave": true
}
}
必要に応じて、さらにプロファイルを指定します。
{
"java.format.settings.profile": "MyJavaStyle"
}
VSCodeでJava Formatterを設定する方法のまとめ
VSCodeでJava Formatterを利用する場合は、「Language Support for Java(TM) by Red Hat」を導入し、必要に応じてJava用の既定Formatterを設定します。
さらに、
{
"[java]": {
"editor.defaultFormatter": "redhat.java",
"editor.formatOnSave": true
}
}
と設定しておけば、Javaファイルを保存するたびに自動でコードを整形できます。
個人開発では保存時Formatterを有効にするだけでも十分便利です。
一方、チーム開発では、java.format.settings.url を利用してEclipse Formatter形式のXMLを共有すると、開発メンバー全員のコードスタイルを統一しやすくなります。
また、java.format.settings.url と java.settings.url、.settings/org.eclipse.jdt.core.prefs はそれぞれ役割が異なります。
設定が反映されない場合は、これらを混同せずに確認することが重要です。
最初は保存時フォーマットを有効にし、必要になった段階でFormatter XMLやプロファイル設定を追加していくと、複雑になりすぎず管理しやすいでしょう。
以上、VSCodeでJava Formatterを設定する方法についてでした。
最後までお読みいただき、ありがとうございました。










