VSCodeでJavaフォーマッターを設定する方法

採用はこちら

VSCodeでJavaを開発する場合、フォーマッターを設定しておくと、インデントや改行、空白、波括弧の位置などを自動的に整えられます。

コードの書式を統一できるため、個人開発だけでなく、複数人でJavaプロジェクトを開発する場合にも便利です。

VSCodeでは、主に「Language Support for Java(TM) by Red Hat」がJavaのフォーマット機能を提供しています。

保存時の自動フォーマットや、Eclipse形式のフォーマッター設定ファイルを利用することで、プロジェクト独自のコードスタイルを適用することも可能です。

ここでは、VSCodeでJavaフォーマッターを設定する方法を詳しく解説します。

目次

VSCodeでJavaフォーマッターを使うための準備

VSCodeでJavaコードをフォーマットするには、Java開発用の拡張機能を導入する必要があります。

一般的には、Microsoftが提供している「Extension Pack for Java」をインストールすると簡単です。

Extension Pack for Javaをインストールする

VSCodeを起動したら、左側のアクティビティバーから「拡張機能」を開きます。

検索欄に以下を入力します。

Extension Pack for Java

検索結果から「Extension Pack for Java」を選択し、「インストール」をクリックします。

Extension Pack for Javaは、Java開発でよく使われる複数の拡張機能をまとめたパッケージです。

その中に含まれている「Language Support for Java(TM) by Red Hat」が、Javaのコード補完やエラー診断、リファクタリング、フォーマットなどの基本機能を担当します。

つまり、厳密にはExtension Pack for Javaそのものがフォーマッターなのではなく、パックに含まれているRed HatのJava拡張機能がフォーマット機能を提供しています。

Language Support for Javaを単独でインストールすることも可能

Java関連の拡張機能をまとめて導入する必要がない場合は、以下の拡張機能だけをインストールすることもできます。

Language Support for Java(TM) by Red Hat

拡張機能IDは以下です。

redhat.java

すでにJavaのコード補完やエラー表示が正常に動作している場合は、この拡張機能がインストールされている可能性があります。

Javaファイルを手動でフォーマットする方法

Java拡張機能をインストールしたら、まず手動でフォーマットできるか確認してみましょう。

VSCodeでは、「Format Document」機能を使用してファイル全体を整形できます。

Format Documentを実行する

フォーマットしたいJavaファイルを開きます。

続いて、コマンドパレットを表示します。

Windows・Linuxでは以下のショートカットを使用します。

Ctrl + Shift + P

macOSでは以下です。

Command + Shift + P

コマンドパレットに以下を入力します。

Format Document

「Format Document」を選択すると、現在設定されているJavaフォーマッターを使用してファイル全体が整形されます。

ショートカットでフォーマットする

VSCodeのデフォルトキーバインドでは、Windows・Linuxで以下のショートカットを使用できます。

Shift + Alt + F

macOSでは通常、以下です。

Shift + Option + F

ただし、キーボードショートカットを変更している場合は異なるキーが割り当てられていることがあります。

Javaのデフォルトフォーマッターを設定する

複数のフォーマッター系拡張機能をインストールしている場合、どのフォーマッターを使用するのかVSCodeが判断できないことがあります。

その場合は、Java用のデフォルトフォーマッターを明示的に指定しておくと便利です。

settings.jsonでredhat.javaを指定する

VSCodeのsettings.jsonに以下を設定します。

{
    "[java]": {
        "editor.defaultFormatter": "redhat.java"
    }
}

redhat.javaは、「Language Support for Java(TM) by Red Hat」の拡張機能IDです。

この設定により、Javaファイルでフォーマットを実行したときにRed HatのJavaフォーマッターが使用されます。

なお、Java用のフォーマッターが1つしかインストールされておらず、競合が発生していない場合は、必ずしもeditor.defaultFormatterを設定する必要はありません。

複数のフォーマッターが存在する場合に、使用するフォーマッターを固定するための設定と考えると分かりやすいでしょう。

Javaを保存したときに自動フォーマットする方法

Javaコードを書くたびに手動で「Format Document」を実行するのは手間がかかります。

その場合は、保存時フォーマットを有効にすると便利です。

editor.formatOnSaveを有効にする

Javaだけ保存時フォーマットを有効にする場合は、以下のように設定します。

{
    "[java]": {
        "editor.defaultFormatter": "redhat.java",
        "editor.formatOnSave": true
    }
}

これでJavaファイルを保存すると、自動的にフォーマットが実行されます。

例えば、Windowsで以下を押して保存した場合です。

Ctrl + S

保存と同時にインデントや空白、改行などが整えられます。

すべての言語で保存時フォーマットを有効にする

Javaに限定せず、すべての言語で保存時フォーマットを有効にしたい場合は、次のように設定できます。

{
    "editor.formatOnSave": true
}

ただし、JavaScriptやTypeScript、HTML、CSSなどで別のフォーマッターを使っている場合は、それぞれの言語でフォーマット動作が変わる可能性があります。

そのため、Javaだけを対象にしたい場合は[java]の中に設定するほうが管理しやすいでしょう。

java.format.enabledでJavaフォーマッターを有効にする

Red HatのJava拡張機能には、Javaフォーマッター自体の有効・無効を切り替える設定があります。

設定キーは以下です。

java.format.enabled

Javaフォーマッターを有効にする

Javaフォーマッターを有効にする場合は、次のように設定します。

{
    "java.format.enabled": true
}

通常はJavaフォーマッターが利用できる状態になっています。

そのため、特別な理由がなければ変更する必要はありません。

Javaフォーマッターを無効にする

別のJavaフォーマッターを利用したい場合などは、以下のように無効化できます。

{
    "java.format.enabled": false
}

java.format.enabledとeditor.formatOnSaveは役割が異なる点に注意してください。

java.format.enabledはJava拡張機能側のフォーマッターを有効にする設定です。

一方、editor.formatOnSaveは、ファイル保存時にフォーマットを実行するかどうかを決めるVSCode側の設定です。

Javaフォーマッターの詳細設定を変更する方法

Javaのフォーマットルールは、インデントや空白、改行などを細かく調整できます。

Red HatのJava拡張機能には、フォーマッター設定を確認・編集するための機能が用意されています。

Java Formatter Settingsを開く

コマンドパレットを開き、以下のコマンドを検索します。

Java: Open Java Formatter Settings with Preview

この機能を利用すると、フォーマット結果をプレビューしながらJavaのフォーマット設定を変更できます。

設定変更によってコードがどのように整形されるのか確認しながら調整できるため、独自のコーディングルールを作成したい場合に便利です。

Java Formatter Settingsで設定できる項目

Javaフォーマッターでは、例えば以下のような項目を調整できます。

  • インデント幅
  • タブとスペースの使い分け
  • 波括弧の位置
  • メソッド間の空行
  • 演算子前後の空白
  • メソッド引数の改行
  • 配列やコレクションの改行
  • コメントの整形方法

例えば、次のようなJavaコードがあります。

public class Sample {
    public static void main(String[] args) {
        System.out.println("Hello");
    }
}

フォーマッター設定によって、インデント幅や波括弧の配置などを一定のルールに統一できます。

Eclipse形式のフォーマッター設定を使用する方法

VSCodeのJava拡張機能では、Eclipse形式のJavaフォーマッター設定ファイルを利用できます。

チーム全体で同じフォーマットルールを使いたい場合に便利です。

java.format.settings.urlを設定する

フォーマッター設定ファイルを指定するには、以下の設定を使用します。

java.format.settings.url

例えば、プロジェクト内に以下のファイルを配置したとします。

.vscode/java-formatter.xml

settings.jsonでは次のように指定できます。

{
    "java.format.settings.url": ".vscode/java-formatter.xml"
}

これにより、指定したXMLファイルに定義されているルールを利用してJavaコードをフォーマットできます。

URL上のフォーマッター設定も指定できる

java.format.settings.urlでは、ローカルファイルだけでなくURL上の設定ファイルを指定することも可能です。

例えば、チームで共通のformatter XMLをWeb上で管理している場合などに利用できます。

ただし、外部URLに依存すると、URL変更やネットワーク環境によって設定を読み込めなくなる可能性があります。

安定したチーム開発を重視する場合は、プロジェクト内にXMLファイルを置いてGitで管理する方法も検討するとよいでしょう。

参考サイト

VSCode の Java 開発環境にフォーマッターを設定する #Formatter – Qiita

フォーマッタープロファイルを指定する方法

1つのformatter XML内に複数のプロファイルが含まれている場合は、使用するプロファイルを指定できます。

java.format.settings.profileを設定する

使用する設定キーは以下です。

java.format.settings.profile

例えば、ProjectStyleというプロファイルを使用する場合は次のように設定します。

{
    "java.format.settings.url": ".vscode/java-formatter.xml",
    "java.format.settings.profile": "ProjectStyle"
}

java.format.settings.profileに指定する名前は、formatter XML内に定義されているプロファイル名と一致している必要があります。

プロファイル名が間違っていると、想定したフォーマット設定が適用されない可能性があります。

Google Java StyleをVSCodeで利用する方法

Java開発では、「Google Java Style Guide」をベースにコードスタイルを統一するケースもあります。

VSCodeのJavaフォーマッターでは、Googleが公開しているEclipse用のGoogle Styleプロファイルを利用できます。

Google Style用XMLを指定する

例えば、Googleが提供しているEclipse向けformatter XMLをjava.format.settings.urlに指定することで、Google StyleをベースにJavaコードを整形できます。

プロジェクト内にXMLを保存する場合は、例えば次のように設定できます。

{
    "java.format.settings.url": ".vscode/eclipse-java-google-style.xml"
}

XML内に複数のプロファイルがある場合は、必要に応じて以下も指定します。

{
    "java.format.settings.url": ".vscode/eclipse-java-google-style.xml",
    "java.format.settings.profile": "GoogleStyle"
}

ただし、実際のプロファイル名は使用するXMLファイルの内容に合わせて指定する必要があります。

Google Java Styleとgoogle-java-formatは同じではない

ここで注意したいのが、「Google Java Style」と「google-java-format」の違いです。

Google Java Style Guideは、Googleが公開しているJavaのコーディングスタイルです。

一方、google-java-formatは、Googleが提供している専用のJavaフォーマッターツールです。

Eclipse用のGoogle Style XMLをRed Hat Java拡張機能に読み込ませる方法は、Google Styleに基づいたEclipseフォーマッター設定を利用する仕組みです。

google-java-formatコマンドそのものをVSCode内部で実行しているわけではありません。

そのため、厳密にgoogle-java-formatと完全に同じ結果を求めるプロジェクトでは、GradleやMaven、Spotlessなどを使ってgoogle-java-formatを適用する方法も検討する必要があります。

コメントをフォーマットする方法

Javaフォーマッターでは、コメントをフォーマット対象に含めるかどうかも設定できます。

使用する設定は以下です。

java.format.comments.enabled

コメントのフォーマットを有効にする

コメントもフォーマットする場合は、次のように設定します。

{
    "java.format.comments.enabled": true
}

これにより、Javaコードだけでなくコメントもフォーマット処理の対象になります。

コメントのレイアウトを独自ルールで管理しているプロジェクトでは、この設定による影響を確認しておくとよいでしょう。

入力中にJavaを自動フォーマットする方法

Java拡張機能では、コードを入力している途中にフォーマット処理を実行する「オンタイプフォーマット」も利用できます。

設定キーは以下です。

java.format.onType.enabled

java.format.onType.enabledを有効にする

次のように設定します。

{
    "java.format.onType.enabled": true
}

オンタイプフォーマットを有効にすると、Javaコードの入力中に;や}、Enterキーなどをきっかけとしてフォーマット処理が行われます。

これにより、コーディング中もインデントなどを整った状態に保ちやすくなります。

保存時フォーマットとの違い

java.format.onType.enabledとeditor.formatOnSaveは異なる機能です。

java.format.onType.enabledは、コードを入力している途中にフォーマットを実行します。

一方、editor.formatOnSaveは、ファイルを保存したタイミングでドキュメント全体をフォーマットします。

両方を有効にすることもできます。

ユーザー設定とワークスペース設定を使い分ける

VSCodeには、「ユーザー設定」と「ワークスペース設定」があります。

Javaフォーマッターを設定するときは、この違いを理解しておくと管理しやすくなります。

ユーザー設定を使う場合

ユーザー設定は、基本的に自分がVSCodeで開くすべてのプロジェクトに適用されます。

例えば、常にJavaを保存時フォーマットしたい場合は、ユーザー設定に以下を登録できます。

{
    "[java]": {
        "editor.defaultFormatter": "redhat.java",
        "editor.formatOnSave": true
    }
}

個人の好みとして使用する設定は、ユーザー設定に登録すると便利です。

ワークスペース設定を使う場合

特定のプロジェクトだけフォーマット設定を適用したい場合は、ワークスペース設定を使用します。

一般的には、プロジェクト内の以下のファイルに設定します。

.vscode/settings.json

例えば、次のように設定できます。

{
    "[java]": {
        "editor.defaultFormatter": "redhat.java",
        "editor.formatOnSave": true
    },
    "java.format.settings.url": ".vscode/java-formatter.xml",
    "java.format.settings.profile": "ProjectStyle"
}

この方法なら、プロジェクトごとに異なるJavaフォーマットルールを適用できます。

チーム開発ではフォーマッター設定を共有する

複数人でJavaを開発する場合は、全員が同じフォーマット設定を使用することが重要です。

開発者ごとにフォーマット結果が異なると、本質的なコード変更とは関係のない差分がGitに大量に発生する可能性があります。

.vscode/settings.jsonをGit管理する

チームで共有したい設定については、.vscode/settings.jsonをGit管理する方法があります。

例えば、次のような構成です。

project
├─ .vscode
│  ├─ settings.json
│  └─ java-formatter.xml
├─ src
└─ pom.xml

フォーマッターXMLとVSCode設定を同じリポジトリで管理することで、チームメンバーが同じコードスタイルを使用しやすくなります。

ただし、.vscode/settings.jsonには個人環境に依存する設定を含めないよう注意が必要です。

例えば、特定ユーザーのPCだけで有効な絶対パスやローカル環境固有の設定をGitに含めると、ほかのメンバーの環境で問題になる可能性があります。

チーム全体で共有する必要がある設定だけを登録するのが基本です。

VSCodeとSpotlessを組み合わせる方法

チーム開発では、VSCodeのフォーマッターだけに依存すると、IDEや開発環境の違いによってフォーマット結果が揃わない可能性があります。

その場合は、GradleやMavenとSpotlessを組み合わせる方法があります。

IDEとビルドツールの両方でフォーマットを統一する

例えば、次のような構成です。

VSCode
↓
開発中にフォーマット

Gradle / Maven + Spotless
↓
プロジェクト共通のフォーマットルールを適用

CI
↓
フォーマット違反をチェック

このようにしておけば、VSCode以外のIDEを使用している開発者がいても、CIなどでコードスタイルを統一しやすくなります。

大規模なJavaプロジェクトや複数人での開発では、IDE側の設定とビルドツール側のチェックを組み合わせると効果的です。

VSCodeでJavaフォーマッターが動かない場合の対処法

設定しているにもかかわらずJavaコードがフォーマットされない場合は、いくつかのポイントを確認しましょう。

Language Support for Javaが有効か確認する

まず、「Language Support for Java(TM) by Red Hat」がインストールされ、有効になっているか確認します。

Javaコードの補完やエラー診断も動作していない場合は、Java Language Server自体が正常に起動していない可能性があります。

デフォルトフォーマッターを確認する

Javaファイルを開き、右クリックメニューから以下を選択します。

Format Document With...

続いて、利用可能なフォーマッターを確認します。

必要に応じて「Configure Default Formatter」を選び、「Language Support for Java(TM) by Red Hat」をデフォルトとして設定します。

settings.jsonでは以下の設定になります。

{
    "[java]": {
        "editor.defaultFormatter": "redhat.java"
    }
}

java.format.enabledを確認する

以下のようになっていると、Red Hat Java拡張機能のフォーマッターが無効になります。

{
    "java.format.enabled": false
}

フォーマットを利用する場合は、次のように変更します。

{
    "java.format.enabled": true
}

editor.formatOnSaveを確認する

保存時にフォーマットされない場合は、以下が有効になっているか確認します。

{
    "[java]": {
        "editor.formatOnSave": true
    }
}

手動フォーマットはできるのに保存時だけ動作しない場合は、editor.formatOnSaveの設定が原因となっている可能性があります。

formatter XMLのパスを確認する

次のように外部のフォーマッター設定を指定している場合は、ファイルパスが正しいか確認します。

{
    "java.format.settings.url": ".vscode/java-formatter.xml"
}

指定した場所に実際にXMLファイルが存在している必要があります。

また、java.format.settings.profileを使用している場合は、XML内のプロファイル名と設定値が一致しているか確認してください。

VSCodeでおすすめのJavaフォーマッター設定

個人開発でJavaのフォーマットを自動化したい場合は、まず以下のようなシンプルな設定から始めるのがおすすめです。

{
    "[java]": {
        "editor.defaultFormatter": "redhat.java",
        "editor.formatOnSave": true
    }
}

これだけでも、Javaファイルを保存するたびに自動でコードを整形できます。

さらに必要に応じて、以下を追加します。

{
    "[java]": {
        "editor.defaultFormatter": "redhat.java",
        "editor.formatOnSave": true
    },
    "java.format.enabled": true,
    "java.format.comments.enabled": true,
    "java.format.onType.enabled": true
}

チーム独自のフォーマット設定を使う場合は、さらに次のように指定できます。

{
    "[java]": {
        "editor.defaultFormatter": "redhat.java",
        "editor.formatOnSave": true
    },
    "java.format.settings.url": ".vscode/java-formatter.xml",
    "java.format.settings.profile": "ProjectStyle"
}

用途に応じて、最低限の設定から少しずつ追加していくと管理しやすいでしょう。

VSCodeでJavaフォーマッターを設定してコードスタイルを統一しよう

VSCodeでJavaをフォーマットする場合は、「Language Support for Java(TM) by Red Hat」のフォーマット機能を利用するのが基本です。

まずは、Javaのデフォルトフォーマッターとしてredhat.javaを指定し、editor.formatOnSaveを有効にすると、保存するだけでJavaコードを自動的に整形できます。

より細かいコードスタイルを設定したい場合は、Eclipse形式のformatter XMLをjava.format.settings.urlで指定できます。

複数のフォーマッタープロファイルが含まれている場合は、java.format.settings.profileで使用するプロファイルを選択できます。

個人開発では保存時フォーマットだけでも十分ですが、チーム開発では.vscode/settings.jsonやformatter XMLを共有し、必要に応じてSpotlessやCIによるチェックも組み合わせると効果的です。

フォーマットルールをプロジェクト全体で統一しておけば、不要なコード差分を減らし、Javaコードの可読性や保守性を高めやすくなります。

以上、VSCodeでJavaフォーマッターを設定する方法についてでした。

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

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