現役Javaエンジニアが選ぶ、初めてのWebアプリ開発でSpring BootとQuarkusどちらが合う?

Published on: | Last updated:

「Spring BootとQuarkus、どっちが“上”?」って聞き方、たぶん一番損する誤解です。用途が違う道具で、正解はプロジェクトの前提条件で決まり、QuarkusはGraalVM Native ImageとKubernetes向け、Spring BootはSpring SecurityやSpring Data JPAの企業案件向けで強いです(来源:Spring Framework/Quarkus/GraalVM 公開資訊,建議查證)。

  • 起動の待ち時間が痛いなら:Quarkus + AOT(ahead-of-time)をまず疑う
  • 人が増える・引き継ぐなら:Spring Bootの“人材の見つかりやすさ”が効く
  • Kubernetes前提の配備なら:Quarkusの「Kubernetes Native」を軸に考える
  • セキュリティ機能を早く固めたいなら:Spring Securityの型が助けになる
  • 迷ったら:まず「メモリ」「起動秒数」「チーム経験」を紙に書く

私ね、こういう比較って、最後は“数字”と“人の胃が痛くなるポイント”で決まると思ってる。胃が痛いのは、夜間バッチが止まるとか、デプロイで落ちるとか、引き継ぎが地獄とか。そういうやつ。

迷ったとき用:条件で振り分けるだけの流れ。
迷ったとき用:条件で振り分けるだけの流れ。

まず結論だけ言うと選ぶ軸は起動時間とメモリと人

Spring BootとQuarkusの選定は「起動時間」「メモリ使用量」「チームの経験値」の3点を先に固定するとブレません。QuarkusはAOTコンパイルとGraalVM Native Imageで起動と常駐メモリを絞りやすく、Spring Bootはエコシステムと採用市場で回しやすいです(来源:GraalVM 公開資訊,建議查證)。

反常識の話:「技術が新しいほうが将来安心」って、現場だと普通に裏目に出る。新しいのが悪いんじゃない。困ったとき、助けてくれる人が周りにいるかどうか、そこ。

で、クラウドネイティブだ、マイクロサービスだ、って言いながら、実際は“運用当番が回ってくる”わけ。眠い目こすってログ見るわけ。ここで、依存関係が多すぎて何が起きてるか分からない、とか、逆に軽すぎて周辺が薄くて自分で組む羽目、とか。

うん。地味に効く。

よくある4つの「決め手」をカードにしたやつ。
よくある4つの「決め手」をカードにしたやつ。

Spring Bootは企業の台所みたいな道具箱が最初から並ぶ

Spring BootはSpring Frameworkの上に成り立ち、IoCコンテナとDI(依存性注入)で部品の組み立てを自動化し、MVC(Model-View-Controller)でWebの受け答えを定型化します。Spring Data JPA(JPAを薄く包むDBアクセス)やSpring Security(認証・認可の枠組み)まで揃い、企業向けの定番になっています(来源:Spring Framework 公開資訊,建議查證)。

IoCコンテナって何:ざっくり「自分で部品を作らないで、棚から出してもらう」仕組み。自分でネジを探して組み立てない。棚番があって、必要なときに出てくる。便利。だけど、棚のルールを知らないと迷子になる。

AOPもついでに:ログとかトランザクションみたいに、いろんな場所に同じ処理が散らばるのを、まとめて差し込む考え方。AspectJと一緒に使われる話が多いね(来源:AspectJ 公開資訊,建議查證)。

あと、これ。DBまわり。ここで変にケチると、後から泣く。

  • JDBC:素のSQLに近い。手は動くけど、毎回同じ儀式が増えがち
  • Spring Data JPA:リポジトリで書く量が減る。減る。ほんと減る
  • NoSQL連携:案件次第で刺さる、刺さらないが極端

バッチ処理もね、Spring Batchがあると「夜中に動く重い処理」を型に入れやすい。データ分析とか、レポート作成とか、夜間同期とか。こういうの、だいたい夜に壊れるから。やめてほしい。ほんと。

「動くものを作る」より、「誰が当番でも直せる形」にしておくほうが、あとで自分を助ける。

Spring Bootの“よく触る場所”を3視点で。
Spring Bootの“よく触る場所”を3視点で。

Quarkusはコンテナと相性がいい軽い起動が売り

QuarkusはKubernetes Native(Kubernetes前提の設計)を掲げ、GraalVM Native ImageとAOTで起動時間とメモリ常駐量を小さくしやすいJavaフレームワークです。DockerやKubernetesでスケールするマイクロサービス、サーバレスで刺さります(来源:Quarkus/GraalVM 公開資訊,建議查證)。

私が覚えてるやつ:コンテナって、増えたり減ったりするじゃない。そこに「起動が遅い子」が混ざると、増やしたいタイミングで間に合わない。間に合わないと、ユーザーの画面が固まる。固まると、問い合わせが来る。うわーってなる。

Quarkusの話題って、だいたいそこから始まる。起動。メモリ。で、GraalVMでネイティブにするやつ。細かい罠もあるけど、それは後で。

開発体験の話:live reload / hot reloadがあると、コード直して即反映、って感覚になる。ここは正直、気持ちが軽くなる。ほんとに。ぼーっとしてても前に進む感じ。

ただ、若いコミュニティって「情報の量」がまだ少ない時期がある。これ、怖い。深夜に詰まったとき、検索しても答えが薄い。そういう瞬間に、Springの“昔からの蓄積”が眩しく見えるんだよね。

「速く起きる」だけで救われる障害がある。起動が遅いのは、待てばいい話じゃない。

同じJavaでも勝負してる場所が違うから比較はここだけ見る

Spring BootとQuarkusの差は「リソース」「開発の回し方」「クラウド前提度」「エコシステム」「リアクティブ」「GraalVM対応」「セキュリティ統合」で整理できます。特にKubernetesとサーバレスを前提にするならQuarkus、社内システムの統合や人員増を前提にするならSpring Bootが有利です(来源:Spring/Quarkus 公開資訊,建議查證)。

比較、ざっくり:机の上で見ると同じJavaでも、現場だと困り方が違う。だから「機能が多い/少ない」で殴り合うの、やめよ。ね。

横に並べると、迷いが減る。
横に並べると、迷いが減る。
  • リソース:Quarkusは起動とメモリを絞る話が中心。Spring Bootは構成次第で重くなる
  • 開発の回し方:Quarkusはライブ系が気持ちいい。Spring BootはIDE連携と情報量が分厚い
  • クラウド:SpringはSpring Cloudなどで寄せる。Quarkusは最初から寄ってる
  • コミュニティ:Springは人が多い。採用で効く。Quarkusは伸びてる最中
  • リアクティブ:Spring WebFluxもある。Quarkusも宣言的・リアクティブに対応、という文脈が多い
  • GraalVM:Quarkusは相性の話がよく出る。Springも進んでるが、比較ではQuarkus寄りで語られがち
  • セキュリティ:Spring Securityの“型”は企業で助かる。Quarkusは機能が揃ってきてるが統合数は少なめ、という評価になりやすい

ところで「リアクティブ」って言葉、現場だと雑に使われがちでさ。非同期で捌きたい、イベントっぽい、詰まらせたくない、みたいな“気分”の代名詞になってる。だから、選定の時はちゃんと指標に落としたほうがいい。

例えば、同時接続数、スループット、p95レイテンシ、あと起動秒数。ここ。

数字にしよ。ほんとに。

時間とお金の算盤を置くと急に目が覚める

Spring BootとQuarkusのコスト比較は「開発者の待ち時間」「インフラのメモリ課金」「障害対応の深夜コスト」を同じ表に並べると判断できます。Quarkusは起動とメモリでインフラ費を下げやすく、Spring Bootは実装と採用の時間を減らして人件費の山を低くしやすいです(来源:公開資訊,建議查證)。

規則:ここは“ざっくりの家計簿”です。あなたの単価やクラウド料金で数字は変わるから、項目だけでも真似して書き換えて。

risk_matrix:時間 vs お金で見る「どこで詰むか」
判断軸 時間コストが増える場面 お金コストが増える場面 転びやすさ 先に打てる手
起動が遅い オートスケール時に間に合わず、原因調査が長引く 待ち時間の分、ピーク時の台数を余計に抱える Quarkus + Native Image検証、またはSpring側で起動計測と依存整理
メモリを食う GCチューニングに人が吸われる コンテナのメモリ枠が増えて月額が膨らむ メモリプロファイル計測、必要ならQuarkus寄りに設計
周辺機能が薄い 認証・DB・監視の整備で寄り道が増える 外部サービスや有償製品に寄せると費用が乗る Spring Bootの定番構成を採用、またはQuarkusで使う拡張を先に棚卸し
人が見つからない 採用と育成でスケジュールがずれる 単価が上がる、外注費が上がる Spring Bootを選ぶ、またはQuarkus経験者の教育計画を先に作る
深夜障害で詰む 検索しても情報がなく、復旧まで伸びる SLA違反や機会損失が出る 運用手順書、ログ設計、メトリクス(p95等)を先に決める

こういう表、作るの面倒なんだけど、一回作るとね、会議が短くなる。誰もふわっと喋れなくなるから。いい意味で。

あ、クラウド料金の話で思い出した。日本だと、チームによっては「稟議の時間」がボトルネックになることあるじゃない。AWSだろうがGCPだろうが、月額がちょっと跳ねると、説明資料が増える。そうなると、メモリ枠が増える設計は、技術以外の理由で嫌われる。あるある。

誤解と現実を左右に並べた対照表イメージ。
誤解と現実を左右に並べた対照表イメージ。

日本で回すなら技術だけじゃなく監督官庁と通り道も見る

日本の現場でフレームワーク選定をするなら、監査・個人情報・社内統制の観点で「ログ」「アクセス制御」「変更履歴」を先に設計し、必要なら個人情報保護法やISMSの要求に合わせます。Spring Securityのような枠組みは説明資料に落とし込みやすく、Quarkusはクラウド運用前提の設計に寄せやすいです(来源:個人情報保護法/ISO 27001 公開資訊,建議查證)。

Institutionの話:金融や決済に近いなら、金融庁のガイドラインを意識する空気が出るし、医療っぽい情報が混ざるなら厚生労働省の文脈がちらつく。法令そのものより「監査で突っ込まれない説明」が必要になる。ここがね、胃にくる。

通り道の話:日本だと、情報はQiitaとかZennとか、あと社内のWikiに溜まる。で、困ったときにSlackで聞く。つまり「人が知ってる」ことが正義になりがち。ここでSpringの層の厚さが効く。

でも、Kubernetes前提のプロダクトをやってるチームは、逆にQuarkusの話が社内で回り始めてたりする。偏り、ある。ほんと。

「選定」は技術の勝ち負けじゃなくて、夜中に起きた自分が泣かないための保険。

FAQ 直答で引っかかりを先に取る

規則:ここは迷いどころだけ、短く答える。断言する。

Q. Kubernetesやサーバレス前提ならどっち?

QuarkusはKubernetes NativeとGraalVM Native Imageを軸に設計でき、起動とメモリの制約が強い環境で選びやすいです(来源:Quarkus/GraalVM 公開資訊,建議查證)。

Q. 企業の認証認可や監査対応を早く形にしたいなら?

Spring BootはSpring Securityと周辺の統合が多く、認証・認可・トランザクション管理を既存パターンで固めやすいです(来源:Spring Framework 公開資訊,建議查證)。

Q. 学習コストで詰みやすいのはどっち?

チームに経験者がいない場合、Quarkusは情報量と事例が少ない分だけ詰まりやすく、Spring Bootはドキュメントと人材の層で詰まりにくいです(来源:公開資訊,建議查證)。

Q. リアクティブをやりたいなら?

Spring BootはSpring WebFluxでリアクティブを組めて、Quarkusもリアクティブ指向の開発がしやすい文脈が多いので、要件の指標(同時接続数・p95)で決めます(来源:Spring/Quarkus 公開資訊,建議查證)。

Q. 結局どっちが“おすすめ”?

Quarkusはクラウドの起動・メモリ制約が強いサービスに向き、Spring Bootは企業統合とセキュリティと採用の現実に向くので、要件が先に決め手になります(来源:公開資訊,建議查證)。

最後にひとことだけ 反対意見も分かるからこそ聞きたい

Spring Bootは「何でも揃ってて安心」って言われるし、Quarkusは「軽くて起動が速い」って言われる。どっちも分かる。分かるんだけど、それだけで選ぶと、だいたい後で揉める。

「うちはSpringじゃないと無理」って人もいるし、「今どきそれ重いよ」って人もいる。どっちも、言い分ある。

核心フレーズ:Spring Bootは統合と運用の型で強く、Quarkusは起動とメモリ制約の強いクラウド実装で強い。

で、あなたの現場はどっちの痛みが先に来る? 起動待ちで刺さる? それとも引き継ぎで刺さる? 反対の立場の人が何を怖がってるか、そこから一回ぶつけてみて。

Related to this topic:

Comments