Railsのassetsファイルを配置する場所について

概要

Railsのassetsファイルはどこに配置するべきかについて記載します。

3つの配置場所について

Rails Guidによると、以下3つの配置がユースケースと共に用意されています。

  • app/assetsは、カスタム画像ファイル、JavaScript、スタイルシートなど、アプリケーション自身が保有するアセットの置き場所です。
  • lib/assetsは、1つのアプリケーションの範疇に収まらないライブラリのコードや、複数のアプリケーションで共有されるライブラリのコードを置く場所です。
  • vendor/assetsは、JavaScriptプラグインやCSSフレームワークなど、外部の団体などによって所有されているアセットの置き場所です。

どのように動作するか

例えばhoge.jsというファイルがある場合を想定してみます。
application.jsで読み込む場合は以下のように参照します。

//= require hoge
Ruby

このファイルはAssetPipelineによって以下のように検索されます。

  1. app/assets/javascripts/hoge.js
  2. lib/assets/javascripts/hoge.js
  3. vendor/assets/javascripts/hoge.js

困る点

application.jsでは、ディレクトリ配下のファイルを再帰的に読み込むように以下のようにデフォルトで設定されているかと思います。

//= require_tree .
Ruby

この場合、アプリケーションコードとは別にライブラリなどは事前に読み込んでおきたかったりします。app/assets/javascripts/libなどに配置して以下のように読み込むこともできなくはないですが、あまり美しくありません。

//= require lib/hoge
Ruby

まとめ

同じ書き方で、自作した場合と外部で持ってきたライブラリを読み込むことができます。
ただ、配置する場所はlibになるのかvendorになるのかきちんと分けて切り分けて使えるようにするといいかと思います。

//= reuqire hoge
Ruby
  • アプリケーション固有のコードの場合はapp/assets
  • プロジェクト内でもライブラリ的に扱う場合はlib/assets
  • 外部から持ってきたライブラリの場合はvendor/assets