修羅の国からえんじにあ

主に Ruby on Rails の実験を書き留めていく予定

Rails で react を動かす

Rails で react を動かしてみようと思った話

reactとか正直ミリも知らないのに試してみた。

Rails5.1から導入されたwebpackを使ってみた事から始まり、どうせならReactを試してみよう・・・となってしまった流れ。

前提

  • Node.jsがインストールされている (試した環境では v6.11.4)
  • Railsが動かせる環境がある (試した環境では ruby -v 2.4.0)
  • Macローカル環境でbrewが使える (環境依存のものは読み替えの必要あり)

適当にプロジェクトを作る

$ mkdir react_test
$ cd react_test
$ bundle init

webpackを使いたいので、 Rails 5.1系の最新版の記述を、Gemfileに追記

Gemfile


gem 'rails', '~>5.1.0'

プロジェクト内、vendor/bundle配下にgemを展開

$ bundle install --path vendor/bundle

確認


$ yarn --version


yarnが入っていない場合はインストールする

$ brew install yarn

プロジェクトフォルダにnewする

$ bundle exec rails new . --webpack=react

何かで手順が狂った場合はwebpacker単独でインストールの続行

$ bundle exec rails webpacker:install:react

webpack用のポートを書き換え(8080番に)

別途サーバーを起動する必要があるそうな。

config/webpacker.yml

  # Reference: https://webpack.js.org/configuration/dev-server/
  dev_server:
    https: false
    host: localhost
    port: 8080
    public: localhost:8080
    hmr: false
    # Inline should be set to true if using HMR
    inline: true
    overlay: true
    disable_host_check: true
    use_local_ip: false

起動

$ bundle exec rails s
$ ./bin/webpack-dev-server

以下は続きの小ネタ

サンプルとして設置されているjsxを呼び出す

(ここまでは試しておきたい)

$ bundle exec rails g controller toppages index


config/routes.rb

root 'toppages#index'

app/views/toppages/index.html.erb

<%= javascript_pack_tag 'hello_react' %>

Material-UIを使う準備をする

(使うとは言ってない)

$ yarn add redux
$ yarn add react-redux
$ yarn add redux-devtools --dev
$ yarn add material-ui
$ yarn add react-tap-event-plugin

起動を楽にする

(ログが混濁するので、使わなかった)

gem 'forman'

gemを追加後カレント以下にProcfileを作成

Procfile


rails: bundle exec rails s -p 3000
webpack: bin/webpack-dev-server

$ foreman start