Ruby on Rails は、ウェブ開発を効率的に行うための強力なフレームワークですが、長い間、アセット管理に「Asset Pipeline」が使われてきました。しかし、最近では「Webpacker」を使用する方がよりモダンで柔軟な方法とされるようになっています。この記事では、Asset Pipeline から Webpacker へ移行する方法を完全かつ包括的に解説します。
1. Asset PipelineとWebpackerの違い
まず、Asset Pipeline と Webpacker の基本的な違いを理解することが重要です。
-
Asset Pipeline:
Asset Pipeline は、Rails アプリケーションにおける JavaScript や CSS の圧縮、連結、プレコンパイルを担当します。これにより、リソースの管理が Rails の内部で一元化されますが、拡張性や柔軟性に欠ける場合があります。 -
Webpacker:
Webpacker は、JavaScript のモジュールバンドラーである Webpack を使用して、アセットの管理を行います。これにより、React や Vue.js などのモダンな JavaScript フレームワークを使った開発が簡単になり、モジュールの管理やコードスプリッティングなどの高度な機能を活用することができます。
2. Asset Pipeline から Webpacker への移行手順
2.1 Webpackerのインストール
まず、Webpacker をインストールする必要があります。Rails 5.1 以降では、Webpacker はデフォルトでインストールされていることが多いですが、もしインストールされていない場合は、以下の手順でインストールします。
bashbundle add webpacker
次に、Webpacker をインストールするために、以下のコマンドを実行します。
bashrails webpacker:install
これにより、config/webpacker.yml ファイルが作成され、WebPack の設定が行われます。
2.2 JavaScript ファイルの移行
次に、古い Asset Pipeline で管理していた JavaScript ファイルを Webpacker に移行します。Asset Pipeline では app/assets/javascripts フォルダに JavaScript ファイルを配置していたと思いますが、Webpacker では JavaScript ファイルは app/javascript フォルダに移動します。
例えば、app/assets/javascripts/application.js というファイルがあった場合、これを app/javascript/packs/application.js に移動させ、WebPack でコンパイルされるようにします。
2.3 CSS ファイルの移行
CSS ファイルも同様に移行します。従来、CSS ファイルは app/assets/stylesheets フォルダにありましたが、Webpacker を使う場合、Sass や PostCSS などのスタイルシートを app/javascript/stylesheets フォルダに移行し、application.scss などのスタイルを Webpack に組み込むことができます。
CSS ファイルのインポートは、app/javascript/packs/application.js などのエントリーポイントで行います。例えば、以下のように記述します。
javascriptimport "../stylesheets/application.scss";
2.4 HTML におけるアセットの参照
これまで、Rails では stylesheet_link_tag や javascript_include_tag を使ってアセットを参照していましたが、Webpacker を使用する場合は、javascript_pack_tag や stylesheet_pack_tag を使って Webpacker によって管理されているパックを参照します。
例えば、application.js を HTML に組み込む場合、以下のように記述します。
erb<%= javascript_pack_tag 'application' %>
CSS に関しても、以下のように記述します。
erb<%= stylesheet_pack_tag 'application' %>
これにより、Webpacker によってコンパイルされたアセットが正しく参照され、ページに組み込まれます。
2.5 JavaScript フレームワークの導入
もし、React や Vue.js などのモダンなフレームワークを使用したい場合、Webpacker を使うことで簡単に導入できます。例えば、React を使いたい場合は、以下のコマンドで React とその必要な依存関係をインストールします。
bashbundle exec rails webpacker:install:react
これにより、React 用のファイル構成が自動的に作成され、React を簡単に使用することができます。
2.6 アセットのプリコンパイル
移行後も、アセットのプリコンパイルは必要です。Webpacker を使用している場合でも、デプロイ前には Webpacker でアセットをプリコンパイルする必要があります。以下のコマンドでプリコンパイルを行います。
bashRAILS_ENV=production bin/webpack
これにより、必要な JavaScript と CSS が圧縮され、プロダクション環境用に最適化されます。
3. 移行後のメリット
Asset Pipeline から Webpacker への移行にはいくつかの利点があります。
-
モダンな JavaScript フレームワークとの統合: React や Vue.js といったフレームワークを簡単に統合できるため、フロントエンドの開発がより効率的に行えます。
-
モジュールバンドリングとコード分割: Webpacker は Webpack を利用しているため、コードの分割や最適化が簡単に行えます。これにより、初期ロードのパフォーマンスが向上します。
-
npm や yarn のサポート: Webpacker では、npm や yarn でパッケージを管理することができます。これにより、フロントエンドのライブラリやツールの導入が簡単になります。
4. まとめ
Rails の Asset Pipeline から Webpacker への移行は、モダンなフロントエンド開発の手法に適応するために非常に有益です。Webpacker を使うことで、JavaScript や CSS のモジュール化、最適化が簡単に行え、モダンな JavaScript フレームワークとの統合もスムーズになります。この移行を行うことで、Rails アプリケーションのフロントエンドがより柔軟かつ効率的になります。

