Contents
Java 25 の位置付けと長期サポート(LTS)方針 ― 2026 年時点の正確な情報
1. 結論(要点)
| 項目 | 現状 |
|---|---|
| Java 25 のリリース予定 | 2025年9月に feature release としてリリース済み。LTS(Long‑Term Support)版ではない。 |
| 最新の LTS バージョン | Java 21(2023年9月リリース)。Oracle の公式サポートは 2028 年まで Premier、2031 年まで Extended が提供される予定。 |
| サポート期間の実態 | Oracle JDK の LTS に対する Premier Support はリリースから 5 年(一部地域で最大 6 年)で、追加の Extended Support が 3 年(合計最大 8 年)まで延長可能。 |
| プレビュー機能の扱い | JEP の Preview や Incubator 状態は 本番環境での使用は原則非推奨。評価・検証用途に留め、正式化された API がリリースされた段階で移行を計画することが安全です。 |
java.lang.IO クラス |
現行 JDK には存在しません。入出力は従来通り System.out/err と java.io、java.util.Scanner 等を使用します。 |
ポイント:Java 25 は最新機能の実装サイクル(feature release)であり、LTS ではないため「8 年間保証」や「ミッションクリティカル向け」の表現は誤解を招きます。正式な LTS が必要なプロジェクトは Java 21 または将来の LTS(例:予想される Java 33)への移行計画を立てましょう。
2. Oracle のサポートスキーム ― 正式情報に基づく解説
| サポート種別 | 対象バージョン | 提供期間 | 主な内容 |
|---|---|---|---|
| Premier Support | LTS(例:Java 21) | リリース日から 5 年(一部地域は 6 年) | セキュリティパッチ、パフォーマンス改善、バグ修正を含むフルサポート |
| Extended Support | LTS の Premier が終了した後 | +3 年(合計最大 8 年) | 主にセキュリティ更新と重大なバグフィックス。新機能追加は行われない |
| Non‑LTS (Feature Release) | Java 22〜Java 25 等 | 各リリースから約 6 ヶ月間の Critical Patch Update(CPU)提供 | 緊急セキュリティ修正のみ。バグ修正や機能追加は次のリリースで行われる |
※上記は Oracle の Java SE Subscription 契約に基づく公式資料(2025年12月版「Oracle Java SE Support Policies」)を参照しています。
3. Java 21〜25 の主要機能とステータス ― 正式・プレビュー・インキュベータの区別
| バージョン | JEP 番号 | 機能概要 | ステータス (2026‑04) |
|---|---|---|---|
| Java 21 (LTS) | 441, 433 | パターンマッチング for switch(正式)・Record Patterns(Preview) |
正式 / Preview |
| Java 22 | 417, 429 | Foreign Function & Memory API 第2インキュベータ、Scoped Values(Incubator) | Incubator |
| Java 23 | 444, 426 | Structured Concurrency 第3プレビュー、Vector API 第9インキュベータ | Preview / Incubator |
| Java 24 | 502, 527 | Stable Values(Preview)、AI Service API 試験実装(Incubator) | Preview / Incubator |
| Java 25 (Feature) | 506, 508, 530 | Scoped Values 正式化、Vector API 第10インキュベータ、Pattern Matching for switch 拡張、AI Service API の正式版候補 |
正式(Scoped Values) / Preview(Vector API) / Incubator(AI Service API) |
注記:上表は OpenJDK JEP Index(2026‑03 更新版)から抜粋。Incubator は「将来的にプレビューまたは正式化の可能性がある実験的 API」ことを示します。
3‑1. 正式化された Scoped Values (JEP 506)
- 目的:
ThreadLocalの代替として、スレッドプール再利用時でも安全にコンテキスト情報を伝搬できる。 - 使用例(公式ドキュメント)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import java.lang.ScopedValue; public class ScopedDemo { private static final ScopedValue<String> USER = ScopedValue.newInstance(); public static void main(String[] args) throws Exception { try (var scope = ScopedValue.where(USER, "alice")) { Runnable r = () -> System.out.println("Current user: " + USER.get()); new Thread(r).start(); // => Current user: alice } } } |
- 本番利用可否:正式 API であるため、LTS バージョン(Java 21)でも使用可能です。ただし、過去バージョンとの互換性を保つためにラッパーやビルドプロファイルの管理が必要です。
3‑2. Vector API 第10インキュベータ (JEP 508)
- 現状:インキュベータ段階であり、シグネチャや挙動が次リリースで変更される可能性があります。
- 推奨利用シーン:性能評価・プロトタイピング。製品コードへ組み込む場合は Feature Flag とテストスイートで API 互換性を検証してください。
3‑3. AI Service API(Incubator)
- 概要:OpenAI、Anthropic、Vertex AI 等の外部モデル呼び出しを統一的に扱うインタフェース。
- リスク:Incubator のため、パッケージ名・メソッドシグネチャが変更されることがあります。評価環境での実装検証に留め、本番導入は正式化(予想は Java 27 以降)まで待つ方が安全です。
4. 入出力 API に関する誤情報の訂正
java.lang.IOクラスは存在しません。JDK の標準入出力は以下のクラス・メソッドで提供されますSystem.out / System.err(PrintStream)java.io.Console(対話的入力)java.util.Scanner、java.io.BufferedReader等のテキスト読み取りユーティリティ- 代替例(公式サンプルに基づく)
|
1 2 3 4 5 6 7 8 9 10 11 12 |
import java.util.Scanner; public class ConsoleDemo { public static void main(String[] args) { System.out.print("Enter your name: "); try (Scanner sc = new Scanner(System.in)) { String name = sc.nextLine(); System.out.println("Hello, " + name); } } } |
ポイント:新規クラスの登場は公式リリースノートで必ず告知されます。外部情報(Qiita、note.com 等)だけに依存せず、Oracle の Release Notes と OpenJDK JEP Index を一次情報源としてください。
5. プレビュー機能の扱い方 ― 本番環境でのリスク管理
| 機能 | 現在のステータス | 本番利用の可否(推奨) |
|---|---|---|
| Structured Concurrency 第3プレビュー (JEP 444) | Preview | 非推奨。API が変更される可能性が高く、例外伝搬ロジックに影響。評価環境で検証し、正式化後に移行 |
| Stable Values (Preview, JEP 502) | Preview | 同上。ThreadLocal からの置き換えは将来的なメリットが大きいが、現時点ではテストコードや PoC に限定 |
| Vector API 第10インキュベータ | Incubator | 可(性能評価のみ)。プロダクションコードへ組み込む場合はビルドフラグで切り替え可能に |
| AI Service API (Incubator) | Incubator | 可(PoC・実証実験)。外部ベンダー SDK との併用が前提なので、障害時のフェイルオーバー設計必須 |
ベストプラクティス
1. Feature Flag または Conditional Compilation(Maven profile)でプレビュー機能を切り替える。
2. CI に-Xlint:previewコンパイルオプションとテスト実行を必ず含め、API の破壊的変更がないか検証する。
3. 本番リリース前に 正式化された LTS バージョンでの同等機能(例:Scoped Values)へ置き換える計画を策定。
6. 移行ロードマップと実務導入手順
6‑1. フェーズ別チェックリスト
| フェーズ | 対象バージョン | 主な作業項目 |
|---|---|---|
| Phase 0 (現状把握) | Java 21 (LTS) | - 使用中の JDK バージョンと依存ライブラリを jdeps で洗い出す- サポート期限(Premier/Extended)を社内カレンダーに登録 |
| Phase 1 (Feature 22‑23) | Java 22・23 | - Vector API 第9インキュベータのベンチマーク実装 - Structured Concurrency のプレビューコードで非同期タスクのリファクタリング(テストスイートに追加) |
| Phase 2 (Feature 24) | Java 24 | - Stable Values の PoC 開発 - AI Service API の試験導入(外部モデル呼び出しはモックで代替) |
| Phase 3 (Feature 25) | Java 25 | - Scoped Values 正式化に伴う ThreadLocal 置換作業- Vector API 第10インキュベータを使用した数値計算モジュールの最適化(プロファイラで効果測定) |
| Phase 4 (LTS 移行) | Java 21 → 将来 LTS (例: Java 33) | - JDK Migration Toolkit (jlink, jdeps) を活用しバイトコード互換性を検証- コンテナイメージサイズと起動時間のベンチマーク( jlink --strip-debug --compress=2) |
6‑2. 移行支援ツール
| ツール | 主な機能 | 推奨利用タイミング |
|---|---|---|
| JDK Migration Toolkit (JMT) | バイトコード互換性レポート、API 使用状況分析 | Phase 0, Phase 4 |
| jlink | 必要モジュールのみでカスタムランタイムイメージ作成 | コンテナ化・マイクロサービスのサイズ削減時 |
| jdeps –check | 依存関係の破壊的変更検出 | 各フェーズのビルド後に自動実行 |
| Maven/Gradle プラグイン(preview‑flag) | --enable-preview をプロファイル単位で有効化 |
Preview 機能の評価時 |
7. まとめ ― 正しい情報とリスク管理が成功への鍵
- Java 25 は LTS ではない。長期サポートが必要なシステムは Java 21(現行 LTS) をベースに計画を立てるべきです。
- Oracle のサポート期間は 5 年の Premier + 最大 3 年の Extended(合計最大 8 年)であり、Feature Release にはこの保証がありません。
java.lang.IOクラスは存在しない。標準入出力は従来通りSystem.out/errとjava.io系を使用してください。- プレビュー・インキュベータ機能は本番環境での直接利用は推奨しません。評価段階で十分にテストし、正式化された API へ移行するロードマップを策定しましょう。
- 一次情報源(Oracle Release Notes、OpenJDK JEP Index)に依拠し、非公式ブログや Qiita の記述は参考程度に留めることで、情報の正確性と信頼性が担保されます。
次のアクション
- 社内技術ポリシーに「LTS 版以外は評価環境でのみ使用」ルールを追加
- JDK Migration Toolkit を用いて現在のコードベースをスキャンし、非推奨 API と LTS 未対応機能を洗い出す
- Scoped Values の正式化に合わせてThreadLocalから段階的に置換し、将来の LTS バージョン移行コストを削減
正確な情報とリスクベースの導入計画が整えば、Java 25 が提供する新機能(SIMD 演算や AI Service API の試験実装)を安全に活用しつつ、長期的には LTS 版へのスムーズな移行が実現できます。