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
shun
April 22, 2026
Technology
300
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
JAWS-UG初心者支部#88わいわい初心塾(夏休みの宿題やったかGit編)
otsuki
0
150
Multica × 長期記憶:40個のミニプロジェクト管理
eiei114
0
190
module Synths; end
asonas
1
120
When Does a Local Qwen Start to Break
morshoto
0
190
Guerilla InnerSource in enterprises, during the AI hype
onenashev
PRO
0
150
全員がプロダクトへ向き合う組織を持続成長させるために——組織づくりのフライホイールと4象限 / The Flywheel Model and Four Quadrants for Organizational Design
hiro_torii
3
890
深夜のクラウド懺悔室 1:29:300 or 1:0:0
kazzpapa3
0
190
作り直せるコードは迅速に 作り直せないDBは慎重に - AI時代のプロダクトエンジニアが「判断の不可逆性」で開発速度を変える話
kinosuke01
0
270
Tab5をRubyで動くパソコンにする
kishima
1
250
データエンジニアの困りごとをDevinと一緒に解消する
10xinc
2
850
現場に行くだけでは足りない——プロダクトエンジニアが業務の流れを捉える観点と、その鍛え方
takumiengineering
0
320
Bet AI Day 2026丨Production-Ready AI Agents — エンタープライズの実務を任せるための設計と運用
layerx
PRO
4
2.6k
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Raft: Consensus for Rubyists
vanstee
141
7.7k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
410
Marketing to machines
jonoalderson
1
5.7k
Side Projects
sachag
455
43k
Writing Fast Ruby
sferik
630
63k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
560
Rails Girls Zürich Keynote
gr2m
96
14k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
320
A Soul's Torment
seathinner
7
3.6k
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秒後に上流の流れまで止めることが可能です。 まとめ
ご清聴ありがとうございました 今回使用した検証用アプリのリポジトリです