[go: up one dir, main page]

The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.
このページを編集

開発モードと本番アプリケーションの差異

このドキュメントでは、Quarkus の開発モードが本番アプリケーションとどのように異なるかを説明します。

イントロ

Quarkus provides a dev mode which greatly aids during development but should NEVER be used in production.

These pages have instruction on how to use dev mode with Maven, Gradle or with the Quarkus CLI.

アーキテクチャの差異

機能セットはさておき、開発モードで実行される Quarkus アプリケーションは、プロダクションアプリケーション (すなわち、 java -jar …​ を使用して実行されるもの) とはアーキテクチャ的に異なります。

In dev mode, Quarkus uses a ClassLoader hierarchy (explained in detail in the class loading reference) that enables the live reload of user code without requiring a rebuild and restart of the application.

本番アプリケーションでは、前述のクラスローディングのインフラは全く存在しません。目的に応じて構築された単一の ClassLoader があり、(ほぼ) すべてのクラスと依存関係をロードします。

開発モードの機能

開発者満足を提供するという信条のもと、Quarkus は開発モードを有効にすると多くの機能を提供します。最も重要な機能は以下の通りです。

ライブ・リロード

この非常に重要な機能は、紹介するまでもなく、 アーキテクチャの違い のセクションですでに述べたとおりです。

Dev UI

Quarkusは、ブラウザから /q/dev-ui でアクセスできる非常に便利な UI を提供しています。このUIにより、開発者はアプリケーションの状態を確認できるだけでなく、その状態を変更できるさまざまな操作にアクセスできます(存在するエクステンションに依存)。そのような操作の例としては、以下のようなものがあります:

  • 設定値の変更

  • データベース移行スクリプトの実行

  • キャッシュの消去

  • スケジュールされたオペレーションの実行

  • コンテナのビルド

エラーページ

開発エラーの診断を非常に簡単にするために、Quarkus は開発モードでの実行時に様々な詳細なエラーページを提供しています。

データベースインポートスクリプト

The quarkus-hibernate-orm extension will run the import.sql script in src/main/resources when Quarkus is running in dev mode. More details can be found in the Hibernate ORM guide.

Dev Services

When testing or running in dev mode Quarkus can even provide you with a zero config database out of the box, a feature we refer to as Dev Services. More information can be found in the Datasource guide.

Swagger UI

The quarkus-smallrye-openapi extension will expose the Swagger UI when Quarkus is running in dev mode. Additional information can be found in the Swagger UI guide.

GraphQL UI

The quarkus-smallrye-graphql extension will expose the GraphQL UI when Quarkus is running in dev mode. More details can be found in the Graphql guide.

Health UI

The quarkus-smallrye-health extension will expose the Health UI when Quarkus is running in dev mode. The Healthcheck section provides additional information.

Mock mailer

The quarkus-mailer extension will enable an in-memory mock mail server when Quarkus is running in dev mode. See the Mailer guide for more details.

gRPC

  • gRPC Reflection Service は、開発モードではデフォルトで有効になっています。これにより、 grpcurl のようなツールを使用することができます。本番モードでは、リフレクションサービスは無効になっています。 quarkus.grpc-server.enable-reflection-service=true を使って明示的に有効にすることができます。

  • 開発モードでは、 quarkus.grpc.server.instances は効果がありません。

その他

(アプリケーションに追加されたエクステンションに応じて) 他の設定プロパティがあるかもしれませんが、開発モードでは影響がありません。

パフォーマンスへの影響

開発モードでは、アプリケーションの実行時フットプリントを最小化することは主な目的ではありません (ただし、Quarkus は高速に起動し、メモリをほとんど消費しません)。主な目的は、開発者満足を実現することです。そのため、ライブリロードが実行されるたびに、より多くのクラスがロードされ、ビルド時の操作も行われます。

対照的に、プロダクションアプリケーションでは、Quarkusの主な目的は、最小のメモリを消費し、最小の時間で起動することです。したがって、本番アプリケーションを実行する際には、ビルド時の操作は(定義上)実行されず、ビルド時に必要なさまざまなインフラストラクチャクラスは、実行時にはまったく存在しません。さらに、 fast-jarパッケージタイプに付属する目的に応じて構築されたClassLoaderにより、クラスの検索が可能な限り高速に行われると同時に、メモリ内のjarの量も最小限に抑えられます。

最適なパフォーマンスはdevモードの目的では決してないため、起動時間を改善する目的で、JVMのC2コンパイラーはdevモードでは無効になっています。

セキュリティへの影響

dev-modeアプリケーションを本番環境で実行してはいけない最も重要な理由は、開発モードでは (Dev-UI を介して) 機密性のある情報を読み取ることができる一方で、(本番環境のアプリケーションでは利用できないはずのエンドポイントを公開したり、Dev-UI を介して) 破壊的な操作にアクセスすることができるからです。

ネイティブ実行可能ファイル

ネイティブ実行可能ファイルを作成する場合 (詳しくは こちら)、常に 本番アプリケーションからビルドされます。

関連コンテンツ