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.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
150
自分から始めるアジャイルの道 ~内発的動機をきっかけに変わった価値観~
takaichi00
0
360
Java developer introduced to Rust-ADC2022
takaichi00
0
270
野球人・落合博満さんから学ぶ、アジャイルなマインドセット・プラクティス
takaichi00
1
860
【CICD2021】デプロイメントパイプラインの原理原則を再確認する / Confirm Deployment Pipeline Principle
takaichi00
11
4.5k
【JTF2021】SonarQube をより有効活用する / Effective SonarQube
takaichi00
1
2.6k
JJUG CCC 2021 Spring-Resolving OOME with JFR
takaichi00
2
3.5k
【Yahoo! JAPAN Agile 2nd】野球人・落合博満さんから学ぶスクラムマスター / デベロッパー
takaichi00
0
2.7k
【Developers Boost 2020】凡人エンジニアの生存戦略
takaichi00
1
2.9k
Other Decks in Technology
See All in Technology
だいたい分かった気になる 『SREの知識地図』 / introduction-to-sre-knowledge-map-book
katsuhisa91
PRO
3
1.4k
ハノーファーメッセ2025で見た生成AI活用ユースケース.pdf
hamadakoji
1
460
難しいセキュリティ用語をわかりやすくしてみた
yuta3110
0
390
AI時代におけるデータの重要性 ~データマネジメントの第一歩~
ryoichi_ota
0
710
ソースを読む時の思考プロセスの例-MkDocs
sat
PRO
1
170
ソフトウェアエンジニアの生成AI活用と、これから
lycorptech_jp
PRO
0
900
初めてのDatabricks Apps開発
taka_aki
1
370
頭部ふわふわ浄酔器
uyupun
0
110
From Natural Language to K8s Operations: The MCP Architecture and Practice of kubectl-ai
appleboy
0
200
デザインとエンジニアリングの架け橋を目指す OPTiMのデザインシステム「nucleus」の軌跡と広げ方
optim
0
110
Wasmの気になる最新情報
askua
0
190
マルチエージェントのチームビルディング_2025-10-25
shinoyamada
0
150
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
185
22k
Building a Scalable Design System with Sketch
lauravandoore
463
33k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Designing for Performance
lara
610
69k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
658
61k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Navigating Team Friction
lara
190
15k
The Straight Up "How To Draw Better" Workshop
denniskardys
238
140k
Context Engineering - Making Every Token Count
addyosmani
8
300
Producing Creativity
orderedlist
PRO
347
40k
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 を使いましょう!! そして情報発信してくれると嬉しいです!! さいごに
ご清聴ありがとうございました