Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ReactとReact Nativeを共通化させる試みの話 - FUKUOKA Enginee...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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.1k
Other Decks in Programming
See All in Programming
AIを紡ぐPMのお話
swdtkuy
0
100
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
230
リアルな遅延を測る仕様
kota_yata
1
100
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
3
790
改善しないと、タスクが回らない。 “てんこ盛りポジション” を引き継いだ情シスの、入社3ヶ月の業務改善録
krm963
0
260
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
210
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
930
Go 1.27 における memory allocation の高速化
andpad
0
180
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
140
Japan Community Day at Kubecon + CloudNativeCon Japan 2026: Learning Container Privilege Control by Building My Own Low-Level Container Runtime
ternbusty
1
150
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
500
freee が目指す データ マネジメント戦略 AI-Ready 時代を支える 攻めのガバナンスとは
freee
PRO
0
370
Featured
See All Featured
Color Theory Basics | Prateek | Gurzu
gurzu
0
420
Game over? The fight for quality and originality in the time of robots
wayneb77
1
240
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
460
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
470
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
360
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.3k
Rails Girls Zürich Keynote
gr2m
96
14k
Technical Leadership for Architectural Decision Making
baasie
3
480
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
Producing Creativity
orderedlist
PRO
348
40k
YesSQL, Process and Tooling at Scale
rocio
174
15k
How to train your dragon (web standard)
notwaldorf
97
6.8k
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