「Javaで長いSQL文を書くのが面倒…」「JSONを文字列にすると見づらい…」
Java開発歴10年以上の私も、かつては同じ悩みを抱えていました。長い文字列を +
演算子で連結し、大量の \n
や \"
と格闘する日々。コードは読みにくくなっていました。
しかし、Java 15から正式に導入された「テキストブロック」が、この長年の悩みを一気に解決してくれたのです。 初めてテキストブロックを使ったとき、「なんでもっと早く導入されなかったんだ!」と感動したのを今でも覚えています。
この記事を読めば、あなたも以下の悩みを解決できます。
- Javaのテキストブロックの基本的な書き方がわかる
- コードの可読性を劇的に向上させる方法を学べる
- SQLやJSONをJavaでスマートに扱う具体的な方法がわかる
Javaのテキストブロックをマスターして、よりクリーンで保守性の高いコードを手に入れましょう!
Javaのテキストブロックとは?

Javaのテキストブロックは、複数行にわたる文字列を、見たままの形で直感的に記述できる機能です。
これまでのような面倒なエスケープシーケンスや文字列連結から、私たち開発者を解放してくれます。
テキストブロックが導入された背景
テキストブロックが登場する前、Javaで複数行の文字列を扱うのは非常に煩雑でした。
例えば、複数行の文字列を定義するには、+
演算子で一行ずつ連結したり、改行文字 \n
を大量に含めたりする必要がありました。この方法はコードの可読性を著しく低下させ、特にSQL文やJSON、HTMLといった構造化されたテキストをコード内に埋め込む際に、開発者の頭を悩ませていたのです。
このような問題を解決し、より現代的で開発者フレンドリーな言語へと進化するために、Javaにテキストブロックが導入されました。
Java 13以降でのサポート状況
Javaのテキストブロックは、すぐに標準機能になったわけではありません。
- Java 13, 14: プレビュー機能として導入
- 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
も不要になり、コードがすっきりとしました。
複数行文字列の記述方法
テキストブロックのルールは非常に簡単です。
- 開始デリミタ
"""
の直後には、必ず改行を入れる。 - 文字列を自由に記述する。
- 終了デリミタ
"""
で閉じる。
これだけです。例えば、簡単な挨拶文は以下のように書けます。
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以降の環境で開発しているのであれば、使わない理由はありません。この強力な武器を使いこなし、開発の生産性とコードの品質を一段階上のレベルへと引き上げましょう。