Flex SDK 3.0以降には mxmlc というコンパイラ以外に fcsh というコンパイラも含まれるようになった。以前は mxmlc が標準で fcsh は別途ダウンロードが必要であったのだ。
なお、製品である Flex Builder は fcsh の方が使われている。fcsh は一度コンパイルをすると次回以降は高速になる、というメリットがあるのだ。
EclipseからAntで呼びやすいのは mxmlc である。これにDOSバッチコマンドで起動できる。しかし、fcsh はシェルであるのでちょっと扱いが変わってくる。amxmlc.bat を参考に内容を書き換えても swf ファイルは生成されない。では、とDOSで fcsh を呼び出し、その後コマンドを発行、としてみると、swf は生成されるものの、全く速度メリットがなかった。
調べていると FCSH Wrapper というツールがあり、それだとメリットが享受できるうえ、Eclipseのプラグインとしても利用できるそうだ。
参考ページ
http://d.hatena.ne.jp/eggtoothcroc/20081108/1226081405
http://fcshwrapper.blogspot.com/2008/04/how-to-use-fcshwrapper.html
http://blog.bigsource.de/index.php/2008/05/29/eclipse-fcsh-wrapper-plugin/
環境さえ揃っていれば、あとはビルド用の XML ファイルだ。上記の2つめのサイトから引用したものをカスタマイズした。
<?xml version="1.0" encoding="UTF-8"?>
<project name="changeme" default="all" basedir=".">
<property name="FLEX_HOME" value="c:/flex_sdk_3"/> <!-- SDKのパス -->
<property name="FCSHWRAPP_HOME" value="C:/fcshWrapper-bin"/> <!-- FCSH Wrapper のパス -->
<property name="src.dir" value="src" /> <!-- ソースのパス -->
<path id="mypath">
<fileset dir="${FCSHWRAPP_HOME}" includes="fcshWrapper.jar"/>
</path>
<taskdef name="fcsh" classname="ro.arhinet.fcshwrapper.ant.FcshTask">
<classpath refid="mypath"/>
</taskdef>
<target name="all">
<fcsh command="mxmlc">
<arg value="${basedir}/${src.dir}/test.mxml"/> <!-- ソースのパス -->
<arg value=" "/> <!-- 追加コンパイルオプション -->
</fcsh>
</target>
</project>
・コンパイルオプションの追加は上記の <!-- 追加コンパイルオプション --> に追加すればよい。
・使っているとコンパイルが途中で止る事象があった。この場合、常駐エリアの FCSH Wrapper を Quit してからコンパイルすれば使えた。これは他に回避策があるかもしれない。
・エラーメッセージが化けて返る。これも回避策はあるかもしれない。
<追記>
・日本語を含めるとエラーになる場合があった。mxmlファイルのエンコードを確認すると Sihft-JIS であった。UTF-8 で保存し直すと問題解決!
・mxmlのエンコードが不安定なら、xml宣言に UTF-8 を含めるとよい。
例 <?xml version="1.0" encoding='UTF-8' ?>
Flexに詳しくない私がこんなことを試すのもおかしな話であるが、参考になれば。