Javaは1995年の登場以来、進化を続け、2026年現在においてもエンタープライズ開発からクラウドネイティブなアプリケーションまで幅広く利用されています。
Javaプログラムを動かすための基本である「java」コマンドは、バージョンアップを重ねるごとに利便性が向上し、より直感的な操作が可能になっています。
開発環境の構築から本番環境でのデプロイまで、Java実行コマンドを正確に使いこなすことは、エンジニアにとって不可欠なスキルと言えるでしょう。
本記事では、初心者の方が押さえておくべき基本的な実行方法から、最新バージョンで導入された効率的なソースコード実行オプションまでを詳しく解説します。
Java実行コマンドの基本構造
Javaプログラムを実行するための最も基本的なコマンドは、javaコマンドです。
このコマンドは、コンパイル済みのクラスファイルやJARファイル、あるいは特定の条件下ではソースファイルを直接読み込んで、Java仮想マシン(JVM)上でプログラムを起動します。
基本的な構文は、「java [オプション] クラス名 [引数]」という形式で構成されます。
オプションを指定することで、JVMのメモリ使用量を調整したり、クラスの参照先を指定したりすることが可能です。
まずは、最もシンプルなクラスファイルの実行例を見てみましょう。
// HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, Java 2026!");
}
}
上記のコードをコンパイルした後に実行するには、以下のコマンドを入力します。
java HelloWorld
Hello, Java 2026!
このように、拡張子の「.class」を付けずにクラス名のみを指定するのがルールの基本です。
クラスパスの指定(-cpオプション)
Javaの実行において、外部のライブラリや別のディレクトリにあるクラスを利用する場合、「クラスパス」を正しく設定する必要があります。
クラスパスとは、JVMが実行時にクラスファイルを探索する場所を示す道標のようなものです。
-cp(または-classpath)オプションを使用することで、複数のディレクトリやJARファイルを指定できます。
java -cp ".;lib/*" com.example.MainApp
Windows環境ではセミコロン(;)、LinuxやmacOS環境ではコロン(:)を区切り文字として使用する点に注意してください。
現在では、ビルドツールであるMavenやGradleがこれらの管理を自動化してくれますが、トラブルシューティングの際にはこの基本知識が非常に重要になります。
最新のJavaにおけるソースファイル直接実行
かつてJavaを実行するには、必ずjavacコマンドによるコンパイル工程が必要でした。
しかし、近年のJavaアップデートにより、単一のソースファイルを直接実行できる機能が強化されています。
これは「JEP 330: Launch Single-File Source-Code Programs」として導入され、スクリプト言語のような手軽さをJavaにもたらしました。
java HelloWorld.java
このコマンドを実行すると、背後で自動的にインメモリでのコンパイルが行われ、即座にプログラムが実行されます。
2026年現在のモダンな開発現場では、ちょっとした動作確認やCLIツールの作成において、この直接実行オプションが多用されています。
複数ファイルにまたがるソース実行
さらに新しいJavaのバージョンでは、単一ファイルだけでなく、複数のソースファイルをコンパイルなしで実行する機能もサポートされるようになりました。
これにより、小規模なプロジェクトであればビルドスクリプトを書く手間が省けます。
以下の例のように、依存関係のあるファイルを自動で認識して実行してくれます。
java --source 21 Main.java
--sourceオプションを明示することで、どの言語バージョンの機能を使用するかを指定できるため、最新の構文を利用する場合でも安心です。
JARファイルの実行方法
Javaアプリケーションを配布・運用する際の標準的な形式はJAR(Java Archive)ファイルです。
JARファイルには複数のクラスファイルや設定ファイル、ライブラリがパッケージ化されています。
実行可能なJARファイルを作成しておけば、利用者は複雑なクラスパスの設定を意識することなく、-jarオプションだけでアプリケーションを起動できます。
java -jar application.jar
このコマンドを正常に動作させるには、JARファイル内のMETA-INF/MANIFEST.MFファイルに、メインとなるクラス(Main-Class)が定義されている必要があります。
もしマニフェストファイルにメインクラスの指定がない場合は、以下のようにクラスパスとしてJARを指定し、実行するクラス名を末尾に記述します。
java -cp application.jar com.example.AppLauncher
大規模なシステム運用では、この実行形式が最も一般的です。
JVMパフォーマンスチューニングのためのオプション
Javaを本番環境で実行する際、デフォルトの設定のままではリソース不足やパフォーマンス低下を招くことがあります。
そのため、javaコマンドの引数としてJVMの動作を制御するオプションを指定することが推奨されます。
メモリ管理に関するオプション
Javaの実行において、最も頻繁に調整されるのがヒープメモリのサイズです。
| オプション | 意味 | 使用例 |
|---|---|---|
| -Xms | 開始時のヒープサイズ | -Xms512m |
| -Xmx | 最大ヒープサイズ | -Xmx2g |
| -XX:MaxMetaspaceSize | メタスペースの最大サイズ | -XX:MaxMetaspaceSize=256m |
例えば、初期メモリを1GB、最大メモリを4GBに設定して実行する場合は、以下のようになります。
java -Xms1g -Xmx4g -jar high-performance-app.jar
「-Xmx」を適切に設定しないと、OutOfMemoryErrorが発生しやすくなるため、システムの負荷を見積もって設定することが重要です。
ガベージコレクション(GC)の選択
2026年現在、JavaのGCアルゴリズムは非常に洗練されています。
低遅延を求めるシステムでは、ZGC(Z Garbage Collector)が広く採用されています。
ZGCを有効にするには、以下のオプションを追加します。
java -XX:+UseZGC -Xmx8g -jar server-app.jar
最新のJVMでは自動最適化が進んでいますが、特定のワークロードに合わせてGCを選択することで、応答時間を劇的に改善できる場合があります。
モジュールシステム(Project Jigsaw)への対応
Java 9以降導入されたモジュールシステムにより、実行コマンドの使い方も一部変化しました。
従来のクラスパスに代わり、モジュールパス(–module-path)を使用することが推奨されています。
モジュール化されたアプリケーションを実行する際は、-mオプションでモジュール名とメインクラスを指定します。
java --module-path mods -m my.module/com.example.Main
これにより、ライブラリの依存関係が厳密にチェックされ、実行時の安全性と効率性が向上します。
カプセル化が強化されたことで、内部APIへの不用意なアクセスを制限できる点も大きなメリットです。
トラブルシューティングとログ出力
Javaの実行中に問題が発生した場合、詳細な情報を出力させるオプションが役立ちます。
例えば、クラスのロード状況を確認したい場合は-verbose:classを使用します。
また、ガベージコレクションの挙動を追跡するには、-Xlog:gc*オプションが有効です。
java -Xlog:gc:file=gc.log -jar application.jar
このようにログをファイルに出力させることで、後から解析を行うことが可能になります。
障害発生時の迅速な対応には、これらのログ出力オプションの知識が欠かせません。
Java 2026年時点でのトレンド:シンプル化された実行
2026年のJava開発において注目すべきは、初心者の学習コストを下げるための「暗黙的に宣言されたクラス」などの導入です。
これにより、public static void main(String[] args)といった定型文を書かなくても、シンプルなコードが実行可能になっています。
// 2026年の最新構文(例)
void main() {
println("Hello, Simplified Java!");
}
このようなコードも、javaコマンド一つで簡単に動かすことができます。
Javaは「堅牢で大規模向け」というイメージを保ちつつ、スクリプトのような「軽快さ」も兼ね備えるよう進化しているのです。
まとめ
Java実行コマンドは、単にプログラムを動かすための手段ではなく、アプリケーションの性能や安定性を左右する重要な要素です。
基本的なクラスファイルの実行から、最新のソースファイル直接実行、そして詳細なJVMオプションの設定まで、幅広く理解しておくことが求められます。
特にメモリ管理や最新のGCオプション、モジュールパスの扱いは、プロフェッショナルな開発現場で必須の知識です。
2026年の進化し続けるJavaエコシステムにおいて、本記事で紹介したコマンド操作をマスターし、より効率的で堅牢なシステム開発を目指しましょう。
日々の開発の中でコマンドの挙動を深く知ることは、トラブルに強いエンジニアへの第一歩となります。
