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
RIBs でのダイエット
Search
TatsunoriKuri
February 13, 2020
Programming
1
580
RIBs でのダイエット
TatsunoriKuri
February 13, 2020
Tweet
Share
More Decks by TatsunoriKuri
See All by TatsunoriKuri
アプリの終活 〜その後〜
kuritatu18
1
2.3k
タクシーアプリ「GO」でApp Clipを使えるようにしてみる 〜Engineer Challenge Weekでの取り組み〜
kuritatu18
0
180
UIKit ベースの大規模なプロジェクトへの SwiftUI 導入
kuritatu18
3
5.3k
アプリの終活
kuritatu18
2
1.5k
Other Decks in Programming
See All in Programming
Honoをフロントエンドで使う 3つのやり方
yusukebe
7
3.6k
CDKを使ったPagerDuty連携インフラのテンプレート化
shibuya_shogo
0
110
ABEMA iOS 大規模プロジェクトにおける段階的な技術刷新 / ABEMA iOS Technology Upgrade
akkyie
1
220
Kotlinの開発でも AIをいい感じに使いたい / Making the Most of AI in Kotlin Development
kohii00
5
1.4k
第3回関東Kaggler会_AtCoderはKaggleの役に立つ
chettub
3
1.2k
From the Wild into the Clouds - Laravel Meetup Talk
neverything
0
170
PHPカンファレンス名古屋2025 タスク分解の試行錯誤〜レビュー負荷を下げるために〜
soichi
1
730
AWS Step Functions は CDK で書こう!
konokenj
4
690
ソフトウェアエンジニアの成長
masuda220
PRO
12
2.1k
ファインディLT_ポケモン対戦の定量的分析
fufufukakaka
0
940
コミュニティ駆動 AWS CDK ライブラリ「Open Constructs Library」 / community-cdk-library
gotok365
2
250
お前もAI鬼にならないか?👹Bolt & Cursor & Supabase & Vercelで人間をやめるぞ、ジョジョー!👺
taishiyade
7
4.2k
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.1k
Java REST API Framework Comparison - PWX 2021
mraible
29
8.4k
Navigating Team Friction
lara
183
15k
Building a Scalable Design System with Sketch
lauravandoore
461
33k
A better future with KSS
kneath
238
17k
Making Projects Easy
brettharned
116
6k
Into the Great Unknown - MozCon
thekraken
35
1.6k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.3k
Large-scale JavaScript Application Architecture
addyosmani
511
110k
Build The Right Thing And Hit Your Dates
maggiecrowley
34
2.5k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
We Have a Design System, Now What?
morganepeng
51
7.4k
Transcript
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs
でのダイエット
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved ⾃⼰紹介
2 • Tatsunori Kuri (@kuritatu18) • iOS app Developer • JapanTaxi (2018.9 ~)
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 今⽇話すこと
3 - 1.RIBsとは - 2. 画⾯ が複雑なときのダイエット⽅法 - 3.ロジックが複雑なときのダイエット⽅法 - 4.まとめ
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs
との出会い 4 応募 2018.4 2018.6 内定 2018.9.12 2018.9.16 ⼊社 v4リニューアル RIBs 採⽤
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs
とは 5
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs
とは 6 (https://github.com/uber/RIBs/wiki より)
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs
のコンポーネント 7 - Router - RIB のルーティング - Interactor - ビジネスロジックを持つ - View(Presenter) - レイアウト、ユーザー操作の処理
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs
のコンポーネント 8 - Builder - RIB内の構成要素 Router, Interactor, ViewController と ⼦RIB Builderのインスタンス化 - RIB 内部への依存性の注⼊と、RIB 間の依存関係の解決
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIB
内のコミュニケーション 9 Router Interactor View Controller Builder Routing Presentable PresentableListener Build()
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
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
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
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
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
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の処理を呼ぶ
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 16
https://blog.japantaxi.co.jp/2018/12/09/1991
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs
の特徴:ツリー構造 17 ※注⽂導線の⼀部抜粋:2020年2⽉6⽇時点
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 18
https://github.com/srea/RIBsTreeViewerClient
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 画⾯が複雑になってきたとき
19
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs
× MicroViewController 20
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved MicroViewControllerとは
21 https://www.icloud.com/keynote/0vgTYDXyHQTd0l1FKTiF1jT7g#MicroViewController-en
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved ⼦ViewController
の追加 22 - View - StackView
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 利⽤例
23
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 注⽂詳細画⾯
24
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 注⽂詳細画⾯のViewHierarchy
25
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 注⽂詳細画⾯のViewHierarchy
26
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs
× MicroViewController 27 - Builder.build()
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs
× MicroViewController 28 - Builder.build()
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs
× MicroViewController 29 - Builder.build()
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs
× MicroViewController 30 - ViewControllable - Router.Init()
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs
× MicroViewController 31 - Router.didLoad()
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs
× MicroViewController 32 - Router.didLoad()
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved ViewHierarchy
と RIBsツリー 33
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 画⾯全体は複雑でも
1つ1つはスリムになった 34
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved ロジックが複雑になってきたとき
35
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved View
の無い RIB に切り出す 36
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved View
の無いRIB 37
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved View
の無いRIB の追加 38 Owns corresponding view の チェックを外す ViewController の無い RIB が作成される Templete から RIB を選択
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIB
の分割前 39 Parent RIB Router Interactor ・処理A ・処理B ・処理C View Controller Builder
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
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 利⽤例
41
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 乗⾞地選択画⾯
42
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 乗⾞地選択画⾯の下の部分
43
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved View
の無い RIB 44
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved View
の無い RIB 45 地図を動かした際の緯度/経度でAPI から住所を取得するRIB
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved View
の無い RIB 46 APIから乗⾞の禁⽌エリア取得と禁⽌ エリア内かの判定をするRIB
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved View
の無い RIB 47 次の画⾯に必要な情報をAPIから取得 するRIB
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved View
の無い RIB 48 View の無いRIBから別のViewのある RIB にルーティングすることもある
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved 複雑なロジックを分散することで
1つ1つはスリムになった 49
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved まとめ
50 - 画⾯とロジックの両⾯からダイエットをすることが可能 - ViewController の平均⾏数:154、500⾏超え1つ - Interactorの平均⾏数:141、500⾏超え2つ - 1つ1つの RIB がスリムになる - 責務が明確になる - 追加、修正による影響が最⼩限に - テストが書きやすい
Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved RIBs
とっても良いですよ 51
จষɾը૾ͷ༰ͷແஅసࡌٴͼෳͷߦҝ͝ԕྀ͍ͩ͘͞ɻ 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