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
Data Bindingの移行を楽にする / Easier migration of Data...
Search
Masatoshi Kubode
December 19, 2023
Programming
0
1.3k
Data Bindingの移行を楽にする / Easier migration of Data Binding
LT at
https://sansan.connpass.com/event/303229/
Masatoshi Kubode
December 19, 2023
Tweet
Share
More Decks by Masatoshi Kubode
See All by Masatoshi Kubode
ウォンテッドリーにおけるモバイルアプリ開発 / iOSDC Japan 2024 Sponsor Session
kubode
1
340
Jetpack ComposeのBottomSheetとの戦い / Fight with BottomSheet of Jetpack Compose
kubode
0
210
Mobile Chapterが目指すところと技術 / Vision and Technology of Mobile Chapter at Wantedly
kubode
0
240
ウォンテッドリーでのKMPワークフロー / KMP workflow at Wantedly
kubode
0
1.4k
ComposeでのShared Element Transition / Shared Element Transition in Compose
kubode
0
390
K2への完全移行結果 / Results of complete migration to K2
kubode
2
5.6k
Compose Shadow Alternative
kubode
0
330
アイコンをComposeにする / Compose the Icons
kubode
0
490
デザインシステムのCompose実装 / Design system Compose implementation
kubode
0
560
Other Decks in Programming
See All in Programming
ROS 2のZenoh対応とZenohのROS 2対応
takasehideki
2
290
Cohesion in Modeling and Design
mploed
3
190
DjangoNinjaで高速なAPI開発を実現する
masaya00
0
500
선언형 UI를 학습할 때 알아둬야하는 키워드들
l2hyunwoo
0
130
.NET Aspireのクラウド対応検証: Azureと他環境での実践
ymd65536
1
390
dbt-ga4パッケージを実業務に導入してみた話
t_tokumaru_feedcorp
0
120
Progressive Web Apps for Rails developers
siaw23
2
540
ビット演算の話 / Let's play with bit operations
kaityo256
PRO
4
170
Infrastructure as Code でセキュリティを楽にしよう!
konokenj
6
1.4k
Removing Corepack
yosuke_furukawa
PRO
9
1.1k
VS Code extension: ドラッグ&ドロップでファイルを並び替える
ttrace
0
160
個人開発で使ってるやつを紹介する回
yohfee
1
690
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
459
32k
Bootstrapping a Software Product
garrettdimon
PRO
304
110k
StorybookのUI Testing Handbookを読んだ
zakiyama
26
5.1k
VelocityConf: Rendering Performance Case Studies
addyosmani
324
23k
Documentation Writing (for coders)
carmenintech
65
4.3k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
92
16k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
24
1.7k
Pencils Down: Stop Designing & Start Developing
hursman
119
11k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
663
120k
GraphQLの誤解/rethinking-graphql
sonatard
65
9.9k
How to name files
jennybc
77
99k
Transcript
© 2023 Wantedly, Inc. Data Bindingの 移行を楽にする モバイル勉強会#12 2023/12/19 久保出雅俊
© 2023 Wantedly, Inc. wantedly.com/id/kubode © 2023 Wantedly, Inc. X:
@swiz_ard GitHub: @kubode
© 2023 Wantedly, Inc. Data Binding移行終わった人 🙋
© 2023 Wantedly, Inc. なお弊社 😇
© 2023 Wantedly, Inc. 移行を楽にする話
© 2023 Wantedly, Inc. はじめに
© 2023 Wantedly, Inc. Data Bindingとは • Android公式のライブラリ • XMLにデータのバインディング処理を記述できる
• 2015年リリース ◦ 導入事例は多い認識 • 現在はメンテナンスモード ◦ Composeへの移行を推奨
© 2023 Wantedly, Inc. なぜ移行する? • 公式にKSPに移行しない表明 • KAPT依存しつづける ◦
ビルド時間に影響 ◦ K2 Compilerに移行できない原因(K2側で解消しつつある)
© 2023 Wantedly, Inc. 移行先 • Compose ◦ 公式が推奨する移行先 ◦
UI作り直しになるため移行コストが高い • View Binding ◦ Data Bindingから移行しやすいインターフェース ◦ バインディング処理の再実装は必要
© 2023 Wantedly, Inc. View Binding • Data Bindingと同じ点 ◦
生成されるクラス名とパッケージ名 ◦ findViewById/requireViewById不要 • 異なる点 ◦ バインディング処理はXMLじゃなくてJava/Kotlinで ◦ BindingAdapterなどもなし
© 2023 Wantedly, Inc. View Bindingへの移行
© 2023 Wantedly, Inc. 手作業での移行 • まずは1つのXMLを移行してみた ◦ バインディングしてる箇所を探す( android:text=”@{state.text}”)
◦ Kotlinコードで再実装 • バインディング周りがとにかくつらい ◦ バインディング変数をGETする箇所もある ◦ 1つのバインディング変数が複数箇所で使われていると脳内メモリを圧迫 ◦ 複雑なバインディング式 ◦ Reflection ◦ nullabilityの扱いの違い(@{state.text} -> state?.text.orEmpty())
© 2023 Wantedly, Inc. 手作業を減らさないと無理
© 2023 Wantedly, Inc. ヘルパープラグインの作成 • ある程度自動でやってくれるプラグインを作成 • 目的は、移行を簡単にすること ◦
コードの書き換えを最小限に ◦ Data BindingとView Bindingのインターフェースの近似を活かす ◦ 実行時パフォーマンスは妥協
© 2023 Wantedly, Inc. 流れ
© 2023 Wantedly, Inc. プラグイン実行 • プラグインを対象モジュールに適用 ◦ apply(MigrateDataBindingToViewBindingPlugin) •
タスク実行 ◦ ./gradlew :mymodule:migrateDataBindingToViewBinding
© 2023 Wantedly, Inc. XMLをピュアに • ある程度自動でやってくれるプラグインを作成 ◦ XMLをピュアなレイアウトXMLに書き換え ◦
Bindingクラスの拡張 ▪ バインディング変数 ▪ TODOリスト付きのバインド処理関数
© 2023 Wantedly, Inc. バインディング拡張の生成 このTODOを解消すればOK! バインディング変数だったものを拡 張プロパティに
© 2023 Wantedly, Inc. あとは手作業
© 2023 Wantedly, Inc. あとは手作業 大抵は、拡張プロパティを importするだけでよい
© 2023 Wantedly, Inc. まとめ
© 2023 Wantedly, Inc. まとめ • 苦行がかなり改善された ◦ バインディング実装やレビューはつらいまま •
属人性が減り再現性のある作業に変わった • Data Binding移行を考えてる人は是非お試しを 1ヶ月位
© 2023 Wantedly, Inc. We are hiring!