Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
【JJUG CCC 2019 Fall】JavaオンプレシステムをAKS + Quarkusに...
Search
Takaichi00
November 23, 2019
Technology
2
1.3k
【JJUG CCC 2019 Fall】JavaオンプレシステムをAKS + Quarkusに移行した話
Takaichi00
November 23, 2019
Tweet
Share
More Decks by Takaichi00
See All by Takaichi00
individual_or_organization
takaichi00
0
190
自分から始めるアジャイルの道 ~内発的動機をきっかけに変わった価値観~
takaichi00
0
370
Java developer introduced to Rust-ADC2022
takaichi00
0
270
野球人・落合博満さんから学ぶ、アジャイルなマインドセット・プラクティス
takaichi00
1
860
【CICD2021】デプロイメントパイプラインの原理原則を再確認する / Confirm Deployment Pipeline Principle
takaichi00
11
4.6k
【JTF2021】SonarQube をより有効活用する / Effective SonarQube
takaichi00
1
2.6k
JJUG CCC 2021 Spring-Resolving OOME with JFR
takaichi00
2
3.6k
【Yahoo! JAPAN Agile 2nd】野球人・落合博満さんから学ぶスクラムマスター / デベロッパー
takaichi00
0
2.7k
【Developers Boost 2020】凡人エンジニアの生存戦略
takaichi00
1
3k
Other Decks in Technology
See All in Technology
生成AI・AIエージェント時代、データサイエンティストは何をする人なのか?そして、今学生であるあなたは何を学ぶべきか?
kuri8ive
2
2.1k
第4回 「メタデータ通り」 リアル開催
datayokocho
0
110
re:Invent2025 コンテナ系アップデート振り返り(+CloudWatchログのアップデート紹介)
masukawa
0
280
20251209_WAKECareer_生成AIを活用した設計・開発プロセス
syobochim
4
1k
Ryzen NPUにおけるAI Engineプログラミング
anjn
0
250
Agentic AI Patterns and Anti-Patterns
glaforge
1
190
なぜ使われないのか?──定量×定性で見極める本当のボトルネック
kakehashi
PRO
1
1.1k
Karate+Database RiderによるAPI自動テスト導入工数をCline+GitLab MCPを使って2割削減を目指す! / 20251206 Kazuki Takahashi
shift_evolve
PRO
1
430
AIと二人三脚で育てた、個人開発アプリグロース術
zozotech
PRO
0
650
AI活用によるPRレビュー改善の歩み ― 社内全体に広がる学びと実践
lycorptech_jp
PRO
1
160
ログ管理の新たな可能性?CloudWatchの新機能をご紹介
ikumi_ono
0
270
乗りこなせAI駆動開発の波
eltociear
1
840
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Documentation Writing (for coders)
carmenintech
76
5.2k
How STYLIGHT went responsive
nonsquared
100
5.9k
Embracing the Ebb and Flow
colly
88
4.9k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
KATA
mclloyd
PRO
32
15k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
How to train your dragon (web standard)
notwaldorf
97
6.4k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.8k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Music & Morning Musume
bryan
46
7k
Transcript
Java オンプレシステムを AKS + Quarkus に移行した話 #jjug #jjug_ccc #ccc_m4a
髙市 智章 (Tomoaki Takaichi) Nov, 23, 2019【東京】JJUG CCC 2019 Fall
自己紹介 @Takaichi00 tomoaki.takaichi.5 ・髙市 智章(タカイチ トモアキ) ・ソフトバンク株式会社 入社3年目
・Java でのシステム開発 ・アジャイル開発実践 ・iTunes カード販売システム ・ソフトバンクショップ向けシステム
目次 ❏ Quarkus とは? ❏ Quarkus 採用の背景 ❏ Quarkus と
Thorntail (Wildfly Swarm) ❏ Quarkus のサンプル ❏ 実開発ではまったポイント
目次 ❏ Quarkus とは? ❏ Quarkus 採用の背景 ❏ Quarkus と
Thorntail (Wildfly Swarm) ❏ Quarkus のサンプル ❏ 実開発ではまったポイント
Quarkus とは ❏ GraalVM 内のコンパイラを用いて実行可能なネイティ ブバイナリを生成し、コンテナ化できる webフレーム ワーク ❏ Red
Hat 社がスポンサーの OSS プロジェクト
Quarkus 触ったことありますか? Quarkus で開発していますか? ご質問
❏ JavaEE の API を用いて簡単に Native Image 化でき、かつ高速起 動と低容量が実現できる ❏
Quarkus では CDI 実装として、ビルド時にバイトコードを生成し、 最適化する「arc」を使用している。よって java -jar での起動も高 速。(しかし CDI のすべての機能を実装しているわけではない) ❏ 「arc」の制限についてはこちらを参考 Quarkus の特徴
目次 ❏ Quarkus とは? ❏ Quarkus 採用の背景 ❏ Quarkus と
Thorntail (Wildfly Swarm) ❏ Quarkus のサンプル ❏ 実開発ではまったポイント
❏ 仮説検証型のシステム開発を行うなかで、オンプレの弱点 が気になるようになってきた ❏ もっと早く環境構築したい / 不要になったらすぐ破棄したい ❏ ⇒ クラウドの採用
❏ カンバンツールとして Azure DevOps を採用していた ❏ Azure Pipelines, Azure Repos などのツールチェーンは使 いこなせていなかった コンテナ化の背景 ~ クラウドの採用 ~ クラウドは Azure に決定!
❏ システム特性的に、Kubernetes との相性が良かった ❏ 「Kubernetes の導入時に考えるべきこと」(寺田佳央さんのブ ログ) ❏ 変更が頻繁に行われることが予想される ❏
大量の CPU, メモリのリソースを消費しない ❏ Kubernetes の熱狂性、将来性 ❏ エンジニアのモチベーション UP ❏ MS 社とのハックフェストの開催 ❏ Azure, AKS の十分なサポートが得られる環境 コンテナ化の背景 ~ AKS の採用~ ⇒ コンテナ化の必要性
❏ Spring や従来の JVM フレームワークはリフレクションや実行時 のアノテーション解析などを中心として構築されているため、高速 起動と低メモリ消費の両立は難しい ❏ 例えば Micronaut
はフレームワークレベルでリフレクションの利 用を制限し、アノテーションなどをコンパイル時に解決することで、 高速起動と低メモリ消費を実現 ❏ ⇒ コンテナ化を前提としたフレームワークが必要 ❏ 参考資料: Micronaut 1.0への道 - JVMベースのフルスタックフレームワーク 従来の JVM フレームワーク の課題
❏ Micronaut ❏ クラウドネイティブなサーバレスアプリケーションをJava や Groovy、Kotlin で記述可能な、JVM ベースのフルスタックフ レームワーク ❏
Grails の作者である Graeme Rocher 氏がプロダクトのリー ダー ❏ Helidon ❏ Netty を搭載した、マイクロサービスを作成するための Java ライブラリコレクション ❏ Project Helidon という名前で Oracle が公開しているOSS コンテナ化を前提としたフレームワーク
❏ JavaEE との親和性 ❏ JavaEE でのシステム開発経験があった ❏ 学習コスト、心理的障壁の少なさ ❏ native-image
を前提としたフレームワークである ❏ Micronaut は Spring のような使い勝手の良さが特徴で、ドキュ メントも豊富 ❏ しかし今回は上記理由を優先して見送り ❏ Helidon は Microprofile の仕様をサポートする Helidon SE で は GraalVM の native-image の利用をサポートしていないため 見送り Quarkus 採用の理由
目次 ❏ Quarkus とは? ❏ Quarkus 採用の背景 ❏ Quarkus と
Thorntail (Wildfly Swarm) ❏ Quarkus のサンプル ❏ 実開発ではまったポイント
Thorntail (Wildfly Swarm) で開発されたことあ りますか? ご質問
❏ Wildfly を取り込んで実行可能 jar (Uber-Jar) を生成 できる Java EE 対応のフレームワーク
❏ Red Hat 社が提供し、現在 2.x 系 と 4.x 系のバー ジョンが存在 Thorntail (Wildfly Swarm)
❏ Quarkus の登場に伴い、次期メジャーバージョンの開発 は終了 ❏ 2019/03/11 に発表された Thorntail のブログにて 「Quarkus
の登場にとても興奮している」「Quarkus は Thorntail 4.x 以上のものだ」との記載 Thorntail (Wildfly Swarm) の今後 ⇒ Red Hat 系で Java EE や Microprofile を利用 する場合は Quarkus を使いましょう!
目次 ❏ Quarkus とは? ❏ Quarkus 採用の背景 ❏ Quarkus と
Thorntail (Wildfly Swarm) ❏ Quarkus のサンプル ❏ 実開発ではまったポイント
実際に開発しているコードをもとにしたサンプルを公開予定 (絶賛作成中!) ❏ クリーンアーキテクチャを意識した実装 ❏ @QuarkusTest を使って DI を モックした
Controller のテスト (Spring の mockMvc を意識) ❏ H2 Database を使ったデータアクセスの単体テスト など... https://github.com/Takaichi00/quarkus-sample Quarkus サンプルコード QUARKUS - CREATING YOUR FIRST APPLICATION
Spring との起動時間の比較 ❏ 現在開発している システムの概略図 ❏ 画面は Spring Boot によるサーバーサイドレンダリ
ング、Backend API として Quarkus を採用 外部 API
Spring との起動時間の比較 ❏ 現在開発している Spring のプロジェクトと Quarkus のプロ ジェクトの比較 (ローカル
PC で検証 ) ❏ Spring では画面の実装があるため単純比較は難しいが、 java -jar の起動は 5s ほど Quarkus が早い Quarkus Spring コード行数 5,989 3,692 コンテナサイズ 157 MB 174 MB java -jar の起動時間 1.3 s - 1.5 s 6.0 s - 6.5 s
目次 ❏ Quarkus とは? ❏ Quarkus 採用の背景 ❏ Quarkus と
Thorntail (Wildfly Swarm) ❏ Quarkus のサンプル ❏ 実開発ではまったポイント
Native Image 化の断念 ❏ 導入検証時、GraalVM のネイティブコンパイルのタイミングで SSL 関連のエラーが発生 ❏ SunEC
ライブラリという暗号化を行うライブラリが extention を 追加しないと有効にならない (参考サイト) ❏ その他にも、ネイティブコンパイルにはビルド時に存在しないクラス をリフレクションできないなどの制約がある ❏ これらの制約から jar として起動することに決定 ❏ それでも JavaEE ランタイムのビルド時最適化を実装している ため起動は速い!
Uber-Jar 作成時の注意 ❏ Qurakus では pom.xml に設定を加えることで Uber-Jar の作 成も可能
❏ しかし、jar の中には署名 jar が含まれており、それを除外し ないと起動時にエラーが発生することがある (参考サイト)
❏ システム連携のため、 Apache CXF で SOAP クライアントを実装。 しかし Uber-Jar で起動すると、Web
サービス呼び出し時に NullPointerException が発生してしまう (参考サイト) ❏ Qurakus は独自プラグインで Uber-Jar を生成しているため、 Uber-Jar に設定ファイルが入らないことが原因 ❏ よって Apache CXF が正式対応されるまで Uber-Jar の生成は断 念 Uber-Jar の断念
SQL Database との相性 ❏ Azure を利用するため、DB は SQL Database を採用
❏ しかし Native Query を利用すると Dialect Error が発生し、 JPQL を利用すると問題は解決する ❏ しかし JPQL を利用すると JPA 特有の実装 (主キー前提、 @OneToMany など ) が生じてしまい、DB のスキーマも JPA に依 存した設計となってしまうという課題 ❏ MyBatis などの O/R Mapper などがサポートされると嬉しい
Quarkus での画面サポート ❏ Quarkus では JSP のサポートがされておらず、今 後もサポートされる予定は無いとのこと ❏ Unable
to forward from a JAX-RS service to JSP #1911 ❏ 一方で Micronaut は Thymeleaf に対応している
Quarkus のバージョンアップ対応 ❏ マイナーバージョンアップが約9日に1回行われるため、定期的な バージョンアップを行っている ❏ 現在の最新バージョンは 0.28.1 で、プロジェクトでも同じバー ジョンを使用
❏ xml を処理したいので JAXB を使いたい... バージョンアップしたら JAXB がサポートされた! ということも ❏ 公式アナウンスで 1.0 のリリースが発表された ❏ 現在 1.0.0.CR2 が公開中 ❏ 1.0.0.Final が 2019/11/25(月) にリリース予定!
❏ native-image でなくても java -jar の起動も高速 ❏ JavaEE 経験がある開発者との親和性が高い ❏
Spring API も一部サポートされている ❏ Spring Web, Spring DI, Spring Data がサポート ❏ 既存アプリケーションでも徐々に Quarkus に移行すると いった方法が選択できるのでは まとめ
❏ native-image での商用稼働はこれからのチャレンジ ❏ 開発チームに、頻繁な更新への対応や未知な問題に遭遇 しても対応できる余裕とスキルセットが必要 ❏ 使いこなすには MicroProfile の仕様理解も必要
❏ Spring の MockMvc のような柔軟なテストはできない ❏ 文献が少ない (日本語は特に...) まとめ
みなさんもぜひ Quarkus を使いましょう!! そして情報発信してくれると嬉しいです!! さいごに
ご清聴ありがとうございました