  サインイン | 登録

  1. ホーム
  2. 
  3. プログラミング
  4. 
  5. Ruby on Rails
  6. 

RailsアプリケーションでSporocketsからWebpackerへ移行する方法

2020/08/15
Makio
Rails6.0でWebpackerがデフォルトのJavascriptsのコンパイラーになりました。

Webpackerを使うことでWebpackが用意している様々な機能が使えるようになりますし、SplitChunksで簡単に最適化も行えます。

なので以前のRailsのバージョンを使ってアプリを構築している人は、SporocketsからWebpackerへの移行を考えていると思います。

でも肝心の移行方法は、Railsのオフシャルドキュメントでは軽く触れているだけで、十分ではありません。

英語では詳しい移行方法に触れたサイトはあるものの、このサイトを参照しても具体な手順は曖昧なところがあります。

そこで、具体的で簡潔なステップ・バイ・ステップでの移行方法の肝心なところを紹介します。







1.まずはwebpackerGemをGemfileに加えます





ここでsprockets gemは残しておきましょう。cssのコンパイルにまだ使いますし、残しておいてもお互いの干渉はありません。


2.Webpackerのコンフィギュレーションを行います



Webpackerの公式ページに詳しいコンフィギュレーションがありますが、基本以下の4つのファイルの設定です、

  • /config/webpack/loader/custom_loader.js
  • /config/webpack/loader/erb.js
  • /config/webpack/production.js
  • /config/webpack/development.js

まずjson-loaderとyaml-loaderの設定をcustom_loader.jsで行います。



次に .js.erbファイルが使えるようにrails-erb-loaderを読み込みます。これはRails自体に必要なのではないかな。。。





WeppackerはWebpackのラッパーなのでproductionとdevelopmentの環境しか使えません。

つまりproduction.jsとdevelopment.jsの設定です。production.jsもdevelopment.jsもconfig/webpack/environment.jsから引継いでいます。





例ではproduction.jsですが、development.jsは以下の部分が違うだけです。

process.env.NODE_ENV = 'development';





3./app/javascript のフォルダーを作る


ここが新たなjavascriptsのホームフォルダーとなります。



4./app/javascript以下にpacksとvendorsを作る


  • Packs - カスタムjavascriptをここに移動する。
  • Vendor - サードパーティのjavascriptをここに移動する。



5.application.jsを/app/javascript/packsに作って必要な読み込みを行う




例ではrails-ujsとRails Activestorageを読み込んでいます。

ここで

require("@rails/ujs").start()

のラインはCSRF セキュリティーエラーを起こさないために非常に重要です。

まはRailsはテスト環境ではデフォルトでCSRF tokenを使っていないのでrequire("@rails/ujs").start()の必要性を見過ごしてしまう危険性があるので注意してください。


またjquery-ujsからrails-ujsに全面移行することを勧めます。この移行に関しては改めて記事にしました。



6./app/assets/javascriptsにあったjavascriptsファイルを/app/javascript/packsに移動



ほぼ全てのカスタムjavascriptsを移動します。

ほぼ全てというのは、実際123ishでは、日本語表示に必要な.js.erbファイルは /app/assets/javascripts/i18n/jp.js.erbに残して、sprockets で個別にコンパイルして読み込んでいます。

特別な理由がなければjavascriptsは/app/javascript/packsに入れておきます。



7.グローバル変数を設定


sprocketsと違ってWebpackerではグローバル変数を使う場合、改めて設定する必要があります。

以下の例はexample1というグローバル変数をexample1.jsで定義して、example2.jsで使う例を示しています。








8.application.jsでカスタムjavascriptsを読み込む


Requireを使って以下のように読み込みます。





9.application.jsをapplication.html.erbで呼び込む


これはRailsのフレームワークです。




10.テスト


必須です。

123ishはビヘイビア駆動開発で一通りのテストを使って動作を確認します。勿論マニュアルによるテストも必要なんですけどね。



最後に


Webpackerへの移行によってより高度なjavascriptsの読み込み最適化を行う事が出来るようになるので是非行いたいところですよね。

オフィシャル移行ガイドを読んだときには、簡単に出来ると思ったのですが、初めてみたら結構大変でした。というかガイドにはGemの読み込みしか書いてないです。

でも実際の移行は全般的に影響が出てくる可能性があるので、様々なシナリオをチェックするインテグレーションテストがあることが大前提です。もし網羅的にチェックできるインテグレーションテストのセットが内容であれば、移行は勧めません。

全てのjavasctipsをWebpackerに移動すればいいかというとそうでもありません。敢えてsprocketsを使ってコンパイルしているjavascriptsもあります。

とはいえ、今後Webpack周りでのコードの読み込み最適化技術がより進むと考えられるので、テスト環境など条件が整っていればWebpackerへの以降は早めに行うことをお勧めします。





#ruby, #rubyonrails, #ruby-on-rails, #sprockets, #javascripts, #webpacker, #123ish
スコアー: 1.06
 コメント
 0 いいね
0
  信用しますか?  
0

    


NFT 123ish 3次元ゴールドコインアートコレクション




人気のコメント
最初にコメントする

ボード


サインインしてコメントを投稿する


Railsアプリケーションでのjquery-ujsからrails-ujsへの移行の仕方

Ruby on RailsでAMPページを作る方法

Ruby on Rails でDevise、ActiveModel::Otp、rqrcodeとグーグル認証システムによる二段階認証の実装の仕方

Ruby on Railsのコードに潜むN+1クエリ問題をBullet gem で発見して、Railサイトのレスポンスを最適化

Railsサイトで、friendly_id gemを使って日本語のフレンドリーURLを表示させる方法

知っているとお得な情報について書ける方を募集しています!

【無料】FX自動売買の「シストレ系」おすすめツールを2つ紹介。MetaTrader4とTradingViewをユーザー目線で比較してみた【プログラミング可能】

大籠のキリシタン〜東北のキリシタン殉教の地「大籠」、千松兄弟とは

大籠のキリシタン殉教と千松兄弟に託されたメッセージ

ぎっくり腰には、早めの非ステロイド性抗炎症薬の服用が回復に良いのでしょうか?

東北の隠れキリシタンの里大籠を、地元自治会作製の「キリシタン殉教とたたら製鉄の里大籠散策マップ」により紹介

グランド・ナレーティブ 大いなる物語 アメリカは何処に行くのだろうか?

政治的独立と信教の自由

地元観光地図よる生月のキリシタン巡礼地

【Webライティング・コンテンツ作製のコンペティション】第一回123ish杯 123ishでの投稿記事のコンペティション 🥇1位4万円 🥈2位2万円 🥉3位1万円

Upworkでの支払い、返金に関するトラブルはどう対応できるか?

プログラマーは簡単な英語の読み書きで、Upworkのフリーランスとしてより稼げるようになる

生月に永遠に刻まれたキリシタン信仰の壮絶なドラマ

信徒発見と信教の自由

データサイエンティスト・データサイエンス職よりデータエンジニアでの転職の方が手堅い?未経験者がデータエンジニアになる方法を教えます。

アメリカでの日系老人介護施設費用

未経験からデータサイエンティストとして転職を成功させる方法。データサイエンスでの華やかな道と手堅く成功させる道を教えます

有名ブログのUbersuggestによる月間オーガニックトラフィックでのランキングと分析

第一回123ish杯コンペティションの結果発表

プライバシー設定を変更しました

記事は保存されました(投稿はされていません)

サインインして続行する

国: 日本 (jp)
  • United States (us)
  • 日本 (jp)
  • Indonesia (id)
  • India (in)
利用規約 | プライバシーポリシー | 私達に関して
よくある質問 | お問い合わせ
 
© 2025 123ish