| 開発者 | レッドハット |
|---|---|
| 初回リリース | 2019年3月20日[1] |
| 安定リリース | 3.17.4 [2]
/ 2024年12月11日 |
| リポジトリ | Quarkus リポジトリ |
| 書かれた | ジャワ |
| プラットフォーム | ジャワ |
| タイプ | アプリケーションフレームワーク |
| ライセンス | Apache ライセンス2.0 |
| Webサイト | クォーカス |
Quarkus [3] [4] [5]は、 Kubernetesへの導入向けにカスタマイズされたJava フレームワークです。これを取り巻く主要な技術コンポーネントは、OpenJDK HotSpotとGraalVMです。Quarkusは、JavaをKubernetesとサーバーレス環境の主要プラットフォームにすることを目指しており、開発者に統合されたリアクティブで命令型のプログラミングモデルを提供し、より広範囲の分散アプリケーションアーキテクチャに最適に対応します。
バージョン履歴
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 開発者が直面する大きな生産性の問題の 1 つは、従来の Java 開発ワークフローです。ほとんどの Web 開発者の場合、これは通常次のようになります。
コードを書く→コンパイル→デプロイ→ブラウザを更新→繰り返す
コンパイル + 再デプロイのサイクルには 1 分以上かかる場合が多く、生産性が大幅に低下する可能性があります。Quarkus は、ライブ コーディング機能でこの問題を解決することを目指しています。開発モードで実行する場合のワークフローは単純です。
コードを記述→ブラウザを更新→繰り返し
これは特別な設定を必要とせず、すぐに使用できます。これは、アプリケーションのソース ファイル、構成、および静的リソースで機能します。
インタラクティブな開発者ユーザーインターフェース (DEV UI)
http://localhost:8080/q/devQuarkus は、コマンドラインから Quarkus 開発モードを開始した後、開発者がエンドポイントにアクセスすると、追加されたすべての依存関係を表示するインタラクティブな開発者 UI を提供しますmvn quarkus:dev。開発者は構成を更新することもでき、その変更によりapplication.propertiesファイルが自動的に同期されます。
DevServicesによるゼロ構成[9]
開発者のローカル環境にデータベースをインストールするのは、データベースが本番バージョンと同じである必要がある場合、簡単な作業ではありません。Linux ユーザー (開発者) は、コンテナ コマンドライン ツールとコンテナ エンジンを使用して、データベースを簡単に実行できます。コンピューターのリソースの消費量が多いため、本番対応のデータベース ( PostgreSQLやMariaDBなど) を実行しない傾向があります。代わりに、 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 の広大なエコシステムの上に成り立っています。開発者は、JVM やネイティブ イメージに Quarkus がもたらすメリットを活用するために、まったく新しい API やテクノロジーのセットを学習するのに多くの時間を費やす必要はありません。Quarkus の基盤となる仕様やテクノロジーには、コンテキストと依存性の注入 ( CDI )、Jax-rs、Java 永続 API (JPA)、Java トランザクション API (JTA)、Apache Camel、Hibernateなどがあります。[引用が必要]
Quarkusは事前コンパイル(AOT)プラットフォームであり、JVM用にコードを最適化し、ネイティブコードにコンパイルしてパフォーマンスを向上させます。基盤となる技術はすべてAOT対応であり、Quarkusは継続的に新しいAOT対応技術、標準、ライブラリを取り入れています。[12]
参考文献
- ^ 「Quarkus Github リポジトリ、最初のリリースコミット」。github.com。
- ^ 「Quarkus Github リポジトリ、最終リリースコミット」。github.com。
- ^ 「LogicMonitor、Quarkus vs. Spring」。logicmonitor.com。2023年1月28日。
- ^ 「QuarkusIO ガイド」。参考文献。
- ^ 「QuarkusIO を使い始める」。mastertheboss.com。
- ^ 「Quarkus Github リポジトリ、最初のメジャーリリース」。github.com。
- ^ 「Quarkus Github リポジトリ、リリース 1.7.0.Final」。github.com。
- ^ 「開発モード」. quarkus.io .
- ^ 「開発サービスの概要」。quarkus.io。
- ^ Quarkus 2.0への道: 継続的テスト/
- ^ Quarkus によるテスト駆動開発
- ^ 「Quarkusとは何か?」IONOS Digitalguide。2022年1月13日。 2022年8月22日閲覧。
文献
- Marc Nuri San Felix (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 日)。『Beginning Quarkus Framework: Build Cloud-Native Enterprise Java Applications and Microservices 1st Edition』。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
