Slide 1

Slide 1 text

DMM MEETUP #26 React Native Swift ⼤⾨弘明 で書かれたアプリを で書き直しています

Slide 2

Slide 2 text

⾃⼰紹介 About me ⼤⾨弘明 合同会社DMM.COM エンターテインメント本部 オンラインサロン事業部 2014年: 新卒⼊社 いくつかのiOSアプリの保守や新規開発をするなど 2020年: オンラインサロン事業部にジョイン 主にiOSアプリを担当している

Slide 3

Slide 3 text

⽇ すこと A brief outline 僕にとって React Native はつらい React Native to Swift は つらいが 理ではない ↑のような気持ちと の

Slide 4

Slide 4 text

僕にとってReactNativeはつらい

Slide 5

Slide 5 text

ライブ オーナーから 知 タイムライン Product 専⽤コミュニティアプリ 「DMM オンラインサロン専⽤コミュニティ」 を⽤いたサロンの 員専⽤のiOS アプリ。

Slide 6

Slide 6 text

つらいこと React Native が負債に アップデートがしんどい

Slide 7

Slide 7 text

アップデートがしんどい そもそもしんどい Apple に従う ( OS, ATS, UIWebView...) これはどのみちつきまとう ReactNative のアップデートがしんどい Xcode, RN, ライブラリ すべて動作するように 性のなくなるライブラリがある 式じゃないからRN ⾃体が いで、ライブラリはさらに そもそも僕は React Native がわからない Web フロントの技 は専⾨ アロー , スプレッド構 を ⽤した の羅列つらい

Slide 8

Slide 8 text

React Native が負債に iOS / Swift / JS / React Native すべての い理 が必 当 はフロントエンドエンジニア主 で開発 iOS エンジニアがいなかった当時としてはベストな 択 iOS エンジニアを れてスピード/ 品 Up るが・・・ 度は JS, React Native が⾜かせに 得 野を⽣かせずつらい React Native を利⽤している 味はあまりない iOS のみ このまま使い けていくとデメリットの に苦しめられる

Slide 9

Slide 9 text

つらいこと React Native のアップデート もするからしんどい iOS エンジニアがJOIN したが スピードを し切れない →Swift化して負債脱却しよう! React Native が負債に アップデートがしんどい

Slide 10

Slide 10 text

React Native → Swift は つらいが 理ではない React Native → Swift

Slide 11

Slide 11 text

Swift の流れ Xcode, React Native を に Swift 基 を作る 的に Swift する

Slide 12

Slide 12 text

Swift の流れ Xcode, React Native を に Swift 基 を作る 的に Swift する

Slide 13

Slide 13 text

Xcode, React Native を に まずはビルドできるように Xcode と React Native を にしてビルドが るまでエラーを り いていく → ひたすらトライアンドエラー npm のライブラリが していない場 npm の ライブラリがアップデートできない場 がある アップデートすると動作が保 できないやつ のXcode, React Native に していないやつ PR 状 でマージされてないやつ → patch-package を利⽤する

Slide 14

Slide 14 text

patch-package npm でインストールしたライブラリに パッチを当ててくれるツール https://github.com/ds300/patch-package ネイティブ にも利⽤可 Objectice-C(.m) ファイル や podspec ファイル等も 正できる

Slide 15

Slide 15 text

patch-package 例: Podspec のReact だけ 正したい場 Xcode12 でビルドするために React を React-Core に 更する必 があった。

Slide 16

Slide 16 text

Swift の流れ Xcode, React Native を に ビルドが るまでエラーを り いていく npm のライブラリが していない場 patch-package を利⽤して 正 Swift 基 を作る 的に Swift する

Slide 17

Slide 17 text

Swift の流れ Xcode, React Native を に ビルドが るまでエラーを り いていく npm のライブラリが していない場 patch-package を利⽤して 正 Swift 基 を作る 的に Swift する

Slide 18

Slide 18 text

内 奨アーキテクチャ VIPER ライクの 内 奨アーキテクチャを採⽤して 技 の流動 を る React Native も1 つのモジュールとして利⽤ マルチモジュール で いずれ消えゆく React Native も1 つのモジュールとして、 ネイティブに ⾏した や ⾯からは しないように で る

Slide 19

Slide 19 text

Presenter⾃体は 状態を持たない Interacterは機能の呼び出しや ドメインの取得を⾏う

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

画⾯や機能のまとまりごとにFeatureモジュールを作る 画⾯や機能のまとまりごとにFeatureモジュールを作る ReactNative部分は1つのFeatureとしてモジュール化する ReactNative部分は1つのFeatureとしてモジュール化する

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

RN と Swift 間のやりとり Pub/Sub メッセージングモデル イベントを 知するSubject(Combine) 流れるのはイベントのオブジェクト(enum) Swift へのメッセージ ⽤のメソッドはRN 側に 開 RN へのメッセージ ⽤のメソッド イベントオブジェクト(enum) を Dictionary に してRN に 知 処理 にI/F を やしていくのは けたい I/F を やすには ObjC のコーディング ( マクロ 義) も必 メソッド に やしていくのはしんどい

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

コードの⼀ receivedEvent(受信⽤) notifyToRN(送信⽤) Swift側からは、 を意識すればよい

Slide 26

Slide 26 text

Swift の流れ Xcode, React Native を に ビルドが るまでエラーを り いていく npm のライブラリが していない場 patch-package を利⽤して 正 的に Swift する Swift 基 を作る 内の 奨アーキテクチャで技 の流動 マルチモジュールで を る Pub/Sub で RN <-> SWift を簡 に

Slide 27

Slide 27 text

Swift の流れ Xcode, React Native を に ビルドが るまでエラーを り いていく npm のライブラリが していない場 patch-package を利⽤して 正 的に Swift する Swift 基 を作る 内の 奨アーキテクチャで技 の流動 マルチモジュールで を る Pub/Sub で RN <-> SWift を簡 に

Slide 28

Slide 28 text

的に Swift する 範囲の ない末 の ⾯からSwift 中で中 して の開発とかもあるかもしれない Swift が に ⾏せずともアプリはリリースできる状 に Swift → RN → Swift → RN となる はしない 単 にコントロールが しい が になる

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

第2弾 第3弾 ... 第1弾

Slide 31

Slide 31 text

Swift の流れ Xcode, React Native を に ビルドが るまでエラーを り いていく npm のライブラリが していない場 patch-package を利⽤して 正 Swift 基 を作る 内の 奨アーキテクチャで技 の流動 マルチモジュールで を る Pub/Sub で RN <-> SWift を簡 に 的に Swift する 範囲の ない末 の ⾯からSwift

Slide 32

Slide 32 text

まとめ 僕にとって React Native はつらい アップデートがしんどい ReactNative が負債 React Native → Swift はつらいが 理ではない patch-package を利⽤して未 のライブラリ 正 マルチモジュール で を に Pub/Sub メッセージングモデル で RN<-> Swift 間のを簡 に 範囲の ない末 の ⾯からSwift

Slide 33

Slide 33 text

おわり