Spring Boot Native blueprint for JHipsterは、Spring Nativeを使ったJHipsterプロジェクトを新規に作成する、コードおよびコンフィギュレーションの生成ツールである。Spring Nativeは、GeaalVM Native Imageコンパイラを使ってSpringアプリケーションをネイティブな実行形式にコンパイルする、試験的なSpringプロジェクトである。
GraalVM Native Imageは、AOT(Ahead-of Time)コンパイルを使用して、Javaバイトコードをスタンドアロンで実行可能なネイティブイメージに変換する。生成されるネイティブイメージには、アプリケーションのクラスや依存関係のクラスに加えて、Substrate VMの必要部分が含まれている。ネイティブイメージは、VMで動作する従来のアプリケーションよりも起動が早く、コンパクトで、メモリ使用量が少ない。欠点はビルドに時間を要することと、すべての構成がビルド時に決定するため、実行時の最適化の余地が少ないことだ。
GraalVMは、Community版とEnterprise版として、さまざまなビルドのバイナリが提供されている。GraalVM Commumnityをインストールすると、GraalVM Updateツール(gu
)によるNative Imageサポートが使用可能になる。
gu install native-image
このステップにより、$JAVA_HOME/binディレクトリでNative Image実行ファイルが使用できるようになる。先程の"gu install native-image
"コマンドを実行すると、GraalVM Community版のユーザには、GitHubカタログからのNative Imageサポートもインストールされる。GraalVM Enterprise版のユーザは、手作業でのインストールが必要だ。
Native Imageサポートをテストするには、通常のJavaクラスを作成し、javac
でコンパイルした上で、コンパイルされたバイトコードからNative Imageを生成する。
javac HelloWorld.java
native-image HelloWorld
作成されたNative Imageにはアプリケーション、すべてのライブラリ、JVMの必要部分が含まれており、スタンドアロンでの実行が可能だ。
./helloworld
Spring Boot Native blueprint for JHipsterは、プロジェクトの固有機能を追加する前のスタートポイントとして使用可能な、コードとコンフィギュレーションを生成する。生成されたプロジェクトにはSpring Nativeのサポートが含まれており、GraalVMネイティブイメージコンパイラを使ってSpringアプリケーションの実行形式を作成することができる。
JHipsterにはNode.jsの最新バージョンが必要だ。その上で、JHipsterとJHipster Native blueprintをインストールする。
npm install -g generator-jhipster
npm install -g generator-jhipster-native
インストールされているNode.jsのバージョンがJHipster Nativeの要件を満たさない場合には、メッセージが表示される。次に、プロジェクト用のディレクトリを作る。ただし、パスに空白が含まれていないことが必要だ。このプロジェクトディレクトリの中にJHipster Nativeのプロジェクトが生成される。
jhipster-native
プロジェクトを設定し、生成されたコードに必要な機能を追加したならば、Mavenを使用してネイティブ実行形式を生成することができる。
./mvnw package -Pnative,prod -DskipTests
実行形式の生成には、通常のビルドよりも多少時間を要する。これは、実行時ではなく、事前(ahead-of-time)に最適化が実施されるためだ。ビルドが問題なく完了すれば、。アプリケーションの実行が可能になる。
./target/native-executable
2019年にSpringチームによって立ち上げられて、2021年3月に最初のベータ版が提供されたSpring Nativeは、Springfアプリケーションのネイティブイメージをサポートする試験的プロジェクトである。Spring Nativeのアイデアと実装は、SpringOne 2021で発表されたとおり、Spring 6.0として採用される。Spring Framework 6.0のロードマップには、2022年10月のGAリリース予定が記載されている。
OktaのデベロッパアドボケートであるMatt Raible氏によるブログ記事には、IDプロバイダの設定手順を含むGraalVM上でのJHipsterの実行方法が詳しく説明されている。