この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:10
ページ更新者:atom
更新日時:2026-06-11 07:10:02

タイトル: フレームワーク
SEOタイトル: 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 の方が情報が多いです。