C Sharpens you up

http://qiita.com/yuba に移しつつあります

Play2でHaxeを使う覚え書き

HaxeActionScriptをベースにした汎用言語だが、Javascriptへのコンパイルが当初から実現されているのでBetter JSのひとつとしても人気。
実験的にJava, C#, C++へのコンパイルまでサポートされている。

特徴としては、強力な型推論を持ったクラスベースのオブジェクト指向言語
型システムの拡張性が高く

  • enum型が、単なる列挙体というよりは共用体、いや、OptionやEitherがそのまま書けてしまう合併型と呼ぶべき存在。
  • 構造的部分型と呼ばれる、持っているべきメソッドの集合によって表現された型がある。ダックタイピング型でありinterfaceと違ってクラス側が“実装”する必要が無い。GCCC++の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ファイルにまとまります。