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
2.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
ウォンテッドリーの「ココロオドル」モバイル開発 / Wantedly's "kokoro odoru" mobile development
kubode
2
1.1k
Firebase Dynamic Linksの代替手段を自作する / Create your own Firebase Dynamic Links alternative
kubode
0
570
技術を根付かせる / How to make technology take root
kubode
1
400
WantedlyでのKotlin Multiplatformの導入と課題 / Kotlin Multiplatform Implementation and Challenges at Wantedly
kubode
0
510
Google Play Consoleデベロッパー アカウントの確認 / Verifying your Play Console developer account
kubode
1
1.3k
Make your Android app into Multiplatform app
kubode
0
180
ウォンテッドリーにおけるモバイルアプリ開発 / iOSDC Japan 2024 Sponsor Session
kubode
1
1.2k
Jetpack ComposeのBottomSheetとの戦い / Fight with BottomSheet of Jetpack Compose
kubode
0
930
Mobile Chapterが目指すところと技術 / Vision and Technology of Mobile Chapter at Wantedly
kubode
0
380
Other Decks in Programming
See All in Programming
AkarengaLT vol.38
hashimoto_kei
1
120
ソフトウェア設計の実践的な考え方
masuda220
PRO
4
630
contribution to astral-sh/uv
shunsock
0
500
Claude CodeによるAI駆動開発の実践 〜そこから見えてきたこれからのプログラミング〜
iriikeita
0
320
フロントエンド開発のためのブラウザ組み込みAI入門
masashi
7
3.4k
PHPに関数型の魂を宿す〜PHP 8.5 で実現する堅牢なコードとは〜 #phpcon_hiroshima / phpcon-hiroshima-2025
shogogg
1
330
Android16 Migration Stories ~Building a Pattern for Android OS upgrades~
reoandroider
0
130
Devvox Belgium - Agentic AI Patterns
kdubois
1
140
AI駆動で0→1をやって見えた光と伸びしろ
passion0102
1
800
チームの境界をブチ抜いていけ
tokai235
0
210
Server Side Kotlin Meetup vol.16: 内部動作を理解して ハイパフォーマンスなサーバサイド Kotlin アプリケーションを書こう
ternbusty
3
240
スマホから Youtube Shortsを見られないようにする
lemolatoon
27
33k
Featured
See All Featured
Site-Speed That Sticks
csswizardry
13
920
Automating Front-end Workflow
addyosmani
1371
200k
Bash Introduction
62gerente
615
210k
What's in a price? How to price your products and services
michaelherold
246
12k
Keith and Marios Guide to Fast Websites
keithpitt
411
23k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
Reflections from 52 weeks, 52 projects
jeffersonlam
353
21k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Visualization
eitanlees
149
16k
The Illustrated Children's Guide to Kubernetes
chrisshort
49
51k
Building an army of robots
kneath
305
46k
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!