React on Rails で hello world してみる
お久しぶりです。
最近は、Vue.js
を触っていましたが React.js
というやつも触れてみたかったのでやってみました。
今回は環境を作って、hello world
をするところまでです。
やりたいことリスト
Gem 追加
Sprockets で ES6 もいい感じにコンパイルしてもらうために、browserify-rails という gem を追加します。
Gemfile
gem 'browserify-rails'
config/application.rb
config.browserify_rails.commandline_options = '-t babelify --extensions .es6'
npm (package.json) の準備
{ "name": "react_on_rails", "dependencies": { "babelify": "^6.4.0", "browserify": "^13.1.1", "browserify-incremental": "^3.1.1", "react": "^15.3.2", "react-dom": "^15.3.2" }, "license": "MIT", "engines": { "node": ">= 0.10" } }
※最新版の babelify(7.3.0) では、うまく動かなかったので 6.4.0 のバージョンを指定
$ npm install
土台つくる
$ bin/rails g controller pages top
修正していく
config/route.rb
Rails.application.routes.draw do root to: 'pages#top' # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html end
app/controllers/pages_controller.rb
class PagesController < ApplicationController end
app/views/pages/top.html.erb
<div id="target"></div>
app/assets/javascripts/application.js
window.onload = function() { require('./top.es6'); };
app/assets/javascripts/top.es6
import React from 'react' import ReactDOM from 'react-dom' ReactDOM.render( <div>hello world</div>, document.getElementById('target') )
起動
$ bin/rails s
トップ画面で、hello world
が表示されてること確認できました。
ログをみると開発環境では、初回のロード時に babelify してくれてるのがわかります。
Browserify: /Users/7kaji/Dev/rr/node_modules/.bin/browserifyinc -t babelify --extensions .es6 --list --cachefile=/Users/7kaji/Dev/rr/tmp/cache/browserify-rails/browserifyinc-cache.json -o "/Users/7kaji/Dev/rr/tmp/cache/browserify-rails/output20161025-72290-1too9up" - Browserify: /Users/7kaji/Dev/rr/node_modules/.bin/browserifyinc -t babelify --extensions .es6 --cachefile=/Users/7kajiDev/rr/tmp/cache/browserify-rails/browserifyinc-cache.json -o "/Users/7kaji/Dev/rr/tmp/cache/browserify-rails/output20161025-72290-28pg6y" - Completed 200 OK in 3598ms (Views: 3590.3ms | ActiveRecord: 0.0ms)
今後
Sprockets4 では、 ES6、npm もサポートされるような話なのでもっと簡単に JS周りの整備できそうです。 界隈では、Sprockets は捨てられがちですが v4 がでれば解決することも多くありそうですね。
REF
ppworks さんの記事をほぼほぼコピペさせていただきましたmm