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
460
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 ニフティ株式会社
会員管理基盤をオンプレからクラウド移行した時に起きた障害たち - asken tech talk vol.13
niftycorp
PRO
0
2.5k
モニタリング統一への道のり - 分散モニタリングツール統合のためのオブザーバビリティプロジェクト
niftycorp
PRO
1
820
2025-07-08 InnerSource Commons Japan Meetup #14 【OST】チームの壁、ぶっ壊そ!壁の乗り越え方、一緒に考えよう!
niftycorp
PRO
0
83
2025-04-25 NIFTY's InnerSource Activites
niftycorp
PRO
0
280
外コミュニティ活動や登壇活動が技術 広報として大事だよ、と改めて周囲に伝 えられた件 - EM Oasis 特別会
niftycorp
PRO
0
180
Dify触ってみた。
niftycorp
PRO
1
260
Amazon Bedrockを使用して、 運用対応を楽にしてみた
niftycorp
PRO
1
280
自社製CMSからの脱却:10件のWebサイト再構築に学ぶ運用重視の技術選定 - NIFTY Tech Day 2025
niftycorp
PRO
0
130
エンジニアの殻を破る:インナーソースと社外活動がもたらした成長 - NIFTY Tech Day 2025
niftycorp
PRO
0
98
Other Decks in Programming
See All in Programming
ユーザーも開発者も悩ませない TV アプリ開発 ~Compose の内部実装から学ぶフォーカス制御~
taked137
0
150
Tool Catalog Agent for Bedrock AgentCore Gateway
licux
6
2.3k
CJK and Unicode From a PHP Committer
youkidearitai
PRO
0
110
モバイルアプリからWebへの横展開を加速した話_Claude_Code_実践術.pdf
kazuyasakamoto
0
320
実用的なGOCACHEPROG実装をするために / golang.tokyo #40
mazrean
1
260
「待たせ上手」なスケルトンスクリーン、 そのUXの裏側
teamlab
PRO
0
490
CloudflareのChat Agent Starter Kitで簡単!AIチャットボット構築
syumai
2
470
Android端末で実現するオンデバイスLLM 2025
masayukisuda
1
130
奥深くて厄介な「改行」と仲良くなる20分
oguemon
1
520
Testing Trophyは叫ばない
toms74209200
0
860
AIでLINEスタンプを作ってみた
eycjur
1
230
はじめてのMaterial3 Expressive
ym223
2
260
Featured
See All Featured
Statistics for Hackers
jakevdp
799
220k
The Language of Interfaces
destraynor
161
25k
What's in a price? How to price your products and services
michaelherold
246
12k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
GraphQLとの向き合い方2022年版
quramy
49
14k
Into the Great Unknown - MozCon
thekraken
40
2k
Typedesign – Prime Four
hannesfritz
42
2.8k
GitHub's CSS Performance
jonrohan
1032
460k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
580
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
51
5.6k
Music & Morning Musume
bryan
46
6.8k
The Invisible Side of Design
smashingmag
301
51k
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.