原文はこちら。
The original article was written by Alina Yurenko (Developer Advocate for GraalVM, Oracle Labs).
https://medium.com/graalvm/graalvm-in-2022-a-year-in-review-57679af9c55e
2022年はGraalVMプロジェクトとコミュニティにとって非常に生産的な年でした。協同して多くの新機能を開発し、最新のJavaバージョンと新しいプラットフォームのためにGraalVMをリリースし、GraalVMのいくつかの新しい興味深いユースケースを目にしました。
それでは今年のハイライトを見てみましょう。
Aligning GraalVM with OpenJDK
まずは今年のJavaOneで、GraalVMのJava技術の該当部分をOpenJDKに提供することを発表しました。
OpenJDK Announcement
https://graalvm.org/2022/openjdk-announcement/
これにより、OpenJDKの開発プロセスとより密接に連携し、リリース・スケジュールや機能、ライセンスなどを調整することで、ユーザーやパートナーにGraalVMの採用を促進することができるようになります。実用的な成果の1つは、GraalVMが年に2回の機能リリース、4回のCPUリリース、2年ごとのLTSリリースを行うことでしょう。
この方向性の次のステップの一つとして、Java関連のGraalVMの技術をOpenJDKに貢献することを目的としたProject Galahadが導入されました。
Call for Discussion: New Project: Galahad
https://mail.openjdk.org/pipermail/discuss/2022-December/006164.html
リリースサイクルの変更とProject Galahadに関する詳細は以下のブログエントリをご覧ください。
GraalVM, Galahad, and a New Release Schedule
https://medium.com/graalvm/graalvm-galahad-and-a-new-release-schedule-d081d1031bba
https://logico-jp.io/2022/12/28/graalvm-galahad-and-a-new-release-schedule/
Supporting the latest JDK versions

22.3リリースでは、GraalVMは最新のJavaバージョン19のビルドを提供しています。そのため、最新のJavaとGraalVMの機能を一緒に利用できます。これはつまり、例えば、GraalVMでProject Loomの仮想スレッドを使用したり(--enable-preview
を渡してサポートの有効化をお忘れ無く)、jwebserver
を使用したり、Native Imageでこれらのアプリケーションをコンパイルすることさえできるのです。
Faster, lighter, and more user-friendly Native Image builds
Native Imageは、コード解析とコンパイルのオーバーヘッドをビルド時に移し、高速起動とメモリ節約を可能にしますが、ビルド時間とリソースの増加という代償を伴います。私たちは、過去数回のリリースで、これらの要件を減らすために取り組んできました。現在、GraalVM 22.3 JDK19では、例えば私のごく標準的なマシン(16GB Macbook Pro)で、HelloWorldはわずか16.2秒でネイティブコンパイルが完了し、それなりのサイズのMicronautウェブアプリケーションは1m26秒でコンパイルされます🎉。

数多の要望により、ビルドプロセスも軽量化されました。GraalVM 22.2 以降、Native Imageはたった2 GBのJavaヒープで多くの大きなネイティブ実行ファイルを正常にビルドできるようになりました。これは、DockerコンテナやGitHub Actionsのようなメモリに制約のある環境では特に有益です。
私たちが知っている新しいNative Image Build Output (ビルド出力) は、ビルドプロセスを段階に分けて、それに関する有用な統計を共有するもので、これも今年のGraalVM 22.0で初めて導入されました。
Native Image Build Output
https://graalvm.org/22.3/reference-manual/native-image/overview/BuildOutput/
GraalVM Reachability Metadata Repository
ビルドプロセス中、Native Imageはアプリケーションのメインエントリーポイントから到達可能なコードのみをコンパイルします。Native Imageが到達不可能と判断した要素をビルド対象に含めるには、Native Imageにメタデータ(構成情報)を提供する必要があります。このメタデータは、ライブラリやフレームワークが自動的に提供する、もしくはトレースエージェントの助けを借りて手動作成します。
Assisted Configuration with Tracing Agent
https://graalvm.org/22.0/reference-manual/native-image/Agent/
このタスクをさらに簡素化するために、今年初め、GraalVM Reachability Metadata Repository(ネイティブ・イメージのためのメタデータを共有し再利用するためのコミュニティのための一元的リポジトリ)を導入しました。
Repository which contains community-driven collection of GraalVM reachability metadata for open-source libraries.
https://github.com/oracle/graalvm-reachability-metadata
コミュニティと一緒にこのリポジトリに積極的に取り組んでいます。現時点では、Hibernate、Tomcat、Testcontainers、様々なデータベースコネクタなど、30以上のよく使われるプロジェクトのメタデータが含まれています。
reachability repositoryを使い始める方法と、reachability repositoryへの貢献方法については、関連するブログエントリをご覧ください。
Enhancing 3rd-Party Library Support in GraalVM Native Image with Shared Metadata
https://medium.com/graalvm/enhancing-3rd-party-library-support-in-graalvm-native-image-with-shared-metadata-9eeae1651da4
https://logico-jp.io/2022/07/29/enhancing-3rd-party-library-support-in-graalvm-native-image-with-shared-metadata/
GitHub Action for GraalVM

GraalVM (CommunityおよびEnterprise)、Native Image、Truffle言語とツールを簡単にセットアップして使用できるGitHub Action for GraalVMもリリースしました。現在、600以上のプロジェクトで使用されています(2023/01/08現在704プロジェクトで利用されています)。
GitHub Action for GraalVM
https://github.com/marketplace/actions/github-action-for-graalvm
Network Dependents
https://github.com/graalvm/setup-graalvm/network/dependents
New Compiler Optimizations
JITコンパイルならびにAOTコンパイルの両方にメリットのあるコンパイラの最適化をいくつか追加してきました。以下はその一例です。
Native Build Tools
Native ImageのためのGraalVMのMavenとGradleプラグインであるNative Build Toolsは、いくつかの機能と改善、特にreachability metadata repositoryとの統合を追加し、Gradleにおけるエージェントのサポートを完全に作り直しました。
Native Build Tools
https://graalvm.github.io/native-build-tools/latest/index.html
Native Build Toolsは、reachability metadata repositoryを使いNative Imageのメタデータの自動検出もサポートしています。これは、pom.xml
やbuild.gradle
でアクセスを有効にするだけで利用できます。
GraalVM on Apple Silicon 🚀
このプラットフォーム向けのビルドは、GitHubリポジトリに寄せられたものの中で最も多かったものの一つでした。そのため、現在利用頂けるようになっていることをを嬉しく思っています。
Support for Apple M1 (darwin-aarch64) #2666
https://github.com/oracle/graal/issues/2666
Apple Siliconユーザーは、JDK、Native Image、GraalVM言語とツールなど、GraalVMコンポーネントをすべて使用できますし、高速にコンパイルできます。
Building Native Images with GraalVM and Spring Native on Apple’s M1 Architecture
https://spring.io/blog/2022/03/23/building-native-images-with-graalvm-and-spring-native-on-apple-s-m1-architecture
Developer experience improvements
この一年を通して、Native Imageやその他のGraalVMコンポーネントの開発者体験に対する改良も多く実施しました。
- 基本的なGraalVMのダウンロードは大幅に小さくなり、現在では約250MBです。この中にはJava開発のためのJDKとツールを含んでいます。Native ImageやGraalVM言語などの追加コンポーネントを、コマンド
gu
を使いインストールできます。 - ご利用のマシンやCI/CDパイプラインで使用するために、Native Imageを含むGraalVM JDKを1行のコマンドでダウンロードすることもできます。詳細は関連するブログエントリをご覧になるか、graalvm.org/downloadsをお試しください。
- One-line GraalVM JDK Downloads
https://medium.com/graalvm/one-line-graalvm-jdk-downloads-91ee8d4e6ffd
https://logico-jp.io/2022/10/27/one-line-graalvm-jdk-downloads/ - Download GraalVM
https://graalvm.org/downloads/
- One-line GraalVM JDK Downloads
- Native Imageに対するjvmstatのサポートを追加し、Red Hatと共にJFRのサポートを拡張し、JMXのサポートに取り組みはじめました。これらすべてにより、実行時にネイティブ実行ファイルのパフォーマンスとリソース消費をJVMスタイルで監視できるようになりました。
- Overview (Jvmstat)
https://openjdk.org/groups/serviceability/jvmstat/overview-summary.html - JFR Support in Native Image #5410
https://github.com/oracle/graal/issues/5410 - [GR-40463] Add initial support for remote management over JMX in Native Images #4732
https://github.com/oracle/graal/issues/4732
- Overview (Jvmstat)
- GraalVM Native Imageインストーラのファイルサイズを~120 MBから~30 MB に縮小しました(
native-image-llvm-backend
は現在オプションのコンポーネントであることに注意してください)。 - ネイティブ実行ファイルでヒープダンプを作成できるようになりました。複数の方法で実現できます。
-XX:+DumpHeapAndExit
コマンドラインオプションの使用USR1
シグナルの送信org.graalvm.nativeimage.VMRuntime#dumpHeap
APIを使ってプログラム的に取得- 【参考】
- Create a Heap Dump from a Native Executable
https://graalvm.org/22.3/reference-manual/native-image/guides/create-heap-dump/ - VMInspectionOptions.java
https://github.com/oracle/graal/blob/master/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/VMInspectionOptions.java
- Create a Heap Dump from a Native Executable
- GraalVM EnterpriseのNative Imageでは、ビルド時にSBOM (Software Bill of Materials) を埋め込んで、既知のセキュリティ脆弱性の影響を受ける可能性のあるライブラリを検出できるようになりました。
- LinuxおよびWindowsでのデバッグがRed Hatからのコントリビュートにより改善されました。
- Planned Upgrades to Debug Info Support #5047
https://github.com/oracle/graal/issues/5047
- Planned Upgrades to Debug Info Support #5047
最新の主要なNative Image機能とオプションの概要については、Native Imageクイックリファレンスを参照してください。
Native Image Quick Reference v2.
https://medium.com/graalvm/native-image-quick-reference-v2-332cf453d1bc
https://logico-jp.io/2022/11/18/native-image-quick-reference-v2/
GraalPy 🐍
名前を短くしただけでなく、デフォルトで新しいバイトコードインタープリタに切り替えて非常に高速な起動と優れたインタープリタ性能を実現するため、GraalVM Pythonランタイムの起動時間を改善しました。さらにnumpy
、scikit-learn
、pyexpat
、kiwi
、pdb
、profile
、pytest
などのいくつかのパッケージに対するサポートを追加・拡張しました。
frozenモジュールの追加
https://medium.com/graalvm/graalvm-22-1-developer-experience-improvements-apple-silicon-builds-and-more-b7ac9a0f6066#7876
https://logico-jp.io/2022/04/29/graalvm-22-1-developer-experience-improvements-apple-silicon-builds-and-more/#7876
GraalPython: faster startup and extended library support
https://medium.com/graalvm/graalvm-22-2-smaller-jdk-size-improved-memory-usage-better-library-support-and-more-cb34b5b68ec0#96ea
https://logico-jp.io/2022/07/27/graalvm-22-2-smaller-jdk-size-improved-memory-usage-better-library-support-and-more/#96ea
GraalPyがFlaskをサポートしました。Flaskは、開発サーバーやデバッガー、ユニットテストのサポート、拡張機能などの機能を持つ、マイクロウェブフレームワークです。

また、Oracle CloudWorldのRaspberry Piスーパーコンピュータでは、GraalPyを使用してPythonコードを8倍高速に実行しました。
The Raspberry Pi Super Computer at Java One 2022
https://medium.com/oracledevs/the-raspberry-pi-super-computer-in-devnucleus-at-cloud-world-2022-2d24208d1712
新しいAPI、Pythonのバージョンや実装を超えたバイナリ互換性、そして進化可能性をもたらす、Pythonの新しいC APIであるHPyにも積極的に貢献しました。
HPy – A better C API for Python
https://hpyproject.org
例として、MatplotlibをC APIからHPyへのポーティングに関するエントリをご覧ください。
Porting Matplotlib from C API to HPy
https://medium.com/graalvm/porting-matplotlib-from-c-api-to-hpy-aa32faa1f0b5
https://logico-jp.io/2022/10/02/porting-matplotlib-from-c-api-to-hpy/
2023年のGraalPyからのさらなるエキサイティングなアップデートにご期待ください。
Community and Ecosystem
GraalVMはオープンソースのプロジェクトであり、プロジェクトに積極的に参加し、貢献し、フィードバックを共有し、GraalVMの改善を助けてくれる素晴らしいコミュニティがあることに感謝しています。
9月には、チューリッヒで第2回GraalVMコミュニティ・ワークショップを開催しました。コミュニティ・メンバーやパートナーとともに、プロジェクトのロードマップやガバナンス、最近および今後の機能、Native Image、Truffle、GraalVM言語とのライブラリの互換性向上など、いくつかの重要なトピックについて議論しました。参加者の皆様から頂いたフィードバックに感謝し、毎年このようなミートアップを開催していく予定です。

GitHubにGraalVMの公開ロードマップを追加しました。ここから現在取り組んでいること、そして今後のリリースで期待できることを一箇所で確認できます。ロードマップはこちらでご確認ください。
GraalVM Community Roadmap
https://github.com/orgs/oracle/projects/6

GraalVM Native ImageをサポートしたSpring Boot 3.0の一般提供が始まりました!🎉 このリリースは、Native Imageをフルサポートした最初のSpring Bootです。使うにあたっては、Spring InitializrでGraalVM Native Supportを依存関係として追加するだけです。
Spring Initializr
https://start.spring.io/
Spring Framework 6.0とSpring Boot 3.0におけるAOTとNativeのアップデートについては、Stéphane NicollとBrian Clozelによるプレゼンテーションをご覧ください。
Micronautは、JITとNative Imageの両モードで、外部の依存関係(例えばTestcontainers経由)に対して簡単にテストできるTest Resourcesを追加しました。
Introducing Micronaut Test Resources
https://melix.github.io/blog/2022/08/micronaut-test-resources.html
Helidonチームは、仮想スレッドベースのマイクロサービスフレームワークである Helidon Nimaを発表しました。これはNative Imageでも動作します。ぜひお試し下さい。
Helidon Níma Example – Loom based webserver
https://github.com/tomas-langer/helidon-nima-example
Red Hat は、Quarkus のいくつかの新しいバージョンをリリースして最新の GraalVMリリースをサポートしています。そしてNative Imageでのデバッグとモニタリングに対して貢献してくださいました。
また、JUnit 5.9.1では、GraalVMでビルドされたネイティブ実行ファイルをテストするため、新たにEnabledInNativeImage
とDisabledInNativeImage
のアノテーションが追加されています。
JUnit 5 Release Notes
https://junit.org/junit5/docs/snapshot/release-notes/#release-notes-5.9.1
また、GraalVMの新しい興味深い使用例もいくつか出てきました。
Disney Streaming | 超高速なServerless JavaのためにGraalVMとMicronautを利用 | Improving Developer Productivity at Disney with Serverless and Open Source https://aws.amazon.com/blogs/opensource/improving-developer-productivity-at-disney-with-serverless-and-open-source/ |
Adyen | GraalVMを使い、Java空間でC/C++のコードを安全に実行 | GraalVM: running C/C++ application safely in the Java world https://adyen.com/blog/graalvm-running-c-applications–in-the-cloud |
クラウドベンダー | クラウドベンダーがライブラリやSDKでのNative Imageのサポートを提供 | OCI SDK for Java https://blogs.oracle.com/cloud-infrastructure/post/announcing-oci-java-sdk-300 Azure Azure GraalVM Netty Support client library for Java https://learn.microsoft.com/java/api/overview/azure/aot-graalvm-support-netty-readme?view=azure-java-preview Setting up a GraalVM Native Image project for the Amazon SDK for Java – Amazon SDK for Java 2.x https://docs.amazonaws.cn/en_us/sdk-for-java/latest/developer-guide/setup-project-graalvm.html Enables GraalVM Native Image support for Google Cloud Java Client Libraries. https://github.com/GoogleCloudPlatform/native-image-support-java |
OCI | GraalVM Enterpriseを直接Oracle Cloud DevOpsビルドパイプラインやOCI Code Editor、Cloud Shellで利用可能 | directly in OracleCloud DevOps build pipelines https://blogs.oracle.com/java/post/announcing-graalvm-enterprise-in-oci-devops OCI Code Editor and Cloud Shell https://blogs.oracle.com/java/post/announcement-of-graalvm-enterprise-in-oracle-cloud-infrastructure-code-editor-and-cloud-shell |
JHipster | jhipster-native ブループリントを新規追加し、GraalVMのおかげで非常に高速で完全なWebアプリケーションを簡単に起動できるようにしました。( jhipster-native ブループリントはSpring Bootを使っているが、JHpisterとGraalVMでMicronautやQuarkusを利用可) | Introducing Spring Native for JHipster: Serverless Full-Stack Made Easy https://developer.okta.com/blog/2022/03/03/spring-native-jhipster |
HPI (The Hasso Plattner Institute at the University of Potsdam, Germany) | HPIの学生が、GraalVMを使って Minecraftサーバーをネイティブコンパイルしました。 | Native Minecraft Servers with GraalVM Native Image https://medium.com/graalvm/native-minecraft-servers-with-graalvm-native-image-1a3f6a92eb48 |
Stepstone | GraalVM WASMを使ってJavaにDoomを組み込みました | PoC of running Doom on top of GraalVM https://github.com/stepstone-tech/doom-graalvm |
Iris project | 深層学習ワークロードの高速化にGraalVMを利用 | Groovy: Classifying Iris Flowers with Deep Learning, Groovy and GraalVM https://blogs.apache.org/groovy/entry/classifying-iris-flowers-with-deep |
Babashka | ClojureコミュニティのMichiel Borkentが、Clojureの高速スクリプト環境を構築するためにNative Imageを使用した経験を紹介しました | Babashka: How GraalVM Helped Create a Fast-Starting Scripting Environment for Clojure https://medium.com/graalvm/babashka-how-graalvm-helped-create-a-fast-starting-scripting-environment-for-clojure-b0fcc38b0746 https://logico-jp.io/2023/01/07/babashka-how-graalvm-helped-create-a-fast-starting-scripting-environment-for-clojure/ |

GraalVMコミュニティに、独自のマスコットができました。2023年にはGrabbitをもっとご覧になることでしょう!🐰
みんなのためにGraalVMを改善のための手助けになるあらゆる貢献とフィードバックに対して、コミュニティに感謝しています。
残念ながら、今年は悲しいニュースなしには終わりませんでした。GraalVMおよびRubyコミュニティは、TruffleRubyを立ち上げ、Oracle Labsで何年も一緒に働いていたChris Seatonを失いました。
Chris Seaton
https://chrisseaton.com/
A high performance implementation of the Ruby programming language, built on GraalVM
https://github.com/oracle/truffleruby/
彼はその後も知識を共有し、ShopifyでTruffleRubyに取り組む際にもコミュニティのメンバーを助けてくれました。Chrisのご家族とご友人に深い哀悼の意を表します。
See you in 2023!🎄
すでに、2023年に皆様にご覧いただけるような新しいエキサイティングな機能の開発に取り組んでいます。フィードバックや提案がありましたら、Slack、GitHub、Twitter、Mastodonでお気軽にシェアしてください(そして何より、私たちの開発者アンケートにご協力ください!)。
Slack invitation
https://www.graalvm.org/slack-invitation
GitHub Issues
https://github.com/oracle/graal
Twitter
https://twitter.com/graalvm
Mastodon
https://mastodon.online/@graalvm
GraalVM Community Survey FIN
https://graalvm.typeform.com/to/mbVLI58l
素晴らしいGraalVMコミュニティの一員であることに感謝しています。Happy holidays!2023年にお会いしましょう!
— GraalVM team