Railsでassetsのpathをサクッと確認する方法

とりきち
なんかライブラリのファイル読まないんだけど、パスあってるのに・・

Railsでは画像やstylesheet、javascriptは好き勝手にどこかな場所においても読み込むことはできません。assetsのパスは決められて(もちろん追加可能)、それに準じた場所へ配置する必要があります。なんとなく配置するよりもちゃんと調べた方が頭がスッキリします。

Railsでassetsのpathを調べる方法

調べるにはrailsコンソールに入ってから以下を入力すれば確認することができます。

Rails.application.config.assets.paths

実際に確認して見ます。

$ bundle exec rails c
y Rails.application.config.assets.paths
---
- "/home/myuser/public_html/rails_app/app/assets/config"
- "/home/myuser/public_html/rails_app/app/assets/images"
- "/home/myuser/public_html/rails_app/app/assets/javascripts"
- "/home/myuser/public_html/rails_app/app/assets/stylesheets"
- "/home/myuser/public_html/rails_app/rails_engine_app/app/assets/config"
- "/home/myuser/public_html/rails_app/rails_engine_app/app/assets/fonts"
- "/home/myuser/public_html/rails_app/rails_engine_app/app/assets/images"
- "/home/myuser/public_html/rails_app/rails_engine_app/app/assets/javascripts"
- "/home/myuser/public_html/rails_app/rails_engine_app/app/assets/stylesheets"
- "/home/myuser/public_html/rails_app/vendor/bundle/ruby/2.5.0/gems/ckeditor-4.2.4/app/assets/images"
- "/home/myuser/public_html/rails_app/vendor/bundle/ruby/2.5.0/gems/ckeditor-4.2.4/app/assets/javascripts"
- "/home/myuser/public_html/rails_app/vendor/bundle/ruby/2.5.0/gems/ckeditor-4.2.4/app/assets/stylesheets"
- "/home/myuser/public_html/rails_app/vendor/bundle/ruby/2.5.0/gems/ckeditor-4.2.4/vendor/assets/javascripts"
- "/home/myuser/public_html/rails_app/vendor/bundle/ruby/2.5.0/gems/coffee-rails-4.2.2/lib/assets/javascripts"
- "/home/myuser/public_html/rails_app/vendor/bundle/ruby/2.5.0/gems/actioncable-5.1.6/lib/assets/compiled"
- "/home/myuser/public_html/rails_app/vendor/bundle/ruby/2.5.0/gems/actionview-5.1.6/lib/assets/compiled"
- !ruby/object:Pathname
  path: "/home/myuser/public_html/rails_app/rails_engine_app/node_modules"
- !ruby/object:Pathname
  path: "/home/myuser/public_html/rails_app/rails_engine_app/src"
- !ruby/object:Pathname
  path: "/home/myuser/public_html/rails_app/node_modules"

先ほどのコマンドを入力することで、以上のような結果が出ます。

上記の結果は/home/myuser/public_html 以下にインストールされているrailsアプリケーションのassetsのパスの結果です。

Gemでckeditorなどを追加しているので、そちらのassetsも追加されています。

assetsを追加する方法は?

とりきち
既存のassetsに起きたくないファイルあるんだけど・・・

assetsを追加したいことがあると思います。実際rails5ではデフォルトでアプリケーションのホームディレクトリに存在する、node_modulesがassetsに追加されていますね。

これは今後javascriptやstylesheet関連のgemはyarnで管理して行く流れの中でこうなっているようです。

ではその設定はどこで行なっているかと言うと、config/initializers/assets.rb で行われています。

# Be sure to restart your server when you modify this file.

# Version of your assets, change this if you want to expire all your assets.
Rails.application.config.assets.version = '1.0'

# Add additional assets to the asset load path.
# Rails.application.config.assets.paths << Emoji.images_path
# Add Yarn node_modules folder to the asset load path.
Rails.application.config.assets.paths << Rails.root.join('node_modules')

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

9行目に存在するRails.application.config.assets.paths << Rails.root.join('node_modules')node_modulesがassetsに追加されています。これと同じ要領で既存のassets意外を追加することができます。

例えば今回Railsアプリケーションが配置されているディレクトリにsrc/と言うディレクトリを作成し、そちらからのassetsを取得した場合は以下のように追加します。

Rails.application.config.assets.paths << Omohtro::Engine.root.join('src')

以上で今後src/以下のファイルもassetsとしてしていすることが可能になります。