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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
99
[DroidKaigi 2024] Android ViewからJetpack Composeへ 〜Jetpack Compose移行のすゝめ〜 / From Android View to Jetpack Compose: A Guide to Migration
syarihu
4
4.8k
[shibuya.apk #46] Composableの枠を超えてアニメーションする / Animation beyond Composable
syarihu
0
100
[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
2k
[DroidKaigi 2021] Google Play 定期購入 比例配分モード完全攻略ガイド / Google Play Subscription Proration Mode Complete Guide
syarihu
1
8.1k
[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
3k
Other Decks in Technology
See All in Technology
8万デプロイ
iwamot
PRO
2
230
Claude Code のコード品質がばらつくので AI に品質保証させる仕組みを作った話 / A story about building a mechanism to have AI ensure quality, because the code quality from Claude Code was inconsistent
nrslib
12
5k
Shifting from MCP to Skills / ベストプラクティスの変遷を辿る
yamanoku
4
780
AIエージェント、 社内展開の前に知っておきたいこと
oracle4engineer
PRO
2
100
DevOpsエージェントで実現する!! AWS Well-Architected(W-A) を実現するシステム設計 / 20260307 Masaki Okuda
shift_evolve
PRO
3
520
AIエージェント時代に備える AWS Organizations とアカウント設計
kossykinto
3
710
2026-03-11 JAWS-UG 茨城 #12 改めてALBを便利に使う
masasuzu
2
340
When an innocent-looking ListOffsets Call Took Down Our Kafka Cluster
lycorptech_jp
PRO
0
120
越境する組織づくり ─ 多様性を前提にしたチームビルディングとリードの実践知
kido_engineer
2
180
マルチアカウント環境でSecurity Hubの運用!導入の苦労とポイント / JAWS DAYS 2026
genda
0
410
kintone開発のプラットフォームエンジニアの紹介
cybozuinsideout
PRO
0
860
JAWSDAYS2026_A-6_現場SEが語る 回せるセキュリティ運用~設計で可視化、AIで加速する「楽に回る」運用設計のコツ~
shoki_hata
0
2.9k
Featured
See All Featured
Marketing to machines
jonoalderson
1
5k
Designing Experiences People Love
moore
143
24k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
250
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.1k
Design in an AI World
tapps
0
170
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
The Curious Case for Waylosing
cassininazir
0
270
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
61
52k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
290
Raft: Consensus for Rubyists
vanstee
141
7.3k
Docker and Python
trallard
47
3.8k
Git: the NoSQL Database
bkeepers
PRO
432
66k
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
ありがとうございました