アーカイブ

trace() 話

ご存じの方が多いと思いますが、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() を一切使用していません。