エンタープライズ不動の王者。JVM・Spring・Android
1995年生まれ・30年超動いた王道の言語。Write Once, Run Anywhere の原典
1995年に Sun Microsystems(後に Oracle が買収)で James Gosling らが公開したオブジェクト指向言語。JVMJava仮想マシン。Javaバイトコードを実行する。Write Once, Run Anywhere を実現する基盤。Scala/Kotlin/Clojure等多言語のホスト(Java仮想マシン)上で動き、ソースを一度コンパイルすればバイトコードがあらゆるプラットフォームで走る「Write Once, Run AnywhereJava の標語。一度コンパイルしたバイトコードが OS/CPU を問わず動作する理念を意味する」を理念とする。 Spring FrameworkJava最大のDI/AOPフレームワーク。Spring Boot で簡略化され事実上のエンタープライズ標準 がデファクトスタンダードとなった2000年代以降は、銀行・証券・保険・官公庁のミッションクリティカル障害が許されない重要システム(銀行・証券・インフラ等)。長期保守・信頼性・24時間稼働が要件。Javaが選ばれてきた領域領域で事実上の標準。かつては Android の公式言語だったが、2017年に Kotlin にメインの座を譲った(既存Android資産は今も大半がJava)。 現在も 6ヶ月ごとのリリースサイクルで進化を続け、Virtual Threads(Java 21)・GraalVM ネイティブイメージなどクラウド時代への対応も進んでいる。
エンタープライズWeb(Spring Boot):Spring Framework が事実上の標準で、銀行・官公庁の大規模Webサービス・マイクロサービスに使用される。組み込みTomcatで即起動。
Androidアプリ(既存資産):2017年まで Google 公式言語。Kotlin への移行が進む中でも、数百万の既存Androidアプリ・ライブラリは今もJava製。
大規模基幹システム:販売管理・在庫管理・ERP・勘定系など長期保守前提の業務系システムに強く、1995年から30年超スケールで動く実績がある。
ビッグデータ・分散処理:Hadoop / Spark / Kafka / Flink といった JVM 系ビッグデータツールの事実上の開発言語。JVMエコシステムの恩恵を直接受けられる。
クラウドネイティブ(Quarkus / Micronaut):Quarkus 等の Kubernetes Native Framework で **GraalVM ネイティブビルド** すれば起動は数10ms・メモリも大幅削減。クラウド時代に再注目。
| 観点 | Java | Kotlin | C# |
|---|---|---|---|
| 言語の歴史 | 30年超(1995-)・JVMの原点 | 15年(2011-)・JetBrains製・Java後継 | 26年(2000-)・MS主力・.NET |
| 型システム | 強い静的型 | 強い静的型・null安全 | 強い静的型 |
| Android対応 | 対応(既存資産は依然主流) | 対応(現行公式・推奨) | 非対応(Xamarin/MAUIで代替) |
| 実行速度・起動 | 中(JIT最適化で高速化・起動は遅め) | 中(同JVM・起動は遅め) | 中(.NET CLR・NativeAOT対応) |
| 学習コスト | 高(記法冗長・ボイラープレート多) | 中(簡潔・Javaより書きやすい) | 中(C系で馴染みやすい) |
| エコシステム規模 | 最大(Maven Central・30年蓄積) | Java資産を全て流用可 | 巨大(NuGet・MS支援) |
| 向いている場面 | 大規模基幹・既存資産保守・JVM資産 | 新規Android・モダンJVM | Windows/Microsoft環境・ゲーム(Unity) |
選ぶ理由:
エコシステムが完成しすぎており、ライブラリ・フレームワーク・情報・人材が豊富。大規模基幹・ミッションクリティカルは依然としてJava一択。JVM上で動くScala/Kotlin/Clojure など他言語への布石にもなり、新技術(Virtual Threads・GraalVM)も継続投入されている。
選ばない理由:
記法が冗長(getter/setter・例外チェック・型宣言)でコード量が多い。学習コストが高く、軽量スクリプトには過剰。起動が比較的遅い(GraalVM ネイティブビルドで改善可)。コンテナとの相性でCold Start に課題が出る場面もある。
パッケージマネージャ:Gradle / Maven(標準)
主要フレームワーク:
主要ライブラリ:
ランタイム:
Hello World
public class Main {
public static void main(String[] args) {
System.out.println("Hello, Java!");
}
}
クラスと継承(@Override)
public class Animal {
String name;
void speak() { System.out.println("..."); }
}
public class Dog extends Animal {
@Override void speak() { System.out.println("Bark!"); }
}
Stream API(関数型コレクション操作)
List<String> names = users.stream()
.filter(User::isActive)
.map(User::getName)
.sorted()
.collect(Collectors.toList());
Optional(null安全な値の取扱い)
Optional<User> user = findUser(id);
String name = user.map(User::getName).orElse("anonymous");
Record(イミュータブルなデータクラス・Java 16+)
public record Point(int x, int y) {}
Point p = new Point(1, 2);
int x = p.x(); // accessor はメソッド
初級(目安: 〜2-3週間)
中級(目安: 〜1-3ヶ月)
上級(目安: 〜3-6ヶ月)