Red Hatが、Picoli、gRPC、MicroProfile GraphQL、各種Amazonサービス、Hibernate ORM with Panacheをサポートする新しい拡張機能を搭載したQuarkus 1.5をリリースした。また、新しい **迅速なjar**
パッケージング形式とSpring Cache互換性レイヤがある。
「超高速 亜原子 Java」と称されたQuarkusは、"quark"と"us"の混成語だ。これは、GraalVMとOpenJDK HotSpot用に設計されたフルスタック、KubernetesネイティブのJavaフレームワークとして2019年3月に初めて発表された。Quarkusは、MicroProfile、Vert.x、CDI、JAX-RS、Hibernate、Nettyなどのよく知られたJavaライブラリや標準規格から作られている。デビューからわずか8ヶ月、2019年11月にQuarkus 1.0がリリースされた。
Quarkusを正式に紹介するブログ記事では、Quarkusの共同設立者であり、著名なエンジニアであり、Red HatのマネージャーでもあるJason Greene氏が、クラウドネイティブ環境でJavaがどのようにリーダーになれるのかを書きながら論じている。
Quarkusの目標は、JavaをKubernetesやサーバーレス環境における主要なプラットフォームにすることであり、同時に開発者には、より広範な分散型アプリケーションアーキテクチャに最適に対応できるように、統一された反応型および命令型のプログラミングモデルを提供することだ。
今回の記事では、そんな新機能の一部を探っていきたい。
従来のJARパッケージングに代わるものとして、新しい **迅速なjar**
パッケージング形式は、より速い起動時間を提供するために設計された。この時の実験的な機能として **迅速なjar**
はデフォルトでは起動しない。そのためには、次のような文を **application.properties**
設定ファイルに追加する。
quarkus.package.type=fast-jar
別の方法は、Mavenコマンドを実行することだ。
$ mvn package -Dquarkus.package.type=fast-jar
Quarkus 1.4で最近導入された新しいコマンドモードにより、開発者はコマンドラインクライアント、バッチスクリプト、コンソールアプリなどのアプリケーションを作成できるようになり、RESTエンドポイントなしで実行できるようになった。Quarkus 1.5では、機能の豊富なコマンドラインアプリケーションを作成するためのJavaライブラリと小さいフレームワークであるPicocliがサポートされた。
現時点では実験的な機能と考えられているが、Picocli拡張機能は、以下のMavenコマンドを実行することで、既存のQuarkus 1.5アプリケーションに追加できる。
$ mvn quarkus:add-extension -Dextensions="picocli"
これは、新しい依存関係を **pom.xml**
ファイルに追加する。
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-picocli</artifactId>
</dependency>
これがどのように機能するか、次の例を考えてみる。
@CommandLine.Command
public class HelloCommand implements Runnable {
@CommandLine.Option(names = {"-n", "--name"}, description = "Who will we greet?", defaultValue = "World")
String name;
private final GreetingService greetingService;
public HelloCommand(GreetingService greetingService) {
this.greetingService = greetingService;
}
@Override
public void run() {
greetingService.sayHello(name);
}
}
@Dependent
class GreetingService {
void sayHello(String name) {
System.out.println("Hello " + name + "!");
}
}
**HelloCommand**
クラスは [**Runnable**](https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html)
インターフェイスを実装しており [**@CommandLine.Command**](https://picocli.info/apidocs/picocli/CommandLine.Command.html)
アノテーションを使用している。インスタンス変数である **name**
はコマンドラインパラメータ、説明、デフォルト値を定義する [**@CommandLine.Option**](https://picocli.info/apidocs/picocli/CommandLine.Option.html)
アノテーションを使用している。
下のスクリーンショットに示すように、コマンドラインアプリケーションは、デフォルト値の"World"を使用して実行され、Mavenコマンドの実行時にターミナルウィンドウに"Hello World!"と表示する。
$ mvn clean compile quarkus:dev
定義されたコマンドラインパラメータ。 **-n**
あるいは **--name**
を使用して、以下の Maven コマンドの 1 つのように "World"のデフォルト値を上書きできる。
#java #devops #デベロップメント #設計/アーキテクチャ #ニュース