LoginSignup
53
50

More than 5 years have passed since last update.

react-rails と webpacker を使って Rails アプリケーション上で React を動かす

Last updated at Posted at 2018-06-10

Rails アプリケーション上で React を使う場合、何が必要なのかを知りたくなりました。

調べた所、最近では webpackerreact-rails の組み合わせで導入するのが簡単そうだったので、そちらを試してみました。

前提

検証環境

  • Rails 5.1.6
  • ruby 2.4.3
  • Mac OS X 10.13.4

利用する Gem について

webpacker

webpacker は、 JavaScript のモジュールバンドラである Webpack を Rails で簡単に利用できるようになる Gem のライブラリです。

GitHub - rails/webpacker: Use Webpack to manage app-like JavaScript modules in Rails

react-rails

react-rails は、React を Rails 上で使いやすくするためのツールを搭載した Gem です。Webpacker や Sprockets の利用もサポートしています。

GitHub - reactjs/react-rails: Integrate React.js with Rails views and controllers, the asset pipeline, or webpacker.

検証の目標

今回は使い方の確認のため、react-rails の README にあるGet started with Webpacker を試してみようと思います。

検証手順

rails サンプルアプリケーション作成

まずは Rails のサンプルアプリケーションを作成します。

$ rails new react-rails-example
$ cd react-rails-example

Gem インストール

今回利用する webpacker と react-rails を Gemfile に追加し、 bundle install します。

$ vim Gemfile
Gemfile
# 下記2つの Gem 追加
gem 'webpacker'
gem 'react-rails'
$ bundle install

webpacker インストール

webpacker を利用するために必要な config ファイルや JavaScript のモジュールをインストールします。

$ rails webpacker:install 

React インストール

webpacker で管理する形で、React.js をインストールします。

$ rails webpacker:install:react

react-rails 初期設定

react-rails を使う前に、React の Component の読み込みパスなどの初期設定を行います。

$ rails generate react:install

React の Component 作成

react-rails のコマンドを使って、React の Component を作成します。

$ rails g react:component HelloWorld greeting:string

このようなファイルが作成されます。

app/javascript/components/HelloWorld.js
import React from "react"
import PropTypes from "prop-types"
class HelloWorld extends React.Component {
  render () {
    return (
      <React.Fragment>
        Greeting: {this.props.greeting}
      </React.Fragment>
    );
  }
}

HelloWorld.propTypes = {
  greeting: PropTypes.string
};
export default HelloWorld

React の Component 表示

Controller 作成

上記で作成した Component を画面に表示するために、検証用の Controller を作成します。

$ rails generate controller Welcomes

View 作成

view ファイルを編集します。

$ vim app/views/welcomes/index.html.erb

react-rails をインストールすることで利用できるようになる react_component helper で、先程生成した HelloWorld Componentを指定します。
props も 指定できます。

app/views/welcomes/index.html.erb
<%= react_component("HelloWorld", { greeting: "Hello" }) %>

routes 編集

root にアクセスした時の view を React の View になるよう切り替えます。

$ vim config/routes.rb
config/routes.rb
Rails.application.routes.draw do
  root 'welcomes#index'
end

javascript_pack_tag 指定

Rails が webpack によりトランスパイルされた JavaScript のファイルを読み込めるよう、webpacker の javascript_pack_tag helper を指定します。
こちらにより先程の React のサンプル Component ファイルも Rails で読み込めるようになります。

app/views/layouts/application.html.erb
<%= javascript_pack_tag 'application' %>

webpack-dev-server 起動

webpack-dev-server を起動します。
webpack-dev-server とは、webpack の開発用サーバーで、JavaScript ファイルを webpack でトランスパイルしつつ、JavaScript のファイルに変更があるとホットリロードのような形でトランスパイルし直してくれる便利なサーバーです。
webpacker をインストールすると併せて使えるようになります。

$ bin/webpack-dev-server

Rails アプリケーション起動

bin/webpack-dev-server を起動した状態で、Rails アプリケーションを起動します。

$ rails s

画面確認

http://localhost:3000 にアクセスし、画面に 「Greeting: Hello」 が表示されればOKです。

image.png

終わりに

今回はチュートリアルをたどった形になりましたが、README や ドキュメントを読んで他にどんな使い方ができるかもっと試してみようと思います。

参考URL

53
50
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
53
50