JavaScript難読化(Google Closure Compiler)
JavaScriptの難読化ツールを使ってみました。今回しようしたのは検索エンジンやGMail、Android等で有名な Google がリリースしている「Closure Compiler」というツールです。 から無償でダウンロードできます。「難読化」と言っているだけあって適用すると読みづらいコードに変換されますが、何も見づらくするだけが目的ではありません。
記事に添付した画像は同一ソースの難読化前と難読化後を画面キャプチャしたものです。 難読化ツール”Closure Compiler” の SIMPLE_OPTIMIZATIONS というオプションを指定して難読化したものです。オプションを指定することで空白を除く等だけでなく変数名を短くしたりとコードに変更が入ります。これによってファイルサイズも 11KB から 4KB と軽量にすることができ、見づらくなることによる可視性やメンテナンス性と引き換えに、クライアントへのダウンロード時間の短縮や、JavaScriptコード解析にかかる時間の短縮という効果が得られ、オリジナルのJavaScriptより軽く速くなることが期待できます。
難読化することで第三者にスクリプトやアイデアが容易に使われないようにするという目的(難読化という名前から、こちらが主流!?)もありますが、あくまでも「難読」であり読解不可と言っているわけではないので覚えておきましょう。
難読化自体は 先ほど示した Google Closure Compiler のウェブサイトからダウンロードできます。ダウンロードしたファイルを解凍すると「compiler.jar」という Jar ファイルがあるので、これを任意の場所に置いて Java コマンドで動かせます。 Closure Compiler の使い方は ブログ「プログラマーズ雑記帳」 が参考になりました。
使い方自体は簡単でしたが、Closure Compiler で JavaScript を難読化する上で(「SIMPLE_OPTIMIZATIONS」や「ADVANCED_OPTIMIZATIONS」を指定してコードを変更する場合は特に)いくつか注意が必要だったので示しておきます。
まず、「変数名に日本語を使う」はNGでした。難読化した結果が 0バイトの空ファイル にしかなりませんでした。日本語のコメントは OK なので日本語を含めてはいけないという訳ではありません。また、constを使って定数宣言をしていてもNGで、同様に 0 バイト となってしまいます。これは「Compilerは Ecmascript 262 revision 3 だけを正しく認識する」ということで、この対象外となっている constキーワード が含まれていたために解析ができませんでした。このへんは Compilerが求めるコーディングルール がとても参考になりました。