Java SEは、Javaで開発をしたことのある方なら一度は聞いたことがあるでしょう。初めての方は、Javaとの違いがよくわからないかもしれません。
実は、システムやアプリケーションの開発ではJava SEが多くのエンジニアにとって欠かせないプラットフォームです。標準機能や最新動向を知ることで、今後の開発効率を上げることもできます。
そこで、Java SEの基本知識から標準機能の利用、スキルアップに必要な最新動向などを紹介します。
目次
1.Java SEとは
Java SEは、「Java Platform, Standard Edition」を短く呼ぶときの通称を指します。プログラミング言語「Java」の開発を支援するための標準的なライブラリ・APIやツールをまとめたプラットフォームです。
本来、Javaのソースコードはエディタソフトがあれば書くことができます。しかし、プログラムはソースコードを自前で用意するだけでは開発を進めることはできません。ライブラリ利用やJVMによるデバッグ、WEBアプリケーションならデプロイ(jarファイルにしてパッケージ化で配置)など、完成にはさまざまな開発工程が必要です。
それらを下支えするJavaのプラットフォームを提供するのがJava SEとなります。なかでもOracleのJava SEは、Oracle製品としてJDKにJREやJVMなど実行環境が含まれています。
OracleのJava SEに含まれるのがJDKです。Java SEがさまざまなツールを活用できる背景には、このJava開発キットや環境を用意するJDKが挙げられます。
例えば、「javac」のコンパイラです。コマンドプロンプトでソースコードを変換する際に使われます。他にも、仮想マシンの「JVM」、JARファイル関連のツール、標準ライブラリのAPI、サポートユーティリティなどがこの中に含まれるのです。
ただし、JDKにはOracleとは関係のないオープンJDKやディストリビューションのJDKもあり、呼び方や名称の区別には注意が必要です。区別したいときだけ、JDKの先頭にOracleを付けます。
JRE
JVMを含む実行環境を構築するのがJREです。環境構築の基本的な機能を担っており、標準ライブラリを提供します。また、仮想マシンの提供、メモリアクセスの実行や依存関係の規定などプログラム実行の役割を果たすものです。
JREの環境(もしくはJDKにJRE相当の機能)がなければ、Javaのプログラムはパソコンで実行できません。特にクラスやメソッドの実行ではメモリ領域の確保が必要で、その作業を内部システムが担うためにもJREの機能が必要です。
ただし、Java 9以降はJREの単体配布をやめており、JDKに統合されています。そのため、実質的にOracle商標のJREはその機能を集約・追加したJDKのことを指します。
JVM
JREに入っているJVMは、日本語で「Java仮想マシン」のことです。コンパイルしたバイトコードを機械語に変換してOSが読めるようにする機能です。つまり、Java SEを導入しないと、作成したソースコードは最終的にパソコンでOSが読んで実行できません。JVMに関連したさまざまな機能を使うためにも必要です。
2.Java SEのインストール方法・手順
ここでは、実際にJava SEのプラットフォーム環境を構築したい方に、インストール方法や手順を解説します。
使用するJava SEを決める
Java SEは、オープンJDKから無償でダウンロードすることができます。しかし、商用や企業の大規模開発、サポート面を考慮した場合に、Oracle公式のJDKがおすすめです。それ以外のディストリビューションのJDKもありますが、今回は、Oracle JDKをインストールする手順を説明します。
ダウンロード
Oracle JDKのインストールにはまず、「Java SE Development Kit」の最新バージョンを個々のOSに合わせてインストーラー(ZIP、EXE、MSI)を選択し、ファイルをダウンロードします。企業環境ではMSIを選択するとまとめてインストールが簡単です。
選択して実行や解凍
ダウンロードファイルを開くと、EXEとMSIの実行はインストーラーのウィザードが展開され、ZIPは解凍したファイルとなります。
ZIPを解凍する場合は、パス名の長さで失敗することも考慮して解凍専用のソフトウェ(7-Zipなど)を使うことです。ただし、その心配がない場合や、気にしない場合はまず標準機能やコマンドで解凍しても問題ありません。
環境変数や各種設定
ウィザードの手順で先にインストール場所の設定します。Oracleの場合、インストーラーはJAVA_HOMEやPATHの環境変数を自動設定する仕様です。そのため、場所の指定のみ手動です。
しかし、ZIPの場合は、環境変数の設定を手動でコマンドプロンプトから行う必要があります。
インストーラーの場合、その後もコンポーネント選択や更新機能など必要な設定を施しながら、ウィザードの画面を進めます。これでインストール完了です。
Java SEのバージョンの確認と起動
最後に、「java -version」(Windowのcmd)でバージョンが確認できたらZIP含めてインストールはすべて完了です。後は、起動して実行確認や環境変数が正しく設定されているか確認します。
関連記事
Java開発環境構築|Windows・Mac・Linux別開発環境手順とおすすめIDEを解説
3.最新のJava SEの動向は?
Java SEの最新動向は、Javaの新たなアップデートや商用の契約変更などが知られています。また、Oracleの4つの大きなプロジェクトが影響し、技術的に革新的な変化を遂げています。
それがLoomプロジェクト、Panamaプロジェクト、Valhallaプロジェクト、Amberプロジェクトです。2017~2018年頃から始まって2024年までに変更されたAPIやクラスもこれらのプロジェクトが関係しているものも少なくありません。
ライセンスやサポートの更新・契約
OracleのJava SEでは、2025年3月15日現在、最新バージョンがJava SE Development Kit 23.0.2」となっています。Oracleの体制としてアップデートを半年に1度しており、24のバージョンが3月(近日中)に予定されています。
企業がOracleのJava SEを利用する場合は、2019年4月16日の前と後では商用ライセンスが異なるため、確認して有償のサポートを受けられる契約が新たに必要です。例えば、企業向けのJava SE商用サポートなら「Oracle Java SE Universal Subscription」、JDKの商用サポートなら範囲を限定した「Oracle Java SE Subscription」です。
Project Loom
Oracle JDK 19(2022年9月)からは、「Project Loom」によって軽量なスレッドが導入されています。以前は、複数のタスクを同時に処理する場合に、それぞれが情報を保持する必要があり、仮想スレッドとの相性がよくなかったのです。
しかし、JVM Threadでは、スレッドローカルのときと比べて、導入のあったスコープ値は変数の範囲が明確です。「threadLocal.set("データ");process();」が「ScopedValue.where(scopedValue, "データ").run(() -> {process();});」となり、使いやすさや堅牢性が向上しています。
Project Panama
Panamaでは、Javaと多言語のネイティブコードやJVMと外部ライブラリ(C言語のライブラリ)の相互性強化を進めていることです。主に、データ処理やパフォーマンスの向上が2024年のAPI更新で確認されています。
例えば、API(Foreign Function & Memory API)で簡単に記述するだけで数学のライブラリが導入できるなどです。しかも、プログラミング言語のCやC++がAPIによって、そのまま他言語で書かれたコード文をJava内で使えます。ただし、これにはCやC++のプログラミング言語の基礎知識が必要です。
Project Amber
Amberでは、主に以下の変化があります。
データクラスの簡潔な記述(record型の使用)
マッチングパターンで「instanceof」演算子による簡単なキャスト方法
「シールドクラス」によるクラス継承制限
Amberのスイッチ式(より簡単な条件文switchの導入)
特に堅牢で安全なシステム開発の場合は、Amberで発展・安定したJava SE17からの「シールドクラス」の利用です。継承を限定的にすることで予測できない他のクラスからの継承を防げます。堅牢なシステムの設計構築に有効です。
また、Javaは大規模化すると複雑になりがちですが、record型やマッチングパターン、型類推の活用でコードを簡易化することができます。
以下は、新旧比較として、Amberのスイッチ式前後でコードが簡潔にできる例です。
Amberのスイッチ式の旧コード例
public class Main { enum Status { OPEN, IN_PROGRESS, CLOSED }
Status progressStatus = Status.IN_PROGRESS; String message = "";
case OPEN: message = "開始"; break; case IN_PROGRESS: message = "進行中"; break; case CLOSED: message = "完了"; break; }
} } |
Amberのスイッチ式の新コード例
public class Main { public static void main(String[] args) { enum Status { OPEN, IN_PROGRESS, CLOSED }
String message = switch (taskStatus) {
case IN_PROGRESS -> "進行中。"; case CLOSED -> "完了"; default -> throw new IllegalStateException("Unexpected value: " + taskStatus); }; System.out.println(message); } } |
どちらの例も同じ結果「進行中」を出力するソースコードです。しかし、新しいスイッチ式では「break;」が必要なく、記述も工夫して簡潔化することが可能です。
Project Valhalla
Valhallaでは「値型」という新たな型を導入して、オブジェクトの参照格納を使わずに、値をそのまま格納できるものです。しかし、この機能はまだ正式に実装されておらず、Javaの「プレビュー機能」を使用しないと使えません。
そのため、今後の予定として値型に代わる可能性があるレベルの話です。現在ではまだ、スキルに関係してこないため新たな学習は必要ありません。
また、4大プロジェクト以外にもUTF-8を標準文字コードにしたり、新たなクラスやAPIの導入も進んでいます。
関連記事
【2025年版】Javaの最新バージョン|確認方法やインストール方法を解説
Java 21(LTS版)完全ガイド|インストール方法、新機能の紹介、最新バージョン動向を解説
4.堅牢なシステム開発に使えるJava SEの標準機能の活用
エンジニアがJavaを使って堅牢なシステムやアプリケーションを開発するには、アルゴリズムの十分な理解とJava SEの標準機能を活用することが重要です。特にJava SEの標準機能は、堅牢なシステム開発が可能です。ここでは特に堅牢なシステムで重要な3つの処理を紹介します。
例外処理
例外処理は、「例外(エラー)ハンドリング」とも呼ばれており、プログラムが想定しない例外や問題を処理するための機能です。
例えば、Throwableクラス(java.lang.Throwable)の「OutOfMemoryError」や「Exception」です。それ以外にも、例外をスローする「throws」のキーワード、「try-catch」構文によるブロック処理などが代表的です。
さらに、マルチキャッチ構文を使えば、複数の例外も「|(パイプ)」で区切って処理できます。例えば、以下のソースコード例です。
class SimpleErrorHandlingExample { public void runExample() { try { String str = null; int[] numbers = {1, 2, 3};
System.out.println(numbers[5]); } catch (NullPointerException | ArrayIndexOutOfBoundsException e) { System.out.println("エラーが発生。エラーの内容は:" + e.getMessage()); } } }
public static void main(String[] args) { SimpleErrorHandlingExample example = new SimpleErrorHandlingExample(); example.runExample(); } } |
上記の場合、実行するとエラーが出るため、例外処理でエラー内容を表示するようにしています。その結果、実際に実行すると「エラーが発生。エラーの内容は:Cannot invoke "String.length()" because "<local1>" is null」となり、メソッドの呼び出し(invoke)に失敗したことがわかります。
また、上記の例は非チェック例外で、処理を省略することも可能です。チェック例外の場合は処理しないとコンパイルエラーとなるためです。そこで、「IOException | SQLException e」などを使用して、基本的に「try-catch」構文や「throws」を入れる必要があります。
GC処理
GC(ガベージ・コレクション)処理では、メモリーリークやGCの動作予測をすることが大切です。メモリ処理でエラーや問題が起こりにくいように堅牢なシステム設計をする場合は特にです。
そのため、GC処理のJVM動作時オプション設定で適切な値を設定します。メモリ最大値や最小値などは設定せず、「G1 GC(ガベージファースト・ガベージ・コレクタ)」を採用して、大規模な開発でGCの一時停止時間などをミリ秒の数字で設定します。
例えば、「-XX:MaxGCPauseMillis:」に「=100」を入れれば100ミリ秒止まります。止まる秒数は、最適値を調査・テストして決めることです。これが長すぎると負荷が大きくなります。「-XX:+UseG1GC」を有効化しての設定であることも忘れないようにします。
ただし、開発が大規模とは限りませんから、低遅延やメモリ消費の低い以下の方法も検討することです。
「ZGC(Zガベージ・コレクタ)」(遅れはミリ秒が最大)の利用
「Parallel GC(パラレル・ガベージ・コレクタ」(同時処理でOutOfMemoryErrorの例外処理をスローする)の利用
並列処理
並列処理は、現在のJava開発では欠かせない処理技術となっており、これ抜きにシステム開発はできません。例えば、金融システムのリアルタイム取引は並列処理技術によって成立しています。
また、ゲームのグラフィック処理やWebアプリケーションのリクエスト処理なども同様です。これらを開発する際に、並列処理の理解が浅いと無駄な処理を増やしてメモリに大きな負荷がかかります。
そのため、競合による同期やスレッドの数による問題の発生などを回避するため、競合防止や非同期処理、デッドロックを起こさないシステム構築が必要です。堅牢なシステム開発を目指す場合は、特にスレッドやデータの扱いに精通するための十分な知識と実装のポイントを押さえます。
競合防止なら「synchronized」キーワードを使った同期や、柔軟性に長けたロック「ReentrantLock」などで同時アクセスの競合を防ぐのがスタンダードです。また、複数のタスクを並列処理できるようにした下記の例です。
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;
public static void main(String[] args) { ExecutorService executor = Executors.newFixedThreadPool(8);
executor.submit(() -> { System.out.println(Thread.currentThread().getName() + " タスクの実行中"); });
} } |
このように、セーフスレッドの「ExecutorService」を利用して、スレッドプールでスレッドの数を最適化することができます。最大数を開発するシステムに合わせて適切に設定することで、メモリ効率が高まります。
さらに、戻り値を返せる「Callable」や「Future」で非同期処理をするのも並列処理問題を解決する方法の1つです。
関連記事
Java標準ライブラリ&外部ライブラリ一覧ガイド|選び方・使い方・作成方法など解説
5.Java SEのよくある質問
ここでは、Java SEに関するよくある質問に回答します。
Java SEの料金は無料?
OracleのJava SEは基本的に無料ですが、長期の商用サポートは有料です。サブスクリプションにかかる金額は1人15ドル(USD)です。従業員数が増えるほど金額が低くなる仕組みで、15.00~5.25ドル(USD)の範囲です。
Java SEを利用する利点は?
Java SEは、Java開発の基本となるため、プログラミング学習を終えて実際に開発に入る方は必要となります。
ただし、OracleのJava SEが必須なわけではなく、他社の環境でもJava開発それ自体はできます。しかし、商用サポートなどOracleのサービス提供を受けるには、商標製品が選択肢となります。
エンタープライズシステムの構築に使える?
Java SEでは、従来より企業向けの大規模向けとして「Java EE(現在はJakarta EE)」が推奨されてきた経緯があります。しかし、これがなくてもエンタープライズシステムの開発は十分に可能です。
近年では、複雑化するコードの簡易化にも成功しており、もともとJavaの大規模開発向けの特徴と合わせて使えます。
関連記事
JavaとPythonの違いとは?文法比較などエンジニア初心者から現役開発者向けに解説
6.まとめ
今回は、Java SEの概要やインストール方法、機能活用などについて解説しました。Java SEの標準機能を使って堅牢なシステム構築や、さまざまなアプリケーション開発ができます。
その際に、最新の動向を踏まえた実装をすることで、効率的な開発が可能です。
Java SEをぜひ活用してシステムの開発環境を整えましょう。
本記事が皆様にとって少しでもお役に立てますと幸いです。
「フリーランスボード」は、数多くのフリーランスエージェントが掲載するITフリーランスエンジニア・ITフリーランス向けの案件・求人を一括検索できるサイトです。
開発環境、職種、単価、稼働形態、稼働日数など様々な条件から、あなたに最適なフリーランス案件・求人を簡単に見つけることができます。
単価アップを目指す方や、自分の得意なスキルを活かせる案件に参画したい方は、ぜひ「フリーランスボード」をご利用ください。