51
51

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Javaのフレームワーク「Quarkus」を試してみた

Last updated at Posted at 2019-03-12

はじめに

アプリケーションをDockerコンテナ上で運用する機会が多くなってきました。
コンテナで運用するにあたり、起動時間は重要になってきます。
Javaを実行する際、JVM上で動かすわけですが、このJVMの起動にはやや時間がかかります。

今回ご紹介するQuarkusは、GraalVMを使いネイティブ用のバイナリを作成することで、高速起動を実現するフレームワークになります。

実行環境

  • MacOS Mojave

前提条件

  • Java 8以上
  • Maven 3.5.3以上

GraalVMのセットアップ

ここからgraalvm-ce-1.0.0-rc13-macos-amd64.tar.gz
(2019/03/12時点)をダウンロードしてください。

解凍し、/Library/Java/JavaVirtualMachinesにフォルダごと置いてください。

GraalVMの環境変数(GRAALVM_HOME)を設定します。

.bash_profile
GRAALVM_HOME=/Library/Java/JavaVirtualMachines/graalvm-ce-1.0.0-rc13-macos-amd64/Contents/Home

プロジェクトを作成

$ mvn io.quarkus:quarkus-maven-plugin:0.11.0:create \
    -DprojectGroupId=jp.acme \
    -DprojectArtifactId=getting-started \
    -DclassName="org.acme.quickstart.GreetingResource" \
    -Dpath="/hello"

上記のコマンドを実行すると、下図のようなMavenプロジェクトが作成されます。

quarkus.png

アプリケーション起動

# 開発モードで起動
$ mvn compile quarkus:dev

開発モードで起動すると、ホットリロードが実現できます。
以下のコマンドで動作確認します。

$ curl http://localhost:8080/hello

ビルド(ネイティブのバイナリ生成)

$ mvn package -Pnative -Dnative-image.docker-build=true
オプション 内容
-Pnative ネイティブで実行可能なバイナリを生成する際に指定する
-Dnative-image.docker-build=true Docker上のOSに合わせたネイティブのバイナリを生成する場合に指定する
今回はDocker上で起動したいので、-Dnative-image.docker-build=trueも指定します。

ビルドにはネイティブバイナリの生成を行うためか、多少時間がかかります。

Dockerビルド

$ docker build -f src/main/docker/Dockerfile -t <イメージ名> .

Dockerコンテナ起動

$ docker run -i --rm -p 8080:8080 <イメージ名>
2019-03-12 01:29:01,328 INFO  [io.quarkus] (main) Quarkus 0.11.0 started in 0.004s. Listening on: http://0.0.0.0:8080
2019-03-12 01:29:01,328 INFO  [io.quarkus] (main) Installed features: [cdi, resteasy]

ここで注目して欲しいのは、起動時間です。
起動後のログを確認すると、Quarkus 0.11.0 started in 0.004sとあります。
つまり、0.004秒で起動されたことがわかります。早いですね。

おわりに

Quarkusを利用することで、コンテナ上のアプリケーションの起動が圧倒的に早くなりました。
Quarkus自体、出たばかりなので、本番での実用は難しいとは思いますが、開発が進み情報が増えてくれば、実用可能になる機会は増えてくると思います。今後に期待しています。

あと、Quarkusには拡張機能も追加できます。
例えば、デフォルトだとJavaEE標準のCDIですが、これをSpringベースのCDIが利用できたりします。
ここら辺も調査していきつつ情報を共有していきます。

参考

51
51
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
51
51

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?