【レビュー】

スクリプト言語にコンパイラ!? - JavaFX用コンパイラ"OpenJFX Compiler"

    杉山貴章  [2007/07/27]

    去る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なども用意されプロジェクトへの協力を募集しているので、興味のある人は積極的に参加してみて欲しい。

    関連記事

    関連サイト

    関連したタグ

    新着記事

    特設サイトの情報

      人気記事

      一覧

        イチオシ記事

        新着記事

        特別企画

        マイナビニュースマガジン