Upgrade to Pro — share decks privately, control downloads, hide ads and more …

React Native Beyond Prototype

5bfed9aa3a9ebccb0c0f0cb65ee9e012?s=47 Seiji Takahashi
September 18, 2018

React Native Beyond Prototype

The presentation slides at Roppongi.js #6

5bfed9aa3a9ebccb0c0f0cb65ee9e012?s=128

Seiji Takahashi

September 18, 2018
Tweet

Transcript

  1. React Native 
 beyond Prototype Roppongi.js #6 Seiji Takahashi |

    @__timakin__
  2. Seiji Takahashi 所属:Gunosy, Inc. メディア事業本部 ⾔語:Go, JavaScript(React), Swift etc timakin

    @__timakin__ __timakin__
  3. None
  4. None
  5. ΞδΣϯμ ʼ3FBDU/BUJWFຊ൪ӡ༻ʹର͢Δݟํ ʼͲΜͳػೳͰෆ҆ʹͳΓ΍͍͔͢ͱɺ֤࣮૷ํ๏

  6. 3FBDU/BUJWFຊ൪ӡ༻ʹର͢Δݟํ@

  7. ʮReact Native࢖͍·ͤΜ͔ʁʯ

  8. React Native΁ͷݟํ w ϓϩτλΠϓɾݸਓϓϩμΫτʹ͸͍͍͔΋͠Εͳ͍͚Ͳ ۀ຿Ͱ͸ʜ w 3FBDUͷֶशίετɺϝϯςφϯείετ w ωΠςΟϒͰ͔࣮͠ݱͰ͖ͳ͍ػೳ͕ग़͖ͯͨΒʁ w

    ·ͩະ੒ख़ͷίϛϡχςΟͰɺϥΠϒϥϦ΋ἧͬͯͳ͍ͷ Ͱ͸ʁ
  9. 気持ちはわかる。 (´・_・`)

  10. ? で も A i r b n b と

    か F a c e b o o k が 本 番 採 用 し て た の に 、 い ま さ ら プ ロ ト タ イ プ で し か 採 用 で き な い と 考 え る の は ち ょ っ と 違 う の で は ?
  11. 「プロトタイプ」と本番運⽤の境⽬ • 中⻑期的に、ユーザーの要求に応じて柔軟に機能を追加・ 削除できるか(メンテナンス) • ⼩規模では可能だが、⼤規模・複雑な要件だと開発不可能 な機能がないか(技術的な天井) • 学習コストを加味した上で、⼈員追加は容易か(採⽤⾯)

  12. 「プロトタイプ」と本番運⽤の境⽬ • メンテナンス • React Native⾃体のバージョン上げとかはきついけど、基本問題なし • JSとしてのメンテナンスコストはある。(コンポーネントが細分化されてな いとか) •

    技術的な天井 • リアルタイム通信、ARKitとかそのあたりはネイティブとのブリッジが発⽣し てちょっと渋い • 採⽤⾯ • ネイティブ経験者なら1週間あればできる(てかそのくらいやりましょう)
  13. 「プロトタイプ」と本番運⽤の境⽬ • メンテナンス • React Native⾃体のバージョン上げとかはきついけど、基本問題なし • JSとしてのメンテナンスコストはある。
 (コンポーネントが細分化されてないとか) •

    技術的な天井 • リアルタイム通信、ARKitとかそのあたりはネイティブとのブリッジが発⽣して ちょっと渋い • 採⽤⾯ • ネイティブ経験者なら1週間あればできる(てかそのくらいやりましょう)
  14. ͲΜͳػೳͰෆ҆ʹͳΓ΍͍͔͢@

  15. 本番のプロダクトで必要になってくる要件 • UIの機微 • プッシュ通知対応 • ディープリンク対応 • 課⾦処理 とか、ちょっと⼀歩踏み込んだ機能は、⼤変なのでは?という不安があった。

    (結果、⼤丈夫だった。)
  16. 前提条件 • 開発環境 • スタックはTypeScript, MobX • デプロイはFastlane • Expoは動画周りとか課⾦周りとか、ちょっとネイティブモジュール絡んでき

    そうで不安だったので利⽤せず。 • スキルセット • もともとSwift経験あり。Kotlinとかは皆無。 • Reactは超苦⼿意識あったがなんとかなった。
  17. UIの機微 ⼤変だった機能はそんなにない。 けど、以下は調整が必要なことが多かった。 • ナビゲーション表⽰幅のズレ • シャドウ • 画像の⾮同期読み込み •

    フォーム⼊⼒
  18. ナビゲーションバー AndroidとiPhoneで表⽰域が違う。 いつもキモいなと思ってる。

  19. シャドウの調整 シャドウを適⽤したい要素に対して、 影を表⽰したときのmarginの調整や、 iOS⽤にshadowOffset, Radius Android⽤にelevation など、異なるパラメーターが必要。

  20. 画像の⾮同期読み込み 絶対やりますよね。 読み込み速度を常に早くしたい場合、ImageBackgroundではなく、 キャッシュが有効なFastImageを使いたい。 が、背景画像として読み込むとき、FastImageだと プレースホルダーの設定に難があったりする。 読み込み完了イベントを元にstateを愚直に切り替える。

  21. 愚直なコード

  22. フォーム⼊⼒ ⽇本語⼊⼒がv0.56.0とかまで バグってて、変換ができなかった。 v0.54.0くらいまで落とすか、 v0.57.0に上げるかで対応できる。 正直これはマジかよという感じ。

  23. プッシュ通知対応 react-native-firebase使えば恐ろしく早く実装できる。 TokenもFCMTokenで共通化できるし、よほど送信を 意図的に遅延したい場合を除いてFCMで送ればよさそう。 前までFCMはreact-native-fcmで実装するのがデファクトっぽかったけど、 今は公式のreact-native-firebaseで⼗分できる。

  24. 復帰時と 初期起動時の リスナーは分ける。

  25. ディープリンク対応 react-navigationがdeep-linkingの機構を持ってくれてる。 参考: https://reactnavigation.org/docs/en/deep-linking.html#docsNav XCode, Android Studioそれぞれでスキーマ設定をした後、 トップのStackNavigatorにURLPrefixを指定して、 Screenごとにパスを設定すれば、意図したところに⾶べる。

  26. ディープリンク対応 す ご く 実 装 が 少 な い

    。 本 当 に こ れ で い い の か 心 配 に な る 。
  27. 課⾦処理 定期購読型課⾦だけ実装経験あり。 ⾊々ライブラリはあるけど、今はreact-native-iapが良い。 他のライブラリだと⽚⽅のOSしか対応してない、とかがある。

  28. 事前処理 起動時にIAPのインスタンスも 初期化しておく。 購⼊可能なアイテム⼀覧を 最初に取得しておかないと、 あとでエラーになるのが罠。 レシート検証は 個別にAPI実装が必要。

  29. 購⼊処理 buyItemとか buySubscriptionとか 直感的なインターフェースで iOS/Android共に アイテム購⼊ができる。

  30. 本番のプロダクトで必要になってくる要件 • UIの機微 • プッシュ通知対応 • ディープリンク対応 • 課⾦処理 とか、ちょっと⼀歩踏み込んだ機能は、⼤変なのでは?という不安があった。

    (結果、⼤丈夫だった。) だいたい できたのでは?
  31. ·ͱΊ ʼ͍͍ͩͨຊ൪Ͱෆ҆ʹͳΔΑ͏ͳػೳ֦ு͸࣮ݱՄೳ ʼ3FBDU/BUJWFͰදݱՄೳͳػೳΛ௒͑ͨෳࡶੑʹ೰ΜͰΔͷ͔ɺ୯ʹ3FBDU/BUJWFΘ ͔ΒΜ͔Β΋͍ͨͭͯΔͷ͔ɺ͸͖ͬΓ۠ผ͠·͠ΐ͏ɻ ʼϓϩτλΠϓͱ͔ͪͬͪΌ͍ΞϓϦͱ͔࡞ͬͯ΋͠ΐ͏͕ͳ͍ͷͰ࿹ྗΛݟͤΔͷ͕ྑͦ͞͏ ʼӡ༻͋Μ·ਏ͘ͳ্͍ʹ͍͍ͩͨͷΞϓϦͷػೳ͸࣮ݱՄೳͳͷͰɺϓϩτλΠϓͰ͔͠ ࢖͑ͳ͍ͱ͍͏ݴઆ͕ྲྀ෍͢Δͷ͸໪ମແ͍ɻ ʼӡ༻Մೳͳຊ൪ϨϕϧͷϓϩμΫτΛ࡞ͬͯ࿹ྗͰݴઆΛΑ͍ͯ͘͘͠ͱྑͦ͞͏ɻ

  32. ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ