haxeとopenflを触ってみました

　haxeを触りはじめました。というか、眺めている。
という程度なのですが、それでもすでに色々と色々な意味でハマったので備忘録的に冒険的に作業内容をここに纏めておきます。

１.haxeしようとおもったきっかけ。
---------------------------------
　ActionScriptからの移行が主目的で、強い動機になっていますが、実のところ、何度学習にトライしても挫折してしまうJavaScriptへの当てつけというか、憂さ晴らし、あるいは怨念。みたいなものもあります。

２.haxeへの想い。
-------
　クロスプラットホーム的なものにはそんなに強い関心と興味を抱いていないです。ですが、nekoにつきましては、ワイルドかつアバンギャルドなイメージキャラ？に強く心惹かれています。それはともかく、DisplayObjectとかaddChild（）とかstageとかを使って色々できるというのはなんともキッチュ＆ファニー。いや、嬉しいです。


３.環境
--------
　Windows７（64bit）とLinux（Arch64bit）にて作業しています。
　WinではFlashDevelopにて、linuxではvimにて作業しています。

４.備忘録
----------

　**●インストール**
　haxe自体のインストールは特に難しいことは無かったです。各プラットフォームに応じたバイナリやインストーラーをダウンロードして、実行するだけでOKです。ただ、linuxに関しては各ディストリによってパケージ管理システムがあるとおもうので、それにしたがったほうがいいと思われます。

そんなわけで、Linuxに関してはArhcのパッケージ管理システム、その名もpacmanで入れるわけですが、Archの公式パッケージにはhaxeがないので、yaourtをつかってAUR経由でビルド・インストールします。
　
で、ここでちょっと迷います。

　**●ハマりどころ1**
　AURを検索すると.... 

```
yaourt -Ssq haxe
haxe,haxe-bin
haxe3-bin
haxe-git
.....
```
等色々でてきます。

とりあえず、haxe-gitを選べばOKかなっておもって、これを選択。

```yaourt -S haxe-git```

をすると途中でエラーがでてビルドできません。
（2014.12.12現在）

なんとかなりそうなビルドエラーではあるのですが、
ひとまず、haxe-gitはやめておき、

```yaourt -S haxe``` にします。

これは無事にインストールされます。
（2014.12.12時点でのhaxeバージョンは3.1.3です）

これでWin,Linuxともにhaxeとnekoのインストールは完了です。


**●ハマりどころ2**
　Archに於いて、```yaourt -S haxe```で、ビルド＆インストールをすると、
```/usr/lib/haxe```　配下に配置されるはずの　```std/```　 が```/opt/haxe/std``` に配置されています。

そして、```/etc/profile.d/haxe.*h``` の中で、

```export HAXE_STD_PATH=/opt/haxe/std:.``` 

となっています。この時点では、深く考えず。そのままにしておきました。

しかし、ここでちょっとハマりました。

haxeをインストールしたあとに、[openfl](http://www.openfl.org/),[lime](https://github.com/openfl/lime)等、haxeのライブラリをインストールします。これで、openflに付属するサンプルを試すことができるようになります。
```openfl create DisplayingABitmap```
これで、DisplayingABitmapという画像表示をする簡潔なサンプルのプロジェクトを作成できるので、これでいくつかのターゲットをコンパイルしてみます。

（openfl,limeに関しては公式サイトをじっくり読むのが良いです。僕はopenfl,limeに関してはあやふやな知識しかないのですが、ともかく、haxeやるときは、なんだかんだで、openfl,limeにお世話になるということだけは確かなようです。）

さて、ハマったところですが、公式サイトを眺めながら下記のコマンドを打つと、html5ターゲットの時に限り、
```「Standard library class not found.```」とエラーが。
```
openfl test neko 
openfl test flash
openfl test html5 
```

あれ？ ```export HAXE_STD_PATH=/opt/haxe/std:.``` が反映されていないのかな？って色々と調べて、試行錯誤しましたところ、
「```/usr/lib/haxe/``` に ```/opt/haxe/std/``` のシンボリックリンクを作成したらなんとかなった。」的な情報をみつけたので、```cd /usr/lib/haxe``` して　```ln -s /opt/haxe/std std```にてＯＫ。ひとまずこれでエラーを出さずに、neko,html5,flashターゲットで、サンプルを動かすことができました。

HAXE_STD_PATH環境変数が無視される原因はわからないけども、いや、そもそもこの環境変数（HAXE_STD_PATH)をいつどこでなにが参照しているのかちょっとわかってないのですが、Archではひとまずこれで様子をみることに。どなたかここら辺の事情にお詳しい方がいましたら、ご指摘、ご教授を願いいたします。よろしくお願いします。

**●ハマりどころ３**
　vimにはhaxeプラグインとしてvaxeというものと、シンタクスチェックをしてくれる、syntasticというありがたいプラグインがあります。

 どうありがたいかは、まだちょっと評価できるほど使い込んでいないので、今後のレビューをまっていてください。

 さて、上記の２つのプラグインをインストールしましたところ、まったくもって何も起きない。

　\:wでシタックスチェックも、\:makeでビルド＆実行とかまったくしてくれません。もちろん、補完も機能しません。これには参りました。

vaxe、syntasticの公式ページ、
https://github.com/jdonaldson/vaxe
https://github.com/scrooloose/syntastic
を眺めながら、オプション関係を色々とチェック。また、他のプラグインとの干渉がないか色々検証してみましたが、まったく機能する気配がない。
ちなみに、syntasticに関してはjavaでは普通に機能しているので、よけいに訳が分からない。うーむ。

で、しばらく試行錯誤したのちに、思いつきで、```build.hxml```というファイルを手動で作ってみました。するとどうでしょう。

これまで、なんの反応もなかった、syntasticとvaxeが見事に機能しだしました。

https://github.com/jdonaldson/vaxe/blob/master/doc/vaxe.txt

上記のドキュメント中にしっかりと、vaxeはデフォルトでbuild.hxmlファイルを探しにいくよ。という旨が書かれていました。
*.hxmlファイルは、haxeのための簡潔なビルドファイルなのですが、ともかくこれがないと、vaxeもsyntsticも機能しないんですね。また、少なくとも、```build.hxml```ファイルの中には、

```-main FooClassName```（←コンパイル対象のクラス名）  

の記述がないとだめです。


以上、haxeインストールからopenflのサンプルを動かすまでにハマった箇所です。

まとめ
--------

　Win＋FlashDevelopでは躓くことがなかったですが、arch+vimでは色々とわからないことが多かったです。arch+vimに関する基礎的な知識＋英語力のなさが主たる原因ですが、闇雲に色々と試行錯誤せず、まずは、公式サイトと付属のドキュメントにじっくりと目を通すのが何よりも大切だなということを痛感しました。

　色々とハマリましたが、サンプルを動かしてみて、haxeの魅力というか、クロスプラットフォーム的魅力というか、そんな感じで、冒頭ではちょっとドライに突き放した感のあるhaxeに愛情と感慨を覚えました。以上です。

おまけ
-------
そういえば、Win+FlashDevelopでも少しハマりました。

```Error: Invalid SWF version xx``` ←（xx=12,13,14,15）　

FLASHターゲットでバージョンを１２以上に設定してビルドすると上記エラーがでてビルドできない。というもの。

https://github.com/HaxeFoundation/haxe/issues/3628

ここに解決策が乗っています。単純にhaxeのバージョンを3.1.3から3.2.0に上げればOKです。