Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Reactは何を提供する Libraryなのか? フロントエンドエンジニアLT * ビアバッシュ 2022.07.02(土)
Slide 2
Slide 2 text
自己紹介 ● taro( @taroro_tarotaro) ● SHELFYで建設SaaSを作ってる(1年半くらい🐥) ● React, SpringBoot, Django ● 社外LT初挑戦🙂
Slide 3
Slide 3 text
はじめに 今までノリで使ってきたReactを基礎から学び直しています!
Slide 4
Slide 4 text
はじめに 今までノリで使ってきたReactを基礎から学び直しています! ってことで、今回は改めて 「Reactは何を提供するLibraryなのか?」を話そうかと思います! (つよつよエンジニアの方にとっては、全ての既知の内容かもしれません)
Slide 5
Slide 5 text
Reactの構造
Slide 6
Slide 6 text
Reactの構造 ● Reactはモノレポ
Slide 7
Slide 7 text
Reactの構造 ● Reactはモノレポ ここに色んなパッケージが 入ってる!
Slide 8
Slide 8 text
Reactの構造 ● Reactはモノレポ
Slide 9
Slide 9 text
Reactの構造 ● Reactはモノレポ ● 重要なのはざっくり3つ
Slide 10
Slide 10 text
Reactの構造 ● Reactはモノレポ ● 重要なのはざっくり3つ ○ Core
Slide 11
Slide 11 text
Core Component定義に必要なAPIを提供 ● React.Component ● FC ● ReactNode ● Hooks
Slide 12
Slide 12 text
Reactの構造 ● Reactはモノレポ ● 重要なのはざっくり3つ ○ Core ○ Renderer
Slide 13
Slide 13 text
Renderer Component Treeをプラットフォーム固有のHostに変換 ● React DOM Renderer ○ DOMに変換 ● React Native Renderer ○ NativeのViewに変換 ※Host: 各プラットフォームごとの描画する対象(DOM, Native View)
Slide 14
Slide 14 text
Reactの構造 ● Reactはモノレポ ● 重要なのはざっくり3つ ○ Core ○ Renderer ○ Reconciler (リコンサイラー)
Slide 15
Slide 15 text
Reconciler 仮想DOMの管理・差分検出 ● Renderer内から呼び出される ● React Element TreeをJSのオブジェクトで保持 ● 差分検出して、Rendererに再描画する対象を伝える ● React Fiberが登場するのはここ
Slide 16
Slide 16 text
Reconciler 仮想DOMの管理・差分検出 ● Renderer内から呼び出される ● React Element TreeをJSのオブジェクトで保持 ● 差分検出して、Rendererに再描画する対象を伝える ● React Fiberが登場するのはここ(V16~) ちなみにReconcilerは直訳すると「調停者、平和をもたらす者」 差分を検出して同期するところからこの名前がついた…?
Slide 17
Slide 17 text
Reactの構造 ● Core ○ Component定義に必要なAPI ● Renderer ○ Component Treeをプラットフォーム固有のHostに変換 ● Reconciler ○ 仮想DOMの管理・差分検出
Slide 18
Slide 18 text
Reactの構造 ● Core→各Rendererで共通 ○ Component定義に必要なAPI ● Renderer ○ Component Treeをプラットフォーム固有のHostに変換 ● Reconciler→各Rendererで共通 ○ 仮想DOMの管理・差分検出
Slide 19
Slide 19 text
Reactの構造
Slide 20
Slide 20 text
Reactの構造 Renderer(プラットフォーム)が違っても、 CoreとReconcilerは共通!
Slide 21
Slide 21 text
Reactの構造 →他にもRendererが作れそう!
Slide 22
Slide 22 text
色んなCustom Renderer React公式が提供しているRenderer ● react-dom: DOMに変換 ● react-native: Native Viewに変換 ● react-test-renderer: JSONに変換 ● react-art: Vector画像に変換 独自で作られたRenderer ● react-three-fiber: 3Dコンテンツに変換 ● proton-native: Desktop App Viewに変換 ● react-pdf: PDFファイルに変換 ● etc.
Slide 23
Slide 23 text
Reactの構造 ● Core→各Rendererで共通 ○ Component定義に必要なAPI ● Renderer ○ Component Treeをプラットフォーム固有のHostに変換 ● Reconciler→各Rendererで共通 ○ 仮想DOMの管理・差分検出
Slide 24
Slide 24 text
Reactの構造 ● Core→各Rendererで共通 ○ Component定義に必要なAPI ● Renderer ○ Component Treeをプラットフォーム固有のHostに変換 ● Reconciler→各Rendererで共通 ○ 仮想DOMの管理・差分検出 →Rendererは各プラットフォームごとのLibraryとして切り出されている
Slide 25
Slide 25 text
Reactが提供するもの ● Core→各Rendererで共通 ○ Component定義に必要なAPI ● Renderer ○ Component Treeをプラットフォーム固有のHostに変換 ● Reconciler→各Rendererで共通 ○ 仮想DOMの管理・差分検出 →Rendererは各プラットフォームごとのLibraryとして切り出されている →共通して使うのはCoreとReconcilerの2つ
Slide 26
Slide 26 text
Reactが提供するもの ● Core→各Rendererで共通 ○ Component定義に必要なAPI ● Renderer ○ Component Treeをプラットフォーム固有のHostに変換 ● Reconciler→各Rendererで共通 ○ 仮想DOMの管理・差分検出 【仮想DOM】 宣言的UIの構築におけるパフォーマンスの問題を解決するための技術
Slide 27
Slide 27 text
Reactが提供するもの ● Core→各Rendererで共通 ○ Component定義に必要なAPI ● Renderer ○ Component Treeをプラットフォーム固有のHostに変換 ● Reconciler→各Rendererで共通 ○ (宣言的UIを構築するための)仮想DOMの管理・差分検出 →Rendererは各プラットフォームごとのLibraryとして切り出されている →共通して使うのはCoreとReconcilerの2つ →Reactが提供するのはComponentベースな宣言的UIの構築のみ (プラットフォームには依存しない)
Slide 28
Slide 28 text
Reactが提供するもの ● Core→各Rendererで共通 ○ Component定義に必要なAPI ● Renderer ○ Component Treeをプラットフォーム固有のHostに変換 ● Reconciler→各Rendererで共通 ○ (宣言的UIを構築するための)仮想DOMの管理・差分検出 →Rendererは各プラットフォームごとのLibraryとして切り出されている →共通して使うのはCoreとReconcilerの2つ →Reactが提供するのはComponentベースな宣言的UIの構築のみ (プラットフォームには依存しない)→僕の勝手な推測…?
Slide 29
Slide 29 text
Reactが提供するもの https://ja.reactjs.org/docs/design-principles.html#beyond-the-dom
Slide 30
Slide 30 text
Reactが提供するもの https://reactjs.org/blog/2013/06/05/why-react.html
Slide 31
Slide 31 text
Reactは何を提供するLibraryなのか? ● Componentベース ● 宣言的 ● プラットフォーム共通の方法 でのUIの構築を提供するLibrary
Slide 32
Slide 32 text
Reactは何を提供するLibraryなのか? ● Componentベース ○ JSX ● 宣言的 ○ JSX ○ Flux Architecture (2014.5) ○ Functional Component (2015.10) ○ Hooks (2019.02) ○ Suspense (2022.03) ● プラットフォーム共通の方法 ○ React Native (2015.03) ○ Web用のコードがreact-domに移動(2015.10) でのUIの構築を提供するLibrary
Slide 33
Slide 33 text
Reactが提供するもの https://ja.reactjs.org/
Slide 34
Slide 34 text
ソフトウェア開発における Reactの役割
Slide 35
Slide 35 text
ソフトウェア開発におけるReactの役割 ReactはComponentベースな宣言的UIの構築を提供するLibrary ● Componentベース ● 宣言的 ○ JSX ○ Flux Architecture (2014.5) ○ Functional Component (2015.10) ○ Hooks (2019.02) ○ Suspense (2022.03) ● プラットフォームで共通 ○ React Native (2015.03)
Slide 36
Slide 36 text
No content
Slide 37
Slide 37 text
ソフトウェア開発におけるReactの役割 ReactはComponentベースな宣言的UIの構築を提供するLibrary →なぜ「UI」ではなく「UIの構築」なのか?
Slide 38
Slide 38 text
ソフトウェア開発におけるReactの役割 ReactはComponentベースな宣言的UIの構築を提供するLibrary →なぜ「UI」ではなく「UIの構築」なのか? →どんなUIを提供するかは開発者が決める
Slide 39
Slide 39 text
ソフトウェア開発におけるReactの役割 ReactはComponentベースな宣言的UIの構築を提供するLibrary →なぜ「UI」ではなく「UIの構築」なのか? →どんなUIを提供するかは開発者が決める →Reactはそれをどうやって実現するか(構築するか)の責任を持つ https://ja.reactjs.org/blog/2022/03/29/react-v18.html
Slide 40
Slide 40 text
ソフトウェア開発におけるReactの役割
Slide 41
Slide 41 text
ソフトウェア開発におけるReactの役割 UIはユーザーがシステムを操作する窓口的なもの
Slide 42
Slide 42 text
ソフトウェア開発におけるReactの役割 ● Why: 何のためのUIか? ● What: どんなUIか? ● How: どうやってUIを作るか?
Slide 43
Slide 43 text
ソフトウェア開発におけるReactの役割 ● Why: 何のためのUIか?→開発者 ● What: どんなUIか?→開発者 ● How: どうやってUIを作るか?→React
Slide 44
Slide 44 text
ソフトウェア開発におけるReactの役割 ● Why: 何のためのUIか?→開発者 ● What: どんなUIか?→開発者 ● How: どうやってUIを作るか?→React 宣言的に、 Componentベースで、 プラットフォーム共通な方法で、 高いUXのUIを作れる
Slide 45
Slide 45 text
さいごに
Slide 46
Slide 46 text
これから Reactが提供したいもの
Slide 47
Slide 47 text
※個人的解釈が強いかも
Slide 48
Slide 48 text
スケジューリングされた 高いUXのUI構築
Slide 49
Slide 49 text
スケジューリングされた高いUXのUI構築 https://ja.reactjs.org/docs/design-principles.html
Slide 50
Slide 50 text
スケジューリングされた高いUXのUI構築 鍵はReact Fiber Reconciler(V16~ from 2017.09)
Slide 51
Slide 51 text
スケジューリングされた高いUXのUI構築 鍵はReact Fiber Reconciler(V16~ from 2017.09) 同期的だった差分検出処理が、 Fiberという作業単位に分割され非同期処理が可能に! ● 優先度順に割り込み可 ● 中断可 ● 不要になった処理は破棄
Slide 52
Slide 52 text
スケジューリングされた高いUXのUI構築 鍵はReact Fiber Reconciler(V16~ from 2017.09) 同期的だった差分検出処理が、 Fiberという作業単位に分割され非同期処理が可能に! ● 優先度順に割り込み可 ● 中断可 ● 不要になった処理は破棄 レンダリング中でも、 ユーザーの入力を優先して反映す るなどが可能に!
Slide 53
Slide 53 text
スケジューリングされた高いUXのUI構築 鍵はReact Fiber Reconciler(V16~ from 2017.09) 同期的だった差分検出処理が、 Fiberという作業単位に分割され非同期処理が可能に! ● 優先度順に割り込み可 ● 中断可 ● 不要になった処理は破棄 ● Concurrent Rendering(V18) ● Automatic Batching(V18) ● Suspence(V18) ● Transition(V18) ● etc.
Slide 54
Slide 54 text
スケジューリングされた高いUXのUI構築 https://ja.reactjs.org/docs/design-principles.html
Slide 55
Slide 55 text
まとめ
Slide 56
Slide 56 text
まとめ ● ReactはComponentベースな宣言的UIの構築を提供するLibrary ● プラットフォームを超えて共通の方法でUIの構築ができる! ● これから提供したいのは、Fiberによって実現したスケジューリングされた高いUXの UI構築 感想 ● 大切なことは全部公式ドキュメントに書いてある ● 思想を知るのは普段使っている技術への理解が深まるし、楽しい
Slide 57
Slide 57 text
ありがとうございました!