JavaアプリをNativeコンパイルして爆速で起動するQuarkusを試してたら利用例にプルリクエストがマージされた

Javaの起動が速くなる素敵な話。

 

こちらのブログで知って色々試してみた。

yoshio3.com

 

 

[Quarkusフレームワークとは]

公式サイトはこちら。音速の粒子的Java。名前からも速そうなのは伝わってくる。

quarkus.io

 

Javaを利用する上で問題だと感じていることの1つに、アプリの起動速度がある。

JVMの起動、JVM上で動作するようにコンパイルされたjarファイルの読み込み、その後の初期設定など諸々に時間がかかる。Spring Bootをベースにしたあるアプリでは10秒程度の起動時間がかかるし、先日のDeveloppers Summitでは起動とキャッシュ生成を含めて、アプリが利用可能になるまで30分かかっていた事例が紹介されていた。

 

そこまで遅いのは極端だとしても、こうしたJavaアプリをネイティブコンパイルすることで、起動速度が速くなるのは素晴らしい。

加えてQuarkusの魅力的なポイントとして、既存のJavaで書かれたソースコードを資産として再利用できる可能性がある点も非常に良いと思う。

 

NativeコンパイルにはGraalVMを利用しているらしい。

去年どこかでちらっと目にしてなんとなく記憶にはあったが、こんな形で再会するとは思っていなかった。

 

[やりたいこと=Quakus+AWS Lambda]

Quarkusの概要をみた瞬間に、次の記事を思い出した。

2018年のAWS re:Inventで発表されたAWS Lambdaのカスタムランタイムである。

aws.amazon.com


カスタムランタイムを試したことはないが、Quarkusと組み合わせればNativeコンパイルしたJavaをLambda上で動作させ、Lambdaのコールドスタート時に起動が遅い問題を解決できる……予感がする。

これは是非やりたい。

 

実際、Quarkusの拡張機能には「AWS Lambda (io.quarkus:quarkus-amazon-lambda)」の名前が上がっている。

f:id:kidani_a:20190315074624p:plain


ところが、公式ガイドを見ても、Quarkus Quickstartプロジェクトを見ても、どこにもQuarkusをAWS Lambdaにデプロイするためのチュートリアルがない。他の拡張機能の説明はあるのに……。

quarkus.io

github.com

 

[プルリクエスト2件が爆速でマージされた]

AWS Lambdaに乗せる方法分からない……と思ってドキュメントを読み漁っていたところ、Quickstartプロジェクトのドキュメントでリンク切れになっている部分を見つけた。

さっくりと修正してPRを出して満足していたら、10分ちょっとでマージしてもらえた。マージも速い!

github.com

 

で、さらに読み進めていくと、リンクのURLが間違っている箇所を発見。

こちらもPR出したら即マージ。速い!!

github.com

 

このリポジトリの記念すべき(?)100番目のプルリクエストだったようだ。 

 

[まとめ]

  • QuarkusのAWS LambdaプラグインのQuickstartとかチュートリアル誰か早く!!
  • 仕方ないからカスタムランタイム自作してやってみようかな……
  • 次はQuickstartじゃなくてQuarkus本体にもPR出したい。