本ページはプロモーションが含まれています

Java入門

【Java】テキストブロックの使い方!3つのメリットも解説

トム

・SaaS勤務/javaのバックエンドエンジニア
/java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎

「Javaで長いSQL文を書くのが面倒…」「JSONを文字列にすると見づらい…」

Java開発歴10年以上の私も、かつては同じ悩みを抱えていました。長い文字列を + 演算子で連結し、大量の \n\" と格闘する日々。コードは読みにくくなっていました。

しかし、Java 15から正式に導入された「テキストブロック」が、この長年の悩みを一気に解決してくれたのです。 初めてテキストブロックを使ったとき、「なんでもっと早く導入されなかったんだ!」と感動したのを今でも覚えています。

この記事を読めば、あなたも以下の悩みを解決できます。

  • Javaのテキストブロックの基本的な書き方がわかる
  • コードの可読性を劇的に向上させる方法を学べる
  • SQLやJSONをJavaでスマートに扱う具体的な方法がわかる

Javaのテキストブロックをマスターして、よりクリーンで保守性の高いコードを手に入れましょう!

Javaのテキストブロックとは?

Javaのテキストブロックは、複数行にわたる文字列を、見たままの形で直感的に記述できる機能です。

これまでのような面倒なエスケープシーケンスや文字列連結から、私たち開発者を解放してくれます。

テキストブロックが導入された背景

テキストブロックが登場する前、Javaで複数行の文字列を扱うのは非常に煩雑でした。

例えば、複数行の文字列を定義するには、+ 演算子で一行ずつ連結したり、改行文字 \n を大量に含めたりする必要がありました。この方法はコードの可読性を著しく低下させ、特にSQL文やJSON、HTMLといった構造化されたテキストをコード内に埋め込む際に、開発者の頭を悩ませていたのです。

このような問題を解決し、より現代的で開発者フレンドリーな言語へと進化するために、Javaにテキストブロックが導入されました。

Java 13以降でのサポート状況

Javaのテキストブロックは、すぐに標準機能になったわけではありません。

  1. Java 13, 14: プレビュー機能として導入
  2. Java 15: 正式に標準機能として採用

この経緯があるため、テキストブロックをプロジェクトで利用するには、Java 15以降の環境が必要です。もしあなたがJava 8やJava 11などのLTSバージョンを使用している場合は、残念ながらテキストブロックは使えません。

利用する際は、プロジェクトのJavaバージョンをきちんと確認しましょう。

テキストブロックの基本的な書き方

テキストブロックの使い方はとてもシンプルです。3つのダブルクォーテーション """ で文字列を囲むだけで、複数行の文字列を簡単に表現できます。

従来の文字列リテラルとの違い

まずは、従来の書き方とテキストブロックの書き方を見比べてみましょう。その差は一目瞭然です。

従来の書き方

String html = "<html>\n" +
              "    <body>\n" +
              "        <p>Hello, World!</p>\n" +
              "    </body>\n" +
              "</html>";

テキストブロックを使った書き方

String html = """
              <html>
                  <body>
                      <p>Hello, World!</p>
                  </body>
              </html>
              """;

テキストブロックを使うと、コード内に埋め込んだ文字列が、まるで別のファイルから読み込んだかのように自然に見えます。+ 演算子も改行文字 \n も不要になり、コードがすっきりとしました。

複数行文字列の記述方法

テキストブロックのルールは非常に簡単です。

  1. 開始デリミタ """ の直後には、必ず改行を入れる。
  2. 文字列を自由に記述する。
  3. 終了デリミタ """ で閉じる。

これだけです。例えば、簡単な挨拶文は以下のように書けます。

String greeting = """
                  こんにちは。
                  Javaのテキストブロックの世界へようこそ。
                  """;

見たままの通りの文字列が、greeting 変数に格納されます。

インデントや改行の扱い方

テキストブロックの最も賢い特徴の一つが、インデントの自動的な処理です。

Javaコンパイラは、終了デリミタ """ のインデントを基準として、それより前の行にある不要な空白を自動的に取り除いてくれます。

インデントの例

public class Main {
    public static void main(String[] args) {
        String json = """
            {
                "name": "Java",
                "version": "17"
            }
            """;
        System.out.println(json);
    }
}

このコードを実行すると、json 変数の先頭に不要なインデントは含まれず、きれいなJSON文字列が出力されます。

{
    "name": "Java",
    "version": "17"
}

終了デリミタ """ を左にずらすと、その分インデントが保持されるようになります。インデントをどこに合わせるかは、終了デリミタの位置でコントロールできる、と覚えておきましょう。

テキストブロックの活用例

Javaのテキストブロックは、特に定型的な長い文字列を扱う場面で、その真価を発揮します。ここでは3つの具体的な活用例を紹介します。

SQL文をきれいに書く

データベースを操作する際、Javaコード内にSQL文を記述することはよくあります。テキストブロックを使えば、複雑なSQL文も非常に見やすく管理できます。

従来の書き方

String query = "SELECT user_id, user_name, email " +
               "FROM users " +
               "WHERE registration_date > '2023-01-01' " +
               "AND is_active = true " +
               "ORDER BY user_name;";

テキストブロックを使った書き方

String query = """
               SELECT
                   user_id,
                   user_name,
                   email
               FROM
                   users
               WHERE
                   registration_date > '2023-01-01'
                   AND is_active = true
               ORDER BY
                   user_name;
               """;

どちらが見やすいかは言うまでもありません。SQLをそのままコピー&ペーストできるため、開発効率が大きく向上するでしょう。

HTMLやJSONを扱う場合

Webアプリケーション開発では、HTMLやJSONを文字列として扱う場面が頻繁にあります。ここでもJavaのテキストブロックが活躍します。

JSONの例

String jsonData = """
    {
      "book": {
        "title": "Effective Java",
        "author": "Joshua Bloch",
        "publicationYear": 2001,
        "tags": ["Java", "Programming", "Best Practices"]
      }
    }
    """;

" (ダブルクォーテーション)を \" のようにエスケープする必要が一切ない点に注目してください。これにより、JSON文字列の作成や修正が格段に楽になります。

テストコードでの可読性向上

テストコードでは、期待する結果を文字列として定義することがよくあります。例えば、APIのレスポンスとして返されるJSONの期待値などです。

テキストブロックを使えば、期待値のデータもきれいに記述でき、テストコード自体の可読性が向上します。

@Test
void testGetUserApi() {
    String expectedJson = """
        {
          "userId": 101,
          "userName": "Taro Yamada",
          "isActive": true
        }
        """;

    // APIを呼び出し、実際のレスポンスを取得する処理
    String actualJson = userApiService.getUser(101);

    // 期待値と実際の結果を比較
    assertEquals(expectedJson, actualJson);
}

このように、テストデータが明確になることで、テストの意図が伝わりやすくなり、メンテナンス性の向上にもつながります。

テキストブロックのメリットと注意点

Javaのテキストブロックは非常に便利な機能ですが、メリットを最大限に活かし、トラブルを避けるためには、いくつかの注意点を理解しておく必要があります。

コード可読性の向上

これまで見てきたように、最大のメリットはコードの可読性が劇的に向上する点です。

文字列がコードの一部として自然に溶け込み、ロジックの流れを妨げません。これは、自分自身のコードを後から見返す時だけでなく、チームで開発を行う際に大きな効果を発揮します。

エスケープシーケンスの削減

2つ目の大きなメリットは、\n や \" といったエスケープシーケンスを記述する手間が大幅に減ることです。

これにより、単純なタイプミスによるバグを防ぎ、より文字列の本質的な内容に集中できるようになります。

バージョン依存や互換性の注意点

最も重要な注意点は、Java 15以降のバージョンでなければ使用できないという点です。

もしあなたのプロジェクトがJava 8や11で稼働している場合、テキストブロックを使うことはできません。

チームで開発している場合は、「この機能はJava 15以上が必要」という共通認識を持つことが大切です。古いシステムを保守している環境でうっかり使ってしまうと、コンパイルエラーの原因になるので注意しましょう。

まとめ

Javaのテキストブロックは、複数行の文字列を扱う際の長年の課題を解決する、画期的な機能です。

テキストブロックを使うべき場面

  • SQLクエリの記述
  • HTML、XML、JSONといった構造化データの埋め込み
  • テストコードでの期待値データ定義
  • その他、複数行にわたる設定情報やメッセージの記述

これらの場面でテキストブロックを積極的に活用することで、あなたのJavaコードはよりクリーンで、読みやすく、そして保守しやすいものに生まれ変わります。

これからのJavaコードでの位置づけ

テキストブロックは、もはや単なる便利機能ではありません。現代的なJava開発におけるスタンダードな記述方法と言えるでしょう。

Java 15以降の環境で開発しているのであれば、使わない理由はありません。この強力な武器を使いこなし、開発の生産性とコードの品質を一段階上のレベルへと引き上げましょう。

  • この記事を書いた人
  • 最新記事

トム

・SaaS勤務/javaのバックエンドエンジニア
/java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎

-Java入門