Rails7アップグレードとwebpacker脱却ログ - yubeleのスライド | slidict.io
slidict.io

JA | EN

Rails7アップグレードとwebpacker脱却ログ

Google Translate: 日本語 英語
yubele
yubele
フォロワー 0人
LGTM:
最終更新: 2026/07/07
読む時間: 02:19

共有

コード

通報

詳細説明
https://slidict.io をrails7にアップグレードしてwebpackerから脱したのでそれのログを残します。
rails7では、webpackerと決別できるためsprockets-railsとwebpackerだった構成が一本化されさらにesbuild(rollup, webpackも使える) によりビルド速度が劇的に向上しています。
詳細説明
sprockets-railsとwebpackerだった構成を、propshaft / jsbundling-rails / cssbundling-rails に寄せることで一本化します。
esbuildによりビルド速度の向上も期待できます。
  • 非対応ブラウザが多い

  • es-module-shimsでの回避に不安

  • React利用時の制約が気になった

  • 非対応ブラウザのほうが多い。

  • https://github.com/guybedford/es-module-shims#es-module-shims を読み込めばブラウザをカバーできるようだが、はまる予感がした

  • Reactコンポーネントはクラスでしか書けないらしい・・・(https://zenn.dev/takeyuweb/articles/996adfac0d58fb で紹介されてました。)

  • webpacker を削除

  • sprockets 利用もやめる

  • Railsを7系へ更新

sprockets-rails (rails_adminで使っていた) + webpacker 構成で動かしていたため、今回のアップデートでは、webpacker, sprocketsを削除することにしました。

削除したgemは以下です。 ※webpackerを削除しなくても私の環境では使えましたが、あとあとはまることになるので削除することにしました。 ※sprocket-railsは、rails依存でインストールしていたため、Gemfileに追加してないため記載していません。

詳細説明
削除したgemは以下です。

- webpacker
- sass-rails
- yui-compressor
詳細説明
また、私の環境で不要なyarn packageは以下でした。

- webpack
- webpack-dev-server
- babel
- turbolink
- rails/ujs ( deprecatedになった。https://github.com/rails/rails/pull/43112 )
- css-loader
- postcss
- mini-css-extract-plugin
- sass
- style-loader
詳細説明
あとは、Gemfileのrails部分を以下のように修正し

gem 'rails', '>= 7.0.0'

`rails app:update` をするだけです。
  • Rails7標準のimportmapは使わない

  • propshaftでassetsを扱う

  • 先に導入する

rails7は、importmap-railsをデフォルトで使用するようですが前述の理由によりpropshaftを使うことにします。propshaftは、assets::precompileタスクを提供したり、/assets配下/stylesheetは以下のパスを通してくれたりします。

執筆時点では[v1.0.0にPRが取り込まれておらず、assets:precompileがないとxsbundling-railsのインストールがこけるので](https://github.com/rails/jsbundling-rails/commit/98780f28809ebad5d84921ce38dc238472a35812) propshaftを最初に入れます。

詳細説明
Gemfileに以下を追加します。

gem 'propshaft'
  • jsbundling-rails

  • cssbundling-rails

  • webpackerの代替

機能的にはwebpackerの代替となります。esbuildでは、rails側はjsbundling-rails, cssbundling-railsを使うことになります。

詳細説明
Gemfileに以下を追加します。

gem 'jsbundling-rails'
gem 'cssbundling-rails'
詳細説明
`bundle install`したら
`./bin/rails javascript:install:esbuild`, `./bin/rails css:install:sass` をします。
javascriptは[webpackかrollupが選べます](https://github.com/rails/jsbundling-rails#installation)
cssは[tailwindなどが選べます](https://github.com/rails/cssbundling-rails#installation)

tsconfig.jsonがある場合は、targetをes6に設定します。
詳細説明
package.jsonに以下のスクリプトを追加します。
  • webpack-dev-server不要

  • bin/devだけで起動

@startuml
start
:bin/dev;
:Rails server;
:esbuild;
:sass;
:app/assets/builds;
stop
@enduml

webpackerではbin/webpack-dev-serverの起動が必要だったのですが、bin/devだけでよくなりました。

詳細説明
運営サイトでスライドにしてみました -> https://slidict.io/slides/620881cc9086a9001906bf32
読みにくいので改善しないと・・・
Rails7アップグレードとwebpacker脱却ログのサムネイル(1ページ目)
1 / 9