Quarkusコーディング環境（VSCode）を整える

# はじめに
VScodeでQuarkusを使った開発をするための環境構築の方法を以下に整理します。

# Quarkusとは
Quarkusは、Javaで動作する軽量で高速なフレームワークで、特にクラウドネイティブアプリケーションとKubernetes環境向けに最適化されており、マイクロサービスアーキテクチャのアプリケーションの開発に適しています。

主な特徴は以下の通りです。
- Kubernetesネイティブ
QuarkusはKubernetes上でのデプロイを前提に設計されており、Kubernetesとの統合が容易です。これにより、コンテナ化されたアプリケーションの開発とデプロイがシンプルになります
- 高速な起動時間
Quarkusは非常に短い起動時間を誇り、これはサーバーレスやマイクロサービスアーキテクチャで重要な要素です。これにより、スケーラビリティとリソース効率が向上します
- 低いメモリ消費
従来のJavaフレームワークに比べてメモリ消費が少なく、クラウド環境でのコストを削減できます
- 広範な拡張機能のサポート
Quarkusは、Hibernate ORM、RESTEasy、Apache Kafka、Vert.xなど、多くのライブラリとフレームワークをサポートしています

# VSCode拡張機能のインストール
VSCodeをインストールし、以下の拡張機能をインストールします。

Quarkus
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2475719/e65af6da-0084-1e88-9dcf-952c4da61eb5.png)
Java
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2475719/2549c522-d2ab-290f-9b17-96237c36e0f1.png)

# 環境構築
「Get Started with Java Development」の画面から好きなJDKをインストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2475719/255cbd64-9384-a52c-6fff-61cbba0a85c4.png)
※ここではJDK21を選択しました。

ひたすらNextを押下してInstall
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2475719/2dade198-6733-4f45-dbf9-f44ef008ef7c.png)

コマンドプロンプトを起動してインストール確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2475719/178f130d-c9f5-babe-5cc5-f48ef5e832e2.png)

システム環境変数JAVA_HOME設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2475719/4f10efe9-5116-e5b5-5665-054dca4a33e1.png)

# Quarkusプロジェクトを作成
Ctrl+Shift+P：コマンドパレット→quarkusからプロジェクト作成

サンプルコード
```java:GreetingResource.java
package org.acme;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;

@Path("/mylife")
public class GreetingResource {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return "this is mylife.";
    }
}
```
Producesアノテーションはメソッドのレスポンスのメディアタイプを指定している。今回はテキストを返すことを示している。

# ローカルでテストする
Quarkusではなんと、アプリケーションのテストのためにDBに接続できなくても自動的にDockerでPostgreSQLを作ってアプリケーションをそれに接続してテストが可能な、Dev Serviceという機能がある。
今回それを利用してローカルでテストしてみる。

「terminal」から「./mvnw quarkus:dev」でアプリケーションを起動可能。
ちなみに「mvnw」とはmaven wrapperのことでmavenをローカルにインストールしなくてもプロジェクトがビルドできる便利なもの。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2475719/fe35c4c5-623b-b8c0-ba33-35cd0f0386d3.png)


サンプルコードの実行結果（ローカル）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2475719/8c388025-407a-642f-9a25-d735f48a63c2.png)


# レスポンスをJSON形式にする

https://github.com/nagetsum/quarkus-glassfishjp#add-extension

上記サイトの通り「`quarkus-resteasy-jsonb`」extensionをプロジェクトにインストール。インストールするときにclassicと書いてあったがそのままインストールした。

```java:Message.java
package aaa.jsonsample;

public class Message {
    private String from;
private String message;

    public String getFrom() {
        return from;
    }
    public void setFrom(String from) {
        this.from = from;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
}
```



```java:HelloResource.java
package aaa.jsonsample;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;

@Path("/hello")
public class HelloResource {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return "Hello RESTEasy";
    }

    @GET
    @Path("/message")
    @Produces("application/json")
    public Message message(){
        Message msg = new Message();
        msg.setFrom("John");
        msg.setMessage("WELL!!");
				return msg;
    }

}
```
Producesアノテーションにて"application/json"を指定しているのでレスポンスをJSON形式で返すことを示している。

# 参考

https://densan-hoshigumi.com/develop/vscode-quarkus-develop-environment

https://qiita.com/unhurried/items/b8ca115fb6a368e11a62