SlideShare a Scribd company logo
React系(別言語含む)の
サーバーサイドレンダリング
について考えよう
SPAとSSR、現実解について考えてみる
2016/10/07
Okachi.js vol.0
登壇者
{:company “Greative.GK”
:name “Kazuhiro Hara”
:twitter “@kara_d”
:interest “SPA, WebVR, Clojure,
Design research”}
Clojure / ClojureScript でElectronアプリケーションを
作るためのスターターキット / プラットホーム
● オープンソースにてGitHubにて公開
● MITライセンス
● 現在のスター数 : 230 http://descjop.org/
先週、こんな発表をしました
http://www.slideshare.net/karadweb/clojure-react
React系のサーバーサイドレンダリングについて
● そもそもサーバーサイドレンダリングって何さ?
○ というかSPAって何?
○ 以下SSRとだけ書きます
● SSRどこが使っているか?
● SSRやってみたことある?
○ システム構成図、従来の Webアプリとの違い
○ Node.jsをサーバにしないケースのパターンについて
● SSRのアリ、ナシ、メリットデメリット、コスト感、難しそうな部分
● SSRが有効なサイト、あまりよくないサイト
SPAとSSR
って何?話
SPAについて
● シングルページWebアプリケーション(SPA)は、
最近注目を集めている Webアプリケーションのアーキテクチャです。
SPAは、ユーザがアプリケーションを使っている間、 Webページ全体をロードすることがなく、
レスポンスが高速で UI/UXに優れているという利点を持っています。
かつてはJavaアプレットやFlashといったWebブラウザのプラグインに依存する必要がありましたが、
近年ではJavaScriptを使ったSPAが現実的になってきています。
http://www.oreilly.co.jp/books/9784873116730/
SPAの例
Pintarest
https://jp.pinterest.com/
SSR(サーバーサイドレンダリング)について
(Reactベースのアプリケーションの文脈で)
● Webアプリケーションに用意されているURLにアクセスした時に、
DOMの構築をフロントエンド側で行うと、一瞬表示されていない状態になる
● 初期表示状態が決まっているなら、
サーバー側で初期状態のDOMレンダリングを完了した状態で返せばいい
● 共通の半描画状態の画面を出したりローディング画像を出すアプローチもある
なぜSSRなのか?について
● URLに対する情報のアクセシビリティ・セマンティック性を確保しておく
○ ブラウザを通したURLに対するアクセシビリティ・セマンティック性とは少し別
○ SEOの問題はあまり心配しなくていいらしい (自分で実験したわけではない )
● パフォーマンスの問題
○ ブラウザでURLを直接アクセスした時に表示が完了するまでの時間の短縮化
SSRと一口に言っても?
● React標準のスタイルでサポートされているやり方
○ react-dom/serverを使う
■ https://facebook.github.io/react/docs/environments.html
● 上記と同じことを他言語環境でエミュレートする
● せめてJSON部分だけHTMLに埋め込む
○ TwitterやFacebookなど
● 原始的に出力するdivを切り分けて読み込み後は元のdivを消すとか...
<div id=”ssr”> ここにサーバーで出力した結果を埋め込む </div>
<div id=”react-app”> ここはReactが使う</div>
アーキテクチャの違い(ざっくり)
従来のWebApp
APIベースのWebApp
SSR込みのWebApp
WebApp
&
View
BrowserHTML
WebApp
&
JSON
&
layout
Browser
Base HTML
JSON
WebApp
&
View
BrowserHTML
WebApp
&
JSON
&
layout
BrowserJSON
URLアクセス時
URLアクセス時
URLアクセス時
画面遷移時
そもそもSSRする必要があるのか?
ある
ない
Reactで複雑な状態遷移を扱うようなことが前提のWebアプリケーションなら、
Accessible Rich Internet Applications(WEI-ARIA)を全力で頑張る方向に
倒したほうが良くないか?
☞
なぜn言語(JavaScript以外)でのSSRは難しいか
n言語に限らず難しい問題(react-rails, React.NET, react-python, react-php-v8jsなど
は公式に出ている...)
● Reactのレンダリングは、同一のものをHTMLに埋め込んで返せばいい訳ではない
○ data-reactidの指定と、data-react-checksumの指定が必要
○ data-reactidを埋め込んだHTMLに対してadler32でチェックサムを作成
○ ただ、0.14.0 -> 15.0で少し変更があった (data-reactidベースからdata-reactrootベースへ)
■ https://facebook.github.io/react/blog/2016/04/07/react-v15.html
● Reactと違うエコシステム、違うテンプレートスタイル
Java系での実装方法
大きく分けて2種類
● 独自にReactのdomを再実装
● Javaのnashornを利用
● 別の道... Node.jsサーバーを立てる
SSRどこ使話
SSR採用サイト
IDEO
https://www.ideo.com/jp/
SSR採用サイト
Netflix
https://www.netflix.com/jp/
SSR使っていない例
Instagram
https://www.instagram.com/
その他、SSR使っているところ
知ってたら教えてください!(ここに書きます)
SSRやってみたことある話
SSRやってみた方
● どんなやり方で?
● どういうタイプのサイトで?
原の場合(要参照)
http://www.slideshare.net/karadweb/clojure-react
SSRのアリ、ナシ、
メリットデメリット、
コスト感、難しそうな部分
アリ、ナシ、メリットデメリット、コスト感、難しそう?
● みんなで考えてみましょう
HTML CSS Client / JSServer / JSServer / TmplServer / CtrlServer / Model
SSRどこで活きるのか
SSRが有効なサイト、あまりよくないサイトまとめ
● みんなで考えてみましょう
Okachi.js 第1回目の予定
2016/11/18
Okachi.js vol.1
Okachi.js vol.1 なにやる?
● React Nativeアプリ -> [日野さん]
● Electron
● ハイブリッドiPhone & Android
● Web VR -> [原話す、ちょっとだけ]
● npmパッケージマネージャー(橋本氏ライブラリリリース)
● Virtual Domコード・リーディング
● SPA(WAI-ARIA) -> []
● Swift(?) -> Okachi.swiftにて
● Angular JS 2.0
● Node Red -> [永井さん、ちょっとだけ]
● Plone のフロントエンド -> [寺田さん]
● サーバーレス系 : firebase
● プログレッシブWebアプリ
● HTTP2
● Service Worker

More Related Content

PDF
Re-frame and A-Frame
PDF
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
PDF
React VR ことはじめ
PDF
React Redux Redux-Saga + サーバサイドレンダリング
PDF
Vue.js 2.0 で自社プロダクトを SPA + SSR 化した話
PPTX
React.js + Reduxで作るSPA
PDF
Crawler Commons
PDF
LocalStack
Re-frame and A-Frame
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
React VR ことはじめ
React Redux Redux-Saga + サーバサイドレンダリング
Vue.js 2.0 で自社プロダクトを SPA + SSR 化した話
React.js + Reduxで作るSPA
Crawler Commons
LocalStack

What's hot (20)

PDF
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
PDF
大規模Node.jsを支える ロードバランスとオートスケールの独自実装
PDF
One Time Binding & Digest Loop
PPT
[大図解]ピグライフはこう動いている
PDF
Azure container service上でコンテナベースでオートスケールの検証をしてみた
PDF
Node.js を選ぶとき 選ばないとき
PDF
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
PDF
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
PDF
WebXR TechTokyo #3 in Cluster発表資料
PPTX
AngularJS2でつまづいたこと
PDF
MySQLのリアルタイムモニタリングツールを作った話
PDF
Node.jsでブラウザメッセンジャー
PDF
RailsでReact.jsを動かしてみた話
PDF
Frontend Fantasy 〜ミスリルの戦士たち〜
PPTX
Couch Db勉強会0623 by yssk22
PDF
TypeScriptへの入口
PDF
Riot + generator で始める新しいデータバインディング
PDF
React+fluxを導入した話
KEY
Osc2012.dbに行ってきました
PDF
localstackによるAWS Lambdaの開発環境を、miniconda上でつくったら簡単便利だった話
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
大規模Node.jsを支える ロードバランスとオートスケールの独自実装
One Time Binding & Digest Loop
[大図解]ピグライフはこう動いている
Azure container service上でコンテナベースでオートスケールの検証をしてみた
Node.js を選ぶとき 選ばないとき
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
WebXR TechTokyo #3 in Cluster発表資料
AngularJS2でつまづいたこと
MySQLのリアルタイムモニタリングツールを作った話
Node.jsでブラウザメッセンジャー
RailsでReact.jsを動かしてみた話
Frontend Fantasy 〜ミスリルの戦士たち〜
Couch Db勉強会0623 by yssk22
TypeScriptへの入口
Riot + generator で始める新しいデータバインディング
React+fluxを導入した話
Osc2012.dbに行ってきました
localstackによるAWS Lambdaの開発環境を、miniconda上でつくったら簡単便利だった話
Ad

Viewers also liked (8)

PPTX
React を導入した フロントエンド開発
PDF
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
PDF
SIROK技術勉強会 #1 「Reactってなんだ?」
PDF
なぜ人は必死でjQueryを捨てようとしているのか
PDF
まだ DOM 操作で消耗してるの?
PDF
フロントエンド初学者がSPAに手を出してみた
PPTX
今からでも遅くない! React事始め
PDF
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
React を導入した フロントエンド開発
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
SIROK技術勉強会 #1 「Reactってなんだ?」
なぜ人は必死でjQueryを捨てようとしているのか
まだ DOM 操作で消耗してるの?
フロントエンド初学者がSPAに手を出してみた
今からでも遅くない! React事始め
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
Ad

Similar to React系(別言語含む)の サーバーサイドレンダリング について考えよう (9)

PDF
Java + React.jsでSever Side Rendering #reactjs_meetup
PDF
サーバサイドエンジニアが 1年間まじめにSPAやってみた
PDF
Reactで作るDrupalサイト
PDF
Lt7 SPA
PDF
React Native 入門
PPTX
Drupalでフォームの代わりにSPA (React) を表示させる話 2023/12/15の勉強会で発表されたものです。
PPTX
Web Component Framework Urushiのご紹介(OSC2017 Tokyo/Spring)
PDF
SPAを選択した理由とその結果 ~Reactを添えて~
PDF
JavaScript使いならきっととっつきやすいNode-REDについて
Java + React.jsでSever Side Rendering #reactjs_meetup
サーバサイドエンジニアが 1年間まじめにSPAやってみた
Reactで作るDrupalサイト
Lt7 SPA
React Native 入門
Drupalでフォームの代わりにSPA (React) を表示させる話 2023/12/15の勉強会で発表されたものです。
Web Component Framework Urushiのご紹介(OSC2017 Tokyo/Spring)
SPAを選択した理由とその結果 ~Reactを添えて~
JavaScript使いならきっととっつきやすいNode-REDについて

More from Kazuhiro Hara (20)

PDF
MDX with Next.js
PDF
MDX and Next.js
PDF
About Plone Conference Tokyo 2018 Frontend Day
PDF
Gatsby & React Static
PDF
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
PDF
Clojure.tokyo.descjop
PDF
SwaggerとAPIのデザイン
PDF
ひとりアドベントカレンダーのご紹介
PDF
(IDEユーザのための) ClojureのEmacs開発環境について
PDF
Cryogenでサイトつくろーじぇん
PDF
ClojureでElectronアプリを作ろう
PDF
WebSocket+Akka(Remote)+Play 2.1 Java
PDF
第2回 -Play部屋- Play 2.0はじめて&もくもく会
PDF
-Play部屋- Play 2.0はじめて&もくもく会
PDF
Play framework 2.0のおすすめと1.2からのアップグレード
PDF
sbtマルチプロジェクトビルドの使いどころ
PDF
Playbay Play 2.0 plugin イロハのイ
PDF
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PDF
PlayFramework1.2.4におけるWebSocket
PDF
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
MDX with Next.js
MDX and Next.js
About Plone Conference Tokyo 2018 Frontend Day
Gatsby & React Static
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
Clojure.tokyo.descjop
SwaggerとAPIのデザイン
ひとりアドベントカレンダーのご紹介
(IDEユーザのための) ClojureのEmacs開発環境について
Cryogenでサイトつくろーじぇん
ClojureでElectronアプリを作ろう
WebSocket+Akka(Remote)+Play 2.1 Java
第2回 -Play部屋- Play 2.0はじめて&もくもく会
-Play部屋- Play 2.0はじめて&もくもく会
Play framework 2.0のおすすめと1.2からのアップグレード
sbtマルチプロジェクトビルドの使いどころ
Playbay Play 2.0 plugin イロハのイ
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PlayFramework1.2.4におけるWebSocket
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...

React系(別言語含む)の サーバーサイドレンダリング について考えよう