SlideShare a Scribd company logo
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
source: React’s diff algorithm
http://calendar.perfplanet.com/2013/diff/
サービスリニューアルしてわかったRailsのReactとの付き合い方
SpaceEdit
SpaceBasic
Edit
SpaceAddress
Edit
SpaceDescription
Edit
SpaceTerm
Edit
state
I/F I/F I/F I/F
props props props props
space: {
name: xx,
address: yy,
..
}
SpaceEdit
SpaceBasic
Edit
SpaceAddress
Edit
SpaceDescription
Edit
SpaceTerm
Edit
state
I/F I/F I/F I/F
props props props props
space: {
name: xx,
address: yy,
..
}
SpaceEdit
SpaceBasic
Edit
SpaceAddress
Edit
SpaceDescription
Edit
SpaceTerm
Edit
state
I/F I/F I/F I/F
props props props props
space: {
name: xx,
address: yy,
..
}
data
SpaceEdit
SpaceBasic
Edit
SpaceAddress
Edit
SpaceDescription
Edit
SpaceTerm
Edit
state
I/F I/F I/F I/F
props props props props
space: {
name: zz,
address: yy,
..
}
data
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
View Controller
React
props
3
server
side rendering
サービスリニューアルしてわかったRailsのReactとの付き合い方
rails js
API
Rails routes.rb Controller
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
4: blur
2:
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
PATCH /1/spaces/1000.json
{
description: “ ”
}
// state
errors: {
}
PATCH /1/spaces/1000.json
{
description: “ ”
}
400 Bad Request
// state
errors: {
}
PATCH /1/spaces/1000.json
{
description: “ ”
}
400 Bad Request
// state
errors: {
description: “ 10
”
}
PATCH /1/spaces/1000.json
{
description: “ ”
}
400 Bad Request
PATCH /1/spaces/1000.json
{
name: “ ”
}
// state
errors: {
description: “ 10
”
}
PATCH /1/spaces/1000.json
{
description: “ ”
}
400 Bad Request
PATCH /1/spaces/1000.json
{
name: “ ”
}
200 OK
// state
errors: {
description: “ 10
”
}
PATCH /1/spaces/1000.json
{
description: “ ”
}
400 Bad Request
PATCH /1/spaces/1000.json
{
name: “ ”
}
200 OK
PATCH /1/spaces/1000.json
{
description: “
”
}
// state
errors: {
description: “ 10
”
}
PATCH /1/spaces/1000.json
{
description: “ ”
}
400 Bad Request
PATCH /1/spaces/1000.json
{
name: “ ”
}
200 OK
PATCH /1/spaces/1000.json
{
description: “
”
}
200 OK
// state
errors: {
description: “ 10
”
}
PATCH /1/spaces/1000.json
{
description: “ ”
}
400 Bad Request
PATCH /1/spaces/1000.json
{
name: “ ”
}
200 OK
PATCH /1/spaces/1000.json
{
description: “
”
}
200 OK
// state
errors: {
}
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方
サービスリニューアルしてわかったRailsのReactとの付き合い方

More Related Content

PDF
Reactをproductionに導入して変わったこと
PPTX
Pivotal greenplum external tables
PPTX
regular expressions and the world wide web
PDF
Where can you dine like a king?
DOCX
Zotero Part1
PDF
Oracle Essbase for Oracle Cloud Infrastructure Marketplace のご紹介[2021年2月版]
PPTX
20160520_ios
PDF
Relay Modern: architecture and workflow
Reactをproductionに導入して変わったこと
Pivotal greenplum external tables
regular expressions and the world wide web
Where can you dine like a king?
Zotero Part1
Oracle Essbase for Oracle Cloud Infrastructure Marketplace のご紹介[2021年2月版]
20160520_ios
Relay Modern: architecture and workflow

Similar to サービスリニューアルしてわかったRailsのReactとの付き合い方 (16)

PDF
Functional Web Development
PDF
Effector: we need to go deeper
PPTX
Isomorphic react in real life
PPTX
Isomorphic react in real life
PDF
Why react matters
PDF
From Back to Front: Rails To React Family
PDF
React for Dummies
PDF
Rails-like JavaScript Using CoffeeScript, Backbone.js and Jasmine
PDF
React.js: You deserve to know about it
PDF
React.js: Beyond the Browser
PPTX
Adding a modern twist to legacy web applications
PDF
React Lifecycle and Reconciliation
PDF
JS Fest 2019. Glenn Reyes. With great power comes great React hooks!
PDF
React Internals
PDF
Radoslav Stankov - React Refactoring Patterns
PDF
Workshop 19: ReactJS Introduction
Functional Web Development
Effector: we need to go deeper
Isomorphic react in real life
Isomorphic react in real life
Why react matters
From Back to Front: Rails To React Family
React for Dummies
Rails-like JavaScript Using CoffeeScript, Backbone.js and Jasmine
React.js: You deserve to know about it
React.js: Beyond the Browser
Adding a modern twist to legacy web applications
React Lifecycle and Reconciliation
JS Fest 2019. Glenn Reyes. With great power comes great React hooks!
React Internals
Radoslav Stankov - React Refactoring Patterns
Workshop 19: ReactJS Introduction
Ad

Recently uploaded (20)

PDF
Human-AI Collaboration: Balancing Agentic AI and Autonomy in Hybrid Systems
PPT
Mechanical Engineering MATERIALS Selection
PPTX
Internet of Things (IOT) - A guide to understanding
PPT
Project quality management in manufacturing
PDF
III.4.1.2_The_Space_Environment.p pdffdf
PDF
R24 SURVEYING LAB MANUAL for civil enggi
PDF
PREDICTION OF DIABETES FROM ELECTRONIC HEALTH RECORDS
PDF
BIO-INSPIRED HORMONAL MODULATION AND ADAPTIVE ORCHESTRATION IN S-AI-GPT
PPTX
M Tech Sem 1 Civil Engineering Environmental Sciences.pptx
PDF
Well-logging-methods_new................
PPTX
CH1 Production IntroductoryConcepts.pptx
PPTX
Sustainable Sites - Green Building Construction
PDF
PPT on Performance Review to get promotions
PPTX
Artificial Intelligence
DOCX
ASol_English-Language-Literature-Set-1-27-02-2023-converted.docx
PDF
The CXO Playbook 2025 – Future-Ready Strategies for C-Suite Leaders Cerebrai...
PDF
Mohammad Mahdi Farshadian CV - Prospective PhD Student 2026
PDF
Model Code of Practice - Construction Work - 21102022 .pdf
PPTX
FINAL REVIEW FOR COPD DIANOSIS FOR PULMONARY DISEASE.pptx
PPTX
Infosys Presentation by1.Riyan Bagwan 2.Samadhan Naiknavare 3.Gaurav Shinde 4...
Human-AI Collaboration: Balancing Agentic AI and Autonomy in Hybrid Systems
Mechanical Engineering MATERIALS Selection
Internet of Things (IOT) - A guide to understanding
Project quality management in manufacturing
III.4.1.2_The_Space_Environment.p pdffdf
R24 SURVEYING LAB MANUAL for civil enggi
PREDICTION OF DIABETES FROM ELECTRONIC HEALTH RECORDS
BIO-INSPIRED HORMONAL MODULATION AND ADAPTIVE ORCHESTRATION IN S-AI-GPT
M Tech Sem 1 Civil Engineering Environmental Sciences.pptx
Well-logging-methods_new................
CH1 Production IntroductoryConcepts.pptx
Sustainable Sites - Green Building Construction
PPT on Performance Review to get promotions
Artificial Intelligence
ASol_English-Language-Literature-Set-1-27-02-2023-converted.docx
The CXO Playbook 2025 – Future-Ready Strategies for C-Suite Leaders Cerebrai...
Mohammad Mahdi Farshadian CV - Prospective PhD Student 2026
Model Code of Practice - Construction Work - 21102022 .pdf
FINAL REVIEW FOR COPD DIANOSIS FOR PULMONARY DISEASE.pptx
Infosys Presentation by1.Riyan Bagwan 2.Samadhan Naiknavare 3.Gaurav Shinde 4...
Ad

サービスリニューアルしてわかったRailsのReactとの付き合い方

Editor's Notes

  • #2: こんばんわ、スペースマーケットの小林です。サービスリニューアルしてわかったRailsのReactとの付き合い方という内容で発表はじめさせていただきます。
  • #4: 小林春彦と申します。エンジニアのキャリアとしてはヤフーに新卒で入社して様々なサービスのBEの運用をしておりました。その後スペースマーケットにジョインして、webサービスのインフラからフロントエンドまで担当しております。
  • #6: さきほど鈴木が発表したように今年の2月くらいにwebサービス本体をReactを使ったサービスにリニューアルしました。
  • #10: 会場でreactなんとなくわかってる人はどのくらいいます?
  • #11: 簡単にいうとMVCのViewだけやる、IOS開発の部品を創る感覚でコンポーネントを定義、再利用できる。stateという状態変数をもとにDOMを描画します。
  • #12: DOMがいまどうなってるか気にせずにstateの値に応じてDOMが生成される。 もちろんそうなるように意識してコードを書かないといけないですけど、今このdivはhiddenだからみたいなことは考える必要がない
  • #14: virtualDOMはDOMツリー構造をメモリに展開したただのjsオブジェクト。
  • #15: Reactのイベントループの終了フェーズでDirtyコンポーネントとその子供は全て再描画される
  • #16: ReactはpropsというI/F以外にはデータを受けつけない。
  • #17: さきほどの画面を図で表すとこんな感じになります。よくある設計は親がstateもって、 子にpropsとして渡す
  • #18: 子でボタンクリックのようなUIイベントが発生すると(おす)
  • #19: 親のイベントハンドラにイベントデータを投げて通知。 (押す)
  • #20: stateが更新されるとSpaceEditとその子が再描画されてpropsが子に渡るの繰り返しです。
  • #22: ここからはどういう環境で弊社のReactが動いているかを説明します
  • #24: PCスマフォはweb経由で,iOSアプリはAPI経由でDBを参照
  • #25: PC、スマフォもAPIを経由するアーキテクチャに。
  • #28: 設定内容を簡単に説明すると
  • #29: railsだと色んな組み合わせ方があるけどできるだけ既存の資産をいかたした形で作ってみた。
  • #34: controllerやactionをpropsとして渡すとよりRails Wayな感じになります
  • #36: Rails側はDB直引きでReact側ではAPI引きしてるとデータの不整合が発生するのでrailsのweb側でもAPI叩けるライブラリ作ったほうがいい
  • #37: active_resourceとかfaradayで自前実装もあるがherを選択
  • #39: herはfaradayで実装されているためmiddlewareが簡単に使えます。oauth2のclient credencialやusername and password flowでaccess tokenを取得しておいてAPIリクエスト毎にAuthorizationヘッダにtokenをセットしています。
  • #47: 次は実装の裏側を少し喋りたいと思います
  • #48: まずは処理の流れを設計します
  • #64: react-railsの場合、js実行エンジンとしてnode.jsとtherubyracerのどちらを使うか
  • #70: まとめですが