Java 25で導入された新しい簡略記法は、プログラミング初心者がJavaを学ぶ際の最初のハードルを劇的に下げることを目的としています。これまで「おまじない」として覚えなければならなかった長い「Hello, World!」プログラムが、はるかにシンプルで直感的な形になりました。
この変更の背景にある思想は、JEP (JDK Enhancement Proposal) 512に詳しく記されています。
なぜJavaは変わる必要があったのか?
Javaはもともと、大規模で複雑なアプリケーションを開発するために設計された言語です。しかし、その強力な機能が、プログラミングを初めて学ぶ人々にとっては大きな壁となっていました。JEP 512のSummary(概要)には、この変更の目的が記されています。
Evolve the Java programming language so that beginners can write their first programs without needing to understand language features designed for large programs.
(Javaプログラミング言語を進化させ、初心者が大規模プログラム向けに設計された言語機能を理解しなくても、最初のプログラムを書けるようにする。)
従来の長い「Hello, World!」
具体的に、これまでのJavaでは画面に文字を表示するだけでも、以下のような多くの「儀式」が必要でした。
// 従来のJavaでの記述
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
このコードについて、JEP 512のMotivation(動機)セクションは次のように指摘しています。
There is too much clutter here — too much code, too many concepts, and too many constructs — for what the program does.
(ここには、プログラムの動作に比して、あまりにも多くの混乱――多すぎるコード、多すぎる概念、多すぎる構文――が存在する。)
public class
やpublic static void main(String[] args)
といった記述は、大規模開発(Programming in the large)では重要ですが、初心者が最初に学ぶべきことではありませんでした。
Java 25のシンプルな「Hello, World!」
この「混乱」を解消するため、Java 25では段階的な簡略化が導入されました。JEP 512のDescription(説明)セクションでは、そのステップが紹介されています。
まず、public static void main(String[] args)
という決まり文句を省略できるようにしました。次に、クラス宣言そのものを不要にする「コンパクトソースファイル」を導入。
Second, we introduce a compact form of source file that lets developers get straight to the code, without a superfluous class declaration:
(第二に、開発者が余分なクラス宣言なしに直接コードに取り掛かれるようにする、コンパクトな形式のソースファイルを導入する。)
そして最後に、複雑だったSystem.out.println
を、よりシンプルな形で置き換えました。
Third, we add a new class in the
java.lang
package that provides basic line-oriented I/O methods for beginners, thereby replacing the mysteriousSystem.out.println
with a simpler form:
(第三に、初心者に基本的な行指向I/Oメソッドを提供する新しいクラスをjava.lang
パッケージに追加し、それによって謎めいたSystem.out.println
をよりシンプルな形式に置き換える。)
これらの改良の結果、Java 25の「Hello, World!」は以下のようになりました。
// Java 25での新しい記述
void main() {
IO.println("Hello, World!");
}
関連JEP: 445 — Unnamed Classes and Instance Main Methods (Preview)[JDK 21]
クラス宣言なしのvoid main()
による記述は、JDK 21のプレビュー機能としてJEP 445で初めて導入されました。
出典
Summary — Evolve the Java language so that students can write their first programs without needing to understand language features designed for large programs. ... This is a preview language feature.
大規模プログラム向けの言語機能を理解しなくても、学習者が最初のプログラムを書けるように言語を進化させる。これはプレビューの言語機能である。
Goals — Offer a smooth on-ramp to Java so that educators can introduce programming concepts in a gradual manner; Help students write basic programs concisely and grow their code gracefully; Reduce ceremony for simple programs; Do not introduce a separate beginner's dialect or toolchain.
教育者が段階的に概念を導入できる「滑らかな助走路」を提供し、学習者が簡潔に基本的なプログラムを書き、スキル向上に合わせてコードを優雅に成長させられるようにする。シンプルなプログラムの儀式を減らし、初心者向けの別方言やツールチェーンは導入しない。
JDK 21のプレビュー例(クラス宣言なし)は次のとおりです。
void main() {
System.out.println("Hello, World!");
}
変更の目的:「スムーズな助走路」の提供
この劇的な簡略化の目的は、単にコードを短くすることだけではありません。JEP 512が掲げる重要なGoals(目標)の一つは、学習者がスムーズに成長できる道筋を提供することです。
Help students write simple programs in a concise manner, and grow their code gracefully as their skills grow.
(学生が簡潔な方法で簡単なプログラムを書き、スキルが向上するにつれてコードを優雅に成長させられるように支援する。)
この思想は「On-Ramp(助走路)」という言葉で表現されています。高速道路に合流するための助走路がなければ、安全に速度を上げて本線に入っていくことはできません。
These changes combine to offer an on-ramp, that is, a gradual incline that merges gracefully onto the highway.
(これらの変更は組み合わさって、高速道路に優雅に合流する緩やかな傾斜路、つまり「助走路」を提供する。)
Java 25で導入された新しい簡略記法は、プログラミング初心者がJavaを学ぶ際の最初のハードルを劇的に下げることを目的としています。これまで「おまじない」として覚えなければならなかった長い「Hello, World!」プログラムが、はるかにシンプルで直感的な形になりました。
この変更の背景にある思想は、公式ドキュメントであるJEP (JDK Enhancement Proposal) 512に詳しく記されています。
なぜJavaは変わる必要があったのか?
Javaはもともと、大規模で複雑なアプリケーションを開発するために設計された言語です。しかし、その強力な機能が、プログラミングを初めて学ぶ人々にとっては大きな壁となっていました。JEP 512のSummary(概要)には、この変更の目的が記されています。
Evolve the Java programming language so that beginners can write their first programs without needing to understand language features designed for large programs.
(Javaプログラミング言語を進化させ、初心者が大規模プログラム向けに設計された言語機能を理解しなくても、最初のプログラムを書けるようにする。)
従来の長い「Hello, World!」
具体的に、これまでのJavaでは画面に文字を表示するだけでも、以下のような多くの「儀式」が必要でした。
// 従来のJavaでの記述
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
このコードについて、JEP 512のMotivation(動機)セクションは次のように指摘しています。
There is too much clutter here — too much code, too many concepts, and too many constructs — for what the program does.
(ここには、プログラムの動作に比して、あまりにも多くの混乱――多すぎるコード、多すぎる概念、多すぎる構文――が存在する。)
public class
やpublic static void main(String[] args)
といった記述は、大規模開発(Programming in the large)では重要ですが、初心者が最初に学ぶべきことではありませんでした。
Java 25のシンプルな「Hello, World!」
この「混乱」を解消するため、Java 25では段階的な簡略化が導入されました。JEP 512のDescription(説明)セクションでは、そのステップが紹介されています。
まず、public static void main(String[] args)
という決まり文句を省略できるようにしました。次に、クラス宣言そのものを不要にする「コンパクトソースファイル」を導入。
Second, we introduce a compact form of source file that lets developers get straight to the code, without a superfluous class declaration:
(第二に、開発者が余分なクラス宣言なしに直接コードに取り掛かれるようにする、コンパクトな形式のソースファイルを導入する。)
そして最後に、複雑だったSystem.out.println
を、よりシンプルな形で置き換えました。
Third, we add a new class in the
java.lang
package that provides basic line-oriented I/O methods for beginners, thereby replacing the mysteriousSystem.out.println
with a simpler form:
(第三に、初心者に基本的な行指向I/Oメソッドを提供する新しいクラスをjava.lang
パッケージに追加し、それによって謎めいたSystem.out.println
をよりシンプルな形式に置き換える。)
これらの改良の結果、Java 25の「Hello, World!」は以下のようになりました。
// Java 25での新しい記述
void main() {
IO.println("Hello, World!");
}
関連JEP: 445 — Unnamed Classes and Instance Main Methods (Preview)[JDK 21]
クラス宣言なしのvoid main()
による記述は、JDK 21のプレビュー機能としてJEP 445で初めて導入されました。
出典
https://openjdk.org/jeps/445
Summary — Evolve the Java language so that students can write their first programs without needing to understand language features designed for large programs. ... This is a preview language feature.
大規模プログラム向けの言語機能を理解しなくても、学習者が最初のプログラムを書けるように言語を進化させる。これはプレビューの言語機能である。
Goals — Offer a smooth on-ramp to Java so that educators can introduce programming concepts in a gradual manner; Help students write basic programs concisely and grow their code gracefully; Reduce ceremony for simple programs; Do not introduce a separate beginner's dialect or toolchain.
教育者が段階的に概念を導入できる「滑らかな助走路」を提供し、学習者が簡潔に基本的なプログラムを書き、スキル向上に合わせてコードを優雅に成長させられるようにする。シンプルなプログラムの儀式を減らし、初心者向けの別方言やツールチェーンは導入しない。
JDK 21のプレビュー例(クラス宣言なし)は次のとおりです。
void main() {
System.out.println("Hello, World!");
}
「スムーズな助走路」の提供
Java25でのHello World!の簡略化の目的は、単にコードを短くすることだけではありません。JEP 512が掲げる重要なGoals(目標)の一つは、学習者がスムーズに成長できる道筋を提供することです。
Help students write simple programs in a concise manner, and grow their code gracefully as their skills grow.
(学生が簡潔な方法で簡単なプログラムを書き、スキルが向上するにつれてコードを優雅に成長させられるように支援する。)
この思想は「On-Ramp(助走路)」という言葉で表現されています。高速道路に合流するための助走路がなければ、安全に速度を上げて本線に入っていくことはできません。
These changes combine to offer an on-ramp, that is, a gradual incline that merges gracefully onto the highway.
(これらの変更は組み合わさって、高速道路に優雅に合流する緩やかな傾斜路、つまり「助走路」を提供する。)
Java 25の簡略記法は、プログラミングという高速道路に乗るための、安全でスムーズな助走路なのです。初心者はまずこの助走路で自信を持って基本を学び、そこからシームレスに、Javaが本来持つ強力で広大な世界へと進んでいくことができます。
初心者の視点では、この変更はまるで補助輪つきのチャリ。長い「public static void…」という呪文を唱える前に、まずは風を切って走り出せます。画面にひとこと出すためだけにクラスや配列引数を背負わなくてよくなり、「やりたいこと」とコードが一本の線でつながる——この軽さは学ぶ意欲を落とさないでしょう。JDK 21 のプレビュー(JEP 445)でクラスなしの void main()
が解禁されたときのワクワク感が、より洗練されて戻ってきた、と言ってよいでしょう。ただし、ずっと補助輪のままでは遠くへ行けません。どこかでクラスやパッケージ、static
とインスタンス、アクセス修飾子や例外処理といった“本線”に合流するレッスンが必要です。簡略記法でスピードに乗り、インスタンス main
、明示的なクラス/パッケージ、モジュールへと段階的にギアを上げていけば、楽しさはそのままに実力だけが確実に積み上がります。
大規模開発の視点では、簡略記法は本番コードの生産には基本的に向きません。長期保守やチーム開発では、パッケージ境界、可視性、命名規約、例外ポリシー、ロギング、テスト容易性、ビルド/依存管理といった「プログラミング・イン・ザ・ラージ」の規律が価値を生みます。無名クラスや簡素なエントリポイントは、学習用・試験的スクリプト・ドキュメントの最小例などに限定して使い、プロダクションでは従来どおり明示的なクラス/パッケージ構成と public static void main(String[] args)
(またはフレームワーク規約に従う起動構成)を採るのが実務的です。もっとも、この変更は別方言を生むのではなく、既存の Java の枠内でスムーズにスケールアップできる設計なので、サンプルから製品コードへの移行で学びを捨てずに済む点は評価できます。要は、学習コスト削減という“入口”の利点を最大化しつつ、チーム開発で必要な明示性と規律を早期に取り戻すバランス設計が鍵になるのではないでしょうか。
おまけ:Java 25のインストール方法
macOS(Homebrewの例)
brew install openjdk
sudo ln -sfn /opt/homebrew/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
echo 'export PATH="/opt/homebrew/opt/openjdk/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
java -version
Windows(winget の例)
winget search Temurin
winget install EclipseAdoptium.Temurin.25.JDK
java -version