Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ReactとReact Nativeを共通化させる試みの話 - FUKUOKA Enginee...
Search
Yusuke Otawa
September 22, 2018
Programming
3.8k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ReactとReact Nativeを共通化させる試みの話 - FUKUOKA Engineers Day 2018 ~Autumn~
Yusuke Otawa
September 22, 2018
More Decks by Yusuke Otawa
See All by Yusuke Otawa
少人数でサービスをすばやく開発するためのRails活用事例 - Rails Developers Meetup 2019
tawachan
3
6.2k
Other Decks in Programming
See All in Programming
Agents on Rails - Rails at Scale 2026
irinanazarova
0
570
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
220
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
Kotlinize Is Not Just Converting to Kotlin
chigichan24
1
160
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
2
960
AWSに止められる覚悟してますか?
morizo_1984
2
540
golang-bob.pdf
iwatsukayura
0
130
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
510
contenteditable と日本語入力に向き合う
colorful12
0
200
Jetpack Compose Mechanisms
skydoves
3
830
Domain-Driven Transformation
hschwentner
2
2.3k
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
300
Featured
See All Featured
Game over? The fight for quality and originality in the time of robots
wayneb77
1
310
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
710
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
WCS-LA-2024
lcolladotor
0
900
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
850
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.2k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
400
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
490
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
460
エンジニアに許された特別な時間の終わり
watany
109
250k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.7k
Transcript
React と React Native を 共通化させる試みの話 (序章) pixiv Inc. Yusuke
Otawa @tawachan39 2018.6.5
自己紹介 • 大多和 祐介(オオタワ ユウスケ) ◦ twitter: @tawachan39 • ピクシブ(pixiv)
福岡オフィス • 東京生まれ・埼玉育ち・福岡歴1年弱 2 tawachan
3
でやっていること 4 API Server Web/PWA iOS CDN
普通につらい 5
iOSとWebの二重開発でスピード感に欠ける 6 6 API Server Web/PWA iOS CDN
どうにか一本化したい 7
8
iOSとWebの二重開発でスピード感に欠ける 9 9 API Server Web/PWA iOS CDN
• どうしたら React でいい感じに ウェブとアプリを作れるか • 今のところ一番良さそうな方法 • 実践登用したわけではないのでただの共有段階 •
前提: ◦ 最速で柔軟に試行錯誤できる(≒ 開発速度) > 体験の細かな質の向上 ◦ 知見があればぜひ共有していただけると嬉しい! 10 今日話すこと
• React / React Native ってどんなもの • React で create-react-app
を使うべきか • React Native で Expo.io を使うべきか 11 今日話さないこと
12 試したこと 1. React / React Native を同じリポジトリに置いてデータ周りを共通化する 2. React
Native に React Native for Web を導入する 3. ReactXP でプロジェクトを作成する 4. React Native Dom を導入する
① React / React Native を同じリポジトリに 置いてデータ周りを共通化する 13
• React と React Native のプロジェクトをそれぞれ作る • View はそれぞれの実装をして、Data 周りは共通化させる
どういうこと? 14 共通化
• React / React Native の独立し たプロジェクトを併存させる • redux など見た目に関わらない
部分を common に切り出す • 各プロジェクトから common 参 照する ディレクトリ構成 15 . ├── common │ ├── reducers │ └── actions ├── native │ ├── ios │ ├── android │ ├── src │ ├── package.json │ ├── tsconfig.json │ ├── tslint.json │ └── yarn.lock └── web ├── package.json ├── public ├── src ├── tsconfig.json ├── tslint.json ├── webpack.config.js └── yarn.lock
• ただのReact と React Native の プロジェクトなのでなんでもできる • Native /
Web 特有の実装も問題 なくできる • データ周りを切り分けるモチベー ション 自由で良さそう 16 . ├── common │ ├── reducers │ └── actions ├── native │ ├── ios │ ├── android │ ├── src │ ├── package.json │ ├── tsconfig.json │ ├── tslint.json │ └── yarn.lock └── web ├── package.json ├── public ├── src ├── tsconfig.json ├── tslint.json ├── webpack.config.js └── yarn.lock
• package.json が2つ(3つ)ある • ほぼ内容が同じ tsconfig.json と tslint.json が生まれる •
common 配下のファイルの責任 の所在が怪しい • そもそも開発早くなるのか? 管理が複雑でつらい 17 . ├── common │ ├── reducers │ └── actions ├── native │ ├── ios │ ├── android │ ├── src │ ├── package.json │ ├── tsconfig.json │ ├── tslint.json │ └── yarn.lock └── web ├── package.json ├── public ├── src ├── tsconfig.json ├── tslint.json ├── webpack.config.js └── yarn.lock
ちょっと微妙 18
② React Native に React Native for Web を導入する 19
• React Native のプロジェクトに後入れできる • React Native のコンポーネントを Web で使える形にトランスパイルしてくれる
• React Native をそのままが使えるので View も共通化できる • (一部対応していないコンポーネントが現段階ではある) • React Dom もかける • https://github.com/necolas/react-native-web React Native for Web とは 20
import React from 'react'; import { View, Text, StyleSheet }
from 'react-native'; export default class WebApp extends React.Component { render() { return ( <View> <Text style={{fontSize: 20, color: 'blue'}}>ネイティブ</Text> <div style={{fontSize: 20, color: 'red'}}>ウェブ</div> </View> ); } } React Dom と React Native が共存できる 21
export default class App extends React.Component { render() { if
(Platform.OS == 'web') { return ( <View style={styles.container}> <div style={{fontSize: 20, color: 'red'}}>ウェブ</div> </View> ); } else { return ( <View style={styles.container}> <Text style={{fontSize: 20, color: 'blue'}}>ネイティブ</Text> </View> ); } } } Platformによって出し分ければよさそう 22
23
結構よさそう 24
• 純粋な React Native のプロジェクトに後から入れることができる • 複数のプロジェクトを飼いならさなくてよいから楽 • React Native
コンポーネントを割といい感じに変換してくれる ◦ Vibration API も変換できていたりする ◦ 挙動が見れる:http://necolas.github.io/react-native-web/examples/ • Web 用にトランスパイルできなくても、 Web 用の実装をして出し分けることができる React Native for Web 25
26 試したこと 1. React / React Native を同じリポジトリに置いてデータ周りを共通化する 2. React
Native に React Native for Web を導入する 3. ReactXP でプロジェクトを作成する ◦ https://microsoft.github.io/reactxp 4. React Native Dom を導入する ◦ https://github.com/vincentriemer/react-native-dom
まとめ 27
今回のまとめ • React と React Native を使って飼いならす方法は結構ある • 暫定的には React
Native でアプリを開発して React Native for Web で Web を作るの が一番安定そう 28