2026.10.23

【2026年版】Java 11・17から21・25へのバージョンアップ手順|10月の脆弱性とつまずきやすい変更

はじめに

この記事では、Java 11・17 で動いているシステムを、LTS の Java 21・25 に上げる手順をまとめました。Java 8 からの場合はJava 8 から 21・25 へのバージョンアップ手順をどうぞ。

まず:2026 年 10 月の Java の脆弱性

2026 年 10 月 20 日(米国時間)、Oracle が定例のセキュリティ更新を公開しました。Java SE だけで 55 件の修正があり、そのうち 49 件はログインなしでネットワークから悪用できるおそれがあります。IPA も 10 月 21 日に「早急に更新を」と呼びかけています。

  • 深刻度は最大で CVSS 7.5。条件しだいで、アプリが止まる・データを読まれる・乗っ取られるおそれがあります
  • さらに翌日の 10 月 21 日、証明書まわりの深刻度 9.1 の脆弱性(CVE-2026-91403)が定例外で公表されました。定例の修正版も対象に入っているので、続報を確認しましょう
バージョン10 月の修正版(Oracle JDK)Eclipse Temurin のサポート
25(LTS)25.0.52031 年 9 月以降まで
21(LTS)21.0.132029 年 12 月以降まで
17(LTS)17.0.212027 年 10 月以降まで
11(LTS)11.0.332027 年 10 月以降まで
8(LTS)8u5112030 年 12 月以降まで
26なし(2026 年 9 月で終了)終了

修正版の番号は Oracle JDK のものです。Eclipse Temurin・Amazon Corretto など、ほかの配布元の JDK は、それぞれの配布元の更新を確かめてください。

「どの JDK を使っているか」も確かめる

Java は、同じバージョンでも配布元によって無償で更新が受けられる期間が違います。Oracle JDK は、無償で使える条件がバージョンや時期によって変わり、たとえば Oracle JDK 21 の無償での更新は 2026 年 9 月で終わったとされています。会社で使うなら、無償で長く更新が出る Eclipse Temurin や Amazon Corretto などに切り替えるのも、バージョンアップと合わせて考えましょう。

今から上げるなら 25、難しければ 21

今から上げるなら、最新の LTS の Java 25 がおすすめです。使っているフレームワークやライブラリがまだ 25 に対応していなければ、Java 21 にしましょう。26・27 のような LTS ではないバージョンは、半年でサポートが終わるので、業務システムには向きません。

11・17 からは比較的上げやすい

Java 11・17 から 21・25 への変更は、Java 8 から上げるときに比べると小さめです。モジュールのしくみや Java EE のモジュールの削除は、すでに通り過ぎているからです。それでも、Java 18 の既定の文字コードの変更など、気づきにくい変更があります。

バージョンアップの流れ

  1. 今の環境を調べる:JDK の配布元とバージョン、ビルドツール、フレームワーク
  2. ビルドツールとライブラリを上げる:Maven・Gradle、Lombok・Mockito・ByteBuddy などバイトコードを扱うもの
  3. 新しい JDK でビルドし、テストを通す
  4. 本番を切り替える:JVM のオプションとログを確かめる

ビルドの設定で Java のバージョンを指定する

pom.xml
<properties>
  <!-- source と target をまとめて指定する(Java 9 以降) -->
  <maven.compiler.release>25</maven.compiler.release>
</properties>
build.gradle.kts
java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(25)
    }
}

Lombok・Mockito・ByteBuddy・Jacoco など、コンパイルやテストのときにバイトコードを扱うライブラリは、古いままだと新しい Java のクラスファイルを読めずに失敗します。まずこれらを最新にしましょう。Gradle 自体も、新しい Java に対応したバージョンが必要です。

つまずきやすいところ

Java 18:既定の文字コードが UTF-8 に

Java 17 までは、日本語版 Windows では既定の文字コードが MS932(Shift_JIS)でした。Java 18 からは OS に関係なく UTF-8 になります。Linux のサーバーは以前から UTF-8 のことが多いので影響は小さいですが、Windows で動くバッチやデスクトップアプリは要注意です。

Java
// 文字コードを指定していない(Java 18 から UTF-8 で読まれる)
Reader r = new FileReader(file);

// 文字コードを指定する
Reader r = new FileReader(file, Charset.forName("MS932"));

すぐに直せない場合は、起動オプション -Dfile.encoding=COMPAT で以前の動きに戻せます。

Java 17:内部 API の封じ込め(11 から上げる場合)

Java 11 では警告だけだった、JDK の内部へのリフレクションでのアクセスが、Java 17 では原則エラーになります。古いライブラリで InaccessibleObjectException が出たら、ライブラリを新しくしましょう。どうしても直せないときだけ、--add-opens の起動オプションで一時的に開けます。

Java 24:Security Manager が使えなくなった

Java 17 で非推奨になった Security Manager は、Java 24 で使えなくなりました(25 も同じ)。-Djava.security.manager を指定していると起動しません。アプリケーションサーバーやプラグインのしくみで使っていないか確かめましょう。

そのほか

  • sun.misc.Unsafe のメモリアクセスのメソッドが非推奨になり、24 からは使うと警告が出る。古いライブラリ(Netty・古いシリアライザなど)は上げておく
  • finalize() が非推奨(削除予定)。後片付けは try-with-resources や Cleaner に
  • 32bit の x86 版の JDK が無くなった(Windows の 32bit 版は 24 で、ほかも 25 で削除)
  • new URL(...)・new Locale(...) のコンストラクタが非推奨。URI.create(...).toURL()・Locale.of(...) に

上げたあとに使える新機能

上げる手間に見合うだけの新機能もあります。代表的なものです。

  • 仮想スレッド(21):たくさんのリクエストを、少ないメモリで同時に処理できる。Spring Boot なら設定 1 行(spring.threads.virtual.enabled=true)で使える
  • レコード・パターンマッチング・switch 式:データを入れるだけのクラスや、型での分岐を短く書ける
  • テキストブロック:""" で複数行の文字列を書ける(SQL や JSON に便利)
  • List の getFirst()・getLast() など、細かい便利なメソッド(21)
Java
// レコードと switch のパターンマッチング(21 以降)
record Point(int x, int y) {}

String describe(Object o) {
    return switch (o) {
        case Point(int x, int y) when x == y -> "斜めの点";
        case Point p -> "点 " + p;
        case String s -> "文字列 " + s;
        default -> "そのほか";
    };
}

本番を切り替えるときの注意

  • JVM の起動オプションを見直す:削除されたオプションがあると起動しない。GC のログの指定方法なども変わっている
  • 文字化けがないか確かめる:特に Windows で動くもの
  • JDK の配布元を決める:無償で更新を受けたいなら、Eclipse Temurin・Amazon Corretto など
  • 切り戻しの手順を用意する

まとめ

  • 2026 年 10 月の定例更新で、Java SE の脆弱性 55 件が修正された
  • 上げる先は Java 25、難しければ 21
  • 11・17 からは比較的上げやすいが、既定の文字コードの UTF-8 化(18)と Security Manager の無効化(24)に注意
  • Lombok・Mockito などバイトコードを扱うライブラリを先に上げる

Node.js のバージョンアップは古い Node.js から LTS(24・26)へのバージョンアップ手順にまとめています。

参考

Oracle・OpenJDK・Adoptium の公式の情報と、国内の報道(2026 年 10 月 23 日時点)をもとにまとめています。

Oracle Critical Patch Update Advisory - October 2026

Eclipse Temurin のサポート期限 - Adoptium

「Oracle Java SE」にも致命的な脆弱性 - 窓の杜

JEP 400: UTF-8 by Default - OpenJDK

JEP 486: Permanently Disable the Security Manager - OpenJDK

TFT
soflan108本の記事