Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
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.2k
【JJUG CCC 2019 Fall】JavaオンプレシステムをAKS + Quarkusに移行した話
Takaichi00
November 23, 2019
Tweet
Share
More Decks by Takaichi00
See All by Takaichi00
自分から始めるアジャイルの道 ~内発的動機をきっかけに変わった価値観~
takaichi00
0
230
Java developer introduced to Rust-ADC2022
takaichi00
0
230
野球人・落合博満さんから学ぶ、アジャイルなマインドセット・プラクティス
takaichi00
1
790
【CICD2021】デプロイメントパイプラインの原理原則を再確認する / Confirm Deployment Pipeline Principle
takaichi00
11
4.4k
【JTF2021】SonarQube をより有効活用する / Effective SonarQube
takaichi00
0
2.4k
JJUG CCC 2021 Spring-Resolving OOME with JFR
takaichi00
2
3.2k
【Yahoo! JAPAN Agile 2nd】野球人・落合博満さんから学ぶスクラムマスター / デベロッパー
takaichi00
0
2.6k
【Developers Boost 2020】凡人エンジニアの生存戦略
takaichi00
1
2.7k
【ソフトウェアテスト自動化カンファレンス2020】CI パイプラインでのテスト戦略とその実現方法
takaichi00
3
5.3k
Other Decks in Technology
See All in Technology
ウォンテッドリーのデータパイプラインを支える ETL のための analytics, rds-exporter / analytics, rds-exporter for ETL to support Wantedly's data pipeline
unblee
0
140
急成長する企業で作った、エンジニアが輝ける制度/ 20250227 Rinto Ikenoue
shift_evolve
0
180
データエンジニアリング領域におけるDuckDBのユースケース
chanyou0311
9
2.5k
Cracking the Coding Interview 6th Edition
gdplabs
14
28k
【内製開発Summit 2025】イオンスマートテクノロジーの内製化組織の作り方/In-house-development-summit-AST
aeonpeople
2
1.1k
AIエージェント元年@日本生成AIユーザ会
shukob
1
240
20250304_赤煉瓦倉庫_DeepSeek_Deep_Dive
hiouchiy
2
110
あなたが人生で成功するための5つの普遍的法則 #jawsug #jawsdays2025 / 20250301 HEROZ
yoshidashingo
2
320
1行のコードから社会課題の解決へ: EMの探究、事業・技術・組織を紡ぐ実践知 / EM Conf 2025
9ma3r
12
4.4k
エンジニアリング価値を黒字化する バリューベース戦略を用いた 技術戦略策定の道のり
kzkmaeda
7
3.2k
Introduction to OpenSearch Project - Search Engineering Tech Talk 2025 Winter
tkykenmt
2
150
大規模アジャイルフレームワークから学ぶエンジニアマネジメントの本質
staka121
PRO
3
1.4k
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
328
24k
Being A Developer After 40
akosma
89
590k
Build The Right Thing And Hit Your Dates
maggiecrowley
34
2.5k
Building Applications with DynamoDB
mza
93
6.2k
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
A better future with KSS
kneath
238
17k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.7k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
21
2.5k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Bash Introduction
62gerente
611
210k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Mobile First: as difficult as doing things right
swwweet
223
9.5k
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 を使いましょう!! そして情報発信してくれると嬉しいです!! さいごに
ご清聴ありがとうございました