ToolActToolAct

Java フォーマットツール

Java 入力
出力結果
行数: 1文字数: 0バイト数: 0
行数: 1文字数: 0

Javaフォーマットとは?

Javaフォーマットは、乱雑なJavaコードを標準化された読みやすい形式に整理するプロセスです。適切なコードフォーマットは可読性を向上させ、デバッグを容易にし、エラーを減少させます。フォーマットには、一貫したインデント、適切な改行、演算子のスペース、括弧の整列が含まれます。圧縮はすべての空白とコメントを削除し、ファイルサイズを大幅に削減します。

使い方

使い方

  1. 左側の入力欄にJavaコードを貼り付けるか入力してください
  2. インデントサイズを選択(2スペース、4スペース、Tab)
  3. 「フォーマット」をクリックしてコードを整形、「圧縮」でコードを縮小
  4. 右側に結果を確認(シンタックスハイライト付き)
  5. 「コピー」をクリックしてクリップボードにコピー

オプション説明

インデントサイズ2スペース、4スペース、Tabインデントから選択
フォーマット適切なインデントと改行でコードを整形
圧縮空白やコメントを削除してファイルサイズを削減

コードのヒント

  • フォーマットは可読性を向上させますが、Javaコードのコンパイルや型チェックは行いません。編集後に通常のビルドやIDEチェックを実行してください。
  • Javaソースの圧縮は本番ビルドではあまり有用ではありません。レビュー、スタックトレース、将来の保守のために読みやすいフォーマットを保ちましょう。

利用シーン

コードレビュー前に貼り付けた Java を整理メソッド本文がチャット、ドキュメント、チケットコメントからコピーされた場合に、スペースの不統一が発生します。このフォーマッターは中括弧とステートメント周辺のインデントと改行を素早く復元します。完全な IDE プロジェクトを開かずにコードレビュー可能な形にしたい小さなスニペットに特に便利です。
ドキュメントやバグレポート用のコンパクトなサンプルを準備圧縮モードはコメントと余分な空白を除去し、Java のサンプルをイシューフィールド、ログ注釈、再現手順にスクロールなしで収めることができます。パースと圧縮はすべてブラウザ内で行われるため、内部パッケージ名、未完成の DTO、プライベートブランチのプロプライエタリコードもページから離れることなく再整形できます。顧客識別子を含む再現コードを共有する際に重要です。
短いスニペットの明らかな構造ミスを発見組み込みのバリデーションは文字列、文字リテラル、コメントを尊重しながら括弧のバランスをチェックするため、スニペットを他の場所に貼り付ける前に欠けた中括弧や括弧を検出できます。コンパイラではありませんが、面接問題、ドキュメントサンプル、独立したユーティリティメソッドの高速な健全性チェックとして機能します。
生成コードをプロジェクトのインデントに合わせるスペース2個、スペース4個、タブのインデントを切り替えて、生成されたゲッター、Lombok の出力、IDE のエクスポートを周囲のファイルに合わせます。チームの Google Java Style、Checkstyle、Spotless の設定を確認せずにモジュール全体に実行すると、ノイジーな差分が生成されるため注意してください。
enum やアノテーションを多用したスニペットを安全に整形定数、メソッド、アノテーション配列を持つ enum を貼り付けると、チャットでは読みにくいテキストの壁になりがちです。各定数とその引数を独立した行に再フォーマットし、書き換え後にインポートと public 修飾子がまだ存在することを確認してください。Google Java Style は4スペースインデントと100カラムの行幅を規定していますが、Eclipse のデフォルトプロファイルは2スペースタブ、IntelliJ のバンドルスタイルは120カラムに及ぶことが多く、チームプロファイルを確認せずにこのフォーマッターを実行するとコードが有効でも差分が生じます。

仕組み

Java のフォーマットは字句解析と AST 構築に基づいています。レキサーはソースを文字ごとにスキャンし、トークンを生成します。キーワード(class、public、static などの予約語)、識別子(変数名やクラス名)、リテラル(数値、文字列、文字)、演算子(+、-、==、&& 等)、区切り子({ } ( ) ; ,)、コメント(//、/* */)です。 パーサーは Java 言語仕様に従ってトークンストリームを抽象構文木(AST)に変換し、クラス定義、メソッド本体、ステートメントブロック、制御フロー構造、アノテーション、その他の構文単元を認識します。フォーマッターは AST をウォークし、Google Java Style などのスタイルガイドに従ってコードを再生成します。インデントはブロックの深さに応じて増加し、行幅は 100 カラムで制限され、演算子の両側にスペースが入り、カンマの後にスペースが入り、開き中括弧は同じ行に配置されます(K&R スタイル)。 アノテーションの処理は Java フォーマットにおける特殊なケースです。単一のアノテーションはメソッドと同じ行に残され、より長いアノテーションリストはパラメータに揃えて行に分割され、各アノテーションは独自の行に配置されます。

  • 字句解析:50 の Java キーワード、識別子、リテラル、演算子、コメントを認識し、トークンストリームを出力します。
  • AST 構築:JLS ルールに従い、クラス、メソッド、制御フロー、ラムダ、try-with-resources を正しく処理して AST を構築します。
  • インデントルール:Google スタイルではデフォルトで 1 レベルあたり 4 スペース、行幅は 100 カラム。制限を超える行は自動的に折り返されます。
  • 改行戦略:長いメソッドチェーン、パラメータリスト、アノテーションはカンマやドットで折り返され、継続行は前行の先頭文字に揃えられます。
  • アノテーション処理:単一のアノテーションは同じ行に残され、複数のアノテーションは 1 行にまとめるか 1 行 1 つにするか、長さとパラメータ整列ルールで決定されます。
  • コメント保持:// と /* */ コメントは元の位置に保持されます。圧縮時は削除もオプションとして選択可能です。

使用例

クラス定義のフォーマット

入力:  public class User{private Long id;private String name;public User(Long id,String name){this.id=id;this.name=name;}}
出力:
public class User {
  private Long id;
  private String name;

  public User(Long id, String name) {
    this.id = id;
    this.name = name;
  }
}

メソッドチェーンのフォーマット

入力:  List<String> result=list.stream().filter(s->s.startsWith("a")).map(String::toUpperCase).sorted().collect(Collectors.toList());
出力:
List<String> result = list.stream()
    .filter(s -> s.startsWith("a"))
    .map(String::toUpperCase)
    .sorted()
    .collect(Collectors.toList());

アノテーションの折り返し

入力:  @Override public ResponseEntity<User> getUser(@PathVariable Long id,@RequestParam(defaultValue="10") int size){...}
出力:
@Override
public ResponseEntity<User> getUser(
    @PathVariable Long id,
    @RequestParam(defaultValue = "10") int size) {
  ...
}

よくある質問

どのJavaスタイルを使用していますか?

一般的なデフォルトはGoogle Java StyleまたはSun/Oracle規約です。インデント4スペース、K&Rのブレーススタイル、100カラム幅などです。一部のビルドではスタイルを切り替えるオプションが提供されています。スタイルガイドの細かいルールは微妙なので、フォーマッターを実行し、出力を読んで、設定を固定するのが良いでしょう。

フォーマッターは最新のJavaを理解しますか?

パーサーのバージョンによります。レコード、シールクラス、switch式、テキストブロック、パターンマッチングは最近追加された機能で、古いパーサーは対応できないことがあります。スニペットを試してみて、きれいにフォーマットされれば問題ありません。エラーが出る場合はパーサーのバージョンを確認してください。

インポートや未使用変数を整理してくれますか?

いいえ。フォーマットは空白とブレースの配置のみを変更します。静的解析(インポートの整理、未使用の削除)には、本格的なIDEや、google-java-formatの--skip-removing-unused-imports offのようなツールが必要です。

ソースコードはアップロードされますか?

いいえ。フォーマットはJSベースのJavaパーサーを使ってブラウザ内で実行されます。コードは送信されません。社内のセキュリティポリシーがWebツールへの暴露を禁じている場合は、独自コードの貼り付けを避けてください。

IntelliJやEclipseの出力と一致しますか?

完全に一致することはまずありません。各IDEには数千のオプションを持つ独自のフォーマッターがあります。アドホックなフォーマット用にこのツールを使い、チームでの一貫性のためには、ビルドに組み込まれたgoogle-java-formatやSpotlessなどCIで強制可能なツールを使用してください。

Javaをミニファイできますか?

Javaはコンパイル言語であり、JSのようなミニファイは適用されません。クラスファイルの最適化はビルド時にコンパイラとProGuardが行うものです。このページはあくまでソースレベルのフォーマット用です。

コードに余分な空行が追加されるのはなぜですか?

多くのスタイルガイドでは、クラスメンバー間やメソッド間に空行を要求します。フォーマッターはこれに準拠するために挿入します。コンパクトなコードを好む場合は、関連するスタイルオプションを上書きしてください。

関連ツール

JavaScript フォーマットツール

オンラインJavaScriptフォーマットツール。コード美化、圧縮、構文チェックをサポート。ワンクリックでJSコードを整理し、コード可読性を向上。

Python フォーマットツール

オンラインPythonフォーマットツール。コード美化、圧縮、構文チェックをサポート。ワンクリックでPythonコードを整理し、コード可読性を向上。

JSON フォーマットツール

オンラインJSONフォーマットツール。シンタックスハイライト、エラー検出、圧縮・美化をサポート。ワンクリックでJSONデータを美化し、フォーマットエラーを素早く特定し、開発効率を向上させます。

XML フォーマットツール

オンラインXMLフォーマットツール。自動インデント美化、構文検証、圧縮処理をサポート。カスタムインデント対応、XMLフォーマットエラーを素早く検出。

SQL フォーマットツール

オンラインSQLフォーマットツール。コード美化、圧縮、キーワード大文字小文字変換、シンタックスハイライトをサポート。ワンクリックでSQLステートメントを整理し、コード可読性を向上。

正規表現テストツール

オンライン正規表現テストツール。リアルタイムマッチング、結果をハイライト表示。よく使う正規表現ライブラリ対応、正規表現のデバッグと検証に役立ちます。