18
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Railsアプリで外部提供のJavaScriptファイルを利用する

Last updated at Posted at 2017-11-18

はじめに

解説で利用したJavaScript

JavaScriptを読み込めているかをページの見た目で判断可能なので、解説にはHolder.jsを利用します。

Holder.jsとは

WEBサイト上にダミー画像を生成するJavaScriptです。

xxx.html.erb
<img data-src="holder.js/200x100" alt="image"/>

JavaScriptが正常に読み込まれてる場合は、ダミー画像が表示されます。

rails-vendor-js01.png

JavaScriptが正常に読み込まれてない場合は、ダミー画像が表示されなくなります。
(画像が読み込めない時の表示はブラウザによって異なります)

rails-vendor-js02.png

準備:JavaScriptファイルの配置

jsファイルをダウンロードして、vendor/assets/javascriptsに配置する。
holder.jsの場合はトップページからDL可能)

rails-vendor-js03.png

補足:
Holder.jsはgemも提供されてますが、gemが提供されてないJavaScriptを利用するケースも想定して
gemを利用しない手順で解説します。

複数のページで利用するJavascriptの場合

app/assets/javascripts/application.jsでrequireすることで自動的に展開されるassetsの対象に含めることができるようになります。

app/assets/javascripts/application.js
//= require holder

rails-vendor-js06.png

各ページでは明示的にインクルードしなくてもJavaScriptが利用することができるようになります。

app/views/xxx/xxx.html.erb
<img data-src="holder.js/200x100" alt="image"/>

rails-vendor-js01.png

特定のページで利用するJavascriptの場合

補足:こちらの投稿を参考にさせていただきました。
Railsでvendor/assets/javascripts以下にあるファイルを特定のページでのみ使用する - Qiita

特定のページで利用したい場合はconfig/initializers/assets.rbでプリコンパイルの対象に指定しておくことで、JavaScriptを明示的にインクルードさせることができるようになります。

config/initializers/assets.rb
Rails.application.config.assets.precompile += %w( holder.js )
app/views/xxx/xxx.html.erb
<%= javascript_include_tag "holder" %>
<img data-src="holder.js/200x100" alt="image"/>

rails-vendor-js08.png

rails-vendor-js01.png

補足:AssetNotPrecompiled in xxx エラーの解決方法

問題点

インクルードするJavaScriptがプリコンパイルの対象に含まれてなかった場合、ページへアクセスすると、Sprockets::Rails::Helper::AssetNotPrecompiled in xxxエラーが表示されます。

app/views/xxx/xxx.html.erb
<%= javascript_include_tag "holder" %>
<img data-src="holder.js/200x100" alt="image"/>

rails-vendor-js07.png

解決方法

エラーメッセージに従ってconfig/initializers/assets.rbの追記とサーバ再起動を実施すれば、JavaScriptがインクルードされるようになります。

config/initializers/assets.rb
Rails.application.config.assets.precompile += %w( holder.js )

rails-vendor-js01.png

補足:Holder.js利用時の注意点

問題点

imgタグでsrcの指定をsrcとしてもダミー画像は表示されますが、ブラウザによってはインスペクタ上で警告が出力される場合があります。

xxx.html.erb
<img src="holder.js/200x100" alt="image"/>

rails-vendor-js01.png

補足:Safarの警告メッセージ
Failed to load resource: the server responded with a status of 404 (Not Found)

rails-vendor-js04.png

解決方法

imgタグでsrcdata-srcと修正することで警告が表示されなくなります。

xxx.html.erb
<img data-src="holder.js/200x100" alt="image"/>

rails-vendor-js05.png

18
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?