Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
マネーフォワードMEにおける Jetpackの活用事例
Search
syarihu
August 19, 2019
Technology
2
3.3k
マネーフォワード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
79
[DroidKaigi 2024] Android ViewからJetpack Composeへ 〜Jetpack Compose移行のすゝめ〜 / From Android View to Jetpack Compose: A Guide to Migration
syarihu
4
4.3k
[shibuya.apk #46] Composableの枠を超えてアニメーションする / Animation beyond Composable
syarihu
0
81
[shibuya.apk #41] Jetpack Composeでグリッドに柔軟にスペースを入れたい
syarihu
0
3.4k
[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
600
[Android 11 Meetups] Google Play Commerce からのアップデート / Android 11 Meetups Google Play Commerce
syarihu
4
2.9k
Other Decks in Technology
See All in Technology
AWS運用を効率化する!AWS Organizationsを軸にした一元管理の実践/nikkei-tech-talk-202512
nikkei_engineer_recruiting
0
170
Amazon Quick Suite で始める手軽な AI エージェント
shimy
1
1.7k
SQLだけでマイグレーションしたい!
makki_d
0
1.2k
ActiveJobUpdates
igaiga
1
310
ExpoのインダストリーブースでみたAWSが見せる製造業の未来
hamadakoji
0
190
AI との良い付き合い方を僕らは誰も知らない
asei
0
230
2025年のデザインシステムとAI 活用を振り返る
leveragestech
0
160
日本Rubyの会: これまでとこれから
snoozer05
PRO
5
230
NIKKEI Tech Talk #41: セキュア・バイ・デザインからクラウド管理を考える
sekido
PRO
0
200
Connection-based OAuthから学ぶOAuth for AI Agents
flatt_security
0
350
LayerX QA Night#1
koyaman2
0
250
Snowflake導入から1年、LayerXのデータ活用の現在 / One Year into Snowflake: How LayerX Uses Data Today
civitaspo
0
2.3k
Featured
See All Featured
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
150
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
115
91k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
120
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
0
22
Design in an AI World
tapps
0
98
Are puppies a ranking factor?
jonoalderson
0
2.4k
How to build a perfect <img>
jonoalderson
0
4.6k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
110
Fireside Chat
paigeccino
41
3.8k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
110
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
ありがとうございました