なんとなく知っているけど、聞かれたらドキッとするのでAssets Pipelineについて詳しくまとめました。
アセットパイプラインとは何か?
作業がしやすいように画像、javascript、css、htmlファイルを分解つしてコーディングして、最終的に1つのファイルにまとめる仕組みのことです。
普段railsを使うときには意識することはありませんが、htmlファイルはapp/views
に配置されてjavascriptファイルはapp/assets/javascripts
に配置されていると思います。
このようにファイルは分けて管理した方が、人間にとってはわかりやすいですが、最終的には全て統合して一つのファイルに統合して扱われます。さらに字を詰めることでファイルの容量を最小化する働きがあります。
アセットパイプラインの動き
1.コンパイル
- .js.coffee形式のファイルを.js形式にコンパイル
- .css.scss形式のファイルを.css形式にコンパイル
2.統合
コンパイル済みの
- .js形式のファイル達をapplication.js
- .css形式のファイル達をapplication.css
に統合する。
3.統合
application.jsとapplication.cssから改行、コメント、空白を取り除く
4.ダイジェスト付与
圧縮後のapplication.jsやapplication.cssや画像にハッシュ値というファイル固有の文字列を付与する。
これによって、編集作業をするごとに全く別のファイルだと認識され、予期せぬキャッシュの適用を防ぐ。
キャッシュについてのわかりやすいページ
ダイジェストについてのわかりやすいページ
どこが担っているの?
技術的には、アセットパイプラインは既にRails 4のコア機能ではありません。フレームワークから分離され、sprockets-railsというgemに書き出されています。
Railsではデフォルトでアセットパイプラインが有効になっています。
引用:RAILS GUIDE
またsprockets-rails
はアセット圧縮の際に
gem 'sass-rails' //sassファイルをコンパイル
gem 'uglifier' //javascriptのコード軽量化
gem 'coffee-rails' //coffeeファイルをコンパイル
を使っています。
アセットプリコンパイル
production環境では処理速度に対する影響を防ぐために自動でコンパイルが行われない。
解決方法が二つある。
- アセットプリコンパイルを行う
- 設定を変える
アセットプリコンパイルを行う
以下のコマンドを実行します
rake assets:precompile RAILS_ENV=production
設定を変える
config.assets.compile = true
に変える。