Railsのassetsファイルを配置する場所について
by Soichi Saito
概要
Railsのassetsファイルはどこに配置するべきかについて記載します。
3つの配置場所について
Rails Guidによると、以下3つの配置がユースケースと共に用意されています。
- app/assetsは、カスタム画像ファイル、JavaScript、スタイルシートなど、アプリケーション自身が保有するアセットの置き場所です。
- lib/assetsは、1つのアプリケーションの範疇に収まらないライブラリのコードや、複数のアプリケーションで共有されるライブラリのコードを置く場所です。
- vendor/assetsは、JavaScriptプラグインやCSSフレームワークなど、外部の団体などによって所有されているアセットの置き場所です。
どのように動作するか
例えばhoge.jsというファイルがある場合を想定してみます。
application.jsで読み込む場合は以下のように参照します。
このファイルはAssetPipelineによって以下のように検索されます。
- app/assets/javascripts/hoge.js
- lib/assets/javascripts/hoge.js
- vendor/assets/javascripts/hoge.js
困る点
application.jsでは、ディレクトリ配下のファイルを再帰的に読み込むように以下のようにデフォルトで設定されているかと思います。
この場合、アプリケーションコードとは別にライブラリなどは事前に読み込んでおきたかったりします。app/assets/javascripts/libなどに配置して以下のように読み込むこともできなくはないですが、あまり美しくありません。
まとめ
同じ書き方で、自作した場合と外部で持ってきたライブラリを読み込むことができます。
ただ、配置する場所はlibになるのかvendorになるのかきちんと分けて切り分けて使えるようにするといいかと思います。
- アプリケーション固有のコードの場合はapp/assets
- プロジェクト内でもライブラリ的に扱う場合はlib/assets
- 外部から持ってきたライブラリの場合はvendor/assets