Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
【JJUG CCC 2019 Fall】JavaオンプレシステムをAKS + Quarkusに...
Search
Takaichi00
November 23, 2019
Technology
1.4k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
【JJUG CCC 2019 Fall】JavaオンプレシステムをAKS + Quarkusに移行した話
Takaichi00
November 23, 2019
More Decks by Takaichi00
See All by Takaichi00
individual_or_organization
takaichi00
0
350
自分から始めるアジャイルの道 ~内発的動機をきっかけに変わった価値観~
takaichi00
0
500
Java developer introduced to Rust-ADC2022
takaichi00
0
310
野球人・落合博満さんから学ぶ、アジャイルなマインドセット・プラクティス
takaichi00
1
930
【CICD2021】デプロイメントパイプラインの原理原則を再確認する / Confirm Deployment Pipeline Principle
takaichi00
11
4.8k
【JTF2021】SonarQube をより有効活用する / Effective SonarQube
takaichi00
1
2.7k
JJUG CCC 2021 Spring-Resolving OOME with JFR
takaichi00
2
3.8k
【Yahoo! JAPAN Agile 2nd】野球人・落合博満さんから学ぶスクラムマスター / デベロッパー
takaichi00
0
2.8k
【Developers Boost 2020】凡人エンジニアの生存戦略
takaichi00
1
3.4k
Other Decks in Technology
See All in Technology
越境するなら専門用語を使うな高校校歌 / If you wanna cross border, you shouldn't use jargon
vtryo
0
140
Screen Lens - 今見てる画面を翻訳する
komagata
0
300
Amazon Quick on DesktopがIAM Identity Centerで動かない理由
yukiogawa
0
190
2026-09-11 【Snowflake World Tour Tokyo 2026】Snowflakeを起点に、AI Agentが自律稼働し続ける未来へ / Driving AI Agents with Snowflake
civitaspo
0
480
すぐできる衛星通信対応 あとは山奥に行くだけ
tatetate55
0
130
2026_devsumi_ozono.pdf
o3
3
510
バイブコーディング時代のWebアプリ開発入門~Cloud Runで学ぶセキュアなビルドとデプロイ
waiwai2111
1
130
アクセスキーこわい やめかたと漏らさない工夫
sassssan68
1
240
人間はどの意思決定を手放せるのか
kawasima
14
6.8k
Minecraft JavaのMODをSwiftで作る
1mash0
0
160
事業課題から技術的負債に向き合う
sansantech
PRO
2
1.8k
技術的負債から考える、AI時代のエンジニアリング投資 — ビズリーチの技術的負債と向き合った経験から、変更し続けられるソフトウェアを考える/ technical-debt-con2026
visional_engineering_and_design
3
2.9k
Featured
See All Featured
Chasing Engaging Ingredients in Design
codingconduct
0
310
The Pragmatic Product Professional
lauravandoore
37
7.4k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
520
The Cult of Friendly URLs
andyhume
79
7k
Crafting Experiences
bethany
1
340
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
From π to Pie charts
rasagy
1
370
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
280
Code Review Best Practice
trishagee
74
20k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
520
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
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 を使いましょう!! そして情報発信してくれると嬉しいです!! さいごに
ご清聴ありがとうございました