Learn · guides
GraalVM JavaScript スクリプトを初めて書く (2026)
GraalVM JavaScript スクリプトを初めて記述しましょう。エントリーポイントを登録し、イベントにフックして、Java を再コンパイルすることなくホットリロードします。動作する例を交えて説明します.
最初の GraalVM JavaScript スクリプトを書く
最初の GraalVM JavaScript スクリプトを書くということは、3つの小さなステップを踏むことを意味します。スクリプトをホストのエントリポイントに登録し、イベントやモジュールにアタッチし、エンジンがロードできるようにスクリプトフォルダに保存します。エンジンは GraalVM Polyglot API 上で動作するため、スクリプトはそのままの JavaScript であり、Java を再コンパイルすることなくリロードされます.
まず必要なこと
エンジンを埋め込むホストプログラム。ホストはGraalVM JavaScriptを同梱し、スクリプトから呼び出せるオブジェクト群を公開し、スクリプトフォルダを監視します。GraalVMを個別にインストールする必要はありません。ホストに同梱されています。ホストから渡されるオブジェクトに対して、プレーンなJavaScriptを書きます。
それらのオブジェクトが何に対応しているかを知っておくと役立ちますが、始めるにはJavaを書く必要はありません。JavaScriptを以前に書いたことがあれば、パターンは馴染み深いでしょう。ホストは、インポートするライブラリのように動作し、それを使ってプログラムの内部にアクセスします。
3つのステップ
スクリプトフォルダを見つけてください
起動時に、ホストは既知のディレクトリからスクリプトを読み込みます。正確なパスについては、ホストのドキュメントをご確認ください。通常は、インストールディレクトリ内の
scripts/フォルダです.スクリプトファイルを作成する
そのフォルダに新しい
.jsファイルを作成してください。ホストは、次にスクリプトをロードするときにそれを検出し、起動時、またはサポートされている場合はリロードコマンドを実行したときに検出します.登録とフック
ファイル内に、ホストのエントリーポイントにスクリプトを登録し、その後、イベントに動作を関連付けたり、ホストが認識するモジュールを定義したりします.
はい、これで終わりです。ファイルを保存し、リロードすればスクリプトが実行されます。ビルドステップもコンパイルも、待つ時間もありません。編集してリロードするだけです。
最小限の例
ほとんどのホストは、スクリプトに自身を登録するためのエントリポイントと、JavaScriptとプログラムをブリッジするいくつかのプロキシオブジェクトを渡します。正確な名前はホストによって異なりますが、構造は同じです。最初のスクリプトは通常、自身を宣言し、あるイベントに反応するだけです。
// Register the script with the host.
script.register({
name: "hello-world",
version: "1.0.0",
});
// React to an event the host exposes.
script.on("enable", () => {
client.print("Hello from my first script.");
});ホスト自身のAPIリファレンスで、実際のオブジェクト名とメソッド名を確認してください。重要なのはパターンです。登録し、次にイベントをフックするか、モジュールを定義します。ほとんどのホストはイベントループまたはライフサイクルフックを公開しており、ほとんどのスクリプトは1つにリッスンすることで開始します。
作業中のホットリロード
ファイルを保存し、スクリプトをリロードします(ライブリロードをサポートしていない場合はホストを再起動します)。変更は再ビルドなしで有効になります。この高速なループは、modをコンパイルする代わりにスクリプトを使用する主な理由です。スクリプトは数秒でリロードされますが、コンパイルされたmodは再構築および再起動する必要があります。
| アプローチ | イテレーションループ | 言語 | どのような場合に適しているか |
|---|---|---|---|
| GraalVM JavaScriptスクリプト | 編集、保存、リロード | JavaScript | 簡単な修正、カスタム動作 |
| コンパイルされたmod | 再構築、再起動 | JavaまたはKotlin | 大きな機能、より深いフック |
簡単な機能を追加したり、動作を調整したりする場合は、スクリプトが最適です。エンジンに深く組み込んだり、新しいプリミティブを公開したりする必要がある場合は、コンパイルされたMODが適しているかもしれません。
スクリプトでできること、できないこと
スクリプトは、ホストが公開しているオブジェクトに対して呼び出しを行うことができますが、それ以外はできません。ホストは、GraalVM Polyglotホストアクセスホワイトリストを通じて、スクリプトがアクセスできるクラスとメソッドを宣言し、デフォルトは拒否されます。これにより、スクリプトは安全で予測可能です。アクセスしたいオブジェクトが公開されていない場合は、ホストが追加する必要があります。スクリプト側からホワイトリストを迂回することはできません.
これはバグではなく、仕様です。これは、スクリプトが誤って(または悪意を持って)内部メソッドを呼び出したり、アクセスすべきでないオブジェクトにアクセスしたりして、ホストを壊すことができないことを意味します。また、ホストの管理者がサポートするものとサポートしないものを明確に制御できることも意味します。
よくある質問
いいえ。ホストプログラムはGraalVMとJavaScriptエンジンをバンドルしています。JavaScriptファイルを作成するだけです。スクリプトフォルダにドロップしてください.
はい。このエンジンは最新の ECMAScript の機能、import および export を使用するモジュールなどに対応しているため、古いサブセットに縛られることはありません.
ホストのスクリプトフォルダにファイルが存在し、ホストが期待する拡張子を持ち、ホストのエントリーポイントに登録されていることを確認してください。通常、登録呼び出しのタイプミスが原因です.
いいえ。エンジンはホスト JVM の内部に組み込まれているので、あなたのスクリプトはスタンドアロンの Node.js ランタイムではなく、ホストプログラムと通信します.