9.

Java フレームワーク完全ガイド — Spring / Quarkus / Micronaut / Helidon 比較

編集
この記事の要点
  • Java の Web フレームワークは Spring Boot が事実上のデファクトスタンダード
  • マイクロサービス / クラウドネイティブ向けには Quarkus・Micronaut・Helidon が起動高速化で人気上昇
  • Struts 1/2、JSF、Vaadin、Play Framework は歴史的または特定用途に限定
  • 選定軸: 起動速度・メモリ・エコシステム・学習曲線・コンパイル方式 (JIT vs AOT/GraalVM)
  • 新規プロジェクトは Spring Boot 3.x(汎用)か Quarkus / Micronaut(コンテナ最適化)から選ぶのが定石

Java フレームワークの全体像

Java の Web / アプリケーションフレームワークは大きく 「DI コンテナ + Web 層 + データアクセス」の三層を提供します。代表的なものを比較します:

名前初版特徴主な用途現在の立ち位置
Spring / Spring Boot2003 / 2014DI + AOP + Web + Data + Security の総合業務システム全般デファクト
Spring MVC2003Servlet ベース MVC従来の WebSpring Boot 配下で現役
Struts 12000初期の MVC フレームワークレガシー保守EOL (2013)
Struts 22006WebWork ベースレガシー保守脆弱性多発で減少
JSF (Jakarta Faces)2004コンポーネント指向Jakarta EE 標準限定的
Vaadin2009Java で書いてサーバーで描画業務 UIニッチで根強い
Play Framework2007Scala/Java、非同期API・SPA バックエンド下火
Quarkus2019GraalVM AOT、起動 0.05 秒K8s・Serverless急成長
Micronaut2018コンパイル時 DIマイクロサービス急成長
Helidon2018Oracle 製、SE / MP の 2 系統クラウドOracle 寄り

Spring Boot — デファクト選択肢

Spring Boot は 「設定より規約 (convention over configuration)」 に基づき、わずか数行で本番稼働可能な Web アプリを起動できます。

// pom.xml の依存
// spring-boot-starter-web
// spring-boot-starter-data-jpa

@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

@RestController
@RequestMapping("/api/users")
@RequiredArgsConstructor
public class UserController {
    private final UserRepository repo;

    @GetMapping("/{id}")
    public User get(@PathVariable Long id) {
        return repo.findById(id).orElseThrow();
    }

    @PostMapping
    public User create(@RequestBody @Valid User user) {
        return repo.save(user);
    }
}

Spring Boot のメリット:

  • 巨大エコシステム: Security / Batch / Cloud / WebFlux / Data など全部入り
  • 豊富な情報: 日本語書籍・Qiita・公式ドキュメント
  • 本番で枯れている: 大規模システムで実績多数
  • spring-boot-starter-*: 依存関係を 1 行で追加

デメリット:

  • 起動が遅い (数秒〜十数秒) → コンテナ・サーバーレスに不向き
  • メモリ消費が大きい (200MB〜)
  • リフレクション多用で GraalVM ネイティブ化が難しかった (Spring Boot 3 で改善)

Quarkus — クラウドネイティブの新星

Red Hat が開発する 「Kubernetes ネイティブな Java スタック」。GraalVM で AOT (Ahead-Of-Time) コンパイルすれば起動 0.05 秒・メモリ 30MB 級の小さなバイナリになります。

@Path("/hello")
public class GreetingResource {
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return "Hello from Quarkus";
    }
}

// 開発: ./mvnw quarkus:dev (ホットリロード)
// ネイティブビルド: ./mvnw package -Pnative
// → target/app-runner (実行ファイル)

Micronaut — コンパイル時 DI

Spring と同じ DI を提供しつつ、リフレクションを使わずコンパイル時に注入コードを生成。起動高速・GraalVM 親和。

@Controller("/api")
public class UserController {
    private final UserService service;

    public UserController(UserService service) {
        this.service = service;
    }

    @Get("/users/{id}")
    public User get(Long id) {
        return service.findById(id);
    }
}

選定ガイド

シナリオ推奨理由
業務システム / 社内 WebSpring Boot情報量・実績・採用しやすさ
マイクロサービス / K8sQuarkus または Micronaut起動速度・低メモリ
サーバーレス (AWS Lambda)Quarkus + GraalVMコールドスタート最小化
レガシー保守Struts → Spring 移行検討Struts は脆弱性・保守難
Oracle DB 中心の業務Helidon または Spring BootOracle 公式サポート
シングルページ UI を Java で書きたいVaadinJava だけで完結

起動速度・メモリ比較 (Hello World)

フレームワーク起動 (JVM)起動 (Native)RSS メモリ
Spring Boot 32〜5 秒0.1 秒180 MB
Quarkus1 秒0.02 秒30 MB
Micronaut1 秒0.03 秒40 MB
Helidon SE1 秒0.03 秒35 MB

FAQ

Q: Struts は今でも使われている?
A: 保守案件には残っていますが、新規採用はほぼゼロ。Struts 2 は度重なる脆弱性 (CVE) で評判が悪く、Spring Boot への移行が定番です。

Q: Spring Boot と Quarkus を両方学ぶ意味は?
A: 業務システムは Spring、マイクロサービスは Quarkus、と用途ごとに使い分けるのが現代の主流です。コンセプトは似ているので相互学習しやすい。

Q: JSF はもう死んだ?
A: Jakarta EE では現役ですが日本での採用は限定的。新規なら Spring MVC か Vaadin の方が情報が多いです。

編集
Post Share
子ページ
  1. Spring Framework
  2. Struts
  3. Java EE
同階層のページ
  1. プラットホーム
  2. 環境構築
  3. 文法
  4. API
  5. Servlet(サーブレット)
  6. JSP
  7. Applet(アプレット)
  8. デザインパターン
  9. フレームワーク
  10. ライブラリ
  11. Androidアプリケーション
  12. Project Jigsaw
  13. エラー一覧
  14. 日付の加算、減算
  15. 文字列の数字チェック
  16. 改行コードの削除
  17. 先頭と末端の文字の削除
  18. warファイルの中身を確認する方法
  19. nullもしくは空文字の判定
  20. beanの中身を確認する方法
  21. org.apache.log4j.Logger のログ出力で printStackTrace() のエラー内容を出力する方法
  22. Javaのバージョン確認方法