SDKMANを使ってQuarkusを学習するための環境を整備する
はじめに
Quarkusは、クラウドネイティブなマイクロサービスを開発するための、オープンソースで開発されたJavaフレームワークです。この記事では、SDKMANを使ってQuarkusを学習するための環境を手間をかけずに準備する方法について書きます。
最後に、Quarkus in Actionという本に登場するサンプルプログラムを実行し、Quarkus CLIを使ったアプリケーションの雛形の生成やライブコーディングを紹介します。
インストール環境の前提
この記事では、SDKMANを使ってQuarkus CLIをインストールします。Fedora 41とUbuntu 24.10で動作することを確認済みです。おそらくMacOSでもほぼ同様な手順で実施可能でしょう。
Windows上でQuarkus CLIをインストールする場合は、SDKMANは使えないので以下のドキュメントを参考にしてください。
SDKMANのインストール
SDKMANというJavaツールを管理してくれるコマンドをインストールします。SDKMANを使うと、 Java、Maven、Quarkus CLIを簡単にインストールできますし、異なるバージョンのツールを切り替えて使うこともできます。Java以外の言語で例えて言うと、Pythonのpipのような感じです。
SDKMANのインストール方法は以下のサイトを見てください。
Linuxでは以下のコマンドでインストールできます。
$ curl -s "https://get.sdkman.io" | bash
$ source "/home/minamoto/.sdkman/bin/sdkman-init.sh"
$ sdk version
SDKMAN!
script: 5.19.0
native: 0.5.0
インストールができたら、sdk helpコマンドで使い方を確認してください。
$ sdk help
NAME
sdk - The command line interface (CLI) for SDKMAN!
SYNOPSIS
sdk <subcommand> [candidate] [version]
<略>
SUBCOMMANDS & QUALIFIERS
help [subcommand]
install <candidate> [version] [path]
uninstall <candidate> <version>
list [candidate]
use <candidate> <version>
config no qualifier
default <candidate> [version]
home <candidate> <version>
env [init|install|clear]
current [candidate]
upgrade [candidate]
version no qualifier
offline [enable|disable]
selfupdate [force]
update no qualifier
flush [tmp|metadata|version]
EXAMPLES
sdk install java 17.0.0-tem
sdk help install
sdk listコマンドでどのようなJavaツールがインストール可能か調べてみてましょう。Ant、Gradle、Groovy、Maven、Kotlinを含むたくさんのツールをインストールできることがわかります。
$ sdk list
================================================================================
Available Candidates
================================================================================
q-quit /-search down
j-down ?-search up
k-up h-help
--------------------------------------------------------------------------------
Apache ActiveMQ (Classic) (5.17.1) https://activemq.apache.org/
Apache ActiveMQ® is a popular open source, multi-protocol, Java-based message
broker. It supports industry standard protocols so users get the benefits of
client choices across a broad range of languages and platforms. Connect from
clients written in JavaScript, C, C++, Python, .Net, and more. Integrate your
multi-platform applications using the ubiquitous AMQP protocol. Exchange
messages between your web applications using STOMP over websockets. Manage your
IoT devices using MQTT. Support your existing JMS infrastructure and beyond.
ActiveMQ offers the power and flexibility to support any messaging use-case.
$ sdk install activemq
--------------------------------------------------------------------------------
Ant (1.10.14) https://ant.apache.org/
JavaとMavenのインストール
sdk list <名前> コマンドでインストール可能なJavaツールを調べられます。JDKはsdk list javaで調べられます。
$ sdk list java
================================================================================
Available Java Versions for Linux 64bit
================================================================================
Vendor | Use | Version | Dist | Status | Identifier
--------------------------------------------------------------------------------
Corretto | | 23.0.1 | amzn | | 23.0.1-amzn
| | 21.0.5 | amzn | | 21.0.5-amzn
| | 17.0.13 | amzn | | 17.0.13-amzn
| | 11.0.25 | amzn | | 11.0.25-amzn
| | 8.0.432 | amzn | | 8.0.432-amzn
Dragonwell | | 17.0.13 | albba | | 17.0.13-albba
| | 11.0.25 | albba | | 11.0.25-albba
| | 8.0.432 | albba | | 8.0.432-albba
Gluon | | 22.1.0.1.r17 | gln | | 22.1.0.1.r17-gln
| | 22.1.0.1.r11 | gln | | 22.1.0.1.r11-gln
GraalVM CE | | 23.0.1 | graalce | | 23.0.1-graalce
| | 21.0.2 | graalce | | 21.0.2-graalce
| | 17.0.9 | graalce | | 17.0.9-graalce
GraalVM Oracle| | 25.ea.4 | graal | | 25.ea.4-graal
| | 25.ea.3 | graal | | 25.ea.3-graal
sdk install <名前> <バージョン> コマンドでJavaツールをインストールします(バージョンを省略可能です)。ここでは、JDKとMavenをインストールしてみます。
$ sdk install java
<略>
Installing: java 21.0.5-tem
Done installing!
Setting java 21.0.5-tem as default.
$ sdk install maven
<略>
Installing: maven 3.9.9
Done installing!
Setting maven 3.9.9 as default.
Quarkus CLIのインストール
同様に、Quarkus CLIもインストールします。以下のコマンドでは、バージョンを指定せずにQuarkus CLIをインストールしたので、この時点で最新の3.17.7がインストールされました。
$ sdk install quarkus
<略>
Installing: quarkus 3.17.7
Done installing!
Setting quarkus 3.17.7 as default.
これまでSDKMANでインストールしたJavaツールはsdk currentコマンドで確認できます。
$ sdk current
Using:
java: 21.0.5-tem
maven: 3.9.9
quarkus: 3.17.7
ここまでバージョンを指定せずにQuarkus CLIをインストールしましたが、sdk list quarkusをすると、さまざまなバージョンを指定可能なことがわかります。
================================================================================
Available Quarkus Versions
================================================================================
> * 3.17.7 3.8.6 3.2.4.Final 2.13.5.Final
3.17.6 3.8.5 3.2.3.Final 2.13.4.Final
3.17.5 3.8.4 3.2.2.Final 2.13.3.Final
3.17.4 3.8.3 3.2.1.Final 2.13.2.Final
3.17.3 3.8.2 3.2.0.Final 2.13.1.Final
3.17.2 3.8.1 3.1.3.Final 2.13.0.Final
3.17.0 3.7.4 3.1.2.Final 2.12.3.Final
3.16.4 3.7.3 3.1.1.Final 2.12.2.Final
<略>
================================================================================
+ - local version
* - installed
> - currently in use
===============================================================================
たとえば、Quakus 2.16.12.Finalをインストールした後に、sdk useコマンドによってQuarkusのバージョンを3.17.7から2.16.12に切り替えることもできます。同様に、今後Quarkusの新バージョンが登場した場合は同じ方法で環境を切り替えることができます。
$ sdk install quarkus 2.16.12.Final
<略>
$ sdk use quarkus 2.16.12.Final
Using quarkus version 2.16.12.Final in this shell.
$ quarkus version
2.16.12.Final
以下、Quarkus 3.17.7を使ってサンプルプログラムを実行していきます。
Quarkusサンプルプログラムの実行
Quarkus in ActionのChapter 2 Your first Quarkus applicationで紹介されているREST APIのサンプルプログラムを動かしてみましょう。
(1) アプリケーションプロジェクトの生成
quarkus create appコマンドでアプリケーションの雛形を生成します。エクステンションとしてquarkus-restを指定しているので、REST APIの実装をするための依存関係が自動的にpom.xmlに追加されます。
$ quarkus create app org.acme:quarkus-in-action --extension quarkus-rest
Looking for the newly published extensions in registry.quarkus.io
-----------
selected extensions:
- io.quarkus:quarkus-rest
applying codestarts...
📚 java
🔨 maven
📦 quarkus
📝 config-properties
🔧 dockerfiles
🔧 maven-wrapper
🚀 rest-codestart
-----------
[SUCCESS] ✅ quarkus project has been successfully generated in:
--> /home/minamoto/quarkus-in-action
-----------
Navigate into this directory and get started: quarkus dev
(2) 開発モードでの実行
作成したアプリケーションのディレクトリに移動して、quarkus devコマンドを実行するとアプリケーションが開発モードで起動します。
$ cd quarkus-in-action/
$ quarkus dev
<略>
Listening for transport dt_socket at address: 5005
__ ____ __ _____ ___ __ ____ ______
--/ __ \/ / / / _ | / _ \/ //_/ / / / __/
-/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
2025-01-16 10:39:01,461 INFO [io.quarkus] (Quarkus Main Thread) quarkus-in-action 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.17.7) started in 1.337s. Listening on: http://localhost:8080
2025-01-16 10:39:01,463 INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated.
2025-01-16 10:39:01,463 INFO [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, rest, smallrye-context-propagation, vertx]
--
Tests paused
Press [e] to edit command line args (currently ''), [r] to resume testing, [o] Toggle test output, [:] for the terminal, [h] for more options>
ブラウザーでhttp://localhost:8080/helloを開くと次のようにREST APIを実行した結果が表示されます。
(3) ライブコーディングの確認
Quarkusアプリケーションを開発モードで実行しているときに、そのソースコードを変更すると(手動で再ビルドすることなく)即座に反映されます。これをライブコーディングと言います。
ここで、エディターで src/main/java/org/acme/GreetingResource.javaを変更して、それがブラウザーに実際に反映されることを確かめてみましょう。
returnの文字列を以下のように日本語に置き換えます。
ブラウザーをリロードすると文字列の変更が反映されていることを確認できます。
まとめ
Quarkusを学習するためにSDKMANを使ってQuarkus CLIをインストールしました。SDKMANを使うと、以下のたった3行のコマンドでOpenJDK、Maven、Quarkus CLIがインストールできました。
$ sdk install java
$ sdk install maven
$ sdk install quarkus
Quarkus CLIを使うと、pom.xmlを編集せずに、REST APIのアプリケーションの雛形を簡単に生成できました。
$ quarkus create app org.acme:quarkus-in-action --extension quarkus-rest
アプリケーションを開発モードで実行することで、すぐに動作を試すことができ、ソースコードの変更結果が即座に反映されることを確認できました。
$ quarkus dev
次回以降の記事では引き続きQuarkus CLIを使ったネイティブコード生成やコンテナーイメージの生成について書きたいと思います。