ご存じの方が多いと思いますが、Flash コンテンツ内で使用している trace() の内容は、FlashTracer などのブラウザ拡張機能を使えば、簡単に丸見えになってしまいます。
Flash には、パブリッシュ(ビルド)の設定に 「 Trace アクションを省略」 という設定項目があり、この機能を使うことによって、パブリッシュ時に ActionScript のコード内にある trace() をすべて削除してから swf ファイルを生成することができます。ですが、FlexBuilder には、この機能に該当するオプションがありません。( mxmlc のオプションにもありません)
『 Flex アプリの開発では、trace() を使わない 』 という選択肢がベストなのですが、trace() を使用せざる得ない場合に、少しでもリスクを削減したいという方のために、簡単なクラスを作成しました。
package
{
/**
* FlexTrace.as
* @author taiga
* カスタム trace() クラス
*/
public class FlexTrace
{
/**
* @private
*/
private static var mFlag:Boolean;
/**
* enabled
* 書き込み専用プロパティ trace() の有効(true)/無効(false)
*/
public static function set enabled(aFlag:Boolean):void
{
mFlag = aFlag;
}
/**
* output
* @param args trace() させる要素
* enabled=true のとき、trace() を実行
*/
public static function output(...args):void
{
if(!mFlag)
return;
var i:uint;
var s:String = '';
for(i = 0; i < args.length; i++)
s += args[i].toString() + ' ';
trace(s);
}
}
}
使い方ですが、適当にインポートしたあと、FlexTrace.output(‘hoge’, ‘fuga’); という具合に、trace() と同様に使うだけです。カンマ区切りで好きなだけ引数を追加できます。( ActionScript 3.0 では、… (rest) パラメータを使用することにより、任意の数のカンマ区切りのパラメータを受け入れる配列パラメータを指定できます)
あとは、FlexTrace.enabled の値を true か false に設定するだけで、trace() の使用/不使用を一括制御することができます。「 Trace アクションを省略」 のように完全にコードを削除できるわけではありませんが、緩和処置としては許せる範囲かなと思いますので、使いたい方はご自由にどうぞ。
ちなみに、私は Flex アプリ開発の仕事では、trace() を一切使用していません。