読者です 読者をやめる 読者になる 読者になる

Programming log - Shindo200

イベント参加記録とプログラミング系の雑記

uglifier とは何をする gem なのか

rails new コマンドで生成したばかりの Gemfile には、uglifier という gem が書かれています。よちよち.rb の第4回で「この gem は何をしているのか?」と少し話題になりましたので、調べたことをまとめてみます。

uglifier: https://github.com/lautis/uglifier/

uglifier について

uglifier リポジトリの README.md 冒頭から引用します。

Ruby wrapper for UglifyJS JavaScript compressor.

どうやら UglifyJS2 という JavaScript のコード軽量化ライブラリを、Ruby で簡単に使えるようにした gem のようです。手始めに以下の JavaScript のコードを軽量化してみます。

// source.js
var counterModule = (function() {
  var counter = 0;

  return {
    incrementCounter: function() {
      return ++counter;
    },
    resetCounter: function() {
      console.log("counter value is " +counter);
      counter = 0;
    }
  }
});

軽量化するには、Uglifier.compile メソッドに JavaScript のコードを表す文字列か File オブジェクトを渡せば良いようです。

require 'uglifier'

# ===== Example 1 =====
p Uglifier.compile(File.read("source.js"))
# => "var counterModule=function(){var n=0;return{incrementCounter:function(){return++n},resetCounter:function(){console.log(\"counter value is \"+n),n=0}}};"

# ===== Example 2 =====
File.open("source.js") { |source| p Uglifier.compile(source) }
# => "var counterModule=function(){var n=0;return{incrementCounter:function(){return++n},resetCounter:function(){console.log(\"counter value is \"+n),n=0}}};"

コメントや改行や余計な空白が取り除かれ、ローカル変数の名前が短いものに変わっています。

どのタイミングで Rails がこの処理を行っているのかは分かりませんが、「uglifier は何をする gem なのか」はしっかりと知っておきたいですね。