ミリしらQuarkus

この記事はラクスパートナーズ Advent Calendar 2024の1日目の記事です。

---

久しくJavaを書いていないのですが、Java21で仮想スレッドやパターンマッチが入ったしそろそろキャッチアップしたいな。という事もありせっかくなのでQuarkus触りながらJavaのリハビリ始めました。

https://ja.quarkus.io/

なぜQuarkusかというと、ずっと前に買った↓の本に「開発体験がとてもイケてる」と書いてあったから。

https://www.manning.com/books/quarkus-in-action

具体的にはJavascriptなどインタプリタ言語のように変更を自動的にビルドし、デプロイまでを自動化する。エンジニアが一番多く行う動作確認のステップを減らし、試行を素早くできるということのようです。

ここではサンプルコードを動かして、変更やアップデートを見ていきたいと思います。

Quarkusがどういうものかは[QiitaのQuarkusタグを検索](https://qiita.com/tags/quarkus)してください。ここにはKubernetesもGraalVMもリアクティブアーキテクチャも出てきません。

## 最初のプロジェクト

Quarkusを始めるにはmavenやgradleの設定を自分で書いてビルドする。それ以外にも[CLI](https://quarkus.io/guides/cli-tooling)や、Spring InitializrのようにGUIで必要な依存を選んで初期プロジェクトを作ってくれる[code.quarkus.io](https://code.quarkus.io/)も用意されています。
開発体験的にもちろん[各種IDE用のプラグイン](https://quarkus.io/guides/ide-tooling)が用意されています！

ここで利用するのはIntelliJ IDEA Ultimate。

https://www.jetbrains.com/help/idea/quarkus.html

ということで、ポチ(New Project)

![スクリーンショット 2024-11-28 9.34.58.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15786/f4ab97ea-fe85-f71e-6c21-fbdfee06814f.jpeg)

ポチ(左のQuarkus選んでNext)

![スクリーンショット 2024-11-28 9.35.22.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15786/caa2719c-bc2d-0e7d-ff57-919acfa2eac2.jpeg)

ポチ（RESTにチェック入れてCreate。バージョンはわざと古いので）

![スクリーンショット 2024-11-28 9.35.41.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15786/c5b0a915-60a7-fb65-4d63-598d6e04c8b0.jpeg)

ポチ「Ctrl + R」(Mac)

![スクリーンショット 2024-11-28 9.40.37.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15786/bbbf606f-e272-6818-5aac-ceeeee528729.jpeg)

サンプルコードのビルドが行われ、開発用のサーバが立ち上がります。最後まで処理完了したら、開発サーバへのURLが記載されているのでアクセス。サンプルコードの動作が確認できました！

![スクリーンショット 2024-11-28 9.41.21.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15786/ad70a4f9-a295-90c8-0ce8-9202324085c7.jpeg)

開いたページの`Resource Endpoints`を見ると、サンプルコードに用意されたエンドポイント`/hello`があります。クリックすればエンドポイントを確認できます。

![スクリーンショット 2024-11-28 9.41.38.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15786/2a93bc59-c97d-41bf-bd34-6ac7930cc435.jpeg)

このリンククリックで確認できるのは、パラメータクエリなしのGETだけなのかな？そこまで機能はなさそうですね。

## サンプルコードを変更する

用意されたエンドポイントの返りを変更します。

![スクリーンショット 2024-11-28 9.46.38.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15786/58fcc031-d64b-1dad-f0c2-b5ee4272c81a.jpeg)

サーバのビルドやデプロイなどせず、もう一度エンドポイントを開きます。変更が確認できました！

![スクリーンショット 2024-11-28 9.46.55.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15786/5c44879a-0513-a608-9692-41aa3e52e475.jpeg)

プロジェクトが大きくなればビルドも時間かかるようになりそうですが、いちいちビルドして開発サーバ立ち上げてなど必要ないのは良さそうです。

## Dev UI

QuarkusにはDev UIなるものが用意されています。↓の画像でRunのツールウィンドウの四角で囲ったボタンをクリックすれば開きます。

![スクリーンショット 2024-11-28 10.05.18.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15786/d6629094-8278-f9e6-076c-b8368e7425a1.jpeg)

依存関係を図で表示してくれたり、設定の確認、変更ができたりといろいろ便利そうです。
ここでは試しに設定を変更してみます。`quarkus.analytics.timeout`を3000 -> 1000に変更します。

![スクリーンショット 2024-11-28 10.07.30.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15786/8feb97a6-d68b-512e-982a-91898d3774e9.jpeg)

`src/main/resources/application.properties`を確認すると設定が追加されています。

![スクリーンショット 2024-11-28 10.08.29.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15786/9447d7f3-a79a-6500-4c47-bfd7cd567b66.jpeg)

正直この画面から設定を変えられる必要は感じないのですが、どんな設定があってデフォルト値はなんだとドキュメント漁る必要ないのはいいですね。

## 依存ライブラリの追加

続いて、依存関係を追加しましょう。`build.gradle`の`dependencies`のところに⚙️があるのでクリックします。

![スクリーンショット 2024-11-28 10.09.06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15786/dd1d7e71-02df-2aa8-9c01-3d1a3d63c527.jpeg)

プロジェクト作成時と同じように、一般的なライブラリの一覧が表示されポチポチ選ぶだけです。説明やサイトへのリンクもあります。

![スクリーンショット 2024-11-28 10.09.25.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15786/cc1903e3-f786-d66c-7ad9-12429d848441.jpeg)

## バージョンアップ

フレームワークのバージョンアップの仕組み（gradleの場合は`quarkusUpdate`）も用意されています。

![スクリーンショット 2024-11-28 10.12.10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15786/013e357e-5d64-959a-5266-0c549baf7fd4.jpeg)

ポチっとタスクを実行するだけで、バージョン上がりました！

![スクリーンショット 2024-11-28 10.16.09.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15786/a38e37d2-5ebb-4a5a-d27d-9307b63942fd.jpeg)

何が変更されたかわからないので確認していませんが、変更が必要なライブラリやコードも修正されるはず。

## 終わり

触りだけ見ました。ちゃんと動くものがポチポチで作れるのは楽です。GUIで依存関係とかオブジェクトの関係が見られるようなので、プロジェクト途中から合流した場合のキャッチアップにも役立ちそうです。
プラグインのドキュメントを読むとDBなどの設定もGUIでポチポチできるみたい。

動くベースは数分で動作確認までできたので、あとは仮装スレッドとリアクティブの組み合わせで遊んだり、ネイティブビルドとの違いを見たりしていきたいと思います！

---

IntelliJを含めJetBrainsの製品は来年1月に価格改定が行われるため、購入を考えている方は急いでください。

https://www.jetbrains.com/ja-jp/store/?section=commercial&billing=yearly

自分は[サムライズム](https://samuraism.com/)さんで購入しています。サムライズムさんの価格表と、新規購入者向けの割引リンクを置いておきます。

https://samuraism.com/2024/11/05/15550

https://secure.samuraism.com/referral/4ABDEF29885BC9BB539480FC45760CAB

記事中でも使用していたIntelliJ内でブラウザを開くプラグインTamaCatもこちらの製品です。普段使うことないけど、こういう時に便利。

https://samuraism.com/products/tamacat