VSCodeでJava Formatterを設定する方法について

採用はこちら

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を設定する方法についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次