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
マネーフォワードMEにおける Jetpackの活用事例
Search
syarihu
August 19, 2019
Technology
2
3.1k
マネーフォワードMEにおける Jetpackの活用事例
Bonfire Android #5 で発表した資料です。
https://yj-meetup.connpass.com/event/136481/
syarihu
August 19, 2019
Tweet
Share
More Decks by syarihu
See All by syarihu
[DroidKaigi 2024] Android ViewからJetpack Composeへ 〜Jetpack Compose移行のすゝめ〜 / From Android View to Jetpack Compose: A Guide to Migration
syarihu
3
2.7k
[shibuya.apk #46] Composableの枠を超えてアニメーションする / Animation beyond Composable
syarihu
0
19
[shibuya.apk #41] Jetpack Composeでグリッドに柔軟にスペースを入れたい
syarihu
0
2.8k
[DroidKaigi 2022] 詳解Google Playの新しい定期購入 ~オファーの活用や実装例を添えて~
syarihu
0
3.3k
5分で分かるGoogle Playの新しいサブスクリプション / Google Play new subscription 2022
syarihu
1
1.8k
[DroidKaigi 2021] Google Play 定期購入 比例配分モード完全攻略ガイド / Google Play Subscription Proration Mode Complete Guide
syarihu
1
7.6k
[Money Forward Tech Drive] What's new in Google Play [Recap #io21]
syarihu
0
550
[Android 11 Meetups] Google Play Commerce からのアップデート / Android 11 Meetups Google Play Commerce
syarihu
4
2.8k
[potatotips #70] license-list-pluginを使ってOSSライセンス画面を自動生成する / license-list-plugin
syarihu
4
4.6k
Other Decks in Technology
See All in Technology
NilAway による静的解析で「10 億ドル」を節約する #kyotogo / Kyoto Go 56th
ytaka23
3
380
KubeCon NA 2024 Recap: How to Move from Ingress to Gateway API with Minimal Hassle
ysakotch
0
210
Microsoft Azure全冠になってみた ~アレを使い倒した者が試験を制す!?~/Obtained all Microsoft Azure certifications Those who use "that" to the full will win the exam! ?
yuj1osm
2
110
Oracle Cloud Infrastructure:2024年12月度サービス・アップデート
oracle4engineer
PRO
0
200
生成AIをより賢く エンジニアのための RAG入門 - Oracle AI Jam Session #20
kutsushitaneko
4
260
watsonx.ai Dojo #5 ファインチューニングとInstructLAB
oniak3ibm
PRO
0
170
MLOps の現場から
asei
6
650
Google Cloud で始める Cloud Run 〜AWSとの比較と実例デモで解説〜
risatube
PRO
0
110
LINE Developersプロダクト(LIFF/LINE Login)におけるフロントエンド開発
lycorptech_jp
PRO
0
120
継続的にアウトカムを生み出し ビジネスにつなげる、 戦略と運営に対するタイミーのQUEST(探求)
zigorou
0
590
DUSt3R, MASt3R, MASt3R-SfM にみる3D基盤モデル
spatial_ai_network
2
180
ガバメントクラウドのセキュリティ対策事例について
fujisawaryohei
0
560
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
335
57k
How STYLIGHT went responsive
nonsquared
95
5.2k
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
A Tale of Four Properties
chriscoyier
157
23k
Thoughts on Productivity
jonyablonski
67
4.4k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Visualization
eitanlees
146
15k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Optimising Largest Contentful Paint
csswizardry
33
3k
Writing Fast Ruby
sferik
628
61k
RailsConf 2023
tenderlove
29
940
Designing on Purpose - Digital PM Summit 2013
jponch
116
7k
Transcript
マネーフォワードMEにおける Jetpackの活用事例 2019/08/19 (Mon.) Bonfire Android #5 @syarihu
Taichi Sato (@syarihu) • 株式会社マネーフォワード ◦ Androidエンジニア ◦ TechBooster
Android Jetpack
Android Jetpack • 高品質のAndroidアプリを開発者が簡単 に作成するための一連のライブラリ、ツー ルおよびガイダンス
Android Jetpack • Jetpackの各コンポーネントは個別に導 入できる • 生産性を高めるためのKotlin言語機能が 利用されており、うまく組み合わせて使用 する
AndroidX
AndroidX • Jetpack内でのライブラリの開発、テス ト、パッケージ、バージョン管理、リリース に使用されているオープンソースプロジェ クト
AndroidX • v28で終了したSupport Libraryを大幅に 改良している • Support Libraryのパッケージは androidx.* にマッピングされた
https://developer.android.com/jetpack/androidx/migrate/artifact-mappings
AndroidX • AndroidXのパッケージはすべて androidx.* パッケージで構成され、 Support Libraryと同様にPlatform APIか ら独立している
AndroidX • すべてのAndroidバージョンで可能な限り 一貫して動作する機能を提供する • Support Libraryとは異なり、AndroidXの パッケージは個別に管理され、更新され る
https://developer.android.com/jetpack/androidx/versions
AndroidX • Support Libraryの新規の開発はすべて AndroidXライブラリ内で行われる • 元のSupport Libraryアーティファクトのメ ンテナンスや新しいJetpackコンポーネン トの導入も含まれる
AndroidXに移行する
AndroidXに移行する • Android Studioにあるマイグレーション ツールを利用して移行する ◦ Refactor -> Migrate to
AndroidX
None
AndroidXに移行する • マイグレーションツールは機械的にパッ ケージをすべて置き換えてくれるが、いく つかの問題がある
AndroidXに移行する
AndroidXに移行する
AndroidXに移行する パッケージフルで参照されてしまう
AndroidXに移行する • このまま放置してしまうと、見つけたら都 度修正する手間が発生し、PR毎に関係 の無い差分ができてしまう ➢ すべて手動で修正することで、ほぼ import文の差分だけになった
AndroidXに移行する
AndroidXに移行する
AndroidXに移行する うまく置き換わらない
AndroidXに移行する android.support.design -> com.google.android.material android.support.v7.appcompat -> androidx.appcompat
AndroidXに移行する • AndroidXが登場してから結構経っている ので、OSSも既にAndroidX移行が 完了しているケースが多い
AndroidXに移行する • プロジェクト内で利用しているOSSをすべ てAndroidX対応のバージョンへ 上げたほうがよい
Jetpackを利用した設計に 置き換える
None
None
• 新しい設計を一気にすべて適用するのは難 しい • 必要なライブラリを導入できたら、UI刷新や リファクタ時などに画面単位で新しい設計を 適用していく Jetpackを利用した設計に置き換える
Jetpackを利用した設計に置き換える • 2018年6月ごろに手入力画面のUIを全面的 に刷新することになった • 新しい設計を適用する良い機会だったの で、新しい設計でリファクタすることにした
1. Dagger2の導入 2. JetpackのViewModel, LiveDataを導入 3. 手入力画面を実装 Jetpackを利用した設計に置き換える
• チームメンバーには新しい設計を適用した 画面のコードを見ながら説明 • 新卒のメンバーには、ある画面をリファクタ する際にペアプロすることで理解を深めても らった Jetpackを利用した設計に置き換える
Jetpackを使った機能の例 手入力画面編
None
None
• 電卓部分を別のFragmentにして、 計算ロジックはViewModelへ • 電卓のViewModelでは計算結果などを LiveDataに流す • ViewModelのスコープはActivityにする Jetpackを使った機能の例
• 手入力画面の各項目の入力画面は別の Fragment ◦ 電卓のViewModelのスコープはActivity ◦ 電卓のViewModelのLiveDataをobserve するだけ Jetpackを使った機能の例
https://sh.syarihu.net/2Z6DdoM
Jetpackを使った機能の例 課金機能編
• マネーフォワードMEでは3月に年額課金を リリースした Jetpackを使った機能の例
• 月額課金はAIDLによって実装されており、 新しく実装するのであればPlay Billing Libraryを使って実装するべきだと判断し、リ ファクタすることにした Jetpackを使った機能の例
• Play Billing LibraryはBillingClientと呼ばれ る抽象クラスを介してPlay Billingと連携し、 課金機能を提供する • Play Billingの接続や接続解除などの処理
を毎回実装するのは手間がかかる Jetpackを使った機能の例
• JetpackのLifecycle, ViewModel, LiveData を活用してBillingClientの処理を実装するこ とにした Jetpackを使った機能の例
None
None
None
None
None
None
None
None
None
None
None
None
• JetpackのLifecycle, ViewModel, LiveData を活用することで、BillingViewModelを使え ばどの画面でも簡単に課金機能を 実装できるようになった Jetpackを使った機能の例
https://sh.syarihu.net/2TGyGZb
https://sh.syarihu.net/2HdmZUO
Jetpackを使った機能の例 入出金履歴編
• マネーフォワードMEでは2019年8月の リリースで入出金がボトムナビゲーションに 追加された Jetpackを使った機能の例
• 入出金のボトムナビゲーションでは、 新着の入出金があった場合にバッジをつけ る必要がある • 入出金に何か変化が合った場合は履歴 一覧を更新する必要がある Jetpackを使った機能の例
None
None
None
None
None
None
None
ややこしい…
• 入出金履歴画面に戻ってきたときに更新し てくれるように更新リクエストを送りたい… Jetpackを使った機能の例
• RxJavaのBehaviorProcessorとLiveDataを 組み合わせて使うことにした Jetpackを使った機能の例
None
None
None
None
None
None
None
None
None
• これで別の画面にいても更新リクエストを行 うことができ、入出金履歴に戻ってきたタイ ミングでLiveDataをobserve することで履歴が更新される Jetpackを使った機能の例
• ボトムナビゲーションのバッジも似たような 処理でリクエストを送り、LiveDataにリクエ ストが流れてくればバッジが 更新されるようになった Jetpackを使った機能の例
Jetpackを利用して 1年経った今
• マネーフォワードMEではViewModelや LiveData、Lifecycleを設計に適用してから 1年ほど経った Jetpackを利用して1年経った今
• 新しい設計を入れてから、古い機能を刷新 して新しくする機会が多かった • 設計を適用するためにリファクタするといっ たことをしなくても、多くの部分に新しい設計 を適用することができている Jetpackを利用して1年経った今
• Dagger2を使ったDIによりViewModelを injectすることで自然とViewとロジックが分 離し、テストも書きたいときに書けるように なった Jetpackを利用して1年経った今
おまけ: Kotlin率
None
None
宣伝
https://moneyforward.connpass.com/event/140296/
• 2019/08/23 (金) 13:00 ~ 17:30 • マネーフォワードのサービス開発に関する技術や 手法だけでなく、スタンスや想いを共有する場です •
私も入社してから今までのマネーフォワードの Androidエンジニアとしての活動をお話します Money Forward Developers’ Stories
ありがとうございました