第1章 Quarkus アプリケーションのネイティブ実行可能ファイルへのコンパイル


アプリケーション開発者は、Red Hat ビルドの Quarkus を使用して、OpenShift Container Platform 環境およびサーバーレス環境で実行される Java で書かれたマイクロサービスを作成できます。ネイティブ実行可能ファイルにコンパイルされたアプリケーションは、メモリーのフットプリントが小さく、起動時間は高速です。

このガイドでは、Quarkus Getting Started プロジェクトをネイティブ実行可能ファイルにコンパイルする方法と、ネイティブ実行可能ファイルを設定してテストする方法を説明します。Quarkus スタートガイド で作成したアプリケーションが必要です。

Red Hat ビルドの Quarkus を使用したネイティブ実行可能ファイルのビルドでは、以下について説明します。

  • Podman または Docker などのコンテナーランタイムを使用した単一コマンドでのネイティブ実行可能ファイルのビルド
  • 生成されたネイティブ実行可能ファイルを使用して、カスタムコンテナーイメージを作成します。
  • OpenShift Container Platform Docker ビルドストラテジーを使用して、コンテナーイメージを作成します。
  • Quarkus ネイティブアプリケーションを OpenShift Container Platform にデプロイします。
  • ネイティブ実行可能ファイルの設定
  • ネイティブ実行可能ファイルのテスト

前提条件

  • OpenJDK 17 がインストールされ、JAVA_HOME 環境変数が Java SDK の場所を指定するように設定されている。

  • Open Container Initiative (OCI) と互換性のあるコンテナーランタイム (Podman、Docker など)。
  • Quarkus Getting Started プロジェクトを完了している。

    • Quarkus Getting Started プロジェクトのビルド方法は、Quarkus スタートガイド を参照し てください。
    • あるいは、Quarkus quickstart archive をダウンロードするか、Quarkus Quickstarts Git リポジトリーをクローンしてください。プロジェクトのサンプルは getting-started ディレクトリーにあります。

1.1. ネイティブ実行可能ファイルの作成

ネイティブバイナリーは、特定のオペレーティングシステム(OS)または CPU アーキテクチャーで実行するために作成される実行可能ファイルです。

以下に、ネイティブ実行可能ファイルの例をいくつかリストします。

  • Mac のユニバーサルバイナリー
  • Linux 用の ELF バイナリー
  • Windows の EXE バイナリー

ネイティブ実行可能ファイルをビルドする場合の利点の 1 つは、アプリケーションと JVM を含む依存関係が 1 つのファイルにパッケージ化されることです。アプリケーションのネイティブ実行可能ファイルには、次の項目が含まれています。

  • コンパイル済みアプリケーションコード
  • Java API
  • 必要なライブラリー
  • アプリケーションの起動時間を改善し、ディスクおよびメモリーのフットプリントを最小限に抑えるための Java 仮想マシン(JVM)の縮小バージョン。

Quarkus アプリケーションからネイティブ実行可能ファイルを生成する場合は、コンテナ内ビルドまたはローカルホストビルドのいずれかを選択できます。次の表は、使用可能なビルドオプションとその説明を示しています。

表1.1 ネイティブ実行可能ファイルの生成に使用できるビルドオプション
ビルドオプションRequires用途結果利点

コンテナ内ビルド - サポート対象

コンテナーランタイム (Podman や Docker など)

デフォルトの registry.access.redhat.com/quarkus/mandrel-22-rhel8:22.3 ビルダーイメージ

Linux 64 ビット実行可能ファイル

GraalVM はローカルで設定する必要がないため、CI パイプライン の実行効率が向上します。

ローカルホストビルド - アップストリームでのみサポート対象

GraalVM または Mandrel のローカルインストール

quarkus.native.builder-image プロパティーのデフォルトのローカルインストール

ビルドが実行されるマシンと同じ OS および CPU アーキテクチャーを持つ実行ファイル。

Docker や Podman などのツールを使用できない、または使用しない開発者の代替です。全体的にはコンテナーよりも高速です。

注記

Red Hat ビルドの Quarkus 2.13 は、Java 17 ベースの Mandrel 22.3 ベースイメージに基づくネイティブ実行可能ファイルの構築のみをサポートします。

他のイメージはコミュニティーで入手できますが、製品ではサポートされていないため、Red Hat のサポートを希望する実稼働ビルドには使用しないでください。

ソースが Java 11 に基づいて書かれており、Java 12 - 17 の機能を使用せずに、Java 17 ベースの Mandrel 22.3 ベースイメージを使用して、そのアプリケーションのネイティブ実行可能ファイルをコンパイルできます。

重要

Red Hat ビルドの Quarkus は、Red Hat ビルドの Quarkus ネイティブビルダーイメージ( Mandrel の製品化ディストリビューション)を使用したネイティブ Linux 実行可能ファイルの構築 をサポートします。詳細は、Quarkus アプリケーションをネイティブ実行可能ファイルにコンパイルする を参照してください。Oracle GraalVM Community Edition (CE)、Mandrel Community Edition、またはその他の GraalVM ディストリビューションを使用したネイティブ実行可能ファイルのビルドは、Red Hat build of Quarkus ではサポートされていません。

1.1.1. コンテナ内ビルドを使用してネイティブ実行可能ファイルを生成する

ネイティブ実行可能ファイルを作成し、ネイティブイメージテストを実行するには、コンテナ内ビルド用に Red Hat build of Quarkus が提供する native プロファイルを使用します。

前提条件

  • Podman または Docker がインストールされている。
  • コンテナーは、8 GB 以上のメモリーにアクセスできる。

手順

  1. Getting Started プロジェクトの pom.xml ファイルを開き、プロジェクトに native プロファイルが含まれていることを確認します。

    <profiles>
        <profile>
            <id>native</id>
            <properties>
                <quarkus.package.type>native</quarkus.package.type>
            </properties>
        </profile>
    </profiles>
  2. 次のいずれかの方法を使用して、ネイティブ実行可能ファイルをビルドします。

    • Maven の使用:

      • Docker の場合:

        ./mvnw package -Pnative -Dquarkus.native.container-build=true
      • Podman の場合:

        ./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
    • Quarkus CLI を使用する:

      • Docker の場合:

        quarkus build --native -Dquarkus.native.container-build=true
      • Podman の場合:

        quarkus build --native -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman

        手順を実行した結果

        これらのコマンドを実行すると、target ディレクトリーに *-runner バイナリーが作成されます。その場合、以下が適用されます。

      • *-runner ファイルは、Quarkus が生成したビルド済みのネイティブバイナリーです。
      • target ディレクトリーは、Maven アプリケーションをビルドするときに Maven が作成するディレクトリーです。

        重要

        Quarkus アプリケーションをネイティブ実行可能ファイルにコンパイルすると、分析および最適化の際にメモリーを大量に消費します。quarkus.native.native-image-xmx 設定プロパティーを設定して、ネイティブコンパイル時に使用されるメモリーの量を制限できます。メモリー制限を低く設定すると、ビルド時間が長くなる可能性があります。

  3. ネイティブ実行可能ファイルを実行するには、以下のコマンドを入力します。

    ./target/*-runner

1.1.2. ローカルホストビルドを使用してネイティブ実行可能ファイルを生成する

Docker または Podman を使用しない場合は、ネイティブ実行可能ファイルの作成と実行に Quarkus ローカルホストビルドオプションを使用します。

ローカルホストビルドアプローチを使用すると、コンテナーを使用した場合と比べて高速になるため、Linux オペレーティングシステムを使用するマシンに適しています。

重要

Red Hat build of Quarkus では、次に示す手順の実稼働環境での使用はサポートされません。この方法は、テストで、もしくは Docker や Podman が使用できない場合のバックアップアプローチとしてのみ使用してください。

前提条件

手順

  1. GraalVM または Mandrel の場合は、次のいずれかの方法を使用してネイティブ実行可能ファイルをビルドします。

    • Maven の使用:

      ./mvnw package -Pnative
    • Quarkus CLI を使用する:

      quarkus build --native

      手順を実行した結果

      これらのコマンドを実行すると、target ディレクトリーに *-runner バイナリーが作成されます。その場合、以下が適用されます。

      • *-runner ファイルは、Quarkus が生成したビルド済みのネイティブバイナリーです。
      • target ディレクトリーは、Maven アプリケーションをビルドするときに Maven が作成するディレクトリーです。

        注記

        ネイティブ実行可能ファイルをビルドすると、quarkus.profile プロパティーで変更されない限り、prod プロファイルが有効になります。

  2. ネイティブ実行可能ファイルを実行します。

    ./target/*-runner
    注記
    • quarkus.test.native-image-profile プロパティーで変更されない限り、ネイティブテストはデフォルトで prod プロファイルを使用して実行されます。

関連情報

詳細は、ネイティブ実行可能ファイルの作成 を 参照してください。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.