JQ Blog

Asset-pipeline

Assetとは

RailsにはJavaScriptやCSS、Imageなどの要素をアセットと呼びます。アセットはそれぞれに ‘app/assets/javascripts/'、 'app/assets/stylesheets/'、 'app/assets/images’ フォルダーで管理します。 Railsは基本的にJavaScriptとCSSの拡張言語のCoffeeScriptとSCSSを提供します。

Asset Pipelineとは

JavaScriptやCSS、Imageなどのアセットを最小化(minify)または圧縮して連結するフレイムワーク

Asset Pipelineの役割

1.アセットファイルのパスの管理
2.アセットのコンパイル
3.アセットの依存関係の整理

アセットファイルのパスの管理

Assetsの中のパスの管理をします。

/assets/javascript/user.js
/assets/stylesheet/user.css

というファイルを

/assets/user.js
/assets/user.css

のように1つのディレクトリで管理されているようにアクセスさせてくれます。

アセットのコンパイル

Javascript、CSSのかわりに、CoffeeScript、SCSSを使うことも多いと思います。browserはCoffeeScriptとSCSSを読めないのでCoffeeScriptとSCSSをJavaScriptとCSSにコンパイルしなきゃいけないです。このように、ファイルを適当な形式に変換してくれる機能をAsset Pipelineと言います。
必要となるgemは以下です。

gem  'sprockets' 
gem  'coffee_script' 
gem  'scss'


sprockets

Asset Pipelineの基盤の機能を提供してくれます。

coffee_script && scss

それぞれCoffeeScript、SCSSを使うためです。

アセットの依存関係の整理

Asset間の依存関係を整理します。このようにファイルの読み込みの順番を管理します。他のファイルに影響を与えないためにコメントアウトの形式で書きます。
app/assets/javascript/application.js

// = require jquery 
// = require jquery_ujs 
// = require_tree.

Railsのアプリケーションでは複数のCSS、Javascriptを1つのファイルにまとめて提供することが主流となっています。それは複数ファイルが存在すればリクエストの数が増えてページの読み込みが遅くなるからです。アプリケーションの内の依存関係をまとめて提供するための仲介になるファイルを「manifest file」と呼び、デフォルトでは application.js、application.css になります。

Asset Pipelineをコントロールする

develpment/productionの設定

設定は/config/environments/ファイルに書きます。

config.assets.js_compressor

Javascriptの圧縮ライブラリの設定。productionではuglifierというgemを利用しているが nilの設定にして無効にすることも出来る。 default設定 development: nil production: :uglifier

config.assets.css_compressor

CSSの圧縮ライブラリの設定。 default設定 development: nil production: :uglifier

config.assets.compile

動的にcompileするかの設定。trueだとprecompileしていないファイルを動的にコンパイルするのでproductionではfalseが良さそうです。 default設定 development: true production: false

config.assets.digest

pipelineを通した後のファイルにつく数字をつけるかどうかです。 default設定 development: false production: true

config.assets.debug

debugするかの設定。 default設定 development: true production: false

precompileの設定

config/initializers/asset.rb

# Precompile additional assets. 
# application.js, application.css, and all non-JS / CSS in app / assets folder are already added. 
# Rails.application.config.assets.precompile + = % w (search.js) 
Rails . application . config . assets . precompile  + =  % w (* .js * application.css)
cs

Asset Pipelineの流れ

production

例えば、下記設定の場合。
/config/environments/production.rb

config . assets . js_compressor  =  : uglifier 
config . assets . css_compressor  =  : sass 
config . assets . compile  =  false 
config . assets . digest  =  true 
# config.assets.debug = false

1.assetにあるソースコードをコンパイル(coffee -> js、 scss -> css)
2.コンパイルしたソースコードを合わせる (複数のファイルのコードをまとめる)
3.ファイルを圧縮する(uglifier、sass)
4.ファイルにダイジェストを付与する(ファイル名につくハッシュ)

これでブラウザに送られます。

development

例えば、下記設定の場合。

# config.assets.js_compressor = nil 
# config.assets.css_compressor = nil 
# config.assets.compile = true 
config . assets . digest  =  false 
config . assets . debug  =  true

1.assetにあるソースコードをコンパイル(coffee -> js、 scss -> css)

これだけでブラウザへ送られます。

参照

http://qiita.com/shizuma/items/1980bf885906c73238b6