1262 文字
6 分
webpackerを削除してcssbundling-rails+jsbundling-rails+propshaftに移行
概要
importmap-railsに移行したかったのですが、手元のブラウザではちゃんと動かなかったので諦めてJavascriptはtranspileすることにしました。
webpackerから移行した際の手順をまとめておきます。
https://postcode.teraren.com/ こちらのサービスで実施した内容になります。
移行手順
できるだけわかりやすいように、差分を多く掲載します。
Gemfileを書き換えます。
diff --git a/Gemfile b/Gemfileindex 312e40b..4c2a986 100644--- a/Gemfile+++ b/Gemfile@@ -1,13 +1,31 @@ source 'https://rubygems.org'
gem "rails", '~>7.0'-gem 'webpacker'
gem 'jbuilder'
gem 'puma'
+# gem "sprockets-rails"++#gem "importmap-rails"+gem 'cssbundling-rails'+gem 'propshaft'++gem "jsbundling-rails"++#gem "turbo-rails"++#gem "stimulus-rails"++package.jsonを一新します。
- ついでにjQueryに依存したコードも削除下のでjqueryも消しています。
- bootstrapのバージョンも最新にしています。
- webpack関連のnpmは削除しています。
diff --git a/package.json b/package.jsonindex 5ec1857..18b62d6 100644--- a/package.json+++ b/package.json@@ -1,18 +1,19 @@ {- "packageManager": "yarn@1.22.15",- "private": true,+ "name": "app",+ "private": "true", "dependencies": {- "@fortawesome/fontawesome-free": "^5",- "@popperjs/core": "^2",- "@rails/activestorage": "^7.0",- "@rails/ujs": "^7.0",- "@rails/webpacker": "5.4",- "bootstrap": "^5.1",- "bootswatch": "^5.1",- "jquery": "^3.6",- "webpack-cli": "^4"+ "@fortawesome/fontawesome-free": "^6.2.0",+ "@popperjs/core": "^2.11.6",+ "@rails/ujs": "^7.0.4",+ "bootstrap": "^5.2.2",+ "bootswatch": "^5.2.1"+ },+ "scripts": {+ "build": "esbuild app/javascript/*.* --bundle --sourcemap --outdir=app/assets/builds --public-path=assets",+ "build:css": "sass ./app/assets/stylesheets/application.sass.scss:./app/assets/builds/application.css --no-source-map --load-path=node_modules" }, "devDependencies": {- "webpack-dev-server": "^4"+ "esbuild": "^0.15.10",+ "sass": "^1.55.0" } }設定ファイルを自動作成します。
./bin/rails css:install:sass./bin/rails javascript:install:esbuildJS周りの設定ファイルを書き換えます。
diff --git a/app/assets/builds/.keep b/app/assets/builds/.keepnew file mode 100644index 0000000..e69de29diff --git a/app/assets/config/manifest.js b/app/assets/config/manifest.jsindex 20b4c66..cf7a2a5 100644--- a/app/assets/config/manifest.js+++ b/app/assets/config/manifest.js@@ -1,3 +1,11 @@//= link graphiql/rails/application.css//= link graphiql/rails/application.js// app/assets/config/manifest.js
//= link_tree ../images
//= link application.js//= link controllers/application.js//= link controllers/home.js//= link controllers/index.js
//= link application.css//= link_tree ../buildsCSS周りの設定ファイルを書き換えます。gitにファイルの置き場所が変わっているので新規作成として認識されてます。
diff --git a/app/assets/stylesheets/application.sass.scss b/app/assets/stylesheets/application.sass.scssnew file mode 100644index 0000000..7f0faab--- /dev/null+++ b/app/assets/stylesheets/application.sass.scss@@ -0,0 +1,8 @@+// bootswatch+@import "bootswatch/dist/simplex/variables";+@import "bootstrap/scss/bootstrap";+@import "bootswatch/dist/simplex/bootswatch";++// fontawesome+@import '@fortawesome/fontawesome-free/scss/fontawesome';+JS、CSS、画像の置き場所を全体的に変更します。
JS: app/javascript/pack => app/javascript
CSS: app/javascript/stylesheets => app/assets/stylesheets
画像: app/javasript/images => app/assets/images
アセットの呼び出し方法を変更します。
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erbindex 9290dda..75a118d 100644--- a/app/views/layouts/application.html.erb+++ b/app/views/layouts/application.html.erb@@ -20,7 +20,7 @@ description.strip! <meta property="og:type" content="website" /> <meta property="og:title" content="<%= title %>" /> <meta property="og:url" content="<%= request.url %>" />- <meta property="og:image" content="<%= asset_pack_path 'media/images/apple-touch-icon-144x144-precomposed.png' %>" />+ <meta property="og:image" content="<%= asset_path 'apple-touch-icon-144x144-precomposed.png' %>" />
<meta name="theme-color" content="#d97368">
@@ -43,32 +43,31 @@ description.strip! <%= csp_meta_tag %>
- <%= stylesheet_pack_tag "application" %>- <%= javascript_pack_tag "application", defer: true %>-- <!-- For third-generation iPad with high-resolution Retina display: --> <!-- Size should be 144 x 144 pixels -->- <%= favicon_link_tag (asset_pack_path('media/images/apple-touch-icon-144x144-precomposed.png')), :rel => 'apple-touch-icon-precomposed', :type => 'image/png', :sizes => '144x144', skip_pipeline: true %>+ <%= favicon_link_tag (asset_path('apple-touch-icon-144x144-precomposed.png')), :rel => 'apple-touch-icon-precomposed', :type => 'image/png', :sizes => '144x144', skip_pipeline: true %>
<!-- For iPhone with high-resolution Retina display: --> <!-- Size should be 114 x 114 pixels -->- <%= favicon_link_tag (asset_pack_path('media/images/apple-touch-icon-114x114-precomposed.png')), :rel => 'apple-touch-icon-precomposed', :type => 'image/png', :sizes => '114x114' %>+ <%= favicon_link_tag (asset_path('apple-touch-icon-114x114-precomposed.png')), :rel => 'apple-touch-icon-precomposed', :type => 'image/png', :sizes => '114x114' %>
<!-- For first- and second-generation iPad: --> <!-- Size should be 72 x 72 pixels -->- <%= favicon_link_tag (asset_pack_path('media/images/apple-touch-icon-72x72-precomposed.png')), :rel => 'apple-touch-icon-precomposed', :type => 'image/png', :sizes => '72x72' %>+ <%= favicon_link_tag (asset_path('apple-touch-icon-72x72-precomposed.png')), :rel => 'apple-touch-icon-precomposed', :type => 'image/png', :sizes => '72x72' %>
<!-- For non-Retina iPhone, iPod Touch, and Android 2.1+ devices: --> <!-- Size should be 57 x 57 pixels -->- <%= favicon_link_tag (asset_pack_path('media/images/apple-touch-icon-precomposed.png')), :rel => 'apple-touch-icon-precomposed', :type => 'image/png' %>+ <%= favicon_link_tag (asset_path('apple-touch-icon-precomposed.png')), :rel => 'apple-touch-icon-precomposed', :type => 'image/png' %>
<!-- For all other devices --> <!-- Size should be 32 x 32 pixels -->- <%= favicon_link_tag (asset_pack_path('media/images/favicon.ico')), :rel => 'shortcut icon' %>+ <%= favicon_link_tag (asset_path('favicon.ico')), :rel => 'shortcut icon' %>
<%= google_tag_manager_script_tag(:default) %>
+ <%= stylesheet_link_tag "application" %>+ <%= javascript_include_tag "application", "data-turbo-track": "reload", defer: true %>+ </head> <body>開発サーバのスタート方法を変更します。
diff --git a/start.sh b/start.shindex 1df6187..e986393 100755--- a/start.sh+++ b/start.sh@@ -7,5 +7,6 @@ bundle exec rails db:migrate
rm -f /app/tmp/pids/server.pid-bundle exec rails server -b '0.0.0.0'++bin/devwebpack関連のファイルを削除します。
config/webpacker.ymlconfig/webpack/*bin/webpackbin/webpack-dev-serverpostcss.config.js.browserslistrcbabel.config.jsdocker-compose.ymlからwebpack-dev-serverを削除
diff --git a/docker-compose.yml b/docker-compose.ymlindex e9a41fd..6027e93 100644--- a/docker-compose.yml+++ b/docker-compose.yml@@ -3,7 +3,6 @@ services: app: build: . environment:- WEBPACKER_DEV_SERVER_HOST: webpack BUNDLE_JOBS: 4 volumes: - .:/app@@ -12,20 +11,6 @@ services: command: ./start.sh ports: - "3000:3000"- depends_on:- - webpack-- webpack:- build: .- volumes:- - .:/app- - bundle_app2:/usr/local/bundle:cached- ports:- - "3035:3035"- command: bin/webpack-dev-server- environment:- WEBPACKER_DEV_SERVER_HOST: 0.0.0.0- WEBPACKER_DEV_SERVER_HOT: 1差分
変更したファイルやファイルの量はこんな感じです。yarn.lockがかなり減りました。
> git diff ee5315a51ea69c1573f5434fb0e1761bb675fcdf --stat .browserslistrc | 1 - .gitignore | 3 + Dockerfile | 1 + Gemfile | 21 +- Gemfile.lock | 21 +- Procfile.dev | 3 + app/assets/builds/.keep | 0 app/assets/config/manifest.js | 12 +- app/{javascript => assets}/images/apple-touch-icon-114x114-precomposed.png | Bin app/{javascript => assets}/images/apple-touch-icon-144x144-precomposed.png | Bin app/{javascript => assets}/images/apple-touch-icon-72x72-precomposed.png | Bin app/{javascript => assets}/images/apple-touch-icon-precomposed.png | Bin app/{javascript => assets}/images/discord.png | Bin app/{javascript => assets}/images/favicon.ico | Bin app/{javascript => assets}/images/graphql_query.png | Bin app/{javascript => assets}/images/ss.png | Bin app/assets/stylesheets/application.sass.scss | 8 + app/controllers/postcodes_controller.rb | 14 +- app/javascript/{packs => }/application.js | 20 +- app/javascript/controllers/application.js | 10 + app/javascript/controllers/home.js | 25 + app/javascript/controllers/index.js | 12 + app/javascript/packs/home.js | 36 - app/javascript/stylesheet/bootstrap_variables.scss | 3 - app/javascript/stylesheet/style.scss | 4 +- app/views/layouts/application.html.erb | 19 +- babel.config.js | 65 - bin/dev | 9 + bin/webpack | 18 - bin/webpack-dev-server | 18 - config/environments/production.rb | 17 + config/initializers/assets.rb | 13 + config/routes.rb | 4 +- config/webpack/development.js | 9 - config/webpack/environment.js | 12 - config/webpack/production.js | 5 - config/webpack/test.js | 5 - config/webpacker.yml | 92 -- docker-compose.production.yml | 4 +- docker-compose.yml | 15 - package.json | 25 +- postcss.config.js | 12 - start.sh | 3 +- yarn.lock | 7422 +++------------------------------------------------------------------------------------------ 51 files changed, 492 insertions(+), 7540 deletions(-)まとめ
- 開発時のコンパイルが高速になったのでとても快適です。
- 資料が少ないし、いまいち構造がよくわからないので半日ぐらいかかりました。
webpackerを削除してcssbundling-rails+jsbundling-rails+propshaftに移行
https://blog.teraren.com/posts/removing-webpacker/