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の
    移行を楽にする
    モバイル勉強会#12
    2023/12/19 久保出雅俊

    View full-size slide

  2. © 2023 Wantedly, Inc.
    wantedly.com/id/kubode
    © 2023 Wantedly, Inc.
    X: @swiz_ard
    GitHub: @kubode

    View full-size slide

  3. © 2023 Wantedly, Inc.
    Data Binding移行終わった人 🙋

    View full-size slide

  4. © 2023 Wantedly, Inc.
    なお弊社
    😇

    View full-size slide

  5. © 2023 Wantedly, Inc.
    移行を楽にする話

    View full-size slide

  6. © 2023 Wantedly, Inc.
    はじめに

    View full-size slide

  7. © 2023 Wantedly, Inc.
    Data Bindingとは
    ● Android公式のライブラリ
    ● XMLにデータのバインディング処理を記述できる
    ● 2015年リリース
    ○ 導入事例は多い認識
    ● 現在はメンテナンスモード
    ○ Composeへの移行を推奨

    View full-size slide

  8. © 2023 Wantedly, Inc.
    なぜ移行する?
    ● 公式にKSPに移行しない表明
    ● KAPT依存しつづける
    ○ ビルド時間に影響
    ○ K2 Compilerに移行できない原因(K2側で解消しつつある)

    View full-size slide

  9. © 2023 Wantedly, Inc.
    移行先
    ● Compose
    ○ 公式が推奨する移行先
    ○ UI作り直しになるため移行コストが高い
    ● View Binding
    ○ Data Bindingから移行しやすいインターフェース
    ○ バインディング処理の再実装は必要

    View full-size slide

  10. © 2023 Wantedly, Inc.
    View Binding
    ● Data Bindingと同じ点
    ○ 生成されるクラス名とパッケージ名
    ○ findViewById/requireViewById不要
    ● 異なる点
    ○ バインディング処理はXMLじゃなくてJava/Kotlinで
    ○ BindingAdapterなどもなし

    View full-size slide

  11. © 2023 Wantedly, Inc.
    View Bindingへの移行

    View full-size slide

  12. © 2023 Wantedly, Inc.
    手作業での移行
    ● まずは1つのXMLを移行してみた
    ○ バインディングしてる箇所を探す(
    android:text=”@{state.text}”)
    ○ Kotlinコードで再実装
    ● バインディング周りがとにかくつらい
    ○ バインディング変数をGETする箇所もある
    ○ 1つのバインディング変数が複数箇所で使われていると脳内メモリを圧迫
    ○ 複雑なバインディング式
    ○ Reflection
    ○ nullabilityの扱いの違い(@{state.text} -> state?.text.orEmpty())

    View full-size slide

  13. © 2023 Wantedly, Inc.
    手作業を減らさないと無理

    View full-size slide

  14. © 2023 Wantedly, Inc.
    ヘルパープラグインの作成
    ● ある程度自動でやってくれるプラグインを作成
    ● 目的は、移行を簡単にすること
    ○ コードの書き換えを最小限に
    ○ Data BindingとView Bindingのインターフェースの近似を活かす
    ○ 実行時パフォーマンスは妥協

    View full-size slide

  15. © 2023 Wantedly, Inc.
    流れ

    View full-size slide

  16. © 2023 Wantedly, Inc.
    プラグイン実行
    ● プラグインを対象モジュールに適用
    ○ apply(MigrateDataBindingToViewBindingPlugin)
    ● タスク実行
    ○ ./gradlew :mymodule:migrateDataBindingToViewBinding

    View full-size slide

  17. © 2023 Wantedly, Inc.
    XMLをピュアに
    ● ある程度自動でやってくれるプラグインを作成
    ○ XMLをピュアなレイアウトXMLに書き換え
    ○ Bindingクラスの拡張
    ■ バインディング変数
    ■ TODOリスト付きのバインド処理関数

    View full-size slide

  18. © 2023 Wantedly, Inc.
    バインディング拡張の生成
    このTODOを解消すればOK!
    バインディング変数だったものを拡
    張プロパティに

    View full-size slide

  19. © 2023 Wantedly, Inc.
    あとは手作業

    View full-size slide

  20. © 2023 Wantedly, Inc.
    あとは手作業
    大抵は、拡張プロパティを importするだけでよい

    View full-size slide

  21. © 2023 Wantedly, Inc.
    まとめ

    View full-size slide

  22. © 2023 Wantedly, Inc.
    まとめ
    ● 苦行がかなり改善された
    ○ バインディング実装やレビューはつらいまま
    ● 属人性が減り再現性のある作業に変わった
    ● Data Binding移行を考えてる人は是非お試しを
    1ヶ月位

    View full-size slide

  23. © 2023 Wantedly, Inc.
    We are hiring!

    View full-size slide