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.4k
マネーフォワード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
Recap #io25 What's new in Google Play
syarihu
0
89
[DroidKaigi 2024] Android ViewからJetpack Composeへ 〜Jetpack Compose移行のすゝめ〜 / From Android View to Jetpack Compose: A Guide to Migration
syarihu
4
4.7k
[shibuya.apk #46] Composableの枠を超えてアニメーションする / Animation beyond Composable
syarihu
0
96
[shibuya.apk #41] Jetpack Composeでグリッドに柔軟にスペースを入れたい
syarihu
0
3.5k
[DroidKaigi 2022] 詳解Google Playの新しい定期購入 ~オファーの活用や実装例を添えて~
syarihu
0
3.9k
5分で分かるGoogle Playの新しいサブスクリプション / Google Play new subscription 2022
syarihu
1
1.9k
[DroidKaigi 2021] Google Play 定期購入 比例配分モード完全攻略ガイド / Google Play Subscription Proration Mode Complete Guide
syarihu
1
8k
[Money Forward Tech Drive] What's new in Google Play [Recap #io21]
syarihu
0
610
[Android 11 Meetups] Google Play Commerce からのアップデート / Android 11 Meetups Google Play Commerce
syarihu
4
2.9k
Other Decks in Technology
See All in Technology
会社紹介資料 / Sansan Company Profile
sansan33
PRO
15
400k
CDKで始めるTypeScript開発のススメ
tsukuboshi
1
300
小さく始めるBCP ― 多プロダクト環境で始める最初の一歩
kekke_n
1
320
MCPでつなぐElasticsearchとLLM - 深夜の障害対応を楽にしたい / Bridging Elasticsearch and LLMs with MCP
sashimimochi
0
130
セキュリティについて学ぶ会 / 2026 01 25 Takamatsu WordPress Meetup
rocketmartue
1
270
レガシー共有バッチ基盤への挑戦 - SREドリブンなリアーキテクチャリングの取り組み
tatsukoni
0
190
Amazon Bedrock AgentCore 認証・認可入門
hironobuiga
2
500
ClickHouseはどのように大規模データを活用したAIエージェントを全社展開しているのか
mikimatsumoto
0
180
Tebiki Engineering Team Deck
tebiki
0
24k
コスト削減から「セキュリティと利便性」を担うプラットフォームへ
sansantech
PRO
3
1.2k
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.3k
学生・新卒・ジュニアから目指すSRE
hiroyaonoe
2
520
Featured
See All Featured
Chasing Engaging Ingredients in Design
codingconduct
0
110
Building AI with AI
inesmontani
PRO
1
680
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Between Models and Reality
mayunak
1
180
Un-Boring Meetings
codingconduct
0
200
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Technical Leadership for Architectural Decision Making
baasie
1
240
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Producing Creativity
orderedlist
PRO
348
40k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
220
Test your architecture with Archunit
thirion
1
2.1k
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
ありがとうございました