この記事はラクスパートナーズ Advent Calendar 2024の1日目の記事です。
久しくJavaを書いていないのですが、Java21で仮想スレッドやパターンマッチが入ったしそろそろキャッチアップしたいな。という事もありせっかくなのでQuarkus触りながらJavaのリハビリ始めました。
なぜQuarkusかというと、ずっと前に買った↓の本に「開発体験がとてもイケてる」と書いてあったから。
具体的にはJavascriptなどインタプリタ言語のように変更を自動的にビルドし、デプロイまでを自動化する。エンジニアが一番多く行う動作確認のステップを減らし、試行を素早くできるということのようです。
ここではサンプルコードを動かして、変更やアップデートを見ていきたいと思います。
QuarkusがどういうものかはQiitaのQuarkusタグを検索してください。ここにはKubernetesもGraalVMもリアクティブアーキテクチャも出てきません。
最初のプロジェクト
Quarkusを始めるにはmavenやgradleの設定を自分で書いてビルドする。それ以外にもCLIや、Spring InitializrのようにGUIで必要な依存を選んで初期プロジェクトを作ってくれるcode.quarkus.ioも用意されています。
開発体験的にもちろん各種IDE用のプラグインが用意されています!
ここで利用するのはIntelliJ IDEA Ultimate。
ということで、ポチ(New Project)
ポチ(左のQuarkus選んでNext)
ポチ(RESTにチェック入れてCreate。バージョンはわざと古いので)
ポチ「Ctrl + R」(Mac)
サンプルコードのビルドが行われ、開発用のサーバが立ち上がります。最後まで処理完了したら、開発サーバへのURLが記載されているのでアクセス。サンプルコードの動作が確認できました!
開いたページのResource Endpoints
を見ると、サンプルコードに用意されたエンドポイント/hello
があります。クリックすればエンドポイントを確認できます。
このリンククリックで確認できるのは、パラメータクエリなしのGETだけなのかな?そこまで機能はなさそうですね。
サンプルコードを変更する
用意されたエンドポイントの返りを変更します。
サーバのビルドやデプロイなどせず、もう一度エンドポイントを開きます。変更が確認できました!
プロジェクトが大きくなればビルドも時間かかるようになりそうですが、いちいちビルドして開発サーバ立ち上げてなど必要ないのは良さそうです。
Dev UI
QuarkusにはDev UIなるものが用意されています。↓の画像でRunのツールウィンドウの四角で囲ったボタンをクリックすれば開きます。
依存関係を図で表示してくれたり、設定の確認、変更ができたりといろいろ便利そうです。
ここでは試しに設定を変更してみます。quarkus.analytics.timeout
を3000 -> 1000に変更します。
src/main/resources/application.properties
を確認すると設定が追加されています。
正直この画面から設定を変えられる必要は感じないのですが、どんな設定があってデフォルト値はなんだとドキュメント漁る必要ないのはいいですね。
依存ライブラリの追加
続いて、依存関係を追加しましょう。build.gradle
のdependencies
のところに⚙️があるのでクリックします。
プロジェクト作成時と同じように、一般的なライブラリの一覧が表示されポチポチ選ぶだけです。説明やサイトへのリンクもあります。
バージョンアップ
フレームワークのバージョンアップの仕組み(gradleの場合はquarkusUpdate
)も用意されています。
ポチっとタスクを実行するだけで、バージョン上がりました!
何が変更されたかわからないので確認していませんが、変更が必要なライブラリやコードも修正されるはず。
終わり
触りだけ見ました。ちゃんと動くものがポチポチで作れるのは楽です。GUIで依存関係とかオブジェクトの関係が見られるようなので、プロジェクト途中から合流した場合のキャッチアップにも役立ちそうです。
プラグインのドキュメントを読むとDBなどの設定もGUIでポチポチできるみたい。
動くベースは数分で動作確認までできたので、あとは仮装スレッドとリアクティブの組み合わせで遊んだり、ネイティブビルドとの違いを見たりしていきたいと思います!
IntelliJを含めJetBrainsの製品は来年1月に価格改定が行われるため、購入を考えている方は急いでください。
自分はサムライズムさんで購入しています。サムライズムさんの価格表と、新規購入者向けの割引リンクを置いておきます。
記事中でも使用していたIntelliJ内でブラウザを開くプラグインTamaCatもこちらの製品です。普段使うことないけど、こういう時に便利。