BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Quarkus 1.5 新しい拡張機能と迅速なjarパッケージング

Quarkus 1.5 新しい拡張機能と迅速なjarパッケージング

原文(投稿日:2020/06/22)へのリンク

Red Hatが、PicoligRPCMicroProfile GraphQL、各種Amazonサービス、Hibernate ORM with Panacheをサポートする新しい拡張機能を搭載したQuarkus 1.5をリリースした。また、新しい 迅速なjarパッケージング形式とSpring Cache互換性レイヤがある。

「超高速 亜原子 Java」と称されたQuarkusは、"quark"と"us"の混成語だ。これは、GraalVMとOpenJDK HotSpot用に設計されたフルスタック、KubernetesネイティブのJavaフレームワークとして2019年3月に初めて発表された。Quarkusは、MicroProfileVert.x、CDI、JAX-RS、HibernateNettyなどのよく知られた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インターフェイスを実装しており @CommandLine.Commandアノテーションを使用している。インスタンス変数である nameはコマンドラインパラメータ、説明、デフォルト値を定義する @CommandLine.Optionアノテーションを使用している。

下のスクリーンショットに示すように、コマンドラインアプリケーションは、デフォルト値の"World"を使用して実行され、Mavenコマンドの実行時にターミナルウィンドウに"Hello World!"と表示する。

    
$ mvn clean compile quarkus:dev
    

定義されたコマンドラインパラメータ。 -nあるいは --nameを使用して、以下の Maven コマンドの 1 つのように "World"のデフォルト値を上書きできる。

    
$ mvn clean compile quarkus:dev -Dquarkus.args="-n Mike"
$ mvn clean compile quarkus:dev -Dquarkus.args="--name=Mike"
    

これでターミナルウィンドウに「Hello Mike!」と出力されるだろう。

API用のオープンソースのデータクエリおよび操作言語であるGraphQLは、スタンドアロンAPIとしてMicroProfile GraphQL 1.0仕様が最近リリースされたことで、MicroProfileファミリーに追加された。SmallRyeによって実装されたQuarkus 1.5は、QuarkusでGraphQLアプリケーションを構築するための拡張機能を提供する。

Picocli拡張機能と同様に、Mavenコマンドを実行することで、GraphQL拡張機能は既存のQuarkus 1.5アプリケーションに追加できる。

    
$ mvn quarkus:add-extension -Dextensions="graphql"
    

これは、新しい依存関係を pom.xmlファイルに追加するだろう。

    
<dependency>
    <groupId>io.quarkus</groupId$gt;
    <artifactId>quarkus-smallrye-graphql</artifactId>
</dependency>
    

Quarkus GraphQLのガイドには、例と、入門する詳細な情報が記載されている。

25周年を迎えた今、Javaはもともとクラウドネイティブ環境のために設計されたものではない。ここ数年でクラウドネイティブやマイクロサービスの時代が到来し、Quarkus、MicroProfileHelidonMicronautなどのフレームワークは、Javaがクラウドネイティブ、マイクロサービス、サーバーレス環境のリーダーとなることを可能とする。

資料

この記事に星をつける

おすすめ度
スタイル

BT