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
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
初めての模倣学習とVLA
natsutan
0
260
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
720
【QA Test Talk Vol.8】AI-DLC による Whole Team Approach の加速
pkshadeck
PRO
0
240
承認済みなのに差戻しできてしまうバグ、型で潰せます
shinchit
0
110
Cloudflare is Agents
chimame
0
180
異なる設計思想のフレームワークを経験して得た学び
amekuhideki
1
590
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
2
210
Hono + Inertia + React で LP を構築した話
oukayuka
2
170
書籍「プロフェッショナルAI駆動開発」紹介スライド
juntaromatsumoto
0
630
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
7
2.2k
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
510
My Marp Sample
sinoue0108
0
120
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
380
RailsConf 2023
tenderlove
30
1.5k
Color Theory Basics | Prateek | Gurzu
gurzu
0
440
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
950
The SEO identity crisis: Don't let AI make you average
varn
0
540
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Deep Space Network (abreviated)
tonyrice
0
270
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
Claude Code のすすめ
schroneko
67
230k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
470
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