Flash Builder 4 を使ってみよう
まずは本体の DL
そのうちライセンスは買うので、とりあえず体験版を使って環境を作ったりする。
ちなみに、以前までは Flex Builder と呼ばれていたのだけど、 Flash Builder に名称が変わりました。
必要なプラグインを入れましょう
subclipse の導入
から更新サイトの URL をゲット。自宅の SVN は 1.6 なので、Subclipse も 1.6 用のを使用する。ちなみに、 Subclipse 1.4 は SVN 1.4 と 1.5 対応らしい。
というわけで、以下の URL を更新サイトに突っ込んでインストール。
http://subclipse.tigris.org/update_1.6.x
としたところ、Mylyn が必要とおっしゃる。仕方がないので Mylyn を先にインストール。
Mylyn のインストール
zip の落とす場所は見つけたけど、update site が見つからなくて苦戦。
以下で、とりあえず Eclipse 3.4 版のを見つけた。とりあえず大丈夫だろう……。
ここに書いてある、 update site を入力して、必要そうなプラグインだけインストールすることにする。
http://download.eclipse.org/tools/mylyn/update/e3.4
Mylyn Features と、必要かわからんけど wiki text なるものを入れておく。さしあたり必要なものは Features だけで良いとは思う。
これはそのまま問題なくインストールできるので、改めて Subclipse のインストールを行う。
Subclipse のインストール(再)
とりあえず全部入りでインストールしようと思ったけど、なにやら Revesion Graph だけは他のプラグインが必要なので、それ以外をインストールする事にする。
プラグインのインストールは無事にできたので、設定がちゃんとできるか確認してみよう。
というわけでロケーションの設定をしよう…とすると案の定エラーになった。が、SVNのインターフェイスを変更したらうまくいった。
「ウィンドウ→設定→チーム→SVN→SVNインターフェイス」を SVNKit に変更したらうまく行った。
git のインストール
よく考えたら Git 使う方が多いじゃん、というわけで Git プラグインを探す。
普段コマンドラインからしか使わないので、どれがメジャーなのかわからない。
調べてみると、EGit というのがメジャーらしいので、そいつをインストールする。
ここら辺とかを見ると、EGit とか言ってるのに URL は jgit とかなってて人間不信に陥る。
さらに、いざインストールしようと以下の update site を使ってインストール使用とすると Obsolete とかついてる。辞めた方が良いのか。
http://www.jgit.org/update-site
-
-
- -
-
仕切りなおして調べ直してみる。
そうすると、なんだ、ちゃんと EGit なるものがあるじゃないか。
こっちを使うことにしてみよう。
http://download.eclipse.org/egit/updates
JGitとEGitの両方があったけど、もう面倒なので両方いれることにした。
さて、Github にアクセスできるだろうか。
SVN の時のように SVN エクスプローラー的なのがあるのかと思ったら、一切ない。絶望の淵に立ったが、以下のチュートリアルを見ることで事なきを得た。
新規作成の場合は 4.1 を見た方が良さそうだけど、すでにある Git リポジトリからの Clone なので、 4.2. Checkout existing project を見ればよさそうだ。
なるほど、インポートから Git Repository を選んで、github にある git:// の URL を貼付け、プロトコルを git+ssh にすると。で、パスワードに git*3のパスワードを入力すればOK。
だったが、ここでちょっとハマる。
今回インポートしようとしている github のファイルは元々 Flex 用のファイル一式ではない。なので、プロジェクトファイルのインポートができない。
なので、一旦別の名前でインポートして git からの clone 後に、別途プロジェクトのインポートを行う必要がある。
というわけで、一番下のチェックを外し、DL後の名前も適当に変えておく(_fugaとかつけた)
この後、改めてFlexプロジェクトを作成し、「インポート→ファイル・システム」で clone したファイル一式を作成した Flex プロジェクトへ取り込む。
あとはプロジェクトの設定と取り込んだファイル一式の設定をあわせてあげれば良い。これは Git の話ではないので割愛します。
というわけで
Flash Builder の環境構築編はおしまい。昔は Eclipse 入れたらとりあえずコレ入れろよ!みたいのあった気がするけど、今となってはよく憶えていないので、とりあえず SVN/Git が使えれば十分かな……。あとは github の Mylyn プラグインとかあると良いんだが。。。
プラグイン追加したので追記
FlexPMD に Eclipse Plugin ができてた
ここを参考に、以下を update site として登録するだけ。
http://opensource.adobe.com/svn/opensource/flexpmd/plugin/trunk/flex-pmd-eclipse-plugin-site
なお、flex-pmd は 1.1 から対応しているらしいので、ついでにアップデートしておいた。
手順としては、Home Project for Open @ Adobe / Home / Projectsの Downloads から All-in-one-bundle の zip を落として、(おれの場合は)/opt/flex/flex-pmd のシンボリックリンクにしておいた。
あとは、「ウィンドウ→設定→FlexPMD」で、下記の jar のパスを設定する。
- FlexPMD command line installation → flex-pmd-command-line-1.1.jar
- FlexCPD command line installation → flex-pmd-cpd-command-line-1.1.jar
これでOKのはずなんだが…… FlexCPD はきちんと判定してくれるのだけど、FlexPMDの方がビューの方に反映されない。何か足りないのだろうか?
追記:開発環境構築シリーズ
FlexUnitを試してみた
まずは準備から
ここから FlexUnit4 の zip を落とす
公式のドキュメント
その他参考になったページ
- FlexUnit4が使いたくなった。 « ひよっこ。
- InsideRIA - O'Reilly Media 英語だけど、キャプチャがあってわかりやすい
- FlexUnit4: スーパー肩パッドの「Flashセレブ道」wiki
Zip を解答して
好きな場所に配置してください。必要なのは libs にある swc なファイルのみになります。
使う場合は二パターンあって -compiler.library-path 追加するパスに特定の場所をおいて(/opt/hoge/flexunit/libs) のように、システム全体で共通の値を使うようにするか、各プロジェクト毎に libs フォルダに置くか。
普通に Flex を使うと後者になると思うけど、毎回コピーするのも面倒だ、という場合は、共通の場所に置いておくと良いと思う。
ファイル構成はこんな感じ
ソース一式は misc/flexunit_sample at master · sugamasao/misc · GitHub にあります。
|-- libs | |-- FlexUnit1Lib.swc | |-- FlexUnit4.swc | |-- FlexUnit4UIListener.swc | `-- hamcrest-1.0.2.swc `-- src |-- FlexSample.mxml |-- TestRunner.mxml # テストランナー |-- sample | |-- Calculate.as | `-- Fuga.mxml `-- test |-- FlexSampleTest.as # テストクラス |-- TestSuiteAll.as # テストスイート `-- sample |-- CalculateTest.as # テストクラス `-- FugaTest.as # テストクラス
テスト作成の流れ
まず、TestRunner を作成し、 run メソッドで実際にテストを実行する。その際、個別にテストクラスを引数にとっても良いし、テストスイートを渡しても良い。
今回はテストスイートを渡すようにした。
テストスイート
なんの事はなくて、テストを public な変数として持てば良い。
テスト(普通の)
いわゆる足し算メソッドとかをテストする場合。まーほとんど使わないが。。。
[Test(description="計算のテスト")] public function testAdd():void { Assert.assertEquals(2, target.add(1, 1)); }
target は [Before] タグのついたメソッド(テストケース毎に実行される)で生成したオブジェクト。
たいがいのサイトでも紹介されてる手法ですね。
テスト(UI)
UI の場合はちょっと手順が違う。
準備(before)
まず、Before 等で、テスト用のコンポーネント内に、テスト対象のオブジェクトを addChild する。
[Before(async,ui)] public function alsoRunBeforeEveryTest():void { trace("before"); target = new Fuga(); Async.proceedOnEvent( this, target, FlexEvent.CREATION_COMPLETE, 500); UIImpersonator.addChild(target); }
対象が Sprite とかだったら、一旦 UIComponent 等に突っ込んでから UIImpersonator に突っ込むと良い。
あとは、一応 CREATION_COMPLETE イベントが走るまでは待ってあげる*1。
実行
[Test]タグに ui や async をつけて UI のテストであることを明示しておく。
あとは Async.handleEvent にて第二引数に対象オブジェクトを、第三引数に発火してくるイベントを書いて、第四引数にイベント発火時の検証メソッドを渡す。
検証の準備ができたら dhispatchEvent で擬似的にボタンが押された、とかを偽装するためにイベントを発火してあげる。
もちろん、自分で作ったオリジナルのイベントだって発火できるし、待ち受けることもできる。
[Test(description="ボタンが押下されたことを確認するテスト", async, ui)] public function buttonHandlerTest():void { // 発火するイベントをウォッチする Async.handleEvent(this, target, MouseEvent.CLICK, buttonHandlerTestHandler, 500); // テストしたいイベントを実際にディスパッチして実行する target.fugabutton.dispatchEvent( new MouseEvent(MouseEvent.CLICK, true)); }
実際にイベントが発火したら、検証用メソッドで検証する。
こっちは別に[Test]とかは不要。
private function buttonHandlerTestHandler(e:Event, passThroughData:Object):void { trace(e, passThroughData); Assert.assertEquals(e.type, MouseEvent.CLICK); }
この例だと想定したイベントタイプが発生していることを検証しているけど、他のコンポーネントにどのような影響を与えているかもここで検証できる。
ここではボタンを押された結果、別のコンポーネントの値が変わることを検証している。
だいたいの手順は
こんな感じです。他にも一連の動きをシナリオとして定義してテストしたりもできるようなのですが、イマイチ情報も少ないのでちょっと調べきれてません。。。
その他(hamcrest)
hamcrestって良く分かってないんだけど、Java で実装されているもののASへの移植版っぽい。AssertThat をもっとわかりやすく書こうぜ!みたいなヤツで、検証メソッドとして便利なのがそろってる。
まったくつかいこなせてないけど、as_logger/src/test/com/github/sugamasao/as_logger at master · sugamasao/as_logger · GitHub でちょっと使いました。
いまのところこんな感じです><
イマイチ日本語の資料も少ないので、ここ間違ってるよ!とかあれば教えて下しあ!
*1:Async.proceedOnEventのとこね
AIRの環境をビルドするのに必要なコマンドまとめ
まとめたのはビルドとデバッグ起動のみ
証明書の発行や、 .air ファイルの作成の前段階までで使用するコマンドについてです。
そこら辺の話を知りたければ、こちらを参照すると良いかもしれません。Adobe AIR * ADT(AIR 開発ツール)を使用した AIR インストールファイルのパッケージ化
ビルド方法
基本は Flex で使用している mxml と同様ですが、AIR の場合は amxmlc となります。
引数等も同じ。
AIRSample
-- bin -- build `-- src
|-- AIRSample.mxml
|-- application.xml
上記のような構成で、AIRSample ディレクトリがカレントディレクトリだった場合は、以下のようになる*1。
amxmlc ./src/AIRSample.mxml -output ./bin/AIRSample.swf
コンパイル用のオプションや xml の受け取り方などは mxml と同様っぽいので、興味がある人はFlex3 で trace ログの出る、出ないを ant 経由で制御する方法 - @sugamasao.blog.title # => ”コードで世界を変えたい”を参照すると良いかも。
実行方法
.air を作って毎回インストール→実行ではいくら時間があっても足りないので、デバッグ用支援ツール adl を使いましょう。
支援ツールといっても、純正品なので AIR がインストールされている環境なら問題なく使えます。
ディレクトリ構成は上記のまま、コンパイル済みの swf が bin ディレクトリにある場合は以下のようにします。
adl -runtime /opt/flex/flex_sdk_3.4.0.9271/runtimes/air/mac/ ./src/application.xml ./bin
これ、ちょっとわかりにくいんだけど、 -runtime の引数には「Adobe AIR.framework」というファイルが入ってるディレクトリを指定する必要があります。
そして、二番目には AIR 用のアプリケーションXMLを指定します。三つ目がアプリケーションXMLと swf が違うディレクトリの場合に指定するオプションで、swf のディレクトリを指定します。
ここら辺はAdobe AIR * AIR Debug Launcher(ADL)の使用を見ると良いと思います。
ちなみに
Mac で screen を使ってる状態で上記の adl を実行すると、固まったり、実行できなかったりします。
その対応は、次回詳しくエントリーにしようかと思っているのですが、どうやら screen のバージョンとの食い合わせが悪いようです。
参考になる書籍
Twitter でも書いたのだけど、
を網羅しつつ、アプリケーションXMLの詳細な説明も含めた AIR 開発ならではの情報が盛りだくさんの書籍があります。
これは一家に一冊あっても良いレベルの書籍だと思います\(^o^)/
Adobe AIR クックブック ―プロフェッショナルに学ぶRIAプログラミングの実践
- 作者: David Tucker,Marco Casario,Koen De Weggheleire,Rich Tretola,Flex User Group (監訳),永井勝則
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/08/03
- メディア: 大型本
- 購入: 4人 クリック: 58回
- この商品を含むブログ (15件) を見る
*1:出力先を bin ディレクトリにしてるので注意
Flex3 上での trace の on/off 切り替え
前回は ant での切り替え方法でした
Flex3 で trace ログの出る、出ないを ant 経由で制御する方法
trace ログ垂れ流しの Flash って結構あるんですけど
trace ログ垂れ流しが許されるのは小学生までなので、きちんと制御したいですよね。
本当は、FlexSDK*1 へのオプションで出力するかどうかを制御できれば良いのですが、残念ながら制御できません。
なので、コードにちょっとだけ手を加えます。
また、今回はその制御を ant タスクで切り替える事ができるようにしようと思います。
基礎知識
まず、 trace を切り替える為に、コンパイル時の定数*2によって、切り分けます。
例えば、以下のように記載した場合
CONFIG::DEBUG { trace(message); }
CONFIG::DEBUG 定数が true な場合のみ、trace 文が実行されるようになります。
これは、mxmlc のオプションにすると、以下のような指定になります。
# DEBUG モードの場合 mxmlc -define CONFIG::DEBUG true hoge.mxml # リリースモードの場合 mxmlc -define CONFIG::DEBUG false hoge.mxml
これ、リリースモードだからといって CONFIG::DEBUG を省略するとコンパイルエラーになるので気をつけましょう。
ant タスクに応用するには
-define 部分を動的に(タスク毎に)変更できるようにしてあげれば良いということになりますね。
そこで、以下のような方針を取るようにしました。
flex-config.xml の内容
<?xml version="1.0" encoding="UTF-8"?> <flex-config> <target-player>10.0.0</target-player> <warnings>true</warnings> <compiler> <define> <name>CONFIG::DEBUG</name> <value>false</value> </define> </compiler> </flex-config>
これで、デフォルト設定の既述が完了です。
ant タスク
ant タスクは全部載せてみた。
mxmlcの実行(debug)と書いてあるタスクの、
<?xml version="1.0" encoding="UTF-8"?> <project name="flexAnt" default="build" basedir="./"> <description> FlexAntを用いてFlexのコンパイルを行います </description> <!-- 環境によって変更されるパスの設定 --> <property name="FLEX_HOME" value="/opt/flex/flex_sdk_3.4.0.9271"/> <property name="PMD_VER" value="1.0.RC4"/> <property name="PMD_HOME" value="/opt/flex/flex-pmd-ant-task-${PMD_VER}"/> <!-- プロジェクトのベースディレクトリ定義 --> <dirname property="XML_DIR" file="${ant.file}"/> <property name="APP_ROOT" value="${XML_DIR}/../"/> <property name="APP_SRC" value="${APP_ROOT}/src"/> <!-- 各コマンドのパス設定 --> <property name="ASDOC_EXE" value="${FLEX_HOME}/bin/asdoc"/> <!-- 出力先ディレクトリの設定 --> <property name="BIN_OUTPUT" value="${APP_ROOT}/bin"/> <property name="ASDOC_OUTPUT" value="${APP_ROOT}/asdoc"/> <property name="PMD_OUTPUT" value="${APP_ROOT}/pmd"/> <!-- アプリケーションの名前 --> <property name="APP_NAME" value="APP_NAME"/> <!-- flex用Antタスクを読み込む --> <taskdef resource="flexTasks.tasks" classpath="${FLEX_HOME}/ant/lib/flexTasks.jar"/> <!-- FlexPMD タスクの定義 --> <taskdef name="flexPmd" classname="com.adobe.ac.pmd.ant.FlexPmdAntTask" > <classpath> <pathelement location="${PMD_HOME}/as3-parser-${PMD_VER}.jar"/> <pathelement location="${PMD_HOME}/as3-parser-api-${PMD_VER}.jar"/> <pathelement location="${PMD_HOME}/as3-plugin-utils-${PMD_VER}.jar"/> <pathelement location="${PMD_HOME}/commons-lang-2.4.jar"/> <pathelement location="${PMD_HOME}/flex-pmd-ant-task-${PMD_VER}.jar"/> <pathelement location="${PMD_HOME}/flex-pmd-core-${PMD_VER}.jar"/> <pathelement location="${PMD_HOME}/flex-pmd-files-${PMD_VER}.jar"/> <pathelement location="${PMD_HOME}/flex-pmd-command-line-${PMD_VER}.jar"/> <pathelement location="${PMD_HOME}/flex-pmd-ruleset-${PMD_VER}.jar"/> <pathelement location="${PMD_HOME}/flex-pmd-ruleset-api-${PMD_VER}.jar"/> <pathelement location="${PMD_HOME}/plexus-utils-1.0.2.jar"/> <pathelement location="${PMD_HOME}/pmd-4.2.2.jar"/> </classpath> </taskdef> <!-- 全部入り動作 --> <target name="all" depends="clean,build,document,pmd" description="full build of project"/> <!-- 全部入り動作(debug) --> <target name="debug-all" depends="clean,debug-build,document,pmd" description="full build of project"/> <!-- mxmlcの実行 --> <target name="build"> <mkdir dir="${BIN_OUTPUT}" /> <mxmlc file="${APP_SRC}/${APP_NAME}.mxml" output="${BIN_OUTPUT}/${APP_NAME}.swf"> <load-config filename="${FLEX_HOME}/frameworks/flex-config.xml"/> <load-config filename="${APP_ROOT}/build/${APP_NAME}.xml"/> <source-path path-element="${FLEX_HOME}/frameworks"/> </mxmlc> </target> <!-- mxmlcの実行(debug) --> <target name="debug-build"> <mkdir dir="${BIN_OUTPUT}" /> <mxmlc file="${APP_SRC}/${APP_NAME}.mxml" output="${BIN_OUTPUT}/${APP_NAME}.swf"> <load-config filename="${FLEX_HOME}/frameworks/flex-config.xml"/> <load-config filename="${APP_ROOT}/build/${APP_NAME}.xml"/> <define name="CONFIG::DEBUG" value="true" /> <source-path path-element="${FLEX_HOME}/frameworks"/> </mxmlc> </target> <!-- cleanの実行 --> <target name="clean"> <delete dir="${BIN_OUTPUT}" failOnError="false" includeEmptyDirs="true" /> <delete dir="${ASDOC_OUTPUT}" failOnError="false" includeEmptyDirs="true" /> <delete dir="${PMD_OUTPUT}" failOnError="false" includeEmptyDirs="true" /> </target> <!-- asdocの実行 --> <target name="document"> <mkdir dir="${ASDOC_OUTPUT}" /> <exec executable="${ASDOC_EXE}" failOnError="false"> <arg line='-source-path ${APP_SRC} ${FLEX_HOME}/frameworks/'/> <arg line='-doc-sources ${APP_SRC}'/> <arg line='-window-title "${APP_NAME}"'/> <arg line='-output ${ASDOC_OUTPUT}'/> <arg line='-compiler.define CONFIG::DEBUG true'/> </exec> </target> <!-- flex-pmd --> <target name="pmd"> <mkdir dir="${PMD_OUTPUT}" /> <flexPmd sourceDirectory="${APP_SRC}" outputDirectory="${PMD_OUTPUT}" /> </target> </project>
ここまですれば
ant タスクによって、trace ログの出力する/しないを制御できるようになります。
上記の例だと、
ant -f build.xml build
だと trace ログの出ないバイナリが生成され、
ant -f build.xml debug-build
だと trace ログが出るバイナリが生成されることになります。
あとは、 CONFIG::DEBUG {trace(hoge)} を、オレオレ Logger クラス等にして共通化させてあげると良いですね。
これであなたも
小学生から卒業です!><
Flexのプロジェクトをインテグレーションしたい
プラットフォームは Hudson 一点でおk
なので、あとはどのようにインテグレーションの設定をしていくか、という話になります。
Hudson の環境設定
Java5 さえあれば Hudson は起動することが可能です*1。
まずは
Java5 の導入は適当にやるとして、以下から hudson.war をDLしましょう。
そうしたら、
java -jar hudson.war
で起動できます。デフォルトではポート 8080 で動くので、 localhost:8080 でアクセスしてみましょう。
ant の環境を用意する
自力で導入しても良いし、Hudson にも ant が付属してきていたと思うので、それを使えるようにしておきます。
Flex用インテグレーション環境を作る
FlexPMD
以下から取得します。今回は ant から実行するので ant 版で。コマンドラインから実行したい人は command line 版をDLしましょう。というか、両方落としておくと良いと思うw
あと、コマンドラインで実行したい人はPATHを通しておくと楽でしょう。
では ant タスクを書いて行きましょう
以下のような構成になっているとします。build ディレクトリに build 関係の設定ファイルを追加しておきます。
ちなみに、ここの flex-config.xml は player のバージョンとか、デバッグ用変数の定義とかを行います*4。
|-- README.txt |-- build | |-- build.xml | `-- flex-config.xml `-- src `-- hogehoge.mxml
build.xml にビルド用のタスクを既述します。以下の例では、
- build
- document
- pmd
- clean
- all
のタスクが登録されています。all をやると、clean をしてから build, document, pmd を実施してくれます。
実際の使い方は以下の通り
# build.xml が同じディレクトリにあり、build タスクを実行する場合(デフォルトタスクは省略できる)
%ant
# build.xml と違うディレクトリに居る場合
%ant -buildfile build/build.xml
# タスクを指定する場合
%ant clean
のような感じです。各タスクの名称やデフォルトの動作は build.xml の中で定義していきます。
そして、build.xml は以下のようになってます。
<?xml version="1.0" encoding="UTF-8"?> <project name="flexAnt" default="build" basedir="./"> <description> FlexAntを用いてAirのコンパイルを行います </description> <!-- 環境によって変更されるパスの設定 --> <property name="FLEX_HOME" value="/opt/flex/flex_sdk_3.4.0.9271"/> <property name="PMD_HOME" value="/opt/flex/flex-pmd-ant-task-1.0.RC4"/> <!-- プロジェクトのベースディレクトリ定義 --> <dirname property="XML_DIR" file="${ant.file}"/> <property name="APP_ROOT" value="${XML_DIR}/../"/> <property name="APP_SRC" value="${APP_ROOT}/src"/> <!-- 各コマンドのパス設定 --> <property name="ASDOC_EXE" value="${FLEX_HOME}/bin/asdoc"/> <!-- 出力先ディレクトリの設定 --> <property name="BIN_OUTPUT" value="${APP_ROOT}/bin"/> <property name="ASDOC_OUTPUT" value="${APP_ROOT}/asdoc"/> <property name="PMD_OUTPUT" value="${APP_ROOT}/pmd"/> <!-- アプリケーションの名前 --> <property name="APP_NAME" value="hogehoge"/> <!-- flex用Antタスクを読み込む --> <taskdef resource="flexTasks.tasks" classpath="${FLEX_HOME}/ant/lib/flexTasks.jar"/> <!-- FlexPMD タスクの定義 --> <taskdef name="flexPmd" classname="com.adobe.ac.pmd.ant.FlexPmdAntTask" > <classpath> <pathelement location="${PMD_HOME}/as3-parser-1.0.RC4.jar"/> <pathelement location="${PMD_HOME}/as3-parser-api-1.0.RC4.jar"/> <pathelement location="${PMD_HOME}/as3-plugin-utils-1.0.RC4.jar"/> <pathelement location="${PMD_HOME}/commons-lang-2.4.jar"/> <pathelement location="${PMD_HOME}/flex-pmd-ant-task-1.0.RC4.jar"/> <pathelement location="${PMD_HOME}/flex-pmd-core-1.0.RC4.jar"/> <pathelement location="${PMD_HOME}/flex-pmd-files-1.0.RC4.jar"/> <pathelement location="${PMD_HOME}/flex-pmd-command-line-1.0.RC4.jar"/> <pathelement location="${PMD_HOME}/flex-pmd-ruleset-1.0.RC4.jar"/> <pathelement location="${PMD_HOME}/flex-pmd-ruleset-api-1.0.RC4.jar"/> <pathelement location="${PMD_HOME}/plexus-utils-1.0.2.jar"/> <pathelement location="${PMD_HOME}/pmd-4.2.2.jar"/> </classpath> </taskdef> <!-- 全部入り動作 --> <target name="all" depends="clean,build,document,pmd" description="full build of project"/> <!-- mxmlcの実行 --> <target name="build"> <mkdir dir="${BIN_OUTPUT}" /> <mxmlc file="${APP_SRC}/${APP_NAME}.mxml" output="${BIN_OUTPUT}/${APP_NAME}.swf"> <load-config filename="${FLEX_HOME}/frameworks/flex-config.xml"/> <load-config filename="${APP_ROOT}/build/flex-config.xml"/> <source-path path-element="${FLEX_HOME}/frameworks"/> </mxmlc> </target> <!-- cleanの実行 --> <target name="clean"> <delete dir="${BIN_OUTPUT}" failOnError="false" includeEmptyDirs="true" /> <delete dir="${ASDOC_OUTPUT}" failOnError="false" includeEmptyDirs="true" /> <delete dir="${PMD_OUTPUT}" failOnError="false" includeEmptyDirs="true" /> </target> <!-- asdocの実行 --> <target name="document"> <mkdir dir="${ASDOC_OUTPUT}" /> <exec executable="${ASDOC_EXE}" failOnError="false"> <arg line='-source-path ${APP_SRC} ${FLEX_HOME}/frameworks/'/> <arg line='-doc-sources ${APP_SRC}'/> <arg line='-window-title "${APP_NAME}"'/> <arg line='-output ${ASDOC_OUTPUT}'/> </exec> </target> <!-- flex-pmd --> <target name="pmd"> <mkdir dir="${PMD_OUTPUT}" /> <flexPmd sourceDirectory="${APP_SRC}" outputDirectory="${PMD_OUTPUT}" /> </target> </project>
これを実行すると bin, asdoc, pmd ディレクトリができ、その中身成果物が生成されます。
あとは Hudson 上から実行するように ant 実行用の設定を書くだけです!
今後の展望
Flashエンジニアしてる都合上、サーバサイドよりフロントエンド側に携わる事が多い訳で、Flash 以外にも CI を展開しようとすると、残りの対象は JS か HTML になるんですよね。
HTML に関しては
Twitterで、HTML-lintのローカル版があるよ、と教えてもらった。Web経由だと機密情報だったりする場合もあるので使えないため、ローカルであるというのはとってもありがたい。
ただ、HTML-lint はヘルプに HTML5 が無いので、今後の Web 標準に対応していってくれるのか不安が残る。今現在作成するサイトであれば有用かもしれないが・・・。というか、W3C がコマンドライン用の作ってくれてれば良いんだが。
JS に関しては
まったくファックでよくわからない。
かろうじて見つけたのは以下のツール。とりあえず、WSHのコマンドライン版があるようなのでローカルでの使用という要件にはマッチするけれど、どの程度のものなのかはよくわからん。
というわけで
今後は
- FlexUnit でのユニットテストやっていきたいよ。
- HTML のコードチェックしたいよ
- JS のコードチェックしたいよ(HTMLよりは優先度低いけど)
という感じですかね。
一番上は自分で完結する範囲だけれど、その他は有効に使えればFlashチーム以外への啓蒙になるので、うまいことできる方法を探したいです。何か知っていたら教えて下しあ!><