クアルカス

Javaフレームワーク

クアルカス
開発者レッドハット
初回リリース2019年3月20日; 6年前[1] ( 2019-03-20 )
安定版リリース
3.29.3 [2] / 2025年11月14日; 0日前 (2025年11月14日
リポジトリQuarkusリポジトリ
書かれたジャワ
プラットフォームジャワ
タイプアプリケーションフレームワーク
ライセンスApacheライセンス2.0
Webサイトクォーカス

Quarkus [3] [4] [5]は、 Kubernetesへのデプロイメント向けにカスタマイズされたJava フレームワークです。主要な技術コンポーネントは、OpenJDK HotSpotGraalVMです。Quarkus は、Java を Kubernetes およびサーバーレス環境における主要プラットフォームにすることを目指しており、開発者に統合されたリアクティブ型および命令型のプログラミングモデルを提供することで、より幅広い分散アプリケーションアーキテクチャに最適に対応します。

バージョン履歴

バージョン 日付 注記
0.12 2019年3月20日 初回リリース
1.0 2019年11月
2.0 2021年6月
3.0.1 2023年3月
3.2.6 2023年10月 LTS(3.2)
2.16.12.最終 2023年10月17日
3.2.7.最終 2023年10月19日
3.5.0 2023年10月25日
3.2.9.最終 2023年11月17日
3.6.0 2023年11月29日
3.2.10.最終 2024年1月
3.7.1 2024年1月
3.8.1 2024年2月 LTS(3.8)
3.10.0 2024年4月
3.13.0 2024年7月
3.15.2 2024年11月 LTS (3.15)
3.16.2 2024年11月
3.17.7 2025年1月
3.18.3 2025年2月
3.22.3 2025年5月
3.25.3 2025年8月 LTS (3.20.2.1)
3.28.1 2025年9月 LTS (3.27.0)

Quarkusは、Kubernetesなどのコンテナオーケストレーションプラットフォームにおいて、迅速なスケールアップと高密度な利用を実現します。同じハードウェアリソースで、より多くのアプリケーションインスタンスを実行できます。最初のリリース後、Quarkusは数ヶ月にわたって複数の機能強化が行われ、2019年11月にオープンソースコミュニティ内で1.0.0がリリースされました。[6]

配布

GraalVM Community Edition (CE) および GraalVM Enterprise Edition (EE)

GraalVMは、異なる言語で記述されたアプリケーションをネイティブマシンのバイナリにコンパイルして実行するためのJava仮想マシンです。GraalVM Community Editionには、サポートとライセンス要件が異なります。

マンドレル

MandrelはGraalVM CEのダウンストリームディストリビューションであり、オープンソースのOpenJDKをベースにしたネイティブ実行ファイルの構築機能をサポートしています。Mandrelは、Quarkusに必要なGraalVM CEコンポーネントのみを組み込むことで、QuarkusアプリケーションでGraalVMを容易に利用できるようにすることを目指しています。Red Hatは、 2020年10月のQuarkus 1.7リリース以降、Mandrelを使用したネイティブQuarkusアプリケーションの構築に対する商用サポートを開始しました。 [7]

デザインの柱

コンテナファースト

Quarkus は当初からコンテナファーストと Kubernetes ネイティブの哲学に基づいて設計されており、メモリ使用量の低減と起動時間の短縮に最適化されています。

アプリケーションの構築と実行には閉世界仮定アプローチを採用するなど、可能な限り多くの処理がビルド時に行われます。この最適化により、ほとんどの場合、実行時に実行パスを持たないコードはJVMにロードされません。

Quarkusでは、アプリケーションの起動時にのみ使用されるクラスはビルド時に呼び出され、ランタイムJVMにはロードされません。また、Quarkusはリフレクションを可能な限り回避し、代わりに静的クラスバインディングを優先します。これらの設計原則により、JVM上で実行されるアプリケーションのサイズ、ひいてはメモリフットプリントが削減されると同時に、Quarkusはネイティブネイティブを実現できます

Quarkusの設計は、当初からネイティブコンパイルを考慮していました。GraalVMのネイティブイメージ機能を利用してJVMバイトコードをネイティブマシンバイナリにコンパイルするように最適化されています。GraalVMは、アプリケーションのソースコード内に存在する到達不能コードとその依存関係を積極的に削除します。LinuxコンテナとKubernetesを組み合わせることで、QuarkusアプリケーションはネイティブLinux実行ファイルとして実行され、JVM不要になります。Quarkusネイティブ実行ファイルは、従来のJVMと比較して起動がはるかに高速で、メモリ使用量もはるかに少なくなります。

  • 高速スタートアップ(数十ミリ秒)により、コンテナとKubernetes上のマイクロサービスの自動スケールアップとスケールダウン、およびFaaSのオ​​ンザスポット実行が可能になります。
  • メモリ使用量が少ないため、複数のコンテナを必要とするマイクロサービス アーキテクチャのデプロイメントでコンテナ密度を最適化できます。
  • アプリケーションとコンテナイメージのフットプリントが小さくなる

ライブコーディング

出典: [8]

多くのJava開発者が直面する生産性に関する大きな問題の一つは、従来のJava開発ワークフローです。多くのWeb開発者にとって、これは一般的に次のようなものです。

コードを書くコンパイルするデプロイするブラウザを更新する繰り返す

コンパイルと再デプロイのサイクルには1分以上かかる場合が多く、生産性を大きく低下させる可能性があります。Quarkusはライブコーディング機能でこの問題を解決しようとしています。開発モードで実行する場合のワークフローはシンプルです。

コードを記述ブラウザを更新繰り返し

特別な設定は不要で、すぐに使用できます。アプリケーションのソースファイル、設定、静的リソースで使用できます。

注記 Quarkus を実行するとmvn compile quarkus:dev、開発モードで起動します。HTTP リクエストを受信すると、リクエストを保留し、アプリケーションのソースファイルに変更がないか確認します。変更されている場合は、変更されたファイルを透過的にコンパイルし、変更されたファイルを使用してアプリケーションを再デプロイします。その後、HTTP リクエストは再デプロイされたアプリケーションに送信されます。Quarkus の再デプロイは従来のアプリケーションサーバーよりもはるかに高速であるため、大規模なアプリケーションを除けば、1 秒未満で完了します。

インタラクティブな開発者ユーザーインターフェース(DEV UI)

http://localhost:8080/q/devQuarkusは、コマンドラインからQuarkus開発モードを起動した後、開発者がエンドポイントにアクセスすると、追加されたすべての依存関係を表示するインタラクティブな開発者UIを提供しますmvn quarkus:dev。開発者は設定を更新することもでき、変更はapplication.propertiesファイルと自動的に同期されます。

DevServicesによるゼロ構成

出典: [9]

開発者のローカル環境にデータベースをインストールするのは、データベースを本番環境と同じにする必要がある場合、容易ではありません。Linuxユーザー(開発者)は、コンテナコマンドラインツールとコンテナエンジンを使用して簡単にデータベースを実行できます。しかし、コンピュータリソースの消費量が多いため、本番環境対応のデータベース(PostgreSQLMariaDBなど)を実行しない傾向があります。代わりに、 H2データベースのようなインメモリデータストアを使用することを好みます

Quarkus は、この問題を解決するために、テストコンテナ上に構築された DevServices を提供しています。例えば、開発者は、application.properties ファイルで H2 インメモリデータストアではなく、本番環境のデータベースである PostgreSQL 上でテストアプリケーションを実行できます。

quarkus.datasource.devservices.image-name=postgres:latest

DevServices は、既存の設定がない限り、通常はデフォルトで有効になっています。DevServices を有効にすると、Quarkus は開発モードまたはテストモードで実行時にデータベースを自動的に設定して起動しようとします。

継続的テスト

モノリシックアプリケーションからマイクロサービスに至るまで、ソフトウェア開発において堅牢なアプリケーションを開発するには、テストを行わないという選択肢はありません。開発者はおそらく、QAチームがテストケースの検証を担当する可能性が高い、外部の継続的インテグレーション(CI)ツール を思い浮かべるでしょう。

開発者が CI ツールを統合する必要がなく、ビジネス アプリケーションが開発および実行されているランタイム環境でテスト ケースを実行する場合はどうなるでしょうか?

Quarkusは、コマンドラインインターフェースとDEV UIを通じて継続的テスト機能を提供します。この機能により、開発者は外部CIツールを統合する手間が省け、ビジネスロジックを継続的に開発しながら機能性を確保できます。[10] [11]

標準に基づいて構築

Quarkusは、テクノロジー、標準、ライブラリ、APIからなる広大なエコシステムの上に成り立っています。開発者は、QuarkusがJVMやネイティブイメージにもたらすメリットを活用するために、全く新しいAPIやテクノロジーを習得するのに多くの時間を費やす必要はありません。Quarkusの基盤となる仕様やテクノロジーには、コンテキスト&依存性注入(CDI)、Jax-rsJava Persistence API(JPA)、Java Transaction API(JTA)、Apache CamelHibernateなど、数え上げればきりがありません。[要出典]

Quarkusは、事前コンパイル(AOT)プラットフォームであり、JVM向けにコードを最適化するだけでなく、ネイティブコードへのコンパイルも行うことでパフォーマンスを向上させます。基盤となる技術はすべてAOT対応であり、Quarkusは継続的に新しいAOT対応技術、標準、ライブラリを導入しています。[12]

参考文献

  1. ^ 「Quarkus Githubリポジトリ、最初のリリースコミット」。github.com
  2. ^ 「Quarkus Githubリポジトリ、最終リリースコミット」。github.com
  3. ^ 「LogicMonitor、Quarkus vs. Spring」。logicmonitor.com 2023年1月28日。
  4. ^ 「QuarkusIOガイド」. Baeldung. 2019年5月5日.
  5. ^ 「QuarkusIOを使い始める」mastertheboss.com . 2022年11月15日。
  6. ^ 「Quarkus Githubリポジトリ、最初のメジャーリリース」。github.com
  7. ^ 「Quarkus Githubリポジトリ、リリース1.7.0.Final」。github.com
  8. ^ 「開発モード」. quarkus.io .
  9. ^ 「開発サービス概要」。quarkus.io
  10. ^ Quarkus 2.0への道: 継続的テスト/
  11. ^ Quarkus によるテスト駆動開発
  12. ^ 「What is Quarkus?」IONOS Digitalguide . 2022年1月13日. 2022年8月22日閲覧

参考文献

  • マーク・ヌリ・サン・フェリックス(2022年11月)。フルスタックQuarkusとReact。Packt。ISBN 9781800562738
  • Eric Deandrea、Daniel Oh、Charles Moulliard (2021年8月). Quarkus for Spring Developers 1st Edition. Red Hat Developer
  • John Clingan、Ken Finnigan(2021年12月)。『Kubernetes Native Microservices With Quarkus and MicroProfile 1st Edition』Manning社。ISBN 9781617298653。
  • Tayo Koleoso (2020年8月26日). 『Quarkusフレームワーク入門:クラウドネイティブなエンタープライズJavaアプリケーションとマイクロサービスの構築』第1版. Apress ISBN 1484260317.
  • Alex Soto Bueno、Jason Porter (2020年7月14日). Quarkus Cookbook: Kubernetesに最適化されたJavaソリューション 第1版. OReilly . ISBN 1492062650.
  • Francesco Marchioni(2019年12月13日)、『JavaとQuarkusによるハンズオン・クラウドネイティブ・アプリケーション:高性能なKubernetesネイティブJavaサーバーレス・アプリケーションの構築』第1版。Packt。ISBN 1838821473
「https://en.wikipedia.org/w/index.php?title=Quarkus&oldid=1322135505」より取得