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
After Party DroidKaigi 2021
Search
Kyohei Kato
October 28, 2021
Technology
0
410
After Party DroidKaigi 2021
Kyohei Kato
October 28, 2021
Tweet
Share
More Decks by Kyohei Kato
See All by Kyohei Kato
cookpad-summer-internship-2020-android
ksfee684
0
7.8k
cookpad.apk#5
ksfee684
0
460
cookpad.apk#4
ksfee684
0
570
Testing in weekly release
ksfee684
0
740
UI テストで楽するための技術
ksfee684
0
380
Android における UI テスト設計戦略
ksfee684
2
870
Espresso Driver を用いた Appium テストとその仕組み
ksfee684
0
6.4k
Other Decks in Technology
See All in Technology
これまでのキャリアとこれからMLエンジニアとしてどう動くか
masatakashiwagi
0
140
BDD(Cucumber)コミュニティが無料提供しているコンテンツの紹介と現在起きている危機
nihonbuson
4
730
技育祭2024春 LT Finatextホールディングス
kevinrobot34
1
160
Tohoku.Tech #1 「EC-CUBE/AWSの構築をChatGPTに相談してみました」by テンダ
jun2882
0
140
なんで私に登壇依頼が?! ~頼られるエンジニアになるためには~ /
mixi_engineers
PRO
2
200
私のRSpecの書き方 / How I write RSpec
tmtms
4
820
家族アルバム みてねで直面してきた技術的負債 / MIXI KAG 2024
isaoshimizu
17
7.7k
Elementaryを用いたデータ品質の可視化とデータ基盤の運用改善
10xinc
6
1.4k
GitHub最新情報キャッチアップ 2024年3月
dzeyelid
16
3.2k
戦略的DDDを実践するための跳躍力 / OOC 2024
pictiny
6
3.8k
プッシュ型子育てサービスを、先行プロジェクト実施自治体において開始します
govtechtokyo
0
240
任意コード実行の原理
ffri
0
170
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
350
18k
Learning to Love Humans: Emotional Interface Design
aarron
266
39k
Docker and Python
trallard
33
2.6k
How to Ace a Technical Interview
jacobian
272
22k
Optimising Largest Contentful Paint
csswizardry
7
2.3k
Product Roadmaps are Hard
iamctodd
43
9.6k
What the flash - Photography Introduction
edds
64
11k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3k
The Invisible Customer
myddelton
114
12k
WebSockets: Embracing the real-time Web
robhawkes
59
6.9k
Fontdeck: Realign not Redesign
paulrobertlloyd
75
4.8k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
185
15k
Transcript
マイクロアプリを 利用した開発術 After Party DroidKaigi 2021
自己紹介 • 加藤 恭平 • モバイル基盤部所属 • Android アプリの開発効率化、基盤技術開発
マルチモジュールとは • 複数の Gradle モジュールから構成されるプロジェクト • 機能や実装レイヤーに沿ってモジュールを分割 ◦ 分離の境界はプロジェクトによって様々 •
分離により多くの恩恵を受けられる https://developer.android.com/training/dependency-injection/dagger-multi-module
マルチモジュール構成の利点(一部) • Gradle ではタスクベースでキャッシュシステムが存在 • 変更差分がない場合 (*)キャッシュを利用した差分ビルドによりビルド時間が短縮可能 • 依存関係が分離しているモジュール同士は並列ビルドも可能 →
プロジェクトに合わせて適切にモジュール分割すれば差分 /並列ビルドで爆速なビルドを実現 💨
クックパッドアプリの マルチモジュール構成
クックパッドアプリの概要 • VIPER アーキテクチャ ◦ https://techlife.cookpad.com/entry/2020/11/17/110000 • モノリスモジュールを legacy と名付けて徐々にモジュールを分割
• モジュールレイヤー ◦ app ▪ 用途ごとに存在するアプリモジュール ◦ feature ▪ 機能実装モジュール ◦ library ▪ UI, DataStore, Navigation 等の共通実装モジュール
モジュール構成
✌終✌
開発時の課題 • モジュール分割後も開発中のビルド時間が長い ◦ モジュール分割しても動作確認をする際はアプリをビルドする必要がある ◦ 開発に関係ない機能も含めてすべてビルドする必要がある ◦ 下位モジュールを変更すると依存するモジュールがリビルドされてしまう •
課題はビルド時間以外にも … ◦ 開発時はアプリの特定の開発中の機能だけ触れれば良いが辿り着くのが面倒 ◦ 特定の状態を再現したいが実装を書き換えたくない ▪ 誤ってそのままコミットしてしまったり …
マイクロアプリの導入
必要な機能だけ検証できるアプリ • 開発中の機能だけ検証できるアプリ • 必要最低限の箇所だけビルド • 開発中の機能に素早くたどり着ける • プロダクションコードを変更せずに特定の状態を試したい 大規模なiOSアプリの画面開発を効率化するために動作確認用ミニアプリを構築する
None
マイクロアプリ(デモアプリ) • feature モジュールと1対1で作成するアプリ ◦ feature モジュール内の任意の機能 (Activity/Fragment)を指定してアプリとしてビルド • 開発中の
feature モジュールをビルドするだけで OK ◦ 関係のない feature モジュールをビルドする必要なし ◦ → 通常アプリの差分ビルドで数十秒かかるところを数秒でビルド可能に • 機能に直接遷移可能な仕組みを用意 ◦ → アプリ起動後すぐに開発中の機能に辿り着くことが可能に • 検証用のアプリ内で依存を書き換えることが可能 ◦ → プロダクションコードに変更を加えずに状態の再現が可能に
マイクロアプリの裏側 • 対象の feature モジュールを参照する app モジュールを作成 • 検証したい機能(Activity/Fragment)を登録 •
DataStore にスタブを差し込み特定の状態を再現 ◦ エラーや特殊なデータを再現
None
None
マイクロアプリの運用 • 主に開発者が開発中に機能を検証する際に利用 ◦ Compose Preview の活躍があり少し需要が落ちていそう ◦ UI だけでなく包括的な検証には便利
• コードレビューはほぼしない • 開発時以外では使用しない ◦ PR レビュー時や QA のタイミングでは本物のアプリを使用 • PR CI でマイクロアプリを生成可能 ◦ 大規模開発で細かい検証を必要としていない場合など
今後の課題 • スタブを大量に用意する必要があって辛い ◦ feature モジュールが依存する DataStore をすべて Hilt 上に定義する必要がある
◦ 本物の DataStore を一部置き換えることができず大量のスタブ定義が … • マイクロアプリの恩恵を受けられているのはまだ一部 ◦ 古くから存在する機能の多くは legacy モジュールに残されたまま