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 Native Beyond Prototype
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Seiji Takahashi
September 18, 2018
Programming
1.7k
2
Share
React Native Beyond Prototype
The presentation slides at Roppongi.js #6
Seiji Takahashi
September 18, 2018
More Decks by Seiji Takahashi
See All by Seiji Takahashi
権限と承認 〜ユーザー信頼性に繋がる管理画面の根幹について〜
timakin
0
850
Go Backends for frontends with GraphQL and gRPC
timakin
6
4.2k
Design Pattern for Image and Text Composition in Go
timakin
5
6.8k
Golang API Testing the HARD way
timakin
13
7.1k
Head First Golang Image Package
timakin
2
10k
Performance Optimization on Google AppEngine
timakin
5
6.6k
testcache.pdf
timakin
1
220
How Go cache
timakin
1
130
How Go cache tests
timakin
1
3.3k
Other Decks in Programming
See All in Programming
Structured Concurrency, Scoped Values and Joiners in the JDK 25 26 27
josepaumard
1
150
ついに来た!本格的なマルチクラウド時代の Google Cloud
maroon1st
0
410
検索設計から 推論設計への重心移動と Recall-First Retrieval
po3rin
5
1.6k
Surviving Black Friday: 329 billion requests with Falcon!
ioquatix
0
3k
AgentCore Optimizationを始めよう!
licux
3
230
決定論 vs 確率論:Gemini 3 FlashとTF-IDFを組み合わせた「法規判定エンジン」の構築
shukob
0
160
実践ハーネスエンジニアリング:ステアリングループを実例から読み解く / Practical Harness Engineering: Understanding Steering Loops Through Real-World Examples
nrslib
5
5.1k
Cache-moi si tu peux : patterns et pièges du cache en production - Devoxx France 2026 - Conférence
slecache
0
350
AI時代になぜ書くのか
mutsumix
0
380
AIを導入する前にやるべきこと
negima
2
350
Import assertionsが消えた日~ECMAScriptの仕様はどう決まり、なぜ覆るのか~
bicstone
2
180
20年以上続くプロダクトでも使い続けられる静的解析ツールを求めて
matsuo_atsushi
0
150
Featured
See All Featured
How to make the Groovebox
asonas
2
2.2k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
Between Models and Reality
mayunak
3
290
Visualization
eitanlees
150
17k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
690
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.3k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Statistics for Hackers
jakevdp
799
230k
What does AI have to do with Human Rights?
axbom
PRO
1
2.1k
The Language of Interfaces
destraynor
162
26k
Amusing Abliteration
ianozsvald
1
160
Transcript
React Native beyond Prototype Roppongi.js #6 Seiji Takahashi |
@__timakin__
Seiji Takahashi 所属:Gunosy, Inc. メディア事業本部 ⾔語:Go, JavaScript(React), Swift etc timakin
@__timakin__ __timakin__
None
None
ΞδΣϯμ ʼ3FBDU/BUJWFຊ൪ӡ༻ʹର͢Δݟํ ʼͲΜͳػೳͰෆ҆ʹͳΓ͍͔͢ͱɺ֤࣮ํ๏
3FBDU/BUJWFຊ൪ӡ༻ʹର͢Δݟํ@
ʮReact Native͍·ͤΜ͔ʁʯ
React Nativeͷݟํ w ϓϩτλΠϓɾݸਓϓϩμΫτʹ͍͍͔͠Εͳ͍͚Ͳ ۀͰʜ w 3FBDUͷֶशίετɺϝϯςφϯείετ w ωΠςΟϒͰ͔࣮͠ݱͰ͖ͳ͍ػೳ͕ग़͖ͯͨΒʁ w
·ͩະख़ͷίϛϡχςΟͰɺϥΠϒϥϦἧͬͯͳ͍ͷ Ͱʁ
気持ちはわかる。 (´・_・`)
? で も A i r b n b と
か F a c e b o o k が 本 番 採 用 し て た の に 、 い ま さ ら プ ロ ト タ イ プ で し か 採 用 で き な い と 考 え る の は ち ょ っ と 違 う の で は ?
「プロトタイプ」と本番運⽤の境⽬ • 中⻑期的に、ユーザーの要求に応じて柔軟に機能を追加・ 削除できるか(メンテナンス) • ⼩規模では可能だが、⼤規模・複雑な要件だと開発不可能 な機能がないか(技術的な天井) • 学習コストを加味した上で、⼈員追加は容易か(採⽤⾯)
「プロトタイプ」と本番運⽤の境⽬ • メンテナンス • React Native⾃体のバージョン上げとかはきついけど、基本問題なし • JSとしてのメンテナンスコストはある。(コンポーネントが細分化されてな いとか) •
技術的な天井 • リアルタイム通信、ARKitとかそのあたりはネイティブとのブリッジが発⽣し てちょっと渋い • 採⽤⾯ • ネイティブ経験者なら1週間あればできる(てかそのくらいやりましょう)
「プロトタイプ」と本番運⽤の境⽬ • メンテナンス • React Native⾃体のバージョン上げとかはきついけど、基本問題なし • JSとしてのメンテナンスコストはある。 (コンポーネントが細分化されてないとか) •
技術的な天井 • リアルタイム通信、ARKitとかそのあたりはネイティブとのブリッジが発⽣して ちょっと渋い • 採⽤⾯ • ネイティブ経験者なら1週間あればできる(てかそのくらいやりましょう)
ͲΜͳػೳͰෆ҆ʹͳΓ͍͔͢@
本番のプロダクトで必要になってくる要件 • UIの機微 • プッシュ通知対応 • ディープリンク対応 • 課⾦処理 とか、ちょっと⼀歩踏み込んだ機能は、⼤変なのでは?という不安があった。
(結果、⼤丈夫だった。)
前提条件 • 開発環境 • スタックはTypeScript, MobX • デプロイはFastlane • Expoは動画周りとか課⾦周りとか、ちょっとネイティブモジュール絡んでき
そうで不安だったので利⽤せず。 • スキルセット • もともとSwift経験あり。Kotlinとかは皆無。 • Reactは超苦⼿意識あったがなんとかなった。
UIの機微 ⼤変だった機能はそんなにない。 けど、以下は調整が必要なことが多かった。 • ナビゲーション表⽰幅のズレ • シャドウ • 画像の⾮同期読み込み •
フォーム⼊⼒
ナビゲーションバー AndroidとiPhoneで表⽰域が違う。 いつもキモいなと思ってる。
シャドウの調整 シャドウを適⽤したい要素に対して、 影を表⽰したときのmarginの調整や、 iOS⽤にshadowOffset, Radius Android⽤にelevation など、異なるパラメーターが必要。
画像の⾮同期読み込み 絶対やりますよね。 読み込み速度を常に早くしたい場合、ImageBackgroundではなく、 キャッシュが有効なFastImageを使いたい。 が、背景画像として読み込むとき、FastImageだと プレースホルダーの設定に難があったりする。 読み込み完了イベントを元にstateを愚直に切り替える。
愚直なコード
フォーム⼊⼒ ⽇本語⼊⼒がv0.56.0とかまで バグってて、変換ができなかった。 v0.54.0くらいまで落とすか、 v0.57.0に上げるかで対応できる。 正直これはマジかよという感じ。
プッシュ通知対応 react-native-firebase使えば恐ろしく早く実装できる。 TokenもFCMTokenで共通化できるし、よほど送信を 意図的に遅延したい場合を除いてFCMで送ればよさそう。 前までFCMはreact-native-fcmで実装するのがデファクトっぽかったけど、 今は公式のreact-native-firebaseで⼗分できる。
復帰時と 初期起動時の リスナーは分ける。
ディープリンク対応 react-navigationがdeep-linkingの機構を持ってくれてる。 参考: https://reactnavigation.org/docs/en/deep-linking.html#docsNav XCode, Android Studioそれぞれでスキーマ設定をした後、 トップのStackNavigatorにURLPrefixを指定して、 Screenごとにパスを設定すれば、意図したところに⾶べる。
ディープリンク対応 す ご く 実 装 が 少 な い
。 本 当 に こ れ で い い の か 心 配 に な る 。
課⾦処理 定期購読型課⾦だけ実装経験あり。 ⾊々ライブラリはあるけど、今はreact-native-iapが良い。 他のライブラリだと⽚⽅のOSしか対応してない、とかがある。
事前処理 起動時にIAPのインスタンスも 初期化しておく。 購⼊可能なアイテム⼀覧を 最初に取得しておかないと、 あとでエラーになるのが罠。 レシート検証は 個別にAPI実装が必要。
購⼊処理 buyItemとか buySubscriptionとか 直感的なインターフェースで iOS/Android共に アイテム購⼊ができる。
本番のプロダクトで必要になってくる要件 • UIの機微 • プッシュ通知対応 • ディープリンク対応 • 課⾦処理 とか、ちょっと⼀歩踏み込んだ機能は、⼤変なのでは?という不安があった。
(結果、⼤丈夫だった。) だいたい できたのでは?
·ͱΊ ʼ͍͍ͩͨຊ൪Ͱෆ҆ʹͳΔΑ͏ͳػೳ֦ு࣮ݱՄೳ ʼ3FBDU/BUJWFͰදݱՄೳͳػೳΛ͑ͨෳࡶੑʹΜͰΔͷ͔ɺ୯ʹ3FBDU/BUJWFΘ ͔ΒΜ͔Β͍ͨͭͯΔͷ͔ɺ͖ͬΓ۠ผ͠·͠ΐ͏ɻ ʼϓϩτλΠϓͱ͔ͪͬͪΌ͍ΞϓϦͱ͔࡞ͬͯ͠ΐ͏͕ͳ͍ͷͰྗΛݟͤΔͷ͕ྑͦ͞͏ ʼӡ༻͋Μ·ਏ͘ͳ্͍ʹ͍͍ͩͨͷΞϓϦͷػೳ࣮ݱՄೳͳͷͰɺϓϩτλΠϓͰ͔͠ ͑ͳ͍ͱ͍͏ݴઆ͕ྲྀ͢Δͷମແ͍ɻ ʼӡ༻Մೳͳຊ൪ϨϕϧͷϓϩμΫτΛ࡞ͬͯྗͰݴઆΛΑ͍ͯ͘͘͠ͱྑͦ͞͏ɻ
͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ