$30 off During Our Annual Pro Sale. View Details »

Quakrus でシステム開発してみた結果 / 【東京】JJUG ナイトセミナー: ビール片手にLT大会 9/6(金)開催

Takaichi00
September 06, 2019

Quakrus でシステム開発してみた結果 / 【東京】JJUG ナイトセミナー: ビール片手にLT大会 9/6(金)開催

Takaichi00

September 06, 2019
Tweet

More Decks by Takaichi00

Other Decks in Technology

Transcript

  1. Quarkus でシステム開発してみた結果
    髙市 智章 (Tomoaki Takaichi)
    Sep, 06, 2019【東京】JJUG ナイトセミナー: ビール片手にLT大会

    View Slide

  2. 自己紹介
    @Takaichi00
    tomoaki.takaichi.5
    ・髙市 智章(タカイチ トモアキ)
    ・Java でのシステム開発
    ・アジャイル開発実践 / 社内布教
    ・iTunes カード販売システム
    ・ショップ向けシステム

    View Slide

  3. Quarkus とは
    GraalVM 内のコンパイラを用いて実行可能なネイティブバイナ
    リを生成し、コンテナ化できる webフレームワーク。Red Hat
    がスポンサーのOSSプロジェクト。

    View Slide

  4. Quarkus 採用の背景① 〜クラウド化〜
    仮設検証型のシステム開発にあたり、オンプレの開発から迅速に
    環境を構築でき拡張や破棄も容易なクラウド環境への移行が必要
    だった。当時カンバンツールとしてAzure DevOps を使用して
    いたため、Azure とAzure DevOps のツールチェーン構築に踏
    み切った。
    参考: Microsoft ハックフェスト

    View Slide

  5. Quarkus 採用の背景② 〜Spring Boot の限界〜
    開発システムの特性からAKS (Azure Kubernetes Service) を
    利用することに決定。しかし今まで、Spring Boot を主に利用
    していたが、起動時間の遅さ、コンテナサイズの肥大化が課題
    に。
    → Quarkus の採用へ

    View Slide

  6. Quarkus のいいところ
    ❏ JavaEE のAPI を用いて簡単にNative Image 化でき、かつ
    高速起動と低容量が実現できる
    ❏ Quarkus ではCDI 実装として、ビルド時にバイトコードを生
    成し、最適化する「arc」を使用している。よってjava -jar
    での起動も高速。(しかしCDIのすべての機能を実装している
    わけではない)

    View Slide

  7. Quarkus ではまったところ
    ❏ 導入検証時、GraalVMのネイティブコンパイルのタイミング
    でSSL関連のエラーが発生
    ❏ その他にも、ネイティブコンパイルにはビルド時に存在しな
    いクラスをリフレクションできないなどの制約があるため、
    jar として起動することに決定。(それでもJavaEE ランタイ
    ムのビルド時最適化を実装しているため起動は速い)
    ❏ DB と連携した自動 IT テスト実装時、 EntityManager を利
    用するための設定に苦労

    View Slide

  8. Quarkus ではまったところ
    pom.xml に設定を加えることで Uber-Jars の作成も可能。しか
    し、jar の中には署名jar が含まれており、それを除外しないと
    起動時にエラーが発生した。

    View Slide

  9. Quarkus コンテナ化の流れ
    Zulu が提供するAlpine Linuxと、jlink を使ってカスタムJRE
    をマルチステージビルドしたコンテナイメージの上で、
    Qurakus が生成するUber-Jars を起動することでコンテナサイ
    ズの削減に成功
    zulu
    openjdk
    alpine
    zulu alpine
    Custom
    JRE
    jlink
    Uber-Jars

    View Slide

  10. Quarkus サンプルコード
    実際に開発しているコードを公開したいが、そうはいかないので
    サンプルを公開
    ❏ クリーンアーキテクチャを意識した実装
    ❏ @QuarkusTest によるテスト / Mock / flyway /
    Wiremock 等を用いたテスト (を目指して実装中)
    https://github.com/Takaichi00/quarkus-sample

    View Slide

  11. Quarkus で開発してみた感想
    ❏ 実行 / テスト 共にSpring Bootに比べて起動速度は速く、容
    量も小さい
    ❏ JavaEE 経験がある開発者との親和性が高い
    ❏ 既存アプリケーションでも徐々にQuarkus に移行するといっ
    た方法が選択できるのでは
    ❏ 使いこなすにはMicroProfile の仕様理解も必要
    ❏ SpringのMockMvc みたいな柔軟なテストはできない
    ❏ 文献が少ない (日本語は特に...)

    View Slide

  12. さいごに
    みなさんもぜひ Quarkus を使いましょう!!
    そして情報発信してくれると嬉しいです!!

    View Slide

  13. ご清聴ありがとうございました

    View Slide