アルパカログ

プログラミングとマネジメントがメインです。時々エモいのも書きます。

Rails6エンジンでアセットパイプラインを使う

Ruby on Rails 6 のエンジンでアセットパイプラインを使う設定方法をメモしておきます。

エンジンは以前は Mountable Engine と呼ばれていたと記憶していますが、今では単に「エンジン」と呼ぶようです。

エンジンについては下記チュートリアルを参照してください。

Rails エンジン入門 - Railsガイド

エンジン名はチュートリアルで登場する Blorgh を使って説明します。

アセットパイプラインを使用するためには sprockets が必要です。コメントアウトされていないか確認します。

blorgh/bin/rails

require "sprockets/railtie"

テストディレクトリ以下にある dummy アプリケーションの方も併せて確認しておきましょう。

blorgh/spec/dummy/config/application.rb

require "sprockets/railtie"

レイアウトの head タグ内に、生成されたCSSJavaScriptを読み込むタグを追加します。

<!DOCTYPE html>
<html>
<head>
  ...

  <%= stylesheet_link_tag "blorgh/application" %>
  <%= javascript_include_tag "blorgh/application" %>
</head>
...

アセットの配置場所を blorgh/app/assets/ にするために、エンジンにパスの設定を追加します。

blorgh/lib/blorgh/engine.rb

module Blorgh
  class Engine < ::Rails::Engine
    isolate_namespace Blorgh

    initializer "blorgh.assets.precompile" do |app|
      app.config.assets.paths << File.expand_path("../../app/assets", __dir__)
      app.config.assets.precompile += ["blorgh/application.css", "blorgh/application.js"]
    end
  end
end

もし、削除ボタンを押した際に link_to メソッドで確認ダイアログを出したい場合、そのままだとDELETEではなくGETでリクエストしてしまいます。

Rails 6 では rails-ujs を手動で追加してあげる必要があります。

blorgh/app/assets/javascripts/blorgh/application.js

...
//= require rails-ujs ←追加
//= require_tree .

これでエンジン以下でアセットパイプラインが使えるようになりました。それでは良いRails 6ライフを!