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
Jetpack Composeを導入して 見えた利点と課題
Search
ニフティ株式会社
PRO
September 26, 2022
Video
Resources
Programming
0
350
Jetpack Composeを導入して 見えた利点と課題
ニフティ株式会社
PRO
September 26, 2022
Tweet
Share
Video
Resources
NIFTY Tech Talk #5 iOS/Androidアプリ開発LT
https://nifty.connpass.com/event/259697/
More Decks by ニフティ株式会社
See All by ニフティ株式会社
AWS AppSyncを用いた GraphQL APIの開発について - NIFTY Tech Talk #22
niftycorp
PRO
0
78
「天気予報があなたに届けられるまで」 - NIFTY Tech Talk #22
niftycorp
PRO
0
87
@nifty天気予報:フルリニューアルの挑戦 - NIFTY Tech Talk #22
niftycorp
PRO
0
84
@nifty天気予報のフロントエンドを 実装するまで - NIFTY Tech Talk #22
niftycorp
PRO
0
84
Application Signalsで始めるSLO ユーザー満足度を数値化する第一歩
niftycorp
PRO
2
230
FourKeysを導入したが生産性向上には至らなかった理由
niftycorp
PRO
1
67
モニタリングダッシュボード に表示しておきたい情報 / NIFTY Tech Talk #21
niftycorp
PRO
1
100
PagerDutyを導入して変わったシステム運用とこれから / NIFTY Tech Talk #21
niftycorp
PRO
1
110
ゼロからボトムアップで始めるインナーソース ニフティのリアル事例 - InnerSource Gathering Tokyo 2024
niftycorp
PRO
2
250
Other Decks in Programming
See All in Programming
WebフロントエンドにおけるGraphQL(あるいはバックエンドのAPI)との向き合い方 / #241106_plk_frontend
izumin5210
4
1.4k
Jakarta EE meets AI
ivargrimstad
0
150
Better Code Design in PHP
afilina
PRO
0
130
Duckdb-Wasmでローカルダッシュボードを作ってみた
nkforwork
0
130
subpath importsで始めるモック生活
10tera
0
320
Click-free releases & the making of a CLI app
oheyadam
2
120
Ethereum_.pdf
nekomatu
0
470
TypeScript Graph でコードレビューの心理的障壁を乗り越える
ysk8hori
2
1.2k
macOS でできる リアルタイム動画像処理
biacco42
9
2.4k
Webの技術スタックで マルチプラットフォームアプリ開発を可能にするElixirDesktopの紹介
thehaigo
2
1k
Tauriでネイティブアプリを作りたい
tsucchinoko
0
370
Quine, Polyglot, 良いコード
qnighy
4
650
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
133
8.9k
Building an army of robots
kneath
302
43k
A better future with KSS
kneath
238
17k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Testing 201, or: Great Expectations
jmmastey
38
7.1k
Designing the Hi-DPI Web
ddemaree
280
34k
How to Think Like a Performance Engineer
csswizardry
20
1.1k
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
Building Applications with DynamoDB
mza
90
6.1k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
Transcript
Copyright © NIFTY Corporation All Rights Reserved. Jetpack Composeを導入して 見えた利点と課題
山田良介 2022/09/26
Copyright © NIFTY Corporation All Rights Reserved. About Me 2
山田 良介 会員システムグループ 第1開発チーム • @search 開発運用 / Androidアプリ全般 開発補助 • マイ ニフティ チーム内テックリード
Copyright © NIFTY Corporation All Rights Reserved. マイ ニフティ 3
「気になる」をすばやく確認 ニフティ会員様向けアプリ 料金・ポイント確認などよく利用する機能を提供 接続回線開通前の状況確認も iOS版 2021年12月リリース Android版 2022年3月リリース
Copyright © NIFTY Corporation All Rights Reserved. Android版 実装前の社内課題 4
10年前から変わらない基本設計 主なAndroid開発部隊が子会社へ分離 Android開発自体が後回しに 最新の技術標準を積極的に取り入れ 社内アプリの足がかりとしたい
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
Copyright © NIFTY Corporation All Rights Reserved. Jetpack Compose 6
• 2021年に登場したばかりの宣言的UIツールキット • UIにXMLを使わず、全てKotlinの関数で定義 • 状態に応じたUI表示を定義するだけで良い ◦ 差分更新はComposeが自動的に行う
良かったこと
Copyright © NIFTY Corporation All Rights Reserved. 良かったこと 8 •
UIコーディングが爆速 ◦ 記述がシンプル ◦ レイアウトのネストの深さを気にする必要がない ◦ リスト部分のコード量が激減 • Reactに近い開発体験 ◦ 書き味がほぼReact(Hooks) ◦ Storybookのように使っていけるPreview • 公式ドキュメントの充実 ◦ Pathway・公式サンプルで十分な知識が得られる
Copyright © NIFTY Corporation All Rights Reserved. 例: リストの場合 9
Android View Layout XML RecyclerView.Adapter
Copyright © NIFTY Corporation All Rights Reserved. 例: リストの場合 10
Compose リスト要素Composable リストComposable
Copyright © NIFTY Corporation All Rights Reserved. プレビューも容易 11
Copyright © NIFTY Corporation All Rights Reserved. 考慮事項 12 •
コーディングルールは決めておいた方が良い ◦ classでない分、個人による差異が出がち ◦ 例: ▪ ディレクトリ構造・命名規則 ▪ 引数順 ▪ プレビューを行う単位 • Reactに慣れておくとベター ◦ コンポーネント分割などの参考に
Copyright © NIFTY Corporation All Rights Reserved. 考慮事項 13 •
Accompanistでの補助が現状は必要 ◦ https://github.com/google/accompanist ◦ 公式composeライブラリで足りない機能を補う ◦ 例: ▪ Pager (ViewPager) ▪ Swipe to Refresh (SwipeRefreshLayout) ▪ Navigation Animation
微妙なところ
Copyright © NIFTY Corporation All Rights Reserved. 微妙なところ 15 •
画面遷移(Navigation)が辛い ◦ すべてがstring ◦ 遷移アニメーションが不自然 • AppBarの取り扱いが難しい ◦ ページ側からAppBarを操作できない • Viewが混じると辛い ◦ 例: Nested Scroll
Copyright © NIFTY Corporation All Rights Reserved. 例 16 1画面移動するだけの
シンプルな画面遷移
Copyright © NIFTY Corporation All Rights Reserved. 画面遷移(Navigation) 17 Jetpack
Navigation Navigation XML 遷移コード
Copyright © NIFTY Corporation All Rights Reserved. 18 Jetpack Navigation
自動生成クラスで遷移先を担保 • ビルド時に安全性が担保される
Copyright © NIFTY Corporation All Rights Reserved. 画面遷移(Navigation) 19 Compose
Navigation ナビゲーション用Composable 遷移コード
Copyright © NIFTY Corporation All Rights Reserved. 画面遷移(Navigation) 20 Compose
Navigation 遷移先を文字列で指定 • ビルド時の保証はない • リファクタリングに弱い
Copyright © NIFTY Corporation All Rights Reserved. 遷移時の引数 21 Jetpack
Navigation Navigation XML 遷移コード
Copyright © NIFTY Corporation All Rights Reserved. 遷移時の引数 22 XMLで遷移Actionに対して引数を定義
• 自動生成クラスで型安全性が担保される • 実装としてはBundle Jetpack Navigation
Copyright © NIFTY Corporation All Rights Reserved. 遷移時の引数 23 Compose
Navigation ナビゲーション用Composable 遷移コード
Copyright © NIFTY Corporation All Rights Reserved. 遷移時の引数 24 Compose
Navigation 画面に対してURL文字列で指定 • ビルド時に型安全性が担保されない • シリアライズ・デシリアライズを自前で行う必要あり ◦ URLエスケープ ◦ バイナリのBASE64変換
Copyright © NIFTY Corporation All Rights Reserved. 遷移アニメーション 25 Jetpack
Navigation Compose Navigation * Accompanist使用
Copyright © NIFTY Corporation All Rights Reserved. まとめ 26 •
Jetpack Composeは開発速度向上に効果あり ◦ コード量(特にリスト)の低減 ◦ 新人の入りやすさ • Navigation周りには正直難あり ◦ 画面遷移は従来通りActivityとFragmentで行うのも一手 ◦ 無理にFull Jetpack Composeにする必要はない
Copyright © NIFTY Corporation All Rights Reserved.