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
600
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
After Party DroidKaigi 2021
Kyohei Kato
October 28, 2021
More Decks by Kyohei Kato
See All by Kyohei Kato
cookpad-summer-internship-2020-android
ksfee684
0
8.2k
cookpad.apk#5
ksfee684
0
680
cookpad.apk#4
ksfee684
0
720
Testing in weekly release
ksfee684
0
890
UI テストで楽するための技術
ksfee684
0
530
Android における UI テスト設計戦略
ksfee684
2
1.1k
Espresso Driver を用いた Appium テストとその仕組み
ksfee684
0
6.9k
Other Decks in Technology
See All in Technology
AI駆動開発が変える、大規模開発の前提 ーHuman in the Loop から Human on the Loop へ / AIE2026
visional_engineering_and_design
30
23k
データ基盤をDataformで整えた話 〜 開発環境を添えて 〜
takapy
0
140
タクシーアプリ『GO』の実践的データ活用
mot_techtalk
3
190
小さくはじめるSLI/SLO ~育てながら組織に定着させる実践知~ / Starting Small with SLI/SLOs: Building Adoption Through Continuous Growth
nari_ex
2
1.2k
ルールやカスタム機能、どう活かす?ハンズオンで体感するIBM Bobの出力コントロール
muehara
1
110
FDE という解 ― 暗黙知と明示知をつなぐ、伴走型エンジニアリング ―
otanet
0
110
機械学習を「社会実装」するということ 2026年夏版 / Social Implementation of Machine Learning June 2026 Version
moepy_stats
4
1k
脆弱性対応、どこで線を引くか
rymiyamoto
0
320
スキルと MCP ツール、責務をどう分けるか? AI が迷わないインターフェース設計の戦略
cdataj
1
870
Building applications in the Gemini API family.
line_developers_tw
PRO
0
2.7k
SIer20年! 培ったスキルがスタートアップで輝く時
shucho0103
0
810
OCI Oracle AI Database Services新機能アップデート(2026/03-2026/05)
oracle4engineer
PRO
0
330
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
34
9.3k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Fireside Chat
paigeccino
42
3.9k
A Soul's Torment
seathinner
6
2.9k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
190
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
850
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
240
Docker and Python
trallard
47
3.9k
Believing is Seeing
oripsolob
1
140
How to build a perfect <img>
jonoalderson
1
5.6k
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 モジュールに残されたまま