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
590
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
8.2k
cookpad.apk#5
ksfee684
0
660
cookpad.apk#4
ksfee684
0
710
Testing in weekly release
ksfee684
0
870
UI テストで楽するための技術
ksfee684
0
510
Android における UI テスト設計戦略
ksfee684
2
1.1k
Espresso Driver を用いた Appium テストとその仕組み
ksfee684
0
6.9k
Other Decks in Technology
See All in Technology
ClickHouseはどのように大規模データを活用したAIエージェントを全社展開しているのか
mikimatsumoto
0
260
Bill One 開発エンジニア 紹介資料
sansan33
PRO
5
17k
プロポーザルに込める段取り八分
shoheimitani
1
560
20260204_Midosuji_Tech
takuyay0ne
1
160
量子クラウドサービスの裏側 〜Deep Dive into OQTOPUS〜
oqtopus
0
140
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
13k
AzureでのIaC - Bicep? Terraform? それ早く言ってよ会議
torumakabe
1
590
顧客との商談議事録をみんなで読んで顧客解像度を上げよう
shibayu36
0
270
【Ubie】AIを活用した広告アセット「爆速」生成事例 | AI_Ops_Community_Vol.2
yoshiki_0316
1
110
会社紹介資料 / Sansan Company Profile
sansan33
PRO
15
400k
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
93k
学生・新卒・ジュニアから目指すSRE
hiroyaonoe
2
670
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
28
2.4k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
410
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
190
Rails Girls Zürich Keynote
gr2m
96
14k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
590
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
57
50k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.4k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
100
Visualization
eitanlees
150
17k
Claude Code のすすめ
schroneko
67
210k
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 モジュールに残されたまま