去る7月20日(米国時間)、JavaFX Scriptのオープンな実行環境の開発を行っているプロジェクトOpenJFXは、その活動の一環として「OpenJFX Compiler」の開発をインキュベータプロジェクトとして開始した。OpenJFX Compilerは、JavaFXスクリプトをJava VM上で動作するバイトコードに変換するコンパイラ。通常のJavaFXスクリプトも最終的にはJava VMの上で動作するが、インタプリタ方式なのでスクリプトからバイトコードへの変換、そしてクラスローダによる読み込みまでの一連の作業は全てランタイムで行われる。
OpenJFX CompilerはJavaFXアプリケーションの開発にコンパイラ方式を採り入れるもので、スクリプトからバイトコードを生成する部分までを独立して行えるようにする。このコンパイラはJDKのjavacコンパイラとの互換性を持ち、生成されるバイトコードは当然ながら通常のJavaプログラムから生成された場合と全く同じものになる。
OpenJFX Compilerプロジェクトの公式サイトはjava.net内に開設されている。現在はまだプロジェクトがスタートしたばかりで最低限の実装しか公開されていないが、今回は早速このOpenJFX Compilerを試してみたいと思う。
なお、JavaFX Script自身に関してはこちらやこちらの白石俊平氏の記事が詳しいので、合わせて参考にしていただきたい。
リポジトリのチェックアウトとビルド
OpenJFX Compilerの実装は、現時点ではSubversionのリポジトリからのみ入手することができる。したがってまずはSubversionのクライアントが必要だ。公開されているファイル群はNetBeansのプロジェクト形式になっているので、NetBeansのSubversionモジュールを使うと便利である。
現在はメイン(trunk/)開発ブランチのみ用意されている。リポジトリのURLは「https://openjfx-compiler.dev.java.net/source/browse/openjfx-compiler/」でユーザ名は「guest」、パスワードは設定されていない。詳しくはこのページの解説を参照していただきたい。
チェックアウトしたらNetBeansでプロジェクトを開くと図1のような構成になっている。プロジェクトツリーのメニューからこれをビルドすると、ファイルツリーのdistフォルダ以下に図2のように「javafx.jar」が生成される。これがコンパイラの本体となる。
図1: OpenJFX CompilerのNetBeansプロジェクト |
図2: ビルドするとjavafx.jarが生成される |
JavaFXスクリプトをコンパイルする
それでは、OpenJFX Compilerを使って実際にJavaFXスクリプトをコンパイルしてみよう。ただし、現時点ではまだ非GUIのスクリプトしかコンパイルすることができない。すなわち、javafx.uiパッケージ以下のコンポーネントは一切利用できない。GUI部分のデザインと開発はこれからスタートするという話で、利用できるようになるまでにはまだもう少し時間がいりそうだ。
今回はひとまずコンパイラを試してみるということで、GUIを使わないリスト1のようなスクリプトを用意した。「大吉」「中吉」「小吉」の中からランダムで1つ選んで表示するという、ごく単純なスクリプトである。
リスト1: CompilerTest.fx - テスト用の'おみくじ'スクリプト
import java.lang.String;
import java.lang.System;
import java.lang.Math;
public class Omikuji {
operation hiku():String;
}
operation Omikuji.hiku() {
var x = Math.random() * 3;
return if (1 > x)
then "小吉です。"
else if (2 > x)
then "中吉です。"
else "大吉です。";
}
var omikuji = new Omikuji();
System.out.println(omikuji.hiku());
コンパイルは、カレントディレクトリと先程生成したjavafx.jarをクラスパスに追加して、javaコマンドを用いてプロンプト1のように行う。JavaFX Script仕様に沿っていてもエラーになることがあるが、そこはまだ開発版ということでいろいろ試して欲しい。
プロンプト1: OpenJFX Compilerを使ったコンパイル
> java -classpath ".;.\javafx.jar" -jar javafx.jar CompilerTest.fx
コンパイルに成功すると、Javaのソースファイルとクラスファイルが生成される。今回の例ではCompilerTestとCompilerTest$Omikujiのものだ(プロンプト2)。詳細は割愛するが、ソースコードを見る限りでは生成されるクラスはcom.sun.javafx.runtime.Contextインタフェースをimplementsしたものになるようだ。
プロンプト2: Javaソースファイルとクラスファイルが生成される
> dir
2007/07/26 20:11 <DIR> .
2007/07/26 20:11 <DIR> ..
2007/07/26 20:11 1,092 CompilerTest$Omikuji.class
2007/07/26 20:11 1,185 CompilerTest$Omikuji.java
2007/07/26 20:11 1,250 CompilerTest.class
2007/07/26 20:06 385 CompilerTest.fx
2007/07/26 20:11 1,346 CompilerTest.java
2007/07/26 20:08 3,906,126 javafx.jar
6 個のファイル 3,911,384 バイト
2 個のディレクトリ 8,163,250,176 バイトの空き領域
生成されるのはJavaバイトコードなので、実行は通常通りjavaコマンドで行うことができる。ただし、JavaFX関連のクラス/インタフェースを利用したプログラムになっているので、javaxf.jarをクラスパスに追加して実行する必要がある(プロンプト3)。
プロンプト3: 実行方法は通常のJavaプログラムと同じ
> java -classpath .;javafx.jar CompilerTest
中吉です。
OpenFX Compilerはまだ開発がスタートしたばかりなので満足に使えるレベルにはなっていないが、JavaFX活用のひとつの形として注目する価値がある。開発者向けのWikiなども用意されプロジェクトへの協力を募集しているので、興味のある人は積極的に参加してみて欲しい。