SlideShare a Scribd company logo
Submit Search
Upload
Login
Signup
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Report
Kazuhiro Hara
Follow
CEO & Founder at Greative
Sep. 29, 2016
•
0 likes
•
3,676 views
1
of
22
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Sep. 29, 2016
•
0 likes
•
3,676 views
Download Now
Download to read offline
Report
Software
OmやOm-next、Reagent、Rumなどの現状についてお話します。
Kazuhiro Hara
Follow
CEO & Founder at Greative
Recommended
Re-frame and A-Frame
Kazuhiro Hara
1.1K views
•
21 slides
高速!Clojure Web 開発入門
Kazuki Tsutsumi
5.1K views
•
34 slides
ClojureでElectronアプリを作ろう
Kazuhiro Hara
5.3K views
•
39 slides
React系(別言語含む)の サーバーサイドレンダリング について考えよう
Kazuhiro Hara
7.8K views
•
29 slides
React VR ことはじめ
Kazuhiro Hara
3.6K views
•
24 slides
入門ClojureScript
sohta
3.3K views
•
12 slides
More Related Content
What's hot
Cryogenでサイトつくろーじぇん
Kazuhiro Hara
1.7K views
•
26 slides
React Redux Redux-Saga + サーバサイドレンダリング
エンジニア勉強会 エスキュービズム
17K views
•
42 slides
node-gypを使ったネイティブモジュールの作成
shigeki_ohtsu
20.7K views
•
24 slides
OSS Product feat. Gradle
Yasuharu Nakano
6.9K views
•
14 slides
(IDEユーザのための) ClojureのEmacs開発環境について
Kazuhiro Hara
3.5K views
•
39 slides
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
Yuta Matsumura
4.6K views
•
20 slides
What's hot
(20)
Cryogenでサイトつくろーじぇん
Kazuhiro Hara
•
1.7K views
React Redux Redux-Saga + サーバサイドレンダリング
エンジニア勉強会 エスキュービズム
•
17K views
node-gypを使ったネイティブモジュールの作成
shigeki_ohtsu
•
20.7K views
OSS Product feat. Gradle
Yasuharu Nakano
•
6.9K views
(IDEユーザのための) ClojureのEmacs開発環境について
Kazuhiro Hara
•
3.5K views
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
Yuta Matsumura
•
4.6K views
Grunt.jsを使った Expressの開発環境構築
kamiyam .
•
4.7K views
Gradleどうでしょう
Takuma Watabiki
•
17.2K views
Vue.js 2.0 で自社プロダクトを SPA + SSR 化した話
Yutaro Miyazaki
•
21.3K views
Gws 20141024 gradle_intro
Nobuhiro Sue
•
7.7K views
Azure container service上でコンテナベースでオートスケールの検証をしてみた
エンジニア勉強会 エスキュービズム
•
2.8K views
大規模Node.jsを支える ロードバランスとオートスケールの独自実装
kidach1
•
25.3K views
One Time Binding & Digest Loop
Kon Yuichi
•
5.8K views
Gradle入門
orekyuu
•
17.7K views
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
Kohei Asai
•
75.6K views
SpockからRSpecにきたときの気づき #coedorb
Youtarou TAKAHASHI
•
1.7K views
新しいOpenShiftのしくみを調べてみた
Kazuto Kusama
•
11.7K views
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
kojiokb
•
1.2K views
Scalaで実装するGC
NISHIMOTO Keisuke
•
1.3K views
ライブラリにあらず! 〜Google Closure Toolsの事始め〜
Kazuya Hiruma
•
3.3K views
Similar to Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
SwaggerとAPIのデザイン
Kazuhiro Hara
3.7K views
•
33 slides
Redux, Relay, HorizonあるいはElm
chuck h
2.3K views
•
58 slides
Unityでreflection入門
Yoshiteru Takeshita
4.2K views
•
11 slides
Play frameworkの概要
Shuhei Kaneko
604 views
•
9 slides
Yet Another DLR for Silverlightの試作
terurou
1.1K views
•
34 slides
DroidKaigi アプリの内部を見る
健一 辰濱
3.2K views
•
79 slides
Similar to Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
(20)
SwaggerとAPIのデザイン
Kazuhiro Hara
•
3.7K views
Redux, Relay, HorizonあるいはElm
chuck h
•
2.3K views
Unityでreflection入門
Yoshiteru Takeshita
•
4.2K views
Play frameworkの概要
Shuhei Kaneko
•
604 views
Yet Another DLR for Silverlightの試作
terurou
•
1.1K views
DroidKaigi アプリの内部を見る
健一 辰濱
•
3.2K views
Web制作勉強会 #2
Moto Yan
•
613 views
GraphQLについての5分間
Matsuo Obu
•
357 views
GraphQLはどんな時に使うか
Yutaka Tachibana
•
137 views
PySpark Intro Part.2 with SQL Graph
Oshitari_kochi
•
263 views
Isomorphic web development with scala and scala.js
TanUkkii
•
23.5K views
RakSulのInternal API開発で gRPCを導入した話
nixiesan
•
5.8K views
fluxflex meetup in Tokyo
Kyosuke Inoue
•
688 views
[20190530]yahoo japan+kubernetes meetup "Rook v1.0で試すCSI"
t8kobayashi
•
707 views
RESTful Webサービス
Kentaro Inomata
•
3.1K views
Start SQL Server with Docker
Oshitari_kochi
•
356 views
20190410 cnjp rancher-flexvolume
t8kobayashi
•
166 views
20220723_GraphQLのクライアントサイド実装.pptx
Katsushi21
•
6 views
9/16 Tokyo Apache Drill Meetup - drill vs sparksql
Mitsutoshi Kiuchi
•
1.9K views
JAWSUG architecture-crowler
Takuro Sasaki
•
5.8K views
More from Kazuhiro Hara
MDX with Next.js
Kazuhiro Hara
1.1K views
•
15 slides
MDX and Next.js
Kazuhiro Hara
887 views
•
14 slides
About Plone Conference Tokyo 2018 Frontend Day
Kazuhiro Hara
347 views
•
10 slides
Gatsby & React Static
Kazuhiro Hara
878 views
•
28 slides
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
Kazuhiro Hara
1.5K views
•
29 slides
Clojure.tokyo.descjop
Kazuhiro Hara
572 views
•
31 slides
More from Kazuhiro Hara
(20)
MDX with Next.js
Kazuhiro Hara
•
1.1K views
MDX and Next.js
Kazuhiro Hara
•
887 views
About Plone Conference Tokyo 2018 Frontend Day
Kazuhiro Hara
•
347 views
Gatsby & React Static
Kazuhiro Hara
•
878 views
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
Kazuhiro Hara
•
1.5K views
Clojure.tokyo.descjop
Kazuhiro Hara
•
572 views
ひとりアドベントカレンダーのご紹介
Kazuhiro Hara
•
1.3K views
WebSocket+Akka(Remote)+Play 2.1 Java
Kazuhiro Hara
•
4.7K views
第2回 -Play部屋- Play 2.0はじめて&もくもく会
Kazuhiro Hara
•
1.7K views
-Play部屋- Play 2.0はじめて&もくもく会
Kazuhiro Hara
•
1.7K views
Play framework 2.0のおすすめと1.2からのアップグレード
Kazuhiro Hara
•
8.6K views
sbtマルチプロジェクトビルドの使いどころ
Kazuhiro Hara
•
1.8K views
Playbay Play 2.0 plugin イロハのイ
Kazuhiro Hara
•
1.7K views
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
Kazuhiro Hara
•
12.1K views
PlayFramework1.2.4におけるWebSocket
Kazuhiro Hara
•
2K views
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
Kazuhiro Hara
•
14.1K views
WP Jelly vol.01 WordPress管理画面にメニューを追加しよう
Kazuhiro Hara
•
1K views
Play FrameworkとWeb Socketの話
Kazuhiro Hara
•
1.6K views
MVCのVを極めしWebデザイナーになる - CakePHP勉強会
Kazuhiro Hara
•
3.5K views
Cakephp And Wordpress
Kazuhiro Hara
•
4K views
Recently uploaded
【JSTQB_ALTM】シラバス第3章
ssusercd6d02
39 views
•
27 slides
ハイエンド〜ローエンドまで、「Enlighten」による効率的リアルタイムグローバルイルミネーション|CEDEC2023
Silicon Studio Corporation
42 views
•
48 slides
Ansible入門.pptx
洵貴 佐川
220 views
•
13 slides
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
耕二 阿部
30 views
•
59 slides
LTは検証の場.pptx
ssuserfcafd1
290 views
•
10 slides
DockerでCoq インストール
Yoshihiro Mizoguchi
17 views
•
8 slides
Recently uploaded
(7)
【JSTQB_ALTM】シラバス第3章
ssusercd6d02
•
39 views
ハイエンド〜ローエンドまで、「Enlighten」による効率的リアルタイムグローバルイルミネーション|CEDEC2023
Silicon Studio Corporation
•
42 views
Ansible入門.pptx
洵貴 佐川
•
220 views
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
耕二 阿部
•
30 views
LTは検証の場.pptx
ssuserfcafd1
•
290 views
DockerでCoq インストール
Yoshihiro Mizoguchi
•
17 views
HelloCraft.pdf
MedicalTalk
•
40 views
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
1.
Clojureの各種React系ラッパーライブラリの サーバーサイドレンダリングの現状について SPAとSSR、現実解について考えてみる 2016/09/28 Lisp Meet Up
presented by Shibuya.lisp #44
2.
登壇者 {:company “Greative.GK” :name “Kazuhiro
Hara” :twitter “@kara_d”}
3.
Clojure / ClojureScript
でElectronアプリケーションを 作るためのスターターキット / プラットホーム ● オープンソースにてGitHubにて公開 ● MITライセンス ● 現在のスター数 : 230 http://descjop.org/
4.
アジェンダ ● なぜSSRなのか? 他言語環境での難しさについて ●
ClojureのReactラッパー系ライブラリでの実装について ● おれたちにはcljcがある!
5.
なぜSSRなのか?について
6.
SSR(サーバーサイドレンダリング)について (Reactベースのアプリケーションの文脈で) ● Webアプリケーションに用意されているURLにアクセスした時に、 DOMの構築をフロントエンド側で行うと、一瞬表示されていない状態になる ● 初期表示状態が決まっているなら、 サーバー側で初期状態のDOMレンダリングを完了した状態で返せばいい ●
共通の半描画状態の画面を出したりローディング画像を出すアプローチもある
7.
そもそもSSRする必要があるのか? ある ない Reactで複雑な状態遷移を扱うようなことが前提のWebアプリケーションなら、 Accessible Rich Internet
Applications(WEI-ARIA)を全力で頑張る方向に 倒したほうが良くないか? ☞ 今回こっちの場合の話
8.
なぜSSRなのか?について ● URLに対する情報のアクセシビリティ・セマンティック性を確保しておく ○ ブラウザを通したURLに対するアクセシビリティ・セマンティック性とは少し別 ○
SEOの問題はあまり心配しなくていいらしい (自分で実験したわけではない ) ● パフォーマンスの問題 ○ ブラウザでURLを直接アクセスした時に表示が完了するまでの時間の短縮化
9.
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>
10.
なぜClojureでのSSRは難しいか Clojureに限らず難しい問題(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と違うエコシステム、違うテンプレートスタイル
11.
Clojureでの実装方法 大きく分けて2種類 ● 独自にReactのdomを再実装 ○ Rum ○
foam ○ cellophane ○ デメリットについて ● Javaのnashornを利用 ○ ReactのJavaScriptコードを呼び出す ○ デメリットについて ● 別の道... ClojureScriptでNode.jsサーバーを立てる
12.
ClojureのReactラッパー系の ライブラリの現状について
13.
Om Omのバージョン0.9.0 バージョン1.0となる予定のOm-nextが開発中 ● Omに対しては.cljc内でClojure用にfoamというライブラリを使う ○ https://github.com/arohner/foam (:require
#?(:clj [foam.core :as om] :cljs [om.core :as om]) #?(:clj [foam.dom :as dom] :cljs [om.dom :as dom]))
14.
Om-next Om-nextは、1.0.0-alpha 45にてサーバーサイドレンダリングが搭載されたが、 試したもののまだうまく動かせなかった ● 今すぐ使いたいならCellophaneが吉 ○
https://github.com/ladderlife/cellophane (:require #?@(:cljs [[om.next :as om :refer-macros [defui]] [om.dom :as h]] :clj [[cellophane.next :as om :refer [defui]] [cellophane.dom :as h]]))
15.
Reagent / Re-frame Reagentでは、nashornを使った仕組みが提案されている ●
Reagent Cook Book ○ https://github.com/reagent-project/reagent-cookbook/tree/master/recipes/reagent-server-rende ring ○ プラクティスとして提供 ○ たぶん公式の機構はまだない ?
16.
Clojureのテンプレート系ライブラリについて ● sablono (hiccup系) ○
Issueとしてはある ■ Server-side rendering · Issue #111 · r0man/sablono https://github.com/r0man/sablono/issues/111 ● kioo (enlive系) ○ こちら、未調査(詳しい人教えてください )
17.
Rum Rumはもともと、Client / Serverを考慮して作られている 他のClojureライブラリでSSRの話が出るとき、Rumのようにしたいと 話題にあがったりする 他のReact再実装系コードの参考になっているのでは 親和性としては最高かもしれない ●
server_render.cljに実装がある ○ https://github.com/tonsky/rum/blob/gh-pages/src/rum/server_render.clj
18.
その他のReactラッパー系ライブラリ ● Quiescent ○ https://github.com/levand/quiescent ○
特に公式サポートはなし ? ● Brutha ○ https://github.com/weavejester/brutha ○ 特に公式サポートはなし
19.
おれたちにはcljcがある!
20.
UIコンポーネントには、.cljcを使おう ● cljcを使うことでUIコンポーネントがClojure、ClojureScript共通の部品となる ● (js/console.log
“HOGE”)とかJS独自の処理を書くと、 コンパイルエラーになるので良い ● コンポーネントにブラウザ独自のロジックなどが入らないように気をつける必要 あり ● ClojureのSSR込みなWebアプリケーションはどうcljcを使うか大事
21.
まとめ
22.
まとめ ● Om-nextは大いに期待できそうだ ● Reagent
/ Re-frameはエコシステムによって改善されそうな気がする ● Rumは偉大。 ただ、事例がよくわからなくて未知数感ある