戻る

Spring Bootアプリケーションからのネイティブ実行ファイルのビルド

GraalVM Native Imageは、Spring Bootアプリケーションのパフォーマンスを大幅に向上させることができます。Spring Boot 3はGraalVM Native Imageのサポートを統合しており、プロジェクトのセットアップと構成が容易になりました。

このガイドでは、Spring Boot 3アプリケーションからネイティブ実行ファイルをビルドする方法を説明します。

アプリケーションの作成

デモでは、単純なRESTサーバーJavaアプリケーションを作成します。

  1. Spring Initializrにアクセスし、新しいSpring Bootプロジェクトを作成します。GraalVM Native SupportSpring Webの依存関係を追加してください。

  2. GENERATEをクリックして、プロジェクトを.zipファイルとして作成してダウンロードします。ファイルを解凍し、お気に入りのIDEで開きます。

    プロジェクト構成には、Native Build Toolsを含む、必要なすべての依存関係とプラグインが既に含まれています。たとえば、Mavenプロジェクトを作成した場合、pom.xmlファイルに追加される必要なプラグインは次のとおりです。

     <build>
         <plugins>
             <plugin>
                 <groupId>org.graalvm.buildtools</groupId>
                 <artifactId>native-maven-plugin</artifactId>
             </plugin>
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
             </plugin>
         </plugins>
     </build>
    
  3. メインアプリケーションクラスはイニシャライザによって作成されました。同じディレクトリに、HelloController.javaという名前のファイルに、次の内容のRESTコントローラーを作成します。
     package com.example.demo;
    
     import org.springframework.web.bind.annotation.GetMapping;
     import org.springframework.web.bind.annotation.RestController;
    
     @RestController
     public class HelloController {
    
         @GetMapping("/hello")
         public String hello() {
             return "Hello, GraalVM!";
         }
     }
    
  4. (オプション)アプリケーションをパッケージ化し、Java HotSpot Virtual Machineで実行します。
    Maven
     ./mvnw spring-boot:run
    

    Gradle

     ./gradlew bootRun
    

    アプリケーションをコンパイルし、JARファイルを作成して、アプリケーションを実行します。

    アプリケーションは数百ミリ秒で起動します。ブラウザを開き、localhost:8080/helloに移動して、アプリケーションが実行されていることを確認します。「Hello, GraalVM!」と表示されるはずです。

Paketo Buildpacksを使用してネイティブ実行ファイルをビルドする

Spring Bootは、GraalVM Native Imageを提供するPaketo Buildpack for Oracleを使用して、ネイティブ実行ファイルを含むコンテナイメージのビルドをサポートしています。

前提条件

Rancher DesktopまたはDockerなどのDocker-API互換コンテナランタイムがインストールされ、実行されていることを確認してください。

  1. まず、Native Imageツールを要求するPaketo Buildpack for Oracleを有効にします。

    • Mavenpom.xmlファイルを開き、spring-boot-maven-plugin宣言を見つけ、次のように変更します。
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <image>
                    <builder>paketobuildpacks/builder-jammy-buildpackless-tiny</builder><!--required for AArch64/M1 support -->
                    <buildpacks>
                        <buildpack>paketobuildpacks/oracle</buildpack>
                        <buildpack>paketobuildpacks/java-native-image</buildpack>
                    </buildpacks>
                </image>
            </configuration>
        </plugin>
      

      また、pom.xmlファイルでspring-boot-starter-parentが使用されていることを確認する必要があります。<parent>セクションは、イニシャライザによって追加されているはずです。

    • Gradlebuild.gradleファイルを開き、次の行を追加します。
        bootBuildImage {
                builder = "paketobuildpacks/builder-jammy-buildpackless-tiny"
                buildpacks = ["paketobuildpacks/oracle", "paketobuildpacks/java-native-image"]
        }
      

      java-native-imageがリクエストされると、ビルドパックはNative Imageを含むOracle GraalVMをダウンロードします。

  2. ビルドパックを使用して、このSpringアプリケーションのネイティブ実行ファイルをビルドします。
    • Maven
        ./mvnw -Pnative spring-boot:build-image
      
    • Gradle
        ./gradlew bootBuildImage
      
  3. ビルドが完了すると、Dockerイメージが使用可能になります。docker runを使用してアプリケーションを起動できます。例:
     docker run --rm -p 8080:8080 docker.io/library/demo:0.0.1-SNAPSHOT
    

Paketoのドキュメントには、ビルドパックを使用してGraalVM Native Imageでアプリケーションをビルドする方法を示すいくつかの例が記載されています。

Native Build Toolsを使用してネイティブ実行ファイルをビルドする

Dockerを使用せずにホストマシンでネイティブ実行ファイルを作成する場合は、ネイティブイメージをビルドするためのMavenおよびGradleプラグインを提供するNative Build Toolsを使用します。

前提条件

GraalVM JDKがインストールされていることを確認してください。最も簡単な開始方法は、SDKMAN!を使用することです。

sdk install java 21.0.4-graal

21.0.4は、推奨されるGraalVMリリースまたは早期アクセスビルドに置き換えてください。その他のインストールオプションについては、ダウンロードセクションをご覧ください。

  1. Native Build Toolsを使用してネイティブ実行ファイルをビルドします。
    • Maven
        ./mvnw -Pnative native:compile
      

      このコマンドはプロジェクトをコンパイルし、target/ディレクトリにネイティブ実行ファイルdemoを作成します。

    • Gradle
        ./gradlew nativeCompile
      

      このコマンドはプロジェクトをコンパイルし、_build/native/nativeCompile/_ディレクトリにネイティブ実行ファイル `demo` を作成します。

  2. ネイティブ実行ファイルからアプリケーションを実行します。
    • Maven
        ./target/demo
      
    • Gradle
        ./build/native/nativeCompile/demo
      

      Gradleでは、 `nativeRun`タスクを実行することもできます。`gradle nativeRun`。

      以前にHotSpotでこのアプリケーションを実行した場合、起動時間が大幅に短縮されていることに気付くでしょう。

このガイドでは、Spring Bootアプリケーションのネイティブ実行ファイルを作成する方法を説明しました。これは、Paketo Buildpacksを使用してコンテナ環境で、またはNative Build Toolsを使用してホストマシンで行うことができます。

Spring Bootアプリケーションは、事前にネイティブ実行ファイルにコンパイルされると、高速で軽量になるだけでなく、クラウドプラットフォームやコンテナなどのリソースが制限された環境では特に効率的になります。

お問い合わせ