見出し画像

SDKMANを使ってQuarkusを学習するための環境を整備する


はじめに

Quarkusは、クラウドネイティブなマイクロサービスを開発するための、オープンソースで開発されたJavaフレームワークです。この記事では、SDKMANを使ってQuarkusを学習するための環境を手間をかけずに準備する方法について書きます。

最後に、Quarkus in Actionという本に登場するサンプルプログラムを実行し、Quarkus CLIを使ったアプリケーションの雛形の生成やライブコーディングを紹介します。

インストール環境の前提

この記事では、SDKMANを使ってQuarkus CLIをインストールします。Fedora 41とUbuntu 24.10で動作することを確認済みです。おそらくMacOSでもほぼ同様な手順で実施可能でしょう。

Windows上でQuarkus CLIをインストールする場合は、SDKMANは使えないので以下のドキュメントを参考にしてください。

注意
Quarkus in Actionでは、MavenやGradleなどの方法でアプリケーションの雛形を生成する方法も紹介していますが、この記事ではQuarkus CLIを使った方法を紹介します。

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を使ったネイティブコード生成やコンテナーイメージの生成について書きたいと思います。


いいなと思ったら応援しよう!