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

Jetpack Composeを導入して 見えた利点と課題

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

Jetpack Composeを導入して 見えた利点と課題

Avatar for ニフティ株式会社

ニフティ株式会社 PRO

September 26, 2022
Tweet

Video


Resources

NIFTY Tech Talk #5 iOS/Androidアプリ開発LT

https://nifty.connpass.com/event/259697/

More Decks by ニフティ株式会社

Other Decks in Programming

Transcript

  1. Copyright © NIFTY Corporation All Rights Reserved.
 About Me
 2


    山田 良介 会員システムグループ 第1開発チーム • @search 開発運用 / Androidアプリ全般 開発補助 • マイ ニフティ チーム内テックリード
  2. Copyright © NIFTY Corporation All Rights Reserved.
 マイ ニフティ
 3


    「気になる」をすばやく確認 ニフティ会員様向けアプリ 料金・ポイント確認などよく利用する機能を提供 接続回線開通前の状況確認も iOS版 2021年12月リリース Android版 2022年3月リリース
  3. Copyright © NIFTY Corporation All Rights Reserved.
 Android版 実装前の社内課題
 4


    10年前から変わらない基本設計 主なAndroid開発部隊が子会社へ分離 Android開発自体が後回しに 最新の技術標準を積極的に取り入れ 社内アプリの足がかりとしたい
  4. Copyright © NIFTY Corporation All Rights Reserved.
 主な技術スタック
 5
 従来

    マイ ニフティ 言語 Java Kotlin UI View XML Jetpack Compose 画面遷移 FragmentTransaction Jetpack Compose Navigation 非同期処理 Volley Kotlin Coroutines / Flow / Retrofit JSON処理 Gson Kotlinx Serialization ローカル永続化 preference / sqlite DataStore / Room DI なし Hilt
  5. Copyright © NIFTY Corporation All Rights Reserved.
 Jetpack Compose
 6


    • 2021年に登場したばかりの宣言的UIツールキット • UIにXMLを使わず、全てKotlinの関数で定義 • 状態に応じたUI表示を定義するだけで良い ◦ 差分更新はComposeが自動的に行う
  6. Copyright © NIFTY Corporation All Rights Reserved.
 良かったこと
 8
 •

    UIコーディングが爆速 ◦ 記述がシンプル ◦ レイアウトのネストの深さを気にする必要がない ◦ リスト部分のコード量が激減 • Reactに近い開発体験 ◦ 書き味がほぼReact(Hooks) ◦ Storybookのように使っていけるPreview • 公式ドキュメントの充実 ◦ Pathway・公式サンプルで十分な知識が得られる
  7. Copyright © NIFTY Corporation All Rights Reserved.
 考慮事項
 12
 •

    コーディングルールは決めておいた方が良い ◦ classでない分、個人による差異が出がち ◦ 例: ▪ ディレクトリ構造・命名規則 ▪ 引数順 ▪ プレビューを行う単位 • Reactに慣れておくとベター ◦ コンポーネント分割などの参考に
  8. Copyright © NIFTY Corporation All Rights Reserved.
 考慮事項
 13
 •

    Accompanistでの補助が現状は必要 ◦ https://github.com/google/accompanist ◦ 公式composeライブラリで足りない機能を補う ◦ 例: ▪ Pager (ViewPager) ▪ Swipe to Refresh (SwipeRefreshLayout) ▪ Navigation Animation
  9. Copyright © NIFTY Corporation All Rights Reserved.
 微妙なところ
 15
 •

    画面遷移(Navigation)が辛い ◦ すべてがstring ◦ 遷移アニメーションが不自然 • AppBarの取り扱いが難しい ◦ ページ側からAppBarを操作できない • Viewが混じると辛い ◦ 例: Nested Scroll
  10. Copyright © NIFTY Corporation All Rights Reserved.
 18
 Jetpack Navigation

    自動生成クラスで遷移先を担保 • ビルド時に安全性が担保される
  11. Copyright © NIFTY Corporation All Rights Reserved.
 画面遷移(Navigation)
 19
 Compose

    Navigation ナビゲーション用Composable 遷移コード
  12. Copyright © NIFTY Corporation All Rights Reserved.
 画面遷移(Navigation)
 20
 Compose

    Navigation 遷移先を文字列で指定 • ビルド時の保証はない • リファクタリングに弱い
  13. Copyright © NIFTY Corporation All Rights Reserved.
 遷移時の引数
 22
 XMLで遷移Actionに対して引数を定義

    • 自動生成クラスで型安全性が担保される • 実装としてはBundle Jetpack Navigation
  14. Copyright © NIFTY Corporation All Rights Reserved.
 遷移時の引数
 23
 Compose

    Navigation ナビゲーション用Composable 遷移コード
  15. Copyright © NIFTY Corporation All Rights Reserved.
 遷移時の引数
 24
 Compose

    Navigation 画面に対してURL文字列で指定 • ビルド時に型安全性が担保されない • シリアライズ・デシリアライズを自前で行う必要あり ◦ URLエスケープ ◦ バイナリのBASE64変換
  16. Copyright © NIFTY Corporation All Rights Reserved.
 まとめ
 26
 •

    Jetpack Composeは開発速度向上に効果あり ◦ コード量(特にリスト)の低減 ◦ 新人の入りやすさ • Navigation周りには正直難あり ◦ 画面遷移は従来通りActivityとFragmentで行うのも一手 ◦ 無理にFull Jetpack Composeにする必要はない