← 語彙帳トップに戻る

Java

エンタープライズ不動の王者。JVM・Spring・Android

✅ 大規模基幹システム✅ 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・メモリも大幅削減。クラウド時代に再注目。

⚖️ 他言語との比較
観点JavaKotlinC#
言語の歴史 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 に課題が出る場面もある。

💬 よくある会議での質問と答え方
Q.JavaとJVMは何が違いますか?
A.Javaはソースコード(.java)で、JVMはそれを実行する仮想マシンです。**JVM上は Scala / Kotlin / Clojure / Groovy 等 多言語が動く**ため、Java資産を別言語から活用することもできます。
Q.Javaはもう古い言語なのではないですか?
A.**1995年登場・30年超の実績**がありますが、**大規模基幹・Android・ビッグデータ**領域で現役です。**6ヶ月毎のメジャーリリース**で進化しており(Java 21でVirtual Threads、Java 25/26も継続)、レガシーとは一味違います。新規プロジェクトでもSpring Boot・Quarkus なら十分にモダンです。
Q.Spring と Jakarta EE の違いは?
A.**Spring**(Spring Boot含む)は Pivotal 社(現 VMware/Broadcom)製で事実上の標準・DI/AOP中心。**Jakarta EE**(旧 Java EE)は Eclipse Foundation 仕様のベンダー中立API群。大規模業務アプリでは Spring、標準準拠・特定ベンダー依存回避なら Jakarta EE という棲み分け。
Q.Javaのリリースモデルが分かりません(Java 8 と 21、どちらを使えば?)
A.**LTS(長期サポート)**を選ぶのが基本です。現在主流は Java 17 / 21(共に LTS・数年サポート)。新規プロジェクトは **Java 21 LTS**(Virtual Threads・Pattern Matching 等の最新機能入り)を推奨。Java 8 もまだ多くの既存システムで現役。
Q.GraalVM ネイティブイメージとは何ですか?
A.Java を Ahead-of-Time コンパイルして **ネイティブバイナリ**に変換する仕組み。**起動が数十ms**、メモリ使用量も大幅削減でき、コンテナ・サーバーレス・CLIで有利。Quarkus・Micronaut・Spring Boot 3 が対応。
🌐 エコシステム

パッケージマネージャ:Gradle / Maven(標準)

主要フレームワーク

  • Spring Boot — エンタープライズ標準の Spring フレームワーク簡略版。DI/AOP・組み込みTomcat・自動設定で即起動(Spring Boot 4.x が現行)
  • Spring Framework — DI/AOP/トランザクション管理・Spring Boot の親。コア機能は Spring Framework が提供
  • Jakarta EE(旧 Java EE) — Eclipse Foundation 仕様のベンダー中立API群・Servlet/JPA/EJB等。Jakarta EE 11 が現行
  • Quarkus — Kubernetes Native Java・GraalVM 対応で起動超高速・コンテナ最適化(Red Hat 製)
  • Micronaut — コンパイル時DI で起動高速・GraalVM ネイティブ対応・AWS Lambda で評価高
  • Helidon — Oracle 製の軽量クラウドネイティブフレームワーク・MicroProfile 準拠

主要ライブラリ

  • Hibernate / JPA — ORM・標準仕様 JPA・実装の代表格 Hibernate
  • JUnit 5 — 単体テストフレームワークの業界標準・Platform/ Jupiter/ Vintage 構成
  • Lombok — ボイラープレート削減(getter/setter 等をアノテーションで自動生成)
  • Jackson — JSONライブラリ・Spring Boot のデフォルト(ObjectMapper)
  • Apache Commons — 汎用ユーティリティ群(Lang / Collections / IO 等)
  • SLF4J / Logback — ロギングファサード(SLF4J)と実装(Logback)・Spring のデフォルト
  • Maven Surefire / JUnit 5 — テストランナー・Gradle/Maven と組み合わせてCIでテスト実行

ランタイム

  • OpenJDK — OSS・本番の事実上の標準。Adoptium Temurin / Amazon Corretto / Microsoft Build of OpenJDK 等
  • Oracle JDK — 商用サポート版・有償ライセンス・本番Oracle製品との互換性保証
  • GraalVM — ネイティブコンパイル対応・超高速起動・メモリ削減。クラウドNative・サーバーレス向き
  • Azul Zulu / Amazon Corretto — OpenJDK 互換の商用サポート付きディストリビューション・本番採用例多
💻 コード例

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週間)

  • 基本文法(変数・制御構文・メソッド) — int/String/配列・if/for/while・メソッド定義・main
  • クラスとオブジェクト指向 — class・フィールド・コンストラクタ・アクセス修飾子・this
  • 継承・インターフェース・抽象クラス — extends・implements・abstract・ポリモーフィズム
  • ビルドツール基礎 — Gradle/Maven の build.gradle / pom.xml・依存解決・タスク実行

中級(目安: 〜1-3ヶ月)

  • コレクションフレームワーク — List/Set/Map・ArrayList/HashMap・Generics(型パラメータ)
  • 例外処理 — try-catch-finally・checked/unchecked・throws・try-with-resources
  • ラムダ式と Stream API — 関数型インターフェース・map/filter/reduce・Optional
  • JUnit 5 + Maven/Gradle でのテスト — @Test・assertEquals・テストランナー・CI での実行

上級(目安: 〜3-6ヶ月)

  • JVM チューニング — ヒープ・GC(ZGC/G1/Parallel)・JIT・jconsole / VisualVM
  • 並行処理(Thread / Executor / Virtual Threads) — Thread・ExecutorService・CompletableFuture・**Java 21 の Virtual Threads** で Million connections
  • Spring Boot 実践 — DIコンテナ・AOP・トランザクション・Spring Security・REST API(Spring Web)
  • GraalVM ネイティブイメージ — Ahead-of-Time コンパイル・ビルド設定・起動時間の実測・メモリ削減