Slide 1

Slide 1 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs でのダイエット

Slide 2

Slide 2 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved ⾃⼰紹介 2 • Tatsunori Kuri (@kuritatu18) • iOS app Developer • JapanTaxi (2018.9 ~)

Slide 3

Slide 3 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 今⽇話すこと 3 - 1.RIBsとは - 2. 画⾯ が複雑なときのダイエット⽅法 - 3.ロジックが複雑なときのダイエット⽅法 - 4.まとめ

Slide 4

Slide 4 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs との出会い 4 応募 2018.4 2018.6 内定 2018.9.12 2018.9.16 ⼊社 v4リニューアル RIBs 採⽤

Slide 5

Slide 5 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs とは 5

Slide 6

Slide 6 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs とは 6 (https://github.com/uber/RIBs/wiki より)

Slide 7

Slide 7 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs のコンポーネント 7 - Router - RIB のルーティング - Interactor - ビジネスロジックを持つ - View(Presenter) - レイアウト、ユーザー操作の処理

Slide 8

Slide 8 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs のコンポーネント 8 - Builder - RIB内の構成要素 Router, Interactor, ViewController と  ⼦RIB Builderのインスタンス化 - RIB 内部への依存性の注⼊と、RIB 間の依存関係の解決

Slide 9

Slide 9 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIB 内のコミュニケーション 9 Router Interactor View Controller Builder Routing Presentable PresentableListener Build()

Slide 10

Slide 10 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIB のルーティングとライフサイクル 10 Child RIB Router Interactor View Controller Builder Parent RIB Router Interactor View Controller Builder Child RIB の Router を attach

Slide 11

Slide 11 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIB のルーティングとライフサイクル 11 Child RIB Router load() Interactor View Controller Builder Parent RIB Router Interactor View Controller Builder Child RIB の Router を attach

Slide 12

Slide 12 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIB のルーティングとライフサイクル 12 Child RIB Router load() Interactor activate() View Controller Builder Parent RIB Router Interactor View Controller Builder Child RIB の Router を attach

Slide 13

Slide 13 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIB のルーティングとライフサイクル 13 Child RIB Router Interactor View Controller Builder Parent RIB Router Interactor View Controller Builder Child RIB の Router を detach

Slide 14

Slide 14 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIB のルーティングとライフサイクル 14 Child RIB Router Interactor deactivate() View Controller Builder Parent RIB Router Interactor View Controller Builder Child RIB の Router を detach

Slide 15

Slide 15 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIB間のコミュニケーション 15 Child RIB Router Interactor View Controller Builder Parent RIB Router Interactor View Controller Builder Listener経由で 親RIBの処理を呼ぶ

Slide 16

Slide 16 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 16 https://blog.japantaxi.co.jp/2018/12/09/1991

Slide 17

Slide 17 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs の特徴:ツリー構造 17 ※注⽂導線の⼀部抜粋:2020年2⽉6⽇時点

Slide 18

Slide 18 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 18 https://github.com/srea/RIBsTreeViewerClient

Slide 19

Slide 19 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 画⾯が複雑になってきたとき 19

Slide 20

Slide 20 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs × MicroViewController 20

Slide 21

Slide 21 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved MicroViewControllerとは 21 https://www.icloud.com/keynote/0vgTYDXyHQTd0l1FKTiF1jT7g#MicroViewController-en

Slide 22

Slide 22 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved ⼦ViewController の追加 22 - View - StackView

Slide 23

Slide 23 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 利⽤例 23

Slide 24

Slide 24 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 注⽂詳細画⾯ 24

Slide 25

Slide 25 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 注⽂詳細画⾯のViewHierarchy 25

Slide 26

Slide 26 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 注⽂詳細画⾯のViewHierarchy 26

Slide 27

Slide 27 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs × MicroViewController 27 - Builder.build()

Slide 28

Slide 28 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs × MicroViewController 28 - Builder.build()

Slide 29

Slide 29 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs × MicroViewController 29 - Builder.build()

Slide 30

Slide 30 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs × MicroViewController 30 - ViewControllable - Router.Init()

Slide 31

Slide 31 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs × MicroViewController 31 - Router.didLoad()

Slide 32

Slide 32 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs × MicroViewController 32 - Router.didLoad()

Slide 33

Slide 33 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved ViewHierarchy と RIBsツリー 33

Slide 34

Slide 34 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 画⾯全体は複雑でも 1つ1つはスリムになった 34

Slide 35

Slide 35 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved ロジックが複雑になってきたとき 35

Slide 36

Slide 36 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved View の無い RIB に切り出す 36

Slide 37

Slide 37 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved View の無いRIB 37

Slide 38

Slide 38 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved View の無いRIB の追加 38 Owns corresponding view の チェックを外す ViewController の無い RIB が作成される Templete から RIB を選択

Slide 39

Slide 39 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIB の分割前 39 Parent RIB Router Interactor ・処理A ・処理B ・処理C View Controller Builder

Slide 40

Slide 40 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIB の分割後 40 Parent RIB Router Interactor ・処理A View Controller Builder B Child RIB Router Builder Interactor ・処理B C Child RIB Router Builder Interactor ・処理C B Child Listener C Child Listener

Slide 41

Slide 41 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 利⽤例 41

Slide 42

Slide 42 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 乗⾞地選択画⾯ 42

Slide 43

Slide 43 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 乗⾞地選択画⾯の下の部分 43

Slide 44

Slide 44 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved View の無い RIB 44

Slide 45

Slide 45 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved View の無い RIB 45 地図を動かした際の緯度/経度でAPI から住所を取得するRIB

Slide 46

Slide 46 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved View の無い RIB 46 APIから乗⾞の禁⽌エリア取得と禁⽌ エリア内かの判定をするRIB

Slide 47

Slide 47 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved View の無い RIB 47 次の画⾯に必要な情報をAPIから取得 するRIB

Slide 48

Slide 48 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved View の無い RIB 48 View の無いRIBから別のViewのある RIB にルーティングすることもある

Slide 49

Slide 49 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 複雑なロジックを分散することで 1つ1つはスリムになった 49

Slide 50

Slide 50 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved まとめ 50 - 画⾯とロジックの両⾯からダイエットをすることが可能 - ViewController の平均⾏数:154、500⾏超え1つ - Interactorの平均⾏数:141、500⾏超え2つ - 1つ1つの RIB がスリムになる - 責務が明確になる - 追加、修正による影響が最⼩限に - テストが書きやすい

Slide 51

Slide 51 text

Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs とっても良いですよ 51

Slide 52

Slide 52 text

จষɾը૾౳ͷ಺༰ͷແஅసࡌٴͼෳ੡౳ͷߦҝ͸͝ԕྀ͍ͩ͘͞ɻ Proprietary and Confidential ©2020 JapanTaxi, Inc. All Rights Reserved ˟102-0094ɹ౦ژ౎ઍ୅ా۠لඌҪொ3-12 3-12 Kioicho Chiyoda-ku, Tokyo 102-0094 Japan TEL 03-6265-6265ɹFAX 03-3239-8115 www.japantaxi.co.jp