ドキュメントを読み込むのは大事、ということでRailsガイドを頭から読んでいく取り組みをしています。 各章ごとに、(Railsガイドにちゃんと書いてあるのに)知らなかった機能を雑にまとめていきます。
今回は、アセットパイプラインの章です。
Sprocketsの利用法
リンクはこちら
マニフェストファイルとディレクティブ
manifest.js
のlink_directory ../stylesheets .css
で、app/assets/stylesheets
ディレクトリのcssファイルを読み込みます。
実際に、この行を削除するとcssが効かなくなりました。
Railsガイドには、(ただしサブディレクトリは含めません)
と記載があったのですが、手元でapp/assets/stylesheets/books/index.css
にcssファイルを書いたらCSSが反映されます。
これはどうしてだろうと思ったら、app/assets/stylesheets/application.css
に以下の記載がありました。
*= require_tree .
これによって、ディレクトリ配下のcssファイルを読み込んでいます。
manifast.js
のlink_directory
を使うことでstylesheet_link_tag
でapplication.css
が読み込めるようになり、
application.css
に*= require_tree .
とすることでapplication.css
からディレクトリ内のcssが読み込まれるということだと理解しました。
なお、application.css
には以下も記載されていました。
*= require_self
これは、application.css
自身を読み込むタイミングを決めるものです。
例えば*= require_tree .
より上に書いた場合、配下のディレクトリ内のcssと対象が重複した場合は配下のcssが適用されます。
逆に、*= require_tree .より下に書いた場合は、
application.css`内のcssが適用されます。
Sprocketsにおけるindex.css
例えばapplication.css
に*= require books
と記述したとき、books/index.css
が存在しないとエラーを返します。
Sprockets::FileNotFound in Books#index
そして、そのindex.css
内で *= require_tree .
を記載すると、booksディレクトリ内の他のcssファイルを読み込めます。
.css.erb
.css.erb
ファイルを使うことで、asset_data_uri
ヘルパーを使ってデータURLスキームを使うこともできるようになります。