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
490
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 ニフティ株式会社
なぜISPでオリジナルカードゲームを作ったのか?制作者と対談 - NIFTY Tech Talk #25
niftycorp
PRO
0
63
「なぜかネットが遅い」を“見える化”する 〜マイ ニフティが繋ぐサポートと暮らし〜 - NIKKEI Tech Talk #39
niftycorp
PRO
0
390
InnerSource Summit 2025 Three points that promoted innersource activities
niftycorp
PRO
0
210
Maker Faire Tokyo 2025 出展うらばなし - NIFTY Tech Talk #25
niftycorp
PRO
0
87
Private Status Pageの設定と活用 〜インシデントレスポンスへの活用とStatus Page運用をどうするか?〜
niftycorp
PRO
0
140
ニフティのPagerDuty活用状況
niftycorp
PRO
0
120
会員管理基盤をオンプレからクラウド移行した時に起きた障害たち - asken tech talk vol.13
niftycorp
PRO
0
2.6k
モニタリング統一への道のり - 分散モニタリングツール統合のためのオブザーバビリティプロジェクト
niftycorp
PRO
1
1.1k
2025-07-08 InnerSource Commons Japan Meetup #14 【OST】チームの壁、ぶっ壊そ!壁の乗り越え方、一緒に考えよう!
niftycorp
PRO
0
120
Other Decks in Programming
See All in Programming
AIフル活用時代だからこそ学んでおきたい働き方の心得
shinoyu
0
140
なぜSQLはAIぽく見えるのか/why does SQL look AI like
florets1
0
470
Architectural Extensions
denyspoltorak
0
290
カスタマーサクセス業務を変革したヘルススコアの実現と学び
_hummer0724
0
710
Apache Iceberg V3 and migration to V3
tomtanaka
0
160
AI巻き込み型コードレビューのススメ
nealle
2
350
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
200
CSC307 Lecture 05
javiergs
PRO
0
500
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
690
CSC307 Lecture 02
javiergs
PRO
1
780
CSC307 Lecture 03
javiergs
PRO
1
490
Fragmented Architectures
denyspoltorak
0
160
Featured
See All Featured
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.3k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Context Engineering - Making Every Token Count
addyosmani
9
660
Code Reviewing Like a Champion
maltzj
527
40k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
730
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Building Applications with DynamoDB
mza
96
6.9k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
430
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
1
53
Amusing Abliteration
ianozsvald
0
100
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
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.