新しいメジャーリリースであるQuarkus 3.0が登場しました!
Quarkus 3.0は、コミュニティによる多くの努力と献身的な取り組みの結果です。Quarkusは、Javaアプリケーションを書くためのオープンソーススタックであり続け、比類のない起動時間、メモリフットプリント、開発者体験を提供します。
Quarkus 2の開発を続けながら、新しい jakarta.*
パッケージに移行するためにツリー全体を書き換えるというクレイジーなアイデアで、Quarkus 3の開発は昨年の2022年3月18日に始まりました。
Quarkus 3.0はJakarta EE 10をベースにしていますが、ご想像の通り、変更点はそれだけではありません。このバージョンには、この期間に実装した新機能や機能強化が満載です。
このアナウンスには、新機能やアップグレード方法に関する多くの情報が含まれていますので、Quarkus 3にアップグレードする前に、このアナウンスを十分に読むことをお勧めします。
変更点
新しいDev UI
Quarkus 2では、開発中に使用するWeb UIを提供するDev UIが導入されました。エクステンションは、独自のDev UIページを提供して、追加機能を提供することができました。
Quarkus 3.0では、新しいDev UIが採用され、より拡張性が高く、使いやすくなっています。また、ルック&フィールも新しくなり、大幅に改善されました。
新しいDev UIはデフォルトで利用可能です。ただし、すべてのエクステンションが新しいDev UIに移行しているわけではないので、まだ古いDev UIにアクセスすることができます( /q/dev-v1
)。古いDev UIは、将来のバージョンで削除される予定です。
QuarkusのYouTubeチャンネルでは、新しいDev UIの紹介、新機能の説明、使い方や拡張方法などを紹介する プレイリスト を公開しています。
Jakarta EE 10
Quarkus 2は、Jakarta EE 8をベースにしていました。Quarkus 3は、Jakarta EE 10をベースにしています。
最も目に見える変更点は、Jakarta EE の javax.*
パッケージが jakarta.*
に変更されたことです。この変更には、 javax.*
パッケージに依存しているソースコードと依存関係、その推移的依存関係の変更が必要です。
quarkus update
が移行を支援する方法については、 Quarkus 3.0へのアップデート のセクションを参照してください。
Jakarta EE 10をターゲットとした変更により、2つの大きな改善がもたらされました:
-
より広範なJavaエコシステムはJakarta依存に移行しており、より容易な共有と互換性のある実装を可能にしています。
-
CDIは、CDI LiteとBCE(Build Compatible Extensions)という概念を導入しており、CDI実装間で互換性のある標準エクステンションを実現し、Quarkusのビルド時最適化の恩恵を受けることができます。
Jakarta EE の |
Eclipse MicroProfile 6
Eclipse MicroProfile 6.0 は Jakarta EE 10 Core Profile と整合し、MicroProfile OpenTracing を MicroProfile Telemetry に置き換えています。
Hibernate ORM 6
Quarkus 3の最大の変更点の1つは、Hibernate ORMをバージョン5からバージョン6.2へアップグレードしたことです。
Hibernate ORM 6は新しいメジャーリリースで、多くの変更点があり、そのうちのいくつかは破壊的です。
Quarkusユーザーの視点から見たHibernate ORM 6の変更点の詳細については、 Hibernate ORM 5から6へのマイグレーション を参照してください。
Hibernate ORMのリリースアナウンスには、Hibernate ORM 6の変更点/改善点に関する情報が多く掲載されています:
Hibernate ORM 6にアップグレードするには、いくらかの努力とテストが必要です。以下の Quarkus 3.0へのアップデート セクションを必ず見てください。
また、Quarkus Hibernate ORMエクステンション自体にも、次のような改良が加えられています:
-
StatementInspector
を@PersistenceUnitExtension
のマネージドBeanとしてサポート。 -
CDI(Contexts and Dependency Injection)を使用して
StatelessSession
を注入する機能。
Mutiny 2とJava Flow
Quarkusは Mutiny 2 にアップグレードされ、Reactive Streamsの代わりにJava Flow APIを使用するようになりました。
開発ツール
開発者体験はQuarkusの重要な側面であり、私たちは常にその改善を続けています。
CLIプラグイン
Quarkus CLIは、プラグインで拡張できるようになりました。詳細は、 CLIガイド をご覧ください。
近い将来、プラグインの形でQuarkus CLIに多くの新機能が追加されるでしょう。
アップデートツール
Quarkus 3.0には、プロジェクトをQuarkusの最新バージョンにアップデートすることを根本的に簡素化する、新しいアップデートツールがあります。
Quarkus 3.0へのアップデート のセクションで詳しく解説しています。
すべての開発ツールで quarkus deploy
Quarkus CLIとMavenおよびGradleプラグインに、 Quarkusアプリケーションを`deploy` する機能が追加されました。
quarkus deploy
mvn quarkus:deploy
gradle deploy
これにより、QuarkusアプリケーションをKubernetes、Knative、OpenShiftなどのプラットフォームへデプロイすることができます。すべて、プロジェクトの依存関係や設定に変更を加える必要がなく、開発者体験をシンプルにします。
管理用ネットワークインターフェイス
これまでは、すべてのQuarkusエンドポイントが同じネットワークインターフェイスで公開されていました。
Quarkus 3.0からは、 特定の管理インターフェース により、healthやmetricsなどの技術的なエンドポイントを別のインターフェースで公開することができるようになりました。
/q/info
アプリケーションに関する情報(gitハッシュなど)を公開するには、 quarkus-info
エクステンションをプロジェクトに追加します。
エンドポイントは /q/info
で利用可能で、有効にするとマネジメントネットワークインターフェイスで公開されます。
RESTEasy Reactive
RESTEasy Reactiveでは、マルチパートの部分をすべて取得できるようにするなど、多くのユーザビリティの改善が行われています。
RESTEasy Reactiveは、リアクティブとブロッキングの両方のワークロードをカバーするデフォルトのRESTレイヤーであることを忘れないでください。
OpenTelemetry
OpenTelemetryエクステンションは、SDK自動設定をサポートするために書き直され、多くの変更が行われました。
設定ネームスペースは、 quarkus.otel.*
に変更されました。古い設定プロパティは、今のところまだサポートされていますが、新しい設定プロパティに切り替えることをお勧めします。
また、JDBCのOpenTelemetryを有効にするには、 quarkus.datasource.jdbc.telemetry
を true
に設定するだけでよくなりました。もうJDBC接続URLを変更する必要はありません。
Qute
我々のテンプレートエンジンであるQuteも、いくつかの新機能を搭載し、多くの愛を受けました。例えば、テンプレートのセクションをキャッシュすることで、ほとんど変更されることのないセクションを キャッシュ する機能などです。
Cache
CacheエクステンションでRedisバックエンドを使用することが可能になりました。
詳しくは、 専用ガイド をご覧ください。
また、キャッシュエクステンションでは、すべてのキャッシュに適用されるグローバルなデフォルトキャッシュ設定を定義することができます。
データベースマイグレーション
FlywayとLiquibaseを使ったデータベースマイグレーションは、マニフェストのinit containersとして実行されるようになりました。
init containersで行われるマイグレーション/セットアップ作業という概念は、他のエクステンションが実装しサポートすることも可能です。
Flywayエクステンションは、データベースに接続するためのカスタムクレデンシャル/URLをサポートしており、Flywayインスタンスの設定をより簡単にカスタマイズすることができます。
Elasticsearch Java Client エクステンション
新しいElasticsearch Java Clientは、全く新しいエクステンションとしてサポートされます。これにより、非推奨となったHigh Level REST Clientのアップデートを妨げていたライセンス問題が解決されました。
この新しいクライアントを使用するには、更新された Elasticsearchのガイド をご覧ください。
Scheduler API
Schedulerのリファレンスガイド に記載されているScheduler programmatic APIを使用することで、プログラム的にジョブをスケジュールできるようになりました。
Azure Functions エクステンション
新しいAzure Functionsエクステンションのおかげで、Azure Functionsの開発はこれまで以上に簡単になりました。
専用ガイド で詳しく解説しています
その他変更点
Quarkus Platformへの対応
私たちは、Quarkus Platformをプロダクションで使用できるようにするために、懸命に努力してきました。Quarkus 2 Platformにある全てのエクステンションがQuarkus 3 Platformで利用できるわけではありませんし、まだ最終版ではありませんが、その方向で進んでいます。
以下のエクステンションが利用可能です:
-
Debezium
-
Optaplanner
-
Google Cloud Services
-
Cassandra
-
Camel (M1 milestone)
以下のエクステンションはまだ利用できませんが、近日中に利用可能になる予定です:
-
Operator SDK
もし、エクステンションがない、または動作しない場合は、それぞれのIssueトラッキングシステムでIssueを開いてください。
Java 11は非推奨
OpenJDKコミュニティは、2023年9月にJava 11のアクティブサポートを終了する予定です。Quarkusのコア機能については、この日付以降もJava 11をサポートする予定ですが、Java 11は現在、非推奨とマークされています。Quarkusの最新かつ最高のバージョンを使用したい場合は、Java 17以降にアップグレードすることをお勧めします。
リリース・ケイデンスと長期サポート(LTS)
Quarkus 3がついにリリースされ、私たちは、およそ5週間ごとにリリースするという、通常の継続的な流れに戻ることになります。これにより、採用やアップグレードが容易な、小さなインクリメンタルな変更のデリバリートレインが提供されます。
より安定したリリースサイクルを求めている方もいらっしゃると思いますので、Quarkus 3.2からの新しい長期サポート(LTS)ポリシーに取り組んでいます。これについては、3.2のリリースが近づいたら詳細をお知らせします。Java 11は、Quarkusのコア部分については、引き続きサポートされる予定です。
Quarkiverse
Quarkusは、 https://github.com/quarkusio/quarkus リポジトリとQuarkusプラットフォームだけではありません。Quarkusのエコシステムの残りの部分全体、いわゆるQuarkiverseでもあります。エクステンションは、世界中の多くのコントリビューターや組織によってホストされ、維持されています。GitHubリポジトリでエクステンションをホストしている人もいれば、 Quarkiverse Hub でホストしている人もいます。
Quarkus 3では、主にコアの依存関係の多くでパッケージが変更されたため、多くのエクステンションがQuarkus 3.0で動作するようにすでに更新されています。私たちは、残りのエクステンションのメンテナと協力して、それらのエクステンションも更新するよう努力しています。
Quarkus 3.0へのアップデート
いつものように、Quarkus 3.0へのアップデートを支援するために、 非常に包括的なマイグレーションガイド を書きました。
Hibernate ORM 6.2アップデート専門ガイド が補完しています。
しかし、それで全てではありません: Quarkus 3.0では、プロジェクトをQuarkus 3に更新するためのアップデートツールが導入されています。
このアップグレードツールは、その他のタスクも行います:
-
Quarkusのバージョンの更新
-
jakarta.*
のパッケージを使用するように調整してください -
場合によっては、依存関係を調整してください
-
QuarkiverseのエクステンションをQuarkus 3.0と互換性のあるバージョンにアップグレードしてください
-
設定プロパティが変更された場合に、設定ファイルを調整してください
すべてを処理するわけではありませんが(通常、Hibernate ORM APIの変更はアップデートツールではカバーされません)、面倒な作業のほとんどを処理できるはずです。
このアップデートツールは、JavaまたはKotlinを使用するMavenまたはGradleプロジェクトであれば、QuarkusアプリケーションとQuarkusエクステンションの両方に使用することができます。
Quarkus CLIを使用している場合(推奨)、最新のものにアップグレードして実行してください:
quarkus update --stream=3.0
CLIを使用せず、Mavenを使用している場合は、Quarkus Mavenプラグインを使用してプロジェクトを更新してください:
./mvnw io.quarkus.platform:quarkus-maven-plugin:3.0.1.Final:update -N -Dstream=3.0
CLIを使用せず、Gradleを使用している場合は、Quarkus Gradleプラグインを使用して実施してください:
./gradlew -PquarkusPluginVersion=3.0.1.Final quarkusUpdate --stream=3.0
For more information, consult the dedicated guide.
Quarkus 2.xを使用していますが、すぐにアップデートする必要がありますか?
Quarkus 3.0へのアップデートは、特にHibernate ORMを使用している場合、お客様側でいくつかの作業とテストが必要になることを認識しています。
そのため、Quarkus 2.16のバグフィックスと重要なCVEの修正を数ヶ月間メンテナンスし、アプリケーションをQuarkus 3.xにアップグレードする時間を確保する予定です。
完全な変更履歴
Quarkus 3.0の完全な変更履歴は、GitHubで入手できます:
-
3.0.0.Alpha1 と 3.0.0.Alpha2 の変更履歴は、Quarkus 2 のバージョンを Jakarta EE 10 に変換しただけなので、空です。
コントリビューター
Quarkusコミュニティは成長を続けており、現在 788名のコントリビューター がいます。その一人一人に深く感謝します。
3.0リリースでは特に、次の方々に感謝致します: Adler Fleurant, Adrian Pauli, Ales Justin, Alex Martel, Alexandre Dutra, Alexei Bratuhin, Alexey Loubyansky, Alexey Sharandin, amoscatelli, Andrea Cosentino, Andrea Peruffo, Andri Reveli, Andy Damevin, Àngel Ollé Blázquez, Antonio Costa, Antonio Goncalves, Antonio Jacob Costa, arik-dig, Ashish Ranjan, Auri Munoz, Benedikt Ritter, benstone, besta, Bill Burke, Brad Hards, Bruno Baptista, Bruno Borges, Bruno Leonardo Gonçalves, Bård Kristian Haaland-Sørensen, Carles Arnal, Chexpir, Chihiro Ito, Chris Laprun, Christian Berger, Christian Pieczewski, Christian von Atzigen, Christoph Hermann, Clemens Classen, Clement Escoffier, Damon Sutherland, Dan Dunning, David Andlinger, David Arnold, David M. Lloyd, Davide D’Alto, Dmitri Bourlatchkov, Efim Smykov, Eric Deandrea, Erin Schnabel, faculbsz, Falko Modler, Felipe Henrique Gross Windmoller, Fikru Mengesha, Filippe Spolti, Foivos Zakkak, Foobartender, Fouad Almalki, franz1981, Galder Zamarreño, Geert Schuring, George Gastaldi, Georgios Andrianakis, Gerhard Flothow, Giovanni Barbaro, Guillaume DOUSSIN, Guillaume Le Floch, Guillaume Nieser, Guillaume Smet, Gunnar Morling, Gwenneg Lepage, Harald Albers, Helber Belmiro, Holly Cummins, Hugo Guerrero, IgnasiCR, imperatorx, Ioannis Canellos, Ivan Bazalii, Jan Martiska, Jan Wiemer, Jasmin Suljic, Jayson Minard, Jesse Ehrenzweig, Joe Siponen, John OHara, Jonathan Kolberg, Jorge Solórzano, Jose, Jose Carvajal, Josef Andersson, jtama, Julien Ponge, Julio Enrique Santana Lora, Justin Lee, Katia Aresti, kdnakt, Kevin Dubois, Konstantin Gribov, Konstantin Silin, kottmann, Ladislav Thon, Laure Souche, Leandro Quiroga, Loïc Mathieu, luca-bassoricci, Lukas Lowinger, Lukáš Petrovický, luneo7, Manyanda Chitimbo, Marc Nuri, Marc Schlegel, Marcel Lohmann, Marcell Cruz, Marco Bungart, Marco Schaub, Marek Skacelik, marko-bekhta, Markus Himmel, Martin Kouba, Martin Panzer, Marvin B. Lillehaug, Matej Novotny, Matteo Mortari, Max Rydahl Andersen, Mazen Khalil, Melloware, mfpc, Michael Edgar, Michael Mosmann, Michael Musgrove, Michal Karm Babacek, Michal Maléř, Michal Vavřík, Michelle Purcell, Mickey Maler, Mihai.Poenaru, Moritz Heine, mrizzi, mun711, Nathan Erwin, Nathan Mittelette, Nicolas Filotto, nscuro, oliv37, Orbifoldt, Ozan Gunalp, Özkan Pakdil, Pablo Gonzalez Granados, Paulo Casaes, Pavel.Vervenko, Pedro Igor, Pedro Pereira, Peter Palaga, Phillip Krüger, Radoslaw Adamiak, Radovan Synek, Ramon Boss, Robbie Gemmell, Robert Gonciarz, Robert Stupp, Roberto Cortez, Rolfe Dlugy-Hegwer, Romain Quinio, Rostislav Svoboda, Sanne Grinovero, Sebastian Schuster, Sergey Beryozkin, Severin Gehwolf, shjones, skraft-redhat, spencercjh, Stuart Douglas, sturdy5, Stéphane Épardaud, Sébastien CROCQUESEL, Sébastien Crocquesel, Tamas Cservenak, Theodor Mihalache, Thomas Segismont, Thor Weinreich, tom, Tom Cunningham, Vaclav Svejcar, Vincent Sevel xstefank, Yoann Rodière, Yoshikazu Nojima, Yubao Liu, zedbeit, Zheng Feng, and Žiga Deisinger.
また、Quarkus 3.0に対応したエクステンションエコシステムの準備に尽力してくれた、Quarkiverseやそれ以外のエクステンションメンテナにも感謝したいと思います。
参加のお誘い
私達は皆様からのフィードバックに重きを置いています。バグ報告、改善要望を是非お願いします。一緒に素晴らしいものを作り上げていきましょう!
Quarkusユーザーの場合でも、単に興味を持っているだけの場合でも、恥ずかしがらずにコミュニティに参加して下さい!:
-
GitHub でフィードバック
-
コードを作成し、 プルリクエスト を送信
-
Stack Overflow で質問