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
"おまじない"を卒業する ボイラープレート再入門
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
shun
April 22, 2026
Technology
270
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
"おまじない"を卒業する ボイラープレート再入門
shun
April 22, 2026
Other Decks in Technology
See All in Technology
失敗を経て、Harness Engineering で 大切にしたいことを考える / Learning from Failure: What Matters in Harness Engineering
bitkey
PRO
1
350
200個のGitHubリポジトリを横断調査したかった
icck
0
120
EventBridge Connection
_kensh
5
700
AAIFに入ってみた ~内から見えるコミュニティ動向~
sato4
0
190
白金鉱業Meetup_Vol.24_「AIエージェントは分けるほど良い」は本当か? / Is it true that “the more you divide AI agents, the better”?
brainpadpr
1
350
作って終わりにしない タイミーのセマンティックレイヤー育成の現在地
chanyou0311
4
2.3k
社内 AI エージェント Synapse と セマンティックレイヤーの育て方
hiroakis
3
1.8k
プロダクト開発から業務改善コンサルまで。事業全体へ「染み出す」ことで広がるエンジニアの可能性
ham0215
0
120
Amazon Bedrock AgentCore ワークショップ JAWS UG TOHOKU / amazon-bedrock-agentcore-workshop-jawsug-tohoku-2026
gawa
9
780
Building applications in the Gemini API family.
line_developers_tw
PRO
0
3.2k
小さくはじめるSLI/SLO ~育てながら組織に定着させる実践知~ / Starting Small with SLI/SLOs: Building Adoption Through Continuous Growth
nari_ex
7
1.9k
機械学習を「社会実装」するということ 2026年夏版 / Social Implementation of Machine Learning June 2026 Version
moepy_stats
5
1.8k
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
KATA
mclloyd
PRO
35
15k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Evolving SEO for Evolving Search Engines
ryanjones
0
220
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
180
Making Projects Easy
brettharned
120
6.7k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
860
Product Roadmaps are Hard
iamctodd
PRO
55
12k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Rails Girls Zürich Keynote
gr2m
96
14k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
Transcript
“おまじない”を卒業する ボイラープレート再入門 2026/04/21 Kotlin愛好会 vol. 64@ウェルスナビ株式会社
自己紹介 Shun 27卒 X: @shunsuke_1B Androidアプリ開発が好き #Android(Kotlin)一年生 #Jetpackネイティブ世代 #iOS(Swift)もちょこっとだけ
このコードの違い 説明できますか? はじめに
本日のゴール collectAsState と collectAsStateWithLifecycle の違いを知ることでおまじないを一つ卒業する
目次 1. collectAsStateと‥WithLifecycleの違い 2. collectAsStateWithLifecycleとは 3. ‥ WithLifecycleはどうライフサイクルを考慮しているのか 4. KMP/CMP環境でのiOSのライフサイクルとの対応
5. 実際に検証してみる 6. まとめ
共通 • StateFlow/Flow から流れてくる値を collect し て State に書き込む •
Composable が Composition から外れると collect を停止する collectAsState • Android のライフサイクルを考慮しない collectAsStateWithLifecycle • Android のライフサイクルを考慮する • アプリがバックグラウンド状態の時にcollect を停止する collectAsStateと‥WithLifecycleの違い 引用:https://medium.com/androiddevelopers/consuming- flows-safely-in-jetpack-compose-cde014d0d5a3
引用:https://developer.android.com/jetpack/androidx/releases/lifecycle collectAsStateWithLifecycleとは
collectAsStateWithLifecycle 登場前、ライフサイクルを考慮して collect を制御したい場合はこのよう なボイラープレートコードを毎回記述していました collectAsStateWithLifecycleとは
collectAsStateWithLifecycle の登場により、このようにすっきり書けるようになりました collectAsStateWithLifecycleとは
minActiveState=STARTED がデフォルト引数として設定されています。 その値を repeatOnLifecycle に渡し、collect の開始/停止を制御しています。 …WithLifecycleはどうライフサイクルを考慮しているのか
先ほど渡した state(minActiveState) を upTo/downFrom に渡し、collect を開始/停止するための イベントを startWorkEvent/cancelWorkEvent として受け取っています。 upTo/downFromのソースコード
…WithLifecycleはどうライフサイクルを考慮しているのか
引用 :AndroidCodelab startWorkEvent = ON_START event(ライフサイクルイベント) == ON_START …WithLifecycleはどうライフサイクルを考慮しているのか
引用 :AndroidCodelab ON_STARTでStartedに入るとcollectを開始する …WithLifecycleはどうライフサイクルを考慮しているのか
引用 :AndroidCodelab cancelWorkEvent = ON_STOP event(ライフサイクルイベント) == ON_STOP …WithLifecycleはどうライフサイクルを考慮しているのか
引用 :AndroidCodelab ON_STOP で Started を出ると collect を停止する …WithLifecycleはどうライフサイクルを考慮しているのか
引用 :AndroidCodelab つまり、minActiveState に指定した状態に入るイベント で collect を開始し、その状態から出るイベントでcollect を停止するようになっています。 …WithLifecycleはどうライフサイクルを考慮しているのか
minActiveStateをResumedにすると ON_RESUME でcollect開始 ON_PAUSE でcollect停止となり Resumed の間だけcollectするようにできます 引用 :AndroidCodelab …WithLifecycleはどうライフサイクルを考慮しているのか
引用 :AndroidCodelab upTo/downFromのソースコード
現在 Androidx.lifecycle など多くのJetpackライブラリがKMP対応となっています 引用:https://kotlinlang.org/docs/multiplatform/compose- lifecycle.html#mapping-android-lifecycle-to-other-platforms KMP/CMP環境でのiOSのライフサイクルとの対応
iOS のネイティブイベントを Android のライフサイクルイベントにマッピングしています。 そのため collectAsStateWithLifecycle は iOS でもそのまま利用可能です。 引用:https://kotlinlang.org/docs/multiplatform/compose-
lifecycle.html#mapping-android-lifecycle-to-other-platforms KMP/CMP環境でのiOSのライフサイクルとの対応
フルComposeの場合 VCイベント(赤枠) はアプリ起動時の viewWillAppear 以外、発火しません。 主に動作するのは アプリ状態(青枠) のイベントです。 KMP/CMP環境でのiOSのライフサイクルとの対応 引用:https://kotlinlang.org/docs/multiplatform/compose-
lifecycle.html#mapping-android-lifecycle-to-other-platforms
実際に検証してみる
これらを踏まえて collectAsState と collectAsStateWithLifecycle それぞれどのようなユースケースで使 用するべきか collectAsState • マルチプラットフォームでの開発(?) collectAsStateWithLifecycle
• それ以外全て 原則 collectAsStateWithLifecycle を使うべきと考えました。 バックグラウンド時も collect を続けることは、不要な Recomposition の発生や、通信・位置情報の更 新を維持することになるため、CPU・メモリ・データ通信量を無駄に消費します。 collectAsStateWithLifecycle なら stateIn(WhileSubscribed(5000)) と組み合わせることで collectが停止し た5秒後に上流の流れまで止めることが可能です。 まとめ
ご清聴ありがとうございました 今回使用した検証用アプリのリポジトリです