2024.03.07
イベントの感想募集でGoogleフォーム使ってみたら便利だった
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(カンガルー)
【テクノデジタルのインフラサービス】
当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。
最近の記事
タグ検索
SNS共有