Play2でHaxeを使う覚え書き
HaxeはActionScriptをベースにした汎用言語だが、Javascriptへのコンパイルが当初から実現されているのでBetter JSのひとつとしても人気。
実験的にJava, C#, C++へのコンパイルまでサポートされている。
特徴としては、強力な型推論を持ったクラスベースのオブジェクト指向言語。
型システムの拡張性が高く
- enum型が、単なる列挙体というよりは共用体、いや、OptionやEitherがそのまま書けてしまう合併型と呼ぶべき存在。
- 構造的部分型と呼ばれる、持っているべきメソッドの集合によって表現された型がある。ダックタイピング型でありinterfaceと違ってクラス側が“実装”する必要が無い。GCC版C++のSignatureに近いが、Signatureと違ってその場で書けるから柔軟性はより高い。Scalaにもあるやつです。
福岡方面でひんぱんに勉強会やってるらしい。福岡こわい。
コンパイラのインストール
Windowsならインストーラで一発。PATHも勝手に通る。PATHは勝手に通らない。通っていたのはHaxe 2.x時代のインストーラ?
なんかC:ドライブのルートにインストールしようとしてくるのでProgram Files (x86)の下にそっと導いてやる。
HaxeソースをJavascriptに変換するPlay2プラグイン
plugins.sbtに
addSbtPlugin("com.github.hexx" % "play-haxe" % "0.0.2")
と書き加えるだけでOK。
IDEの対応
Eclipseではググるとeclihxというプラグインがすぐに見つかるがこれはおすすめしない。少なくともEclipse 4.3(Kepler)ではまともに動かなかった。
おすすめできるのはFDT5というプラグイン。Flash開発用のプラグインだが、Haxe開発用としても秀逸。
プラグインインストール用のリポジトリURLは http://fdt.powerflasher.com/update/fdt5/
ただしFDT5を使って開発するときちょっと問題になるのがプロジェクトの構成の仕方。
Haxeプロジェクトとして立ち上げたプロジェクト内でならコード補完もばりばり効くのだが、Javaプロジェクト内に置いてあるHaxeソースを開いた場合はまったく効かない。
Play2のサーバアプリとHaxeのクライアントコードは別プロジェクトとして管理するべき?
というか、別プロジェクトして扱うんだったら無理してEclipse使わなくてもFlashDevelp使いましょーよという話になります。
IntelliJの場合、標準リポジトリのHaxeプラグインが完成度が高い。Javaプロジェクト内のHaxeソースでももちろんコード補完効きます。
Stringとかの標準型に波線引かれるのはなんでなんだろう…
実行
Play2プロジェクトのappディレクトリ内にassetsディレクトリを作って、その中にHaxe.hxを作ります。
package assets.javascripts; class Haxe { static public function main() { var h = new Haxe(); trace(h.hello("World!")); } public function new(){} public function hello(str: String) : String { return "Hello, " + str; } }
Play2アプリを起動して
Javascriptにコンパイルされたものが出て来ます。Haxeソースが複数本あっても一本のJSファイルにまとまります。