Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Data Bindingの移行を楽にする / Easier migration of Data Binding

Data Bindingの移行を楽にする / Easier migration of Data Binding

Masatoshi Kubode

December 19, 2023
Tweet

More Decks by Masatoshi Kubode

Other Decks in Programming

Transcript

  1. © 2023 Wantedly, Inc. Data Bindingとは • Android公式のライブラリ • XMLにデータのバインディング処理を記述できる

    • 2015年リリース ◦ 導入事例は多い認識 • 現在はメンテナンスモード ◦ Composeへの移行を推奨
  2. © 2023 Wantedly, Inc. なぜ移行する? • 公式にKSPに移行しない表明 • KAPT依存しつづける ◦

    ビルド時間に影響 ◦ K2 Compilerに移行できない原因(K2側で解消しつつある)
  3. © 2023 Wantedly, Inc. 移行先 • Compose ◦ 公式が推奨する移行先 ◦

    UI作り直しになるため移行コストが高い • View Binding ◦ Data Bindingから移行しやすいインターフェース ◦ バインディング処理の再実装は必要
  4. © 2023 Wantedly, Inc. View Binding • Data Bindingと同じ点 ◦

    生成されるクラス名とパッケージ名 ◦ findViewById/requireViewById不要 • 異なる点 ◦ バインディング処理はXMLじゃなくてJava/Kotlinで ◦ BindingAdapterなどもなし
  5. © 2023 Wantedly, Inc. 手作業での移行 • まずは1つのXMLを移行してみた ◦ バインディングしてる箇所を探す( android:text=”@{state.text}”)

    ◦ Kotlinコードで再実装 • バインディング周りがとにかくつらい ◦ バインディング変数をGETする箇所もある ◦ 1つのバインディング変数が複数箇所で使われていると脳内メモリを圧迫 ◦ 複雑なバインディング式 ◦ Reflection ◦ nullabilityの扱いの違い(@{state.text} -> state?.text.orEmpty())
  6. © 2023 Wantedly, Inc. ヘルパープラグインの作成 • ある程度自動でやってくれるプラグインを作成 • 目的は、移行を簡単にすること ◦

    コードの書き換えを最小限に ◦ Data BindingとView Bindingのインターフェースの近似を活かす ◦ 実行時パフォーマンスは妥協
  7. © 2023 Wantedly, Inc. まとめ • 苦行がかなり改善された ◦ バインディング実装やレビューはつらいまま •

    属人性が減り再現性のある作業に変わった • Data Binding移行を考えてる人は是非お試しを 1ヶ月位