WebpackをRailsに導入する方法を比較する: 前編

Unknown

こんにちは、エンジニアのケントです。

2017年のフロントエンドの開発において、Webpackが大人気です。

イタンジのプロダクトはRailsで開発することが多いのですが、WebpackをRailsに導入することを考える場合、大きく分けて二つの選択肢が考えられます。

  • rubygemのWebpackerを使う
  • WebpackとRailsを独立して使う

直近で二つのイタンジのRailsプロダクトにWebpackを組み込むお仕事をし、上記の両方を試してみたので、それぞれの導入方法と雑感、pros and consをまとめてみようと思います。

rubygem webpackerを使う

導入方法

webpackerは、Rails5.1から標準で導入されるwebpackのラッパーです。 導入方法はwebpackerのreadmeにだいたい載ってるので、詳細はそちらにお任せしますが、結論だけ説明すると

  1. gem 'webpacker', github: 'rails/webpacker' をgemfileに追記する
  2. bundle install する
  3. bin/rails webpacker:install コマンドを打つ

たったこれだけでwebpackによる開発をスタートすることができます。

webpacker導入後、Railsディレクトリ構成が変わりますが、ざっくりいうと以下のような構成が追加されます。

├── app
│      └── javascript --①
├── config
│      └── webpack   --②
├── public
│      └── packs        --③

webpackerでは、①で主なソースコードを書き、②で開発環境を定義し、③に開発の成果物を配信する形になります。

雑感

しかし、この②の部分がなかなかの曲者でして、なかなか複雑なディレクトリ構成となっています。

├── config
│      └── webpack --②
│               ├── configuration.js
│               ├── development.js
│               ├── development.server.js
│               ├── development.server.yml
│               ├── loaders
│               │         ├── assets.js
│               │         ├── babel.js
│               │       ├── coffee.js
│               │        ├── erb.js
│               │         ├── react.js
│               │         └── sass.js
│               ├── paths.yml
│               ├── production.js
│               ├── shared.js
│               └── test.js

このように開発環境を定義するファイルが乱立しているため、より込み入ったフロントエンドの開発をしたくなったタイミング等で開発環境を変更しようとした際に苦労する印象です。

(後編で解説しますが、単純にWebpackによるjs開発環境を用意するだけならこのような複雑な構成にはなりません。) とはいえモダンなjs開発環境をgemを入れてコマンドを打つだけで用意できるのは大変素晴らしいと思いました。

後編はWebpackとRailsを独立して使う方法を解説し、rubygemのWebpackerを使う方法との比較をしようかと思います。