GraalVM Tools for Java拡張機能
- 拡張機能のインストール
- GraalVMインストール・ウィザード
- Javaの開発およびデバッグ
- VisualVMとの統合
- Micronautサポート
- ネイティブ・イメージのビルドおよびデバッグ
- ポリグロット・プログラミングおよびデバッグ
- 組込みDebug Adapter Protocol
- 拡張機能設定
GraalVM Tools for Java拡張機能は、Javaへの完全なサポートを提供し、Just-in-TimeコンパイラとAhead of Timeコンパイラの両方とともにGraalVMランタイムを備え、快適で便利な統合開発環境を実現します。この拡張機能はJavaに加えて、VS Codeでのポリグロット環境を実現し、JavaScript、Node.js、Python、R、Rubyの言語に対する完全な編集およびデバッグ機能を提供します。拡張機能では、GraalVMをインストールするためのウィザードを提供し、開発環境の構成を簡素化します。
GraalVM Tools for Java拡張機能をGraalVM Tools for Micronaut拡張機能と組み合せると、VS CodeでのMicronautフレームワークのネイティブ・サポートが提供され、Java開発者により多くの可能性が開かれます。
ノート: 拡張機能はテクノロジ・プレビューであり、開発チームは、開発者に優れた操作性を提供するために、さらなる改善に積極的に取り組んでいます。
拡張機能のインストール
GraalVM Tools for Java拡張機能をVS Codeにインストールするには、次の手順を実行します:
- 左側のアクティビティ・バーの「Extensions」に移動します。
- 検索フィールドでGraalVMを検索します。
- 見つかったら、「Install」をクリックします。このアクションにより、VS Code MarketplaceからGraalVM Tools for Java拡張機能がインストールされます。
- 必要に応じてリロードします。
インストールしたら、左側のアクティビティ・バーにGrアイコンが表示されます。
GraalVMインストール・ウィザード
拡張機能をインストールした後、組込みインストール・ウィザードを使用してGraalVMをインストールできます(左側のアクティビティ・バーにあるGrアイコンをクリックします)。既存のGraalVMインストールを追加するか(すでにGraalVMを使用している場合)、VS Code内からすぐにダこれをウンロードできます。ダイアログ・ウィンドウに、次のオプションが提示されます:
- Download & Install GraalVM
- Add Existing GraalVM
GraalVMは、Java HotSpot VMに基づくJDKを含み、Javaで記述された最適化Just-in-Time (JIT)コンパイラやGraalコンパイラを統合し、ネイティブ・イメージでAhead-of-Timeコンパイルをサポートできるようにします。Java仮想マシン(JVM)で実行されるアプリケーションは、GraalVMで実行できます。
「Download & Install GraalVM」アクションを使用すると、環境変数をスムーズに設定でき、VS CodeでGraalVMランタイムが自動的に準備されるため、このアクションをお薦めします。
登録された各GraalVMインストールには、その場所と使用可能なすべてのコンポーネントが表示されます。プラグインはインストールされているか、ダウンロード可能です。コンポーネント名の上にカーソルを置くと、インストール(プラスのアイコン)または削除(バケツのアイコン)のコンテキスト・アクションが表示されます。登録されたすべてのGraalVMインストールは、「File」→「Preferences」→「Settings」 (macOSの「Code」→「Preferences」→「Settings」)の構成ファイルにリストされます。
このインストール・モデルの利点は次のとおりです:
- 複数のGraalVMおよびコンポーネントのインストールが同時に許可されます。
- これにより、ランタイム・バージョン間で簡単に切り替えることができます。
- VS Codeグローバル記憶域またはローカル・ディスクからも、不要なGraalVMインストールを迅速に削除できます。
GraalVMのダウンロードとインストール
「Download & Install GraalVM」を選択すると、インストール・ウィザードによって次のことが求められます:
- GraalVMディストリビューションを、Community (すべての目的について無料)またはEnterprise (評価および開発について無料)から選択します
- GraalVMのバージョン(22.x、21.x、20.xまたは最新スナップショット(ナイトリ・ビルド))を選択します
- Javaバージョン(11または17)を選択します
- 宛先フォルダを選択します
GraalVM Community Editionを選択した場合、インストール・ウィザードはGithubからパッケージをバックグラウンドでダウンロードし、進捗を表示します。GraalVM Enterprise Editionを選択した場合は、Oracle Technology Networkライセンス契約に同意して電子メール・アドレスを入力するよう求められます。電子メール・アドレスの指定は必須です。
インストール・ウィザードによって、Oracleソフトウェア・ダウンロードからバックグラウンドでパッケージがダウンロードされ、進捗が表示されます。プロキシを使用している場合は、「Setup Proxy」コマンドを使用するか、http_proxy
およびhttps_proxy
の各環境変数をオーバーライドして、プロキシ構成を設定します。
同時に、「Install Optional GraalVM Components」ウィンドウが表示され、追加のプラグイン(JavaScriptおよびNode.jsサポート、LLVMなど)をGraalVMにインストールするように求められます:
確認すると、選択リストに移動します:
既存のGraalVMの追加
「Add Existing GraalVM」アクションを使用して、既存のGraalVMインストールを選択します。前述のインストール・シナリオのように、GraalVMインストールをデフォルトとして設定し、追加のコンポーネントをインストールするように求められます(まだインストールされていない場合)。「Add Existing GraalVM」は、「GRAALVM: INSTALLATIONS」パネルの横にあるアイコンを使用して起動することもできます。
デフォルトJavaの設定
インストールが完了すると、デフォルトJavaの設定アクションが呼び出されます。新しく追加されたGraalVMをアクティブに設定するには、インストールの横にあるホーム・アイコンをクリックします:
「Configure active GraalVM」ウィンドウで、両方の「Set as JAVA for Terminal」オプションを選択します:
または、「View」、「Command Palette」から同じアクションを呼び出すことができます(Linuxの場合は[Ctrl]+[Shift]+[P]ホット・キーの組合せを使用し、macOSの場合、コマンド・パレットを開くには[Command]+[Shift]+[P]を使用し、GraalVMを検索します)。他のアクションには、「GraalVM: Active GraalVM Installation」があります。
Javaの開発およびデバッグ
GraalVM Tools for Java拡張機能は、VS CodeにおけるJava言語開発とデバッグの完全なサポートを提供します。この拡張機能は、自動補完、コード・ナビゲーション、リファクタリングなどの通常の機能に加えて、GraalVMネイティブ・イメージでのAhead-of-Timeコンパイルのサポート、VisualVMとの統合、ポリグロット・プログラミングのサポートを提供します(後述します)。
Javaアプリケーションを開発、コンパイル、実行およびデバッグするには、GraalVMがVS CodeのデフォルトのJavaランタイムである必要があります。GraalVMのインストールに関するの項の説明に従ってGraalVMのデフォルトを設定するか、VS Codeのjava.home
設定を編集してGraalVMへのパスを手動で指定できます。指定しない場合、現在のシステム・パスで検索されます。
ノート: パスがGraalVMフォルダを指していない場合は、「User Settings」ウィンドウに移動し、settings.jsonファイルのnetbeans.jdkhome
値を使用します。この構成は、Java言語サーバーの起動に使用されます。
その後、最初から作成したアプリケーションまたはVS Codeで開いたJavaプロジェクトが、GraalVMで実行されます。JVM上で実行されるすべてのアプリケーションは、GraalVM上で変更なしで実行できます。
GraalVMで実行されているJavaアプリケーションをデバッグするには、まず起動構成を作成します:
- デバッグまたは実行するファイルを開きます。
- 左側のパネルのバグ・アイコンをクリックして、「Debug」ビューに切り替えます。新しく開いたウィンドウで、launch.jsonファイルを作成するように提案されます。
- Java 8+環境を選択します:
デバッグを開始するには、[F5]を押すか、「Run」→「Start Debugging」に移動します。
使用可能な起動構成
デフォルトで使用可能な起動構成がいくつかあり、さらに追加できます。
- ソース・コードのCodeLens機能は、コードでRun mainまたはDebug main CodeLens (あるいはその両方)が選択されている場合、「Java 8+...」起動構成(デバッガまたは実行)を使用します。
-
「Run and Debug」・アクティビティ・パネルで「Java 8+...」を選択すると、次のオプションを使用できます:
- 「Launch Java 8+ App」は、現在のJavaプロジェクトをデバッグまたは実行します。
- 「Attach to Port」および「Attach to Process」を使用して、デバッガをアタッチします。ドロップダウン・リストの下部にある「Java 8+ ...」を選択した場合に使用できます。
- この構成を選択し、「実行」をクリックします
- 使用可能なプロセスから選択するか、ポートを入力して、JDWPで実行中のJVMに接続します
- 「Attach to Shared Memory」は、前述の「Attach…」に加えてWindowsでも使用できます
起動構成をさらに追加するには、「Run」、「Add Configuration」に移動するか、.vscode/launch.jsonファイルを開き、右隅にある「Add Configuration」をクリックします。起動構成オプションに関する提案は、launch.json
のコード補完を使用して使用できます。
VisualVMとの統合
GraalVM Tools for Java拡張機能は、VisualVM(オールインワンのJava(およびポリグロット)のモニタリングとトラブルシューティング・ツール)との統合を提供します。VisualVMは、強力で使いやすいビジュアルJavaツールをVS Codeに提供します。
「View」、「Command Palette」に移動して、「VisualVM」を検索する場合は、VisualVMに関連する次のアクションを使用できます:
特別な起動構成(Launch VisualVM & Java 8+ Application)は、GraalVM Tools for Java拡張機能によって提供され、プロジェクトとともにVisualVMを起動します。
詳細は、VS Code内からVisualVMを起動する方法および使用可能な起動構成について学習する専用ガイドを参照してください。
Micronautサポート
GraalVM Tools for Javaの拡張機能は、GraalVM Tools for Micronautの拡張機能と組み合せて、Micronautフレームワークに対する完全なサポートを提供します。Micronautプロジェクトを作成し、異なるデバッグ・プロトコルを使用して、これを実行およびデバッグできます。このMicronautのネイティブ・サポートにより、VS Codeから直接Micronautアプリケーションのネイティブ実行可能ファイルをビルドできます。さらに、アプリケーション・アーティファクトを使用してDockerイメージをビルドすることも、GraalVMネイティブ・イメージによって生成された実行可能ファイルを含むDockerイメージをビルドしてコンテナにデプロイすることもできます。
詳細は、GraalVM Tools for Micronautの拡張機能に関するドキュメントを参照してください。
ネイティブ・イメージのビルドおよびデバッグ
GraalVMのダウンロードにはGraalVMネイティブ・イメージが含まれており、VS Codeで直接、Javaコードをネイティブ実行可能ファイルに事前にコンパイルできます。実行時にアプリケーションに必要なコードのみがコンパイルされ、最終的なネイティブ実行可能ファイルにリンクされます。利点は多数あります。アプリケーションは次のことを行います:
- 少数の通常のリソースを使用して小規模な実行可能ファイルにコンパイルし、短期間で軽量化を実行します
- ウォームアップ時間なしでピーク・パフォーマンスを達成します
- 攻撃される領域を小さくし、リバース・エンジニアリングを阻止することで、セキュリティを向上します
トレース・エージェントを使用した構成
ネイティブ実行可能ファイルをビルドすると、プログラム全体の表現が作成され、実行時にどのクラスとメソッドを使用するかがわかります。したがって、ビルドは静的分析に依存します。ただし、この分析では、Javaリフレクション・コールや動的プロキシ・オブジェクトなどのすべての動的機能を常に完全に予測することはできません。動的機能の検出されない使用状況を事前構成する必要があります。そうしないと、ネイティブ実行可能ファイルで省略されます。
ネイティブ・イメージは、ビルド・プロセスを構成するための複数のオプションを提供しています。最も便利なのは、トレース・エージェントを使用することです。エージェントは、アプリケーションがJVMで実行されている間に動的機能コールを追跡し、それらのコールをJSON構成ファイルに記録します。
GraalVM Tools for Java拡張機能は、動的機能コールの追跡および登録プロセスを自動化するトレース・エージェントに対する実験的なサポートを提供し、VS Codeでのネイティブ実行可能ファイルの構築をさらに容易にします。Launch Native Image Agent & Java 8+ Applicationという特別な起動構成は、トレース・エージェントでJavaプロジェクトを開始するための拡張機能によって提供されます。
次の項では、Javaアプリケーションのネイティブ実行可能ファイルをビルドし、トレース・エージェントをVS Codeに適用する方法について学習します。
ネイティブ実行可能ファイルのビルド
VS CodeでJavaアプリケーションのネイティブ実行可能ファイルを作成するには、次の手順を実行します:
- launch.jsonファイルを作成します。作成されていない場合は、「create a launch.json file」リンクを使用して、「Run and Debug」アクティビティ・パネルから新しいファイルを作成します。選択を求められたら、「Java 8+ environment」を選択します。
- Launch Native Image Agent & Java 8+ Application構成を作成します。launch.jsonファイルを開き、エディタの右下隅にある「Add Configuration…」をクリックします。GraalVM: ネイティブ・イメージ・エージェントを使用したJava 8+アプリケーションの起動構成を選択します。
- 編集後にlaunch.jsonファイルを保存します。
- 「Run and Debug」アクティビティ・パネルで、「Launch Native Image Agent & Java 8+ Application」構成を選択し、「Run Without Debugging」をクリックして現在のプロジェクトを開始します。
ノート: 「Start Debugging」アクションをクリックしてプロジェクトを開始しないでください。トレース・エージェントはデバッガ・エージェントと互換性がなく、このような構成の実行は失敗します。
- 生成される構成ファイルの出力フォルダを指定します。実行中、エージェントはJVMとインタフェースして、クラス、メソッド、フィールド、リソースを参照したり、プロキシ・アクセスをリクエストするすべてのコールをインターセプトします。エージェントは、インターセプトされたすべての動的アクセスを含む構成ファイルを生成し、指定した出力フォルダに格納します。プロジェクトを開始するときに、VS Codeによって目的の場所を選択するように求められます。次の中から選択できます。
META-INF/native-image
- 構成ファイルを格納するプロジェクト・ソースのデフォルトの場所/tmp
- 構成ファイルは/tmp/native-image
フォルダに格納されます- カスタム・フォルダ - 構成ファイルは、指定したカスタム・フォルダに格納されます
- 実行中のプロセスへのロードを生成して、より多くのコードを起動し、最適な構成を生成します。
- 実行可能なすべての実行パスが実行されたら、プロセスを終了します。この時点で、トレース・エージェントは収集した構成を、選択した出力フォルダにダンプします。
- 「Terminal」に移動し、「New Terminal」をクリックします。現在の作業フォルダ内のJavaクラス・ファイルからネイティブ実行可能ファイルをビルドするには、次のコマンドを使用します:
native-image [options] class [imagename] [options]
プロジェクトがMavenまたはGradleベースである場合、Javaで記述されたネイティブ実行可能ファイルのビルドおよびテストのサポートを追加するための専用のMavenまたはGradleプラグインがあります。詳細は、次のページを参照してください:
- Gradleプラグインに関する項
- Mavenプラグインに関する項
Micronautフレームワークを使用してJavaプロジェクトを作成する場合、VS Codeクイック・アクションを使用してMicronautアプリケーションのネイティブ実行可能ファイルを作成できます。方法を学習するにはこちらを参照してください。
GraalVMネイティブ・イメージの詳細は、こちらを参照してください。
ネイティブ実行可能ファイルのデバッグ
GraalVM Tools for Java拡張機能では、VS Code内から直接実行されている状態にあるネイティブ実行可能ファイルのJavaのようなデバッグ機能が提供されます。ブレークポイントを設定し、アプリケーションの状態を検査し、VS Codeのネイティブ・イメージ・プロセスにデバッガをアタッチして、Javaアプリケーションのソース・コードにステップ実行することもできます。
詳細は、ネイティブ・イメージ・デバッグ・ガイドを参照して、デモ・アプリケーションを確認してください。
ポリグロットのプログラミングおよびデバッグ
GraalVM Tools for Java拡張機能により、VS Codeでポリグロット環境を実現できます。Python、Ruby、R、JavaScript、Node.JSなど、多数の一般的な言語に必要な編集およびデバッグ機能が提供されます。拡張機能により、双方向の方法でポリグロット・プログラミングが可能になります: つまり、JavaにJavaScript、Ruby、RおよびPythonを埋め込むことも、それらの言語からJavaをコールすることもできます。ホスト言語とゲスト言語は、直接相互に運用して、同じメモリー領域でデータをやり取りすることができます。
GraalVM Tools for Java拡張機能は、デフォルトでJavaScript、Node.jsおよびPython用の完全な編集機能を備えています。VS CodeのRubyおよびR開発では、言語サーバーを追加でインストールする必要があります。それ以外にも、拡張機能には言語サーバー・プロトコルの組込み実装が付属しており、コード補完、使用方法の検索、宣言への移動、CodeLens、ホバーによるドキュメント表示など、よりスマートな編集機能が追加されます。デフォルトでは、サポートされているすべての言語に対してデバッグ機能が提供されています。
専用ガイドに進み、VS CodeでのJavaScriptおよびNode.JS、Python、Ruby、Rアプリケーションのデバッグ、言語サーバー・プロトコルの実装および編集機能について確認してください。
組込みDebug Adapter Protocol
Debug Adapter Protocol (DAP)の組込み実装により、ユーザーはchromeDevTools
またはdebugAdapter
のいずれかを選択して、VS Codeでデバッグ・プロトコルを選択できます。Chrome Dev ToolsでDebug Adapter Protocolを使用する利点は、(1) VS Codeに対してネイティブであること(中間変換を必要としない)、(2)マルチスレッドをサポートし、Rubyアプリケーションなどのデバッグに特に役立つ可能性があることです。
「VS Codeでのポリグロットのプログラミングおよびデバッグ」の詳細は、ドキュメントを参照してください。
拡張機能設定
GraalVM Tools for Java拡張機能は、VS Codeでの次の設定に影響します:
- graalvm.home - GraalVMインストールへのパス
- graalvm.installations - 登録済のすべてのGraalVMインストール
- graalvm.systemDetect - システム環境変数からGraalVMのインストールを検出します
- graalvm.languageServer.currentWorkDir - GraalVMの言語サーバー・プロトコルの作業フォルダへの絶対パス
- graalvm.languageServer.start - 実行中またはデバッグ中のプロセス内でGraalVMの言語サーバー・プロトコルを起動します
- graalvm.languageServer.delegateServers - 他の言語サーバーが実行される
language@[host:]port
のカンマ区切りリスト - graalvm.languageServer.startRLanguageServer - R言語サーバーを起動します
- graalvm.languageServer.startRubyLanguageServer - Ruby言語サーバーを起動します
推奨事項
VS Code用のGraalVM拡張機能で推奨される拡張機能は、次のとおりです:
フィードバックの提供またはヘルプの参照
プライバシ・ポリシー
さらに学習するには、Oracleプライバシ・ポリシーを参照してください。