2023.03.09
CloudFront+Lambda@EdgeでHTTPリダイレクト
2017.12.01
プログラミングRuby on RailsでReact開発をしてみました!
カナダから来たCanadian Devです。初めての投稿です。よろしくお願いします。バックラウンドがRubyなので、記事の内容は主にRuby on Railsになるかなと思います。
今年Rails 5.1が公開されて、新しい特徴がいろいろ導入されました。特に、Webpackerという機能がRailsに導入されました。このgemの導入によって、RailsとともにReactとAngularのようなJavaScriptモジュールを使えるようになります。
RailsはもともとMPA(Multi-Page Application)が得意なフレームワークですね。RailsはjQueryやCoffeescriptなどでライブDOM変更ができるんですが、今までReactとAngularのような流行ったテクノロジーのサポートがありませんでした。そもそもマルチページアプリケーションが得意なRailsはReactのようなシングルページアプリケーションのモジュールと統合できるでしょうか?ReactもAngularもRailsにないライブ読み込みをするし、Railsにないwebpackというアセット用バンドラーが必要です。webpack機能はRailsがサポートできるのでしょうか?やってみたら、意外と簡単で楽しく使えます!
webpackerはRailsでwebpackバンドラーが使えるようにするgemです。設定はとても簡単です。Railsアプリには、
1 |
bundle install |
1 |
rails webpacker:install |
1 |
rails webpacker:install:react |
最初からwebpackerが付いている新しいRailsアプリを作りたいなら、さらに簡単です。例えば、Reactを統合したいんだったら下記のコマンドのように指定します。
1 |
rails new アプリの名前 --webpack=react |
webpackの一つの特徴はライブ読み込みなので、Railsもその特徴を導入しています。別のターミナルで
1 |
./bin/webpack-dev-server |
を実行すると、Railsサーバーとともにwebpackのライブ読み込みサーバーが立ち上がります。
では、webpackがインストールできたので、これからRailsがReactと繫がるように設定しましょう。
webpackerのgemを導入したことで、app/javascript
という新しいフォルダが作られます。その中にpacks
というフォルダが存在して、そこで全てのReactコンポーネントがコンパイルされます。Rails 5.1から新しいjavascript_pack_tag
というタグがあって、そのタグでRailsがReactと繫がります。下記の二つのことを行いましょう。(spreadsheet
は例の名前で、ファイル名は自由に変えてください。)
app/javascript
フォルダの中にspreadsheet
フォルダを作成します。app/javascript/packs
フォルダの中にjs
ファイルを作成します。例えば、spreadsheet.js
を作成して、そのファイルの中に
1 |
import 'spreadsheet' |
spreadsheet.js
ファイルにimport 'spreadsheet'
を指定したことでRailsがspreadsheet
というフォルダの中のコンポーネントを読み込みます。app/javascript/spreadsheet
フォルダの中にReactと同じようにindex.js
というファイルとコンポーネントを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 |
import React, { Component } from 'react'; class Spreadsheet extends Component { render() { return ( <div> <h1>動いています!</h1> </div> ) } } export default Spreadsheet; |
index.js
ファイルにはコンポーネントの正しいパスが指定してあるのかを確認してください。
1 2 3 4 5 6 7 8 |
import React from 'react'; import ReactDOM from 'react-dom'; import Spreadsheet from './Spreadsheet'; document.addEventListener('DOMContentLoaded', ()=> { const container = document.body.appendChild(document.createElement('div')); ReactDOM.render(<Spreadsheet/>, container) } |
最後に、javascript_pack_tag
でReactのコンポーネントをビューに渡します。読み込ませたいpack
ファイルをタグで指定して、head要素に必ず入れてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<!DOCTYPE html> <html> <head> <title>Rails 5.1 app</title> <%= csrf_meta_tags %> <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> <%= javascript_pack_tag 'spreadsheet' %> </head> <body> ... </body> </html> |
これでRailsフレームワークでReact開発ができるようになります。Reactだけではなく、AngularもVueもサポートしているので、Rails 5.1でいろいろな楽しい開発ができるでしょう。
That’s all, folks!
【テクノモバイルではエンジニア/デザイナーを積極採用中です!】
下記項目に1つでも当てはまる方は是非、詳細ページへ!Qangaroo(カンガルー)
最近の記事
タグ検索
SNS共有