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
Engineering joy: Building the celebration syste...
Search
LINEヤフーTech (LY Corporation Tech)
PRO
July 01, 2025
Technology
0
18
Engineering joy: Building the celebration system on the Home tab of the LINE app on Android
LINEのホームタブでの祝祭アニメーションの技術アーキテクチャを深く掘り下げ、Androidの核となる構成要素がいかにして日常の瞬間を大規模な魔法の祝祭に変えるかを探ります。
LINEヤフーTech (LY Corporation Tech)
PRO
July 01, 2025
Tweet
Share
More Decks by LINEヤフーTech (LY Corporation Tech)
See All by LINEヤフーTech (LY Corporation Tech)
マルチモーダル基盤モデルに基づく動画と音の解析技術
lycorptech_jp
PRO
2
260
AI駆動開発 with MixLeap Study【大阪支部 #3】
lycorptech_jp
PRO
0
270
Yahoo!しごとカタログ 新しい境地を創るエンジニア募集!
lycorptech_jp
PRO
3
320
データグループにおけるフロントエンド開発
lycorptech_jp
PRO
2
280
Yahoo!知恵袋におけるフロントエンド開発
lycorptech_jp
PRO
0
270
"LINE Planet" and AI: Conversations with AI
lycorptech_jp
PRO
0
58
Seamless inventory management with AI
lycorptech_jp
PRO
0
34
AI Frontiers Revealed: Transforming LINE Shopping TW with LLM-Driven Product Attribute Extraction
lycorptech_jp
PRO
0
56
LINEヤフーの音声AIがもたらす未来:ASR/TTSと対話技術の新たな可能性 / LY Corporation's Speech AI Vision: Towards Realtime Spoken Dialogue through Advanced ASR and TTS
lycorptech_jp
PRO
0
63
Other Decks in Technology
See All in Technology
LLM開発を支えるエヌビディアの生成AIエコシステム
acceleratedmu3n
0
330
Snowflake のアーキテクチャは本当に筋がよかったのか / Data Engineering Study #30
indigo13love
0
280
Kiroから考える AIコーディングツールの潮流
s4yuba
1
320
機械学習を「社会実装」するということ 2025年夏版 / Social Implementation of Machine Learning July 2025 Version
moepy_stats
1
1.4k
Webの技術とガジェットで那須の子ども達にワクワクを! / IoTLT_20250720
you
PRO
0
130
[MIRU2025]Preference Optimization for Multimodal Large Language Models for Image Captioning Tasks
keio_smilab
PRO
0
100
興味の胞子を育て 業務と技術に広がる”きのこ力”
fumiyasac0921
0
290
少人数でも回る! DevinとPlaybookで支える運用改善
ishikawa_pro
4
1.7k
From Live Coding to Vibe Coding with Firebase Studio
firebasethailand
1
320
会社もクラウドも違うけど 通じたコスト削減テクニック/Cost optimization strategies effective regardless of company or cloud provider
aeonpeople
2
370
大規模組織にAIエージェントを迅速に導入するためのセキュリティの勘所 / AI agents for large-scale organizations
i35_267
6
330
P2P ではじめる WebRTC のつまづきどころ
tnoho
1
270
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.9k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
530
Become a Pro
speakerdeck
PRO
29
5.4k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.7k
Code Review Best Practice
trishagee
69
19k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
How STYLIGHT went responsive
nonsquared
100
5.7k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.5k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
A better future with KSS
kneath
238
17k
Embracing the Ebb and Flow
colly
86
4.8k
Transcript
&OHJOFFSJOH+PZ #VJMEJOH-*/&T"OESPJE$FMFCSBUJPO4ZTUFNBU4DBMF -:$PSQPSBUJPO -*/&"QQ%FW 5VBO 5VOB
"OESPJE4PGUXBSF&OHJOFFS 8PSLJOHPO-*/&T)PNFUBCGFBUVSFT 1BTTJPOBUFBCPVUCVJMEJOHEFMJHIUGVMVTFS FYQFSJFODFT "CPVUNF
4IPXDBTF 5IF$IBMMFOHF 4ZTUFN"SDIJUFDUVSF0WFSWJFX *NQMFNFOUBUJPO%FFQ%JWF #VJMEJOH#MPDLT4ZOFSHZ 3FTVMUT*NQBDU 2VFTUJPOT%JTDVTTJPO "HFOEB
#JSUIEBZ$ISJTUNBT $FMFCSBUJPOT -*/&"QQ)PNFUBCEVSJOH
5IF$IBMMFOHF 1SFDJTJPO5JNJOH &WFOUTNVTUUSJHHFSFYBDUMZXIFOJOUFOEFE TVSWJWJOHBQQSFTUBSUT 3FTPVSDF.BOBHFNFOU &GGJDJFOUIBOEMJOHPGDFMFCSBUJPOBTTFUTBDSPTTNJMMJPOTPGEFWJDFT &EHF$BTFT
/FUXPSLGBJMVSFT BQQUFSNJOBUJPOT NVMUJQMFDPODVSSFOU DFMFCSBUJPOT
0VS4PMVUJPO 3FMJBCMF.BHJD #VJMEJOH#MPDLT 1IBTF"SDIJUFDUVSF
4ZTUFN"SDIJUFDUVSF0WFSWJFX
#VJMEJOH#MPDLT'PVOEBUJPO 3PPN%BUBCBTF 3FMJBCMFMPDBMTUPSBHFXJUISFBDUJWFRVFSJFT 8PSL.BOBHFS 1SFDJTFTDIFEVMJOHBDSPTTBQQMJGFDZDMF ,PUMJO'MPX 3FBDUJWF6*VQEBUFTBOETUBUFNBOBHFNFOU
1IBTF+PVSOFZ &WFOU %JTDPWFSZ 3FTPVSDF "DRVJTJUJPO 4IPX5JNF $MFBO6Q 3FDFJWFFWFOU OPUJGJDBUJPO %PXOMPBEFWFOU
NFUBEBUB %PXOMPBEBOEWBMJEBUF SFTPVSDFT %JTQMBZFGGFDUTBU UIFEFTJHOBUFEUJNF $MFBOVQSFTPVSDFT 4DIFEVMFOFYU PDDVSSFODF .BJOUBJOSFBEJOFTT EVSJOHJEMFQFSJPET
,FZ%FTJHO1SJODJQMFT EBZQSFQBSBUJPOCVGGFSFOTVSFTSFMJBCMFEFMJWFSZ $MFBSTFQBSBUJPOPGDPODFSOTCFUXFFOQIBTFT *OEFQFOEFOUFSSPSIBOEMJOHJOFBDIDPNQPOFOU 6TFSDFOUSJDUJNJOHXJUIHSBDFQFSJPET
*NQMFNFOUBUJPO%FFQ%JWF +PVSOFZ5ISPVHI"MM'PVS1IBTFT
1IBTF&WFOU%JTDPWFSZ $MJFOU TJEF 4FSWFS QVTIFE scheduledTime = showTime - 5
days retryUntil = showTime + 1 day 8PSL.BOBHFS {showTime} .FUBEBUB%PXOMPBE8PSLFS {showTime}
1IBTF3FTPVSDF"DRVJTJUJPO .FUBEBUB 'FUDIJOH "TTFU %PXOMPBE retry retry %POF
3PCVTU*NQMFNFOUBUJPO // Metadata Download Worker: Fetch event configurations if (retryUntil
< now) { return failure() } val event = fetchEventMetadata(eventId) // error -> retry saveEventMetadata(event) // error -> retry scheduleAssetDownload(event) // success -> next step .FUBEBUB%PXOMPBE8PSLFS'FUDIFWFOUDPOGJHVSBUJPOT
3PCVTU*NQMFNFOUBUJPO // Asset Worker: Download and validate celebration assets if
(retryUntil < now) { return failure() } val asset = downloadAsset(event) // error -> retry validateAsset(asset, event.checksum) // error -> retry fileStorage.extractAndSave(eventId, asset) // error -> retry // success scheduleShowtime() scheduleCleanup() "TTFU8PSLFS%PXOMPBEBOEWBMJEBUFDFMFCSBUJPOBTTFUT
1IBTF3FTPVSDF"DRVJTJUJPO .FUBEBUB 'FUDIJOH "TTFU %PXOMPBE retry retry %POF 4DIFEVMJOH 4IPXUJNF
4DIFEVMJOH $MFBOVQ WorkManager 3PPN%#
1IBTF4IPX5JNF 1&/%*/( 3&"%: '6--@4$3&&/@ &''&$5@$0.1-&5& % "MM#VJMEJOH#MPDLT6OJUF
&MFHBOU4JNQMJDJUZ // WorkManager: One simple state change eventRepository.updateEventState(eventId, READY) //
Everything else happens automatically: // Room → Flow → UI updates seamlessly
1FSGFDU$PMMBCPSBUJPO 8PSL.BOBHFS5SJHHFSTUIFQSFDJTFNPNFOUXJUIPOFMJOFPG DPEF 3PPN3FBDUJWFEBUBCBTFJOTUBOUMZOPUJGJFTBMMPCTFSWFST 'MPX)BOEMFTDPNQMFYQSJPSJUZ UJNJOH BOE6*DPPSEJOBUJPO
BVUPNBUJDBMMZ
1IBTF$MFBO6Q EBZHSBDFQFSJPE QSFWFOUTJOUFSSVQUJPOGPSMBUFVTFST $PNQSFIFOTJWFSFNPWBM PGBTTFUTBOENFUBEBUB 3FDVSSJOHFWFOUT BVUPNBUJDBMMZSFTDIFEVMFOFYUPDDVSSFODF
&GGJDJFOU3FTPVSDF.BOBHFNFOU
1IBTFNBQ 1IBTF 1IBTF retry 1IBTF 1IBTF
#VJMEJOH#MPDLT4ZOFSHZ $PNQMFY4UBUF.BOBHFNFOU.BEF4JNQMF
5IF1PXFSPG*OUFHSBUJPO 8PSL.BOBHFSTDIFEVMFT 3PPNTUPSFTRVFSJFT 'MPXSFBDUT 6*VQEBUFT
3FBM*NQBDU$PNQMFY-PHJDJO4JNQMF$PEF // All three building blocks working together: val displayableEventFlow
= combine( homeEventEffectDao.getDisplayableEventsFlow(), // Room: reactive queries homeTabVisibilityFlow // Flow: UI state tracking ) { events, isHomeVisible -> events.takeIf { isHomeVisible } // Timing: only when visible ?.maxByOrNull { it.priority } // Priority: personal > cultural } // Worker updates Room → Room triggers Flow → Flow updates UI displayableEventFlow.collect { event -> showEffect(event) }
8IBU5IJT"DIJFWFT $PNQMFYDPPSEJOBUJPOCFDPNFTEFDMBSBUJWFQSPHSBNNJOH .VMUJQIBTFTUBUFUSBOTJUJPOTIBOEMFEBVUPNBUJDBMMZ &SSPSSFDPWFSZBDSPTTQIBTFT XJUITJOHMFSFUSZTUSBUFHZ 3FBDUJWF6*VQEBUFTFMJNJOBUF
NBOVBMTUBUFTZODISPOJ[BUJPO 3FTVMU$PNQMFYDFMFCSBUJPOPSDIFTUSBUJPO ˠ4JNQMFSFBDUJWFEFDMBSBUJPOT
3FTVMUT*NQBDU
1FSGPSNBODF"DIJFWFNFOUT DFMFCSBUJPOEFMJWFSZ 4VDDFTTSBUF JNQBDU "QQTUBSUVQ ;FSP EVSJOHJEMFQFSJPET 3FTPVSDFTGPPUQSJOU -PX
"VUPNBUJDSFDPWFSZ GSPNOFUXPSLGBJMVSFTBOEBQQDSBTIFTPSSFTUBSUT 5FDIOJDBM&YDFMMFODF PGCVJMEJOHCMPDLTGPSDPNQMFYTUBUFNBOBHFNFOU 4FBNMFTTJOUFHSBUJPO TJNQMJGJFTRVBMJUZBTTVSBODF *OEFQFOEFOUQIBTF UFTUJOH
1FSGFDUUJNJOH DSFBUFTHFOVJOFTVSQSJTFNPNFOUT 6TFS&YQFSJFODF FOTVSFTCJSUIEBZTBSFOUNJTTFECZIPMJEBZT 1FSTPOBMQSJPSJUZ FOIBODFFNPUJPOBMJNQBDU $VMUVSBMBXBSFOFTT FOIBODFFNPUJPOBMJNQBDU 4NPPUIBOJNBUJPOT
,FZ5BLFBXBZT
"SDIJUFDUVSF-FTTPOT 4USBUFHJDQSFQBSBUJPO EBZCVGGFS QSFWFOUTMBTUNJOVUF GBJMVSFT 1IBTFJTPMBUJPO FOBCMFTJOEFQFOEFOUFSSPSIBOEMJOHBOEUFTUJOH
#VJMEJOHCMPDLTZOFSHZ MFWFSBHFT"OESPJETTUSFOHUITFGGFDUJWFMZ 6TFSDFOUSJDEFTJHO USBOTGPSNTUFDIOJDBMDPOTUSBJOUTJOUP EFMJHIUGVMFYQFSJFODFT
*NQMFNFOUBUJPO*OTJHIUT &BSMZSFTPVSDFBDRVJTJUJPO FOTVSFTSFMJBCMFDFMFCSBUJPOEFMJWFSZ 3FBDUJWFTUBUFNBOBHFNFOU UISPVHI'MPXTJNQMJGJFTDPNQMFY6* DPPSEJOBUJPO 8PSL.BOBHFSTDIFEVMJOH
DPPSEJOBUFTQSFDJTFQIBTFUSBOTJUJPOT BOESFUSZMPHJD 3PPNTSFBDUJWFRVFSJFT QSPWJEFSFBMUJNFTZTUFNTUBUF BXBSFOFTT
5IBOL:PV
&OHJOFFSJOHKPZ#VJMEJOHUIFDFMFCSBUJPOTZTUFN POUIF)PNFUBCPGUIF-*/&BQQPO"OESPJE IUUQTUFDICMPHMZDPSQDPKQFOFOHJOFFSJOHKPZCVJMEJOHUIFDFMFCSBUJPOTZTUFNPOUIF IPNFUBCPGUIFMJOFBQQPOBOESPJE ,PUMJO'MPX%PDVNFOUBUJPO IUUQTLPUMJOMBOHPSHEPDTGMPXIUNM 3PPN%BUBCBTF%PDVNFOUBUJPO
IUUQTEFWFMPQFSBOESPJEDPNUSBJOJOHEBUBTUPSBHFSPPN 8PSL.BOBHFS%PDVNFOUBUJPO IUUQTEFWFMPQFSBOESPJEDPNUPQJDMJCSBSJFTBSDIJUFDUVSFXPSLNBOBHFS 3FGFSFODFT