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 Native Beyond Prototype
Search
Seiji Takahashi
September 18, 2018
Programming
1.8k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
React Native Beyond Prototype
The presentation slides at Roppongi.js #6
Seiji Takahashi
September 18, 2018
Transcript
32 slides
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Θ ͔ΒΜ͔Β͍ͨͭͯΔͷ͔ɺ͖ͬΓ۠ผ͠·͠ΐ͏ɻ ʼϓϩτλΠϓͱ͔ͪͬͪΌ͍ΞϓϦͱ͔࡞ͬͯ͠ΐ͏͕ͳ͍ͷͰྗΛݟͤΔͷ͕ྑͦ͞͏ ʼӡ༻͋Μ·ਏ͘ͳ্͍ʹ͍͍ͩͨͷΞϓϦͷػೳ࣮ݱՄೳͳͷͰɺϓϩτλΠϓͰ͔͠ ͑ͳ͍ͱ͍͏ݴઆ͕ྲྀ͢Δͷମແ͍ɻ ʼӡ༻Մೳͳຊ൪ϨϕϧͷϓϩμΫτΛ࡞ͬͯྗͰݴઆΛΑ͍ͯ͘͘͠ͱྑͦ͞͏ɻ
͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ
More Decks by Seiji Takahashi
See All by Seiji Takahashi
コーディング自動化の次へ。人の介入をゼロにするファクトリーとサポートAIによる実践
timakin
5
5.4k
AIエージェントのデータガバナンスの最新事情。そしてプロダクトのAIファースト化
timakin
0
4k
営業、広報、開発。 多面的なAIネイティブ化のための 基盤について
timakin
0
300
権限と承認 〜ユーザー信頼性に繋がる管理画面の根幹について〜
timakin
0
1.1k
Go Backends for frontends with GraphQL and gRPC
timakin
6
4.3k
Design Pattern for Image and Text Composition in Go
timakin
5
6.9k
Golang API Testing the HARD way
timakin
13
7.4k
Head First Golang Image Package
timakin
2
10k
Performance Optimization on Google AppEngine
timakin
5
6.8k
Other Decks in Programming
See All in Programming
LLM 101: Exploring LLMs, Starting with Tokens.
dalinaum
0
110
プロジェクトコードをキレイキレイしよう!暗黙的な参照を読み解く静的解析
ostk0069
0
210
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
4
4.5k
あなたはMCPの機能を、まだ知らない。
4geru
1
150
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
230
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
750
Spec-Driven Development - Why Vaadin Is the Perfect Fit
simas
PRO
0
250
DroidKnights 2026 Android A2UI Jetpack Compose 기반의 안전한 AI UI 렌더링 - 박제창
itsmedreamwalker
1
230
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
320
flutter_test のその先へ — Flutter アプリの LLM 機能に「評価」という品質保証を
kosukesaigusa
0
200
自宅サーバはどこまで再現できるのか - Proxmox VE上のVM環境をIaCとバックアップで戻してみた
youto
0
260
ビジネスロジックを堅牢に~Scala 3のドメインプリミティブ~
j5ik2o
0
180
Featured
See All Featured
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
48k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
280
Evolving SEO for Evolving Search Engines
ryanjones
0
360
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.6k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
1
300
Believing is Seeing
oripsolob
1
280
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.8k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
640
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
380
Optimising Largest Contentful Paint
csswizardry
37
4k
Tell your own story through comics
letsgokoyo
1
1.1k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
680