Open3

Sprockets を Propshaft に置き換える

hwatattamahwatattama

Rails 7 で rails new 作成したアプリケーションは Sprockets がデフォルト。このたび Rails 8.0.0 へアップグレードしたので、 Sprockets のままでもいいけれど、 Sprockets に関して特別なことをしていないため、今後のためにもあらたなデフォルトとなった Propshaft にしたい。

hwatattamahwatattama

Propshaft のほうにアップグレードガイドがあり。ただしこれは webpacker 環境からの移行をガイドしている。

Upgrading from Sprockets to Propshaft
https://github.com/rails/propshaft/blob/v1.1.0/UPGRADING.md

日本語に訳されたものもあり
https://techracho.bpsinc.jp/hachi8833/2024_02_18/119856

引用「本ガイドでは、プロジェクトがRails 6.1以後の以下の規約に沿っていることを前提としています。」とのことで、じぶんの求めるところ(= Rails 7 からのアップグレード)ではない。

hwatattamahwatattama

(1) Gemfile

-# The original asset pipeline for Rails [https://github.com/rails/sprockets-rails]
-gem "sprockets-rails"
+# The modern asset pipeline for Rails [https://github.com/rails/propshaft]
+gem "propshaft"

(2) app/views/layouts/application.html.erb

-    <%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
+    <%= stylesheet_link_tag :all, "data-turbo-track": "reload" %>

(3) 外部から取り込んだ JavaScript ファイルがある場合(の一例)

(3a) config/importmap.rb

追加で投入していた JavaScript ファイルが app/javascript/lib の下に置いてあるので、これを読み込むようにする

+pin_all_from "app/javascript/lib", under: "lib"

(3b) app/javascript/application.js

-import "./lib/lazysizes.min"
+import "lib/lazysizes.min"

(4) app/assets/stylesheets/application.css

不要になったので削除