「Spring Native」ベータ版公開、GraalVMによりSpring FramworkのJava/Kotlinアプリをネイティブイメージにコンパイル。JavaVMに依存せず瞬時に起動可能

2021年3月22日

Spring Frameworkの開発チームとGraalVMの開発チームは、GraalVMを用いてSpring Frameworkのアプリケーションをネイティブイメージにコンパイルする「Spring Native」がベータ版として公開されたことを発表しました。

Spring FrameworkはJavaの主要なフレームワークの1つ。AOP(Aspect Oriented Programming:アスペクト指向プログラミング)やDI(Dependency Injection:依存性注入)などを利用できることが大きな特徴の1つです。

GraalVMはオラクルが主導してオープンソースで開発されている多言語対応ランタイム。

JavaをはじめとしてScalaやKotlinなどのいわゆるJavaVM言語を実行可能であることに加えNode.js/JavaScript、Python、Ruby、LLVMのビットコードなど、さまざまなプログラミング言語のランタイムとして利用できます。

さらにコードを事前コンパイルしネイティブバイナリ化しておくことでアプリケーションを高速に起動、実行できる「GraalVM Native Image」機能も含まれています。

今回のSpring Nativeベータ版は、このGraalVM Native Image機能を用いてSpringアプリケーションをコンパイル、ネイティブバイナリ化するというもの。JavaとKotlinのどちらのSpringアプリケーションにも対応しています。

ネイティブバイナリ化によりアプリケーションの実行にJavaVMは必要なくなり、瞬時に起動するようになります。下記は「Announcing Spring Native Beta!」からの引用です。

Those native Spring applications can be deployed as a standalone executable (no JVM installation required) and offer interesting characteristics including almost instant startup (typically < 100ms), instant peak performance and lower memory consumption at the cost of longer build times and fewer runtime optimizations than the JVM.

ネイティブなSpringアプリケーションは、(JVMのインストールは不要で)スタンドアロンの実行ファイルとしてデプロイでき、ほぼ瞬時の起動(通常100ms以下)、瞬時のピークパフォーマンスに到達し小さなメモリ消費で済む、などの興味深い特性を備えていますが、一方でJVMに比べてビルド時間が長く、実行時の最適化が少ないという欠点があります。

ネイティブバイナリ化はGraalVMを使えば簡単なように思えますが、実際にはJavaVMで実行するのとバイナリに変換するのでは下記のような差異があるため、Spring Frameworkの開発チームとGraalVMのチームが協力して問題を解決していく必要があったとのことです。下記も「Announcing Spring Native Beta!」からの引用です。

Native is different from the JVM : the classpath is fixed at build time, configuration is required for reflection or resources for example, there is no class lazy loading (everything shipped in the executable is loaded in memory on startup) and some code can be invoked at build time.

ネイティブはJVMとは異なります。例えばクラスパスはビルド時に固定されてしまい、リフレクションやリソース用のコンフィグレーションも要求され、クラスの遅延ローディングはなく(実行ファイルに同梱されているものはすべて起動時にメモリにロードされる)、一部のコードはビルド時に呼び出されることもあります。

Spring NativeによってSpringアプリケーションのデプロイ方法の選択肢が広がるとともに、軽量かつ起動時間が高速になることでマイクロサービスやサーバレスなどでも活用しやすくなることが期待されます。

あわせて読みたい

Java プログラミング言語 GraalVM Kotlin




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本