Railsなのはサクサク書けるから、Reduxなのは流行ってるっぽいからです。
サーバーサイドレンダリングもスパンと導入したいのでreact-rails
gemを使った簡単バージョンです。Reduxも使うのでreact-rails
だけだと困るからbrowserify-rails
使おうかという流れです。
では早速、Railsのプロジェクトを用意します。
rails new rrrproject
cd rrrproject
Gemfile
に以下を追記します。
gem 'browserify-rails'
gem 'react-rails'
おもむろにインストールします。
bundle install
config/application.rb
にbrowserify用の設定を加えます。
config.browserify_rails.commandline_options = '-t babelify'
npmで関連パッケージを豪快にインストールします。
何故すべて--save
なのかはherokuで動かすためです。--save-dev
だとherokuデプロイ時にインストールしてもらえれませんでした。
npm install --save react redux react-dom react-redux redux-thunk browserify browserify-incremental babelify babel-preset-es2015 babel-preset-react
browserify-incremental
はbrowserify-railsで必要なものです。
また、今何も考えずに実行するともれなくbabel6系が入ると思います。babel6系はプラガブルに機能分割されているので今回使いたいbabel-preset-es2015
とbabel-preset-react
を合わせて入れます。自分、ここで詰まりました。
で、色々インストールが完了したと思うので、reactのcomponentを作っていきましょう。
rails g react:install
ディレクトリとjsファイルが作られます。
app/assets/javascripts/components/
以下に、componentを追加して、app/assets/javascripts/components.js
でglobalにぶら下げる感じです。
application.js
には以下を追加しておきます。reactはbrowserifyから呼びます。
//= require react_ujs
//= require components
あとプロジェクトルートに.babelrc
を追加します。このプラグインを使ってくれよ、お願いだから、という指定です。
{
"presets": ["es2015", "react"]
}
今回は環境構築なので、実際のredux, reactのコードは割愛します。
確認したい場合はreduxのexampleなどを持ってくると良いと思います。
上手くいってればここまでで、rails s
出来ると思います。
以下のようなヘルパーを使えば、サーバーサイドレンダリングも確認できるでしょう。
<%= react_component('App') %>
それでは、次にherokuの準備です。
heroku create
heroku buildpacks:set heroku/ruby
heroku buildpacks:add --index 1 heroku/nodejs
nodeを使いたいからnodeとrubyのmulti buildpacksにしています。
以上です!エンジョイ!です。
サーバーサイドもGoやらelixirやらだとモダンさ3倍増しだと思うんですが、悩んで結局Railsの書きやすさ、ライブラリの多さにクラっときました。
ありがたや参考URL
http://astainforth.com/blogs/setting-up-react-in-ruby-on-rails-part-1
http://qiita.com/suzan2go/items/24ef3320e04b8a84597f
http://qiita.com/sawapi/items/e11d0cfbbacd078b2c3a