某ブロジェクト@おしごとで比較的まとまった量の JavaScript コードを書いたんですが、これってモバイルからの利用も想定してるし圧縮・最適化をかけた方がヨイよなー、ということでその方面のツール等を物色してみました。Web I/F 上で利用できる圧縮サービスは今まで多数見かけてきましたが、サービス保守サイクルでの効率を考えるとサーバ上で CLI で使えるのが欲しい。
で、これ最強ですね。Google の closure-compiler。Java で実装されているので jar を使ってのコマンドづくりも勿論できるんですが、サービス化されてて API が用意されているのが嬉しいです。当方某プロジェクトでは Java は使っておらず、この為だけに構成サーバそれぞれで Java 環境をインスコするのもアレなので、この API を使って圧縮用 PHP スクリプトをちゃちゃっと書いてみますた。こんな感じ。
<?php define('USAGE', 'jsmin.php <JSファイル>'); define('API_URL', 'http://closure-compiler.appspot.com/compile'); if (! ($jsFile=@$argv[1]) || ! file_exists($jsFile)) { die(USAGE . "\n"); } $param = array( 'js_code' => '', 'compilation_level' => 'SIMPLE_OPTIMIZATIONS', 'output_format' => 'text', 'output_info' => 'compiled_code', ); $param['js_code'] = file_get_contents($jsFile); $options = array( 'http' => array( 'method' => 'POST', 'header' => "Content-type: application/x-www-form-urlencoded\r\n", 'content' => http_build_query($param), ) ); $result = file_get_contents(API_URL, false, stream_context_create($options)); echo $result;
使う時は
php このスクリプト.php foo.js > foo.min.js
みたいな感じで。ちなみに、今回書いた JS コードは35%サイズに圧縮されました。いいね!
上記例では変換対象 JS コードに文法誤り等無いことを前提にしてますので、エラー処理やコンパイルレベルの指定等、ちゃんとしたコマンドっぽくされたい場合はここなどを参考に、適宜いぢってみて下さい。