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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
「正の参照」と 「負の導出」で組む ハーネスエンジニアリング
cottpan
1
140
Embedded SREと共に達成した会員管理システムのAWS移行 - SRE NEXT 2026 ランチスポンサーセッション
niftycorp
PRO
1
2.4k
関数型プログラミングのメリットって何だろう?
wanko_it
0
170
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
270
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
480
Claude Team Plan導入・ガイド
tk3fftk
0
180
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
510
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
120
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
4.7k
AIエージェントで 変わるAndroid開発環境
takahirom
2
550
はてなアカウント基盤 State of the Union
cockscomb
1
1.3k
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
0
100
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
150
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.6k
My Coaching Mixtape
mlcsv
0
170
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
340
Utilizing Notion as your number one productivity tool
mfonobong
4
380
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
200
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
220
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