Quarkus でシステム開発してみた結果髙市 智章 (Tomoaki Takaichi)Sep, 06, 2019【東京】JJUG ナイトセミナー: ビール片手にLT大会
View Slide
自己紹介@Takaichi00tomoaki.takaichi.5・髙市 智章(タカイチ トモアキ)・Java でのシステム開発・アジャイル開発実践 / 社内布教・iTunes カード販売システム・ショップ向けシステム
Quarkus とはGraalVM 内のコンパイラを用いて実行可能なネイティブバイナリを生成し、コンテナ化できる webフレームワーク。Red HatがスポンサーのOSSプロジェクト。
Quarkus 採用の背景① 〜クラウド化〜仮設検証型のシステム開発にあたり、オンプレの開発から迅速に環境を構築でき拡張や破棄も容易なクラウド環境への移行が必要だった。当時カンバンツールとしてAzure DevOps を使用していたため、Azure とAzure DevOps のツールチェーン構築に踏み切った。参考: Microsoft ハックフェスト
Quarkus 採用の背景② 〜Spring Boot の限界〜開発システムの特性からAKS (Azure Kubernetes Service) を利用することに決定。しかし今まで、Spring Boot を主に利用していたが、起動時間の遅さ、コンテナサイズの肥大化が課題に。→ Quarkus の採用へ
Quarkus のいいところ❏ JavaEE のAPI を用いて簡単にNative Image 化でき、かつ高速起動と低容量が実現できる❏ Quarkus ではCDI 実装として、ビルド時にバイトコードを生成し、最適化する「arc」を使用している。よってjava -jarでの起動も高速。(しかしCDIのすべての機能を実装しているわけではない)
Quarkus ではまったところ❏ 導入検証時、GraalVMのネイティブコンパイルのタイミングでSSL関連のエラーが発生❏ その他にも、ネイティブコンパイルにはビルド時に存在しないクラスをリフレクションできないなどの制約があるため、jar として起動することに決定。(それでもJavaEE ランタイムのビルド時最適化を実装しているため起動は速い)❏ DB と連携した自動 IT テスト実装時、 EntityManager を利用するための設定に苦労
Quarkus ではまったところpom.xml に設定を加えることで Uber-Jars の作成も可能。しかし、jar の中には署名jar が含まれており、それを除外しないと起動時にエラーが発生した。
Quarkus コンテナ化の流れZulu が提供するAlpine Linuxと、jlink を使ってカスタムJREをマルチステージビルドしたコンテナイメージの上で、Qurakus が生成するUber-Jars を起動することでコンテナサイズの削減に成功zuluopenjdkalpinezulu alpineCustomJREjlinkUber-Jars
Quarkus サンプルコード実際に開発しているコードを公開したいが、そうはいかないのでサンプルを公開❏ クリーンアーキテクチャを意識した実装❏ @QuarkusTest によるテスト / Mock / flyway /Wiremock 等を用いたテスト (を目指して実装中)https://github.com/Takaichi00/quarkus-sample
Quarkus で開発してみた感想❏ 実行 / テスト 共にSpring Bootに比べて起動速度は速く、容量も小さい❏ JavaEE 経験がある開発者との親和性が高い❏ 既存アプリケーションでも徐々にQuarkus に移行するといった方法が選択できるのでは❏ 使いこなすにはMicroProfile の仕様理解も必要❏ SpringのMockMvc みたいな柔軟なテストはできない❏ 文献が少ない (日本語は特に...)
さいごにみなさんもぜひ Quarkus を使いましょう!!そして情報発信してくれると嬉しいです!!
ご清聴ありがとうございました