ScalaFX を動かしてみる

h2. Introduction
巷では、とりわけ日本では終わってる感の強い RIA (Rich Internet Application) の中で、WPF (Silverlight) や AIR よりもさらにマイナーかつ注目度の低い JavaFX を皆さんご存知でしょうか?
じつは私も先週知りました。
JavaFX 1.0 から 2.0 への方針変更でますます人気ないみたいですね。
そんなの何がいいんだよ HTML5 だろ今更興味ないよと言われそうですが、ちょっとはいいトコもあるんだョ。
・Declarative Syntax
・WebKit使える
・JVMで動く
って感じで、触らないのも勿体無い気がしてきませんか?
そしてJVMだからScalaからもいけちゃうんです。そこで率先して(?)試してみました。
こちらの手順+αなので、詳しくはこちらを参照して下さい。
“DeveloperGettingStarted”:http://code.google.com/p/scalafx/wiki/DeveloperGettingStarted
h2. 動作環境
私が試したのは以下の環境です。
なんと、あろうことか JavaFX 2.0 は Windows しか正式リリースされておらず、 Mac はインストーラもない Beta で Linux はまだないというアーリーアダプターに冷たい状況となっています。
bq. Windows XP
JDK 1.7 (1.6の方が面倒がないかも、、、)
Scala 2.9.1
JavaFX 2.0
IntelliJ IDEA
Mercurial
h3. インストール
まず、上記一式をインストールします。
次に、scalafx を落としてきます。
“scalafx”:http://code.google.com/p/scalafx/
Downloads を開いても何もないよ、なんて言わないでください。ソースをチェックアウトしましょう。
bc. hg clone https://code.google.com/p/scalafx/
そして、環境変数を通します。
bq. JAVA_HOME
SCALA_HOME
JAVAFX_HOME
反映するため、一旦ログインし直します。 (IntelliJ関係のどこかにそう書いてあった。)
h3. IntelliJのセットアップ
さて、ここからは IntelliJ です。
こちらを参考にしつつ IntelliJ Scala plugin をインストールします。
“Getting Started with IntelliJ IDEA Scala Plugin”:http://confluence.jetbrains.net/display/SCA/Getting+Started+with+IntelliJ+IDEA+Scala+Plugin
IntelliJ の Preference Plugins から scala で検索してダウンロードできます。
この時点で、scalafx のプロジェクトを開けばいいはずなんですが、もしかしたらコンパイラが見つからなくて怒られるかもしれません。その場合は、適宜設定を変えてみたり、空の scala のプロジェクトを作ってみるなどしてください。
h3. ビルドとデモの実行
設定できたら、 All Tests の右の三角を押してテストがパスすることを確認します。
私の環境では、JFXApp.scala でコンパイルエラーが出たので、以下のように修正しました。
bc. // before
javafx.application.Application.launch(classOf[AppHelper], args:_*)

bc. // after
javafx.application.Application.launch(classOf[AppHelper], args)
配列を展開しなくてよくなったんでしょうか?コンパイラの言うがままに変更しただけですが、動いたので深く考えないことにします。
そこまで行ったら、任意のデモを開いて、クラスの辺りを右クリックして Run main を選ぶとデモが実行されます。
h3. まとめ
結局、なぜ ScalaFX かという話ですが、デモを見れば分かる通り yield でアニメーションすれば楽だよね〜、というのが一つ。アルゴリズムの可視化なんていうのも簡単にできそうです。あとは、宣言的にUIを作れるよね〜、など。
JavaFX とか別に興味なくても、Scala でサラッと書いたら絵が出てアニメーションするのっていい感じじゃないですか。
Scalaに興味があったら是非お試しあれ。

Author: _fp

Software Engineer Place: Tokyo, Japan Skills: C, Javascript, Objective-C, Perl, Clojure, Java, PythonErlang, Haskell, OpenGL Twitter: _fp