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
610
RIBs でのダイエット
TatsunoriKuri
February 13, 2020
Tweet
Share
More Decks by TatsunoriKuri
See All by TatsunoriKuri
アプリの終活 〜その後〜
kuritatu18
1
2.8k
タクシーアプリ「GO」でApp Clipを使えるようにしてみる 〜Engineer Challenge Weekでの取り組み〜
kuritatu18
0
200
UIKit ベースの大規模なプロジェクトへの SwiftUI 導入
kuritatu18
3
5.9k
アプリの終活
kuritatu18
2
1.6k
Other Decks in Programming
See All in Programming
2分台で1500examples完走!爆速CIを支える環境構築術 - Kaigi on Rails 2025
falcon8823
3
2.9k
XP, Testing and ninja testing ZOZ5
m_seki
2
270
私はどうやって技術力を上げたのか
yusukebe
43
17k
実践AIチャットボットUI実装入門
syumai
7
2.4k
Model Pollution
hschwentner
1
180
AIエージェント時代における TypeScriptスキーマ駆動開発の新たな役割
bicstone
4
1.5k
monorepo の Go テストをはやくした〜い!~最小の依存解決への道のり~ / faster-testing-of-monorepos
convto
2
320
なぜGoのジェネリクスはこの形なのか? Featherweight Goが明かす設計の核心
ryotaros
7
1k
CSC509 Lecture 02
javiergs
PRO
0
400
CI_CD「健康診断」のススメ。現場でのボトルネック特定から、健康診断を通じた組織的な改善手法
teamlab
PRO
0
170
フロントエンド開発に役立つクライアントプログラム共通のノウハウ / Universal client-side programming best practices for frontend development
nrslib
7
3.9k
PostgreSQLで手軽にDuckDBを使う!DuckDB&pg_duckdb入門/osk2025-duckdb
takahashiikki
1
240
Featured
See All Featured
How GitHub (no longer) Works
holman
315
140k
Learning to Love Humans: Emotional Interface Design
aarron
274
40k
A Tale of Four Properties
chriscoyier
160
23k
How to Ace a Technical Interview
jacobian
280
23k
4 Signs Your Business is Dying
shpigford
185
22k
Designing for humans not robots
tammielis
254
25k
Music & Morning Musume
bryan
46
6.8k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Unsuck your backbone
ammeep
671
58k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.1k
Automating Front-end Workflow
addyosmani
1371
200k
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