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
280
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
Terraform共通モジュールをチーム横断で“変えられる”運用へ ― リリースと適用の分離
kekke_n
0
1.8k
テスト設計の本質を改めて考えてみる~生成AIを活用する時代だからこそ、作ったテストの説明性を高めよう~
yamasaki696
1
390
アカウントが増えてからでは遅い? ~ マルチアカウント統制の勘所 ~
kenichinakamura
0
190
環境凍結という Toil を倒す -セルフサービス型 Ephemeral テスト環境の 設計と実践
shirouz
1
1.5k
ループエンジニアリングでE2Eテストを実践
noriyukitakei
0
310
攻撃者がいなくてもAIエージェントはインシデントを起こす
nomizone
0
200
ローカルLLMとLINE Botの組み合わせ その3 / LINE DC Generative AI Meetup #8
you
PRO
0
120
GuardrailからGovernanceへ~AIエージェント運用の次の課題~
sbspsy
1
220
しぶいSRE: サーバから見えない障害にどう向き合うか。ラストワンマイルのデバッグ実践 / Shibui SRE
kanny
12
5k
LiDAR SLAMの実装とセンサ融合 ~Lie群からContinuous-Time LIOまで~
naokiakai
1
1k
Baseline対応のDOMの型定義を作った
uhyo
3
720
End-to-Endで考える信頼性 —LINEアプリにおけるクライアント開発×SRE連携の実践
maruloop
3
3.1k
Featured
See All Featured
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Speed Design
sergeychernyshev
33
1.9k
The SEO identity crisis: Don't let AI make you average
varn
0
510
Optimizing for Happiness
mojombo
378
71k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
180
What's in a price? How to price your products and services
michaelherold
247
13k
Music & Morning Musume
bryan
47
7.3k
Side Projects
sachag
455
43k
New Earth Scene 8
popppiees
3
2.4k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
220
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秒後に上流の流れまで止めることが可能です。 まとめ
ご清聴ありがとうございました 今回使用した検証用アプリのリポジトリです