Paradigm Shift Design

ISHITOYA Kentaro's blog.

corelibをFlex3向けにコンパイルしてJSONを使う。

Flex側から自作のAPIを叩くのに、AMF使って書き換えるのも馬鹿らしいので、Jsonのデコーダーがほしかったのだけれど、
as3corelib -


ActionScript 3.0 library for several basic utilities. - Google Project Hosting
にはバイナリがおいていなくて、面倒くさいからぐぐったらFlash/FlashでJSON形式のデータを読み込む (ActionScript2.0を利用) - アークウェブシステム開発SandBoxを見つけた。
しかし、コピーして使ってみようと思ったら大量のエラーが。
ActionScript2と3って互換性ないのね。


というわけで、corelibをコンパイルすることに決める。
エラーが出るんだけれど、それに言及している記事がなかったので簡単にまとめてみる。


結論から言うと、チェックアウトしたディレクトリをそのままコンパイルすると

[exec] C:\cygwin\home\kent\repository\as3corelib-read-only\src\com\adobe\ai
r\logging\FileTarget.as(53): col: 38 エラー: 型が見つからないか、コンパイル時定
数ではありません : File。

[exec]             public function FileTarget(logFile:File = null)

とか言われる。これはsvn logをみるに

r59 | mikechambers | 2008-08-15 03:08:52 +0900 (Fri, 15 Aug 2008) | 1 line

FileTarget logger for Flex Log framework.

と、最近追加されたファイルのようで、特に他に依存関係もないようなので、削除すればコンパイルが通って、ちゃんとswcファイルが生成される。


と、なんとなく、結構使えそうなライブラリなので他の人に説明する時に楽なように、antとかsvnを知らない人もコンパイルできるように書いてみる*1

はじめに

corelibは

The corelib project consists of several basic utilities for MD5 hashing, JSON serialization, advanced string and date parsing, and more.

とあるように、FlexSDKには含まれていないけれど基本的な、MD5とかJSONとか日付のパースとか文字列関係のユーティリティなどの機能が実装されているライブラリです。


全体の流れを簡単に説明すると、ソースコードをダウンロードしてきてビルドして、アプリケーションのライブラリパスに置く、という手順です。


まず、ソースコードgoogle codesでserveされています。バイナリは今のところ配布されていないようなので、これを使うためにはソースコードを取得してきて、自前でビルドしてswcファイルを作成する必要があります。


ソースコードSubversionというリビジョン管理ソフトウェアで管理されているので、まずSubversionクライアントソフトウェアをインストールする必要があります。
クライアントをインストールして、ソースコードを取得できたら、今度はビルドしてライブラリファイルを作る必要があります*2。ビルドにはantというビルドツールが必要です。
ビルドしたら、後はFlex Builder3を使っている場合は、libsディレクトリに配置すれば使えます。

Subversionのインストールとソースコードの取得

前述のとおり、Subversionはリビジョン管理ソフトウェアです。CVSと同じです。
利用するにはクライアントソフトウェアが必要です。
僕自身は、cygwinsvnクライアントを文句を言いながら使っていますが、Windowsユーザーの方ならTortoiseSVNがいいようです。
インストールの方法は、TortoiseSVNのインストールと設定あたりが詳しいので参考にしてください。


クライアントのインストールが終わったらソースコードのチェックアウトです。
Source Checkout -
as3corelib -


ActionScript 3.0 library for several basic utilities. - Google Project Hosting
には

# Non-members may check out a read-only working copy anonymously over HTTP.
svn checkout http://as3corelib.googlecode.com/svn/trunk/ as3corelib-read-only

とありますので、svnコマンドを使っている人はコピペで動かせます。TortoiseSVNの場合は、as3corelibというディレクトリ*3を作って、ディレクトリを開き、右クリックメニューの「SVN Checkout*4」をクリックします。
すると、checkoutというウィンドウが開きますので「URL of repository」エディットボックスに

http://as3corelib.googlecode.com/svn/trunk/

と入力してOKを押してください。するとずらずらとファイルがダウンロードされてきます。完了すると、

+as3corelib
|-build
||-build.properties
||-build.xml
|-docs
|-examples
|-src
|-tests

というようなディレクトリ・ファイルが展開されているはずです。
これでソースコードのダウンロードは完了です。

Antのインストールとビルド

Javaの世界では一般的なビルドツールant・・・最近のEclipse世代の方は知らないみたいですね。makeとかantとかmavenとか。
説明は、Apache Ant - ようこそにゆずりますが、ソースコードからライブラリを作ったり、よくやる作業をビルドファイルと呼ばれるxmlに記述しておくとコマンドを打つだけでやってくれるツールです。インストールの手順は、Antインストール - Apache Antの使い方が分かりやすいです。


antをパスの通った場所においたら、ビルドをします。
Flex2をデフォルトの場所にインストールされていて、Flex2で開発している場合には、以下の手順は必要なく、buildでantとタイプすればswcが生成されます。


Flex3をお使いの場合は、リポジトリからチェックアウトしてきたファイルの設定ではコンパイルできません。

build/build.properties

をエディタで開いてください。
13-14行目/21行目に

13 flex2sdk.bin.dir = C:/Program Files/Adobe/Flex Builder 2 Plug-in/Flex SDK 2/bin
14 flex2sdk.lib.dir = C:/Program Files/Adobe/Flex Builder 2 Plug-in/Flex SDK 2/frameworks/libs
21 flashDebugPlayer.exe = C:/Program Files/Adobe/Flex Builder 2 Plug-in/Player/debug/SAFlashPlayer.exe

という記述がありますので、これをFlexBuilder3向けの設定に書き換えます。
私の場合次のようになりました。

13 flex2sdk.bin.dir = C:/Program Files/Adobe/Flex Builder 3/sdks/3.0.0/bin
14 flex2sdk.lib.dir = C:/Program Files/Adobe/Flex Builder 3/sdks/3.0.0/frameworks/libs
21 flex2sdk.locale.dir = C:/Program Files/Adobe/Flex Builder 3/sdks/3.0.0/frameworks/locale/{locale}

書き換えたら、準備完了です。
buildディレクトリにコマンドプロンプトで移動して、

ant

とタイプしてください。
すると冒頭にあげた、

$ ant
Buildfile: build.xml

properties:

lib:
     [exec] 設定ファイル "C:\Program Files\Adobe\Flex Builder 3\sdks\3.0.0\frame
works\flex-config.xml" をロードしています
     [exec] C:\cygwin\home\kent\repository\as3corelib-read-only\src\com\adobe\ai
r\logging\FileTarget.as(53): col: 38 エラー: 型が見つからないか、コンパイル時定
数ではありません : File。

     [exec]             public function FileTarget(logFile:File = null)
     [exec]                                                ^

     [exec] Result: 1

BUILD SUCCESSFUL
Total time: 7 seconds

というようなエラーが出力されます。
コンパイルできるようにすればいいのですが、面倒くさいので、src/com/adobe/airディレクトリを削除してしまってください。


すると今度は

$ ant
Buildfile: build.xml

properties:

lib:
     [exec] 設定ファイル "C:\Program Files\Adobe\Flex Builder 3\sdks\3.0.0\frame
works\flex-config.xml" をロードしています
     [exec] C:\cygwin\home\kent\repository\as3corelib-read-only\bin\corelib.swc
(249529 bytes)

BUILD SUCCESSFUL
Total time: 6 seconds

と、出力され、binディレクトリ以下にめでたくcorelib.swcが生成されます。

corelib.swcをFlexBuilderで使う

生成されたcorelib.swcをプロジェクトのlibsディレクトリにコピーすればOKです。
ビルドパスが通っているかどうかは、プロジェクトプロパティーのFlexビルドパス、ライブラリパスタブのlibsをクリックして、corelib.swcと表示されていれば問題ありません。


たとえばJSONシリアライザを使いたい場合には、

import com.adobe.serialization.json.JSON;
public class Test{
   public function test():void{
       var json:String = "{\"message\": \"HelloWorld\"}";
       var decoded:Object = JSON.decode(json);
       trace(decoded.message);
   }
}

のようにして使うことができます。

以上。メモでした。

*1:某増田君とか某木内君とか向け

*2:作らなくてもsrcをコピーすれば使えますが

*3:名前は何でもいいです

*4:日本語は、SVNチェックアウト