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

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

このエントリーをはてなブックマークに追加
ツイート
follow us in feedly





タグクラウド

クラウド / AWS / Azure / Google Cloud
コンテナ / Docker / Kubernetes
クラウドネイティブ / サーバレス
クラウド障害 / 運用・監視

プログラミング言語 / 開発ツール
JavaScript / Java / .NET / WebAssembly
HTML/CSS / Web標準

アジャイル開発 / スクラム / DevOps / CI/CD
ソフトウェアテスト・品質
ローコード/ノーコード開発

データベース / RDB / NoSQL / 機械学習・AI
Oracle Database / MySQL / PostgreSQL
Office / 業務アプリケーション

ネットワーク / HTTP / QUIC / セキュリティ
OS / Windows / Linux / VMware
ハードウェア / サーバ / ストレージ

業界動向 / 働き方 / 給与・年収
編集後記 / 殿堂入り / おもしろ

全てのタグを見る

Blogger in Chief

photo of jniino

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

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

最新記事10本