Rxã£ãŠæ£çŽäœ¿ãæ¹ã«æ°ãã€ããªããšã¢ããªå šäœã®ã¢ãŒããã¯ãã£ãå·Šå³ãã¡ããæããã£ãŠãããŠä»åŸã©ãããä»ãåãæ¹ãããã°ãããã ãããã£ãŠè©±ãããã¡
— ããããæ¥ããã (@shuma_yoshioka) September 27, 2019
å®ãèšããšåã¯ããã¢ããªå šäœã®ã¢ãŒããã¯ãã£ãšããŠRxãè¡ãæž¡ãããã®ã奜ãã§ãäžéå端ã«å ¥ããããè² åµã«ãªã£ãŠãã ããªããããããšããæ°æã¡ã«ãªãããšãå€ã
— ããããæ¥ããã (@shuma_yoshioka) September 27, 2019
æ¬æ¥ã¢ãžã¥ãŒã«ããšã«ã¡ãããšç¬ç«æ§ãæ ä¿ãããŠãªãããããªããšããããRx䟿å©ãããŒãããšäžéå端ã«ä»ã®ã¢ãžã¥ãŒã«ãšã®ã³ãã¥ãã±ãŒãææ®µãšããŠã䜿ã£ã¡ãã£ããããã®SubscriptionãŸããã®ç®¡çãé©åã«èããã«äœ¿ã£ã¡ãããããã¡ãªããããªãããª
— ããããæ¥ããã (@shuma_yoshioka) September 27, 2019
Rxãšäžç·ã«çããèŠæããªãã®ãªãããããŸãæ··åšãããã«ç¹å®ã¢ãžã¥ãŒã«å ã«éããäœ¿ãæ¹ (寿åœç®¡çãèªåã§ã¡ãããšããŠãããã®ããã) ã§çµããããªããšããã管çã§ããªããªãããã£ãŠãã話
— ããããæ¥ããã (@shuma_yoshioka) September 27, 2019
èŠæã£ãŠããã®ã¯ããã®ã¢ããªã®ã³ãŒãããŒã¹ãRxãšãã®åšèŸºãšã³ã·ã¹ãã ã®ã¡ã³ããã³ã¹ãåè³ªãæ ä¿ãããŠãã (ãŸãã¯èªåãã¡ãæ ä¿ã§ãã) æéã§åãŸããããšãã話ã§èããŠãããå®å šã«ãšã³ãžãã¢ãªã³ã°ã®çæ³ãå®çŸã§ããŠããã¢ãŒããã¯ãã£ãšããã®ã¯å©çšããŒã«ã容æã«çœ®æå¯èœãªãã®ãªã®ã§ã
— ããããæ¥ããã (@shuma_yoshioka) September 27, 2019
ã¹ãããªãããã£ãã®ã§é ã®äžèº«dumpããhttps://t.co/tbjsCTCqqs
— ããããæ¥ããã (@shuma_yoshioka) September 27, 2019
ã©ããŸã§ãã£ãã£ãŠããšã ãªãã ãã©ããããçµå±ã©ããã颚ã«èããããã£ãŠããé ã®äžã®ããšã®dumpã§ãããŸãšãŸã£ãŠãªããã©ããããã
ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³éçºã«ãããRxãžã®äŸåç®æã§ãããšã
- è€éãªéåæçç¶æ å€åã«ããã€ãã³ãåŠçãé èœãã
- ã©ã€ããµã€ã¯ã«ãšã®åæã容æã«ãã
ãšããç®çã§èšè¿°ãããç®æãšããããç¶ãåŠçå
šäœãžç¶ããŠããå Žåãå€ããšæããããšã¯MVVMã¢ãŒããã¯ãã£æ¡çšã§ããŒã¿ãã€ã³ãã£ã³ã°ããéœåäžãšããã
Rxã¯éåæçãªã€ãã³ãã®ç¹ã蟌ã¿ããã¡ããã¡ã容æã«ã§ããåé¢ãäžæããã³ãã«ããªããšãããè¡ãããã®ã³ãŒãå
šäœã«åœ±é¿ãäžããŠããŸãããã
ããããŠãããžã§ã¯ãã®è³ããšããã§å©çšãããRxã©ã€ãã©ãªã¯ããŒã«ã®çœ®æãå°é£ã«ããå Žåãããã
ãã®æå³ã§åœ±é¿ç¯å²ã®åºãã©ã€ãã©ãªãçšããããšã¯æªãšèšãããããããªãã®ã ãã©ããããRxã«çžåœããã©ã€ãã©ãªãçŸå®åé¡ãšããŠå€ãããã ã£ã? ãšãããšããªãé£ããã±ãŒã¹ãããã
çŸä»£ã®ã¢ããªã±ãŒã·ã§ã³ã¯ããããã®ç¶æ
ãæã£ãŠããŠãããããã®éåæçãªã€ãã³ããåŠçããªãããããªããããã«ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã®äºæ
ã«ãªããšãéããããªãœãŒã¹ã§æå€§éã®ããã©ãŒãã³ã¹ãåºãã¹ãã©ã€ããµã€ã¯ã«ãªããŠèšãæ¹ããããå¶çŽãšãæŠãå¿
èŠãããã
èŠã¯ã¢ãã€ã«ã¢ããªã®äžçã¯ç©¶æ¥µã®ã¹ããŒããã«ã§ã人éã«ã¯æ©ãããå Žåããããã
ãšãããšRxã«çžåœãããã®ãšã¯ (æ°ããªå®çšçãã©ãã€ã ãæå±ãããªãéã) ä»ãåãç¶ããããšã«ãªããèŠã¯Rxã䜿ããããåŸãªãã³ãŒãããŒã¹ã«ãããŠã¯ãRxã¯ã©ã€ãã©ãªã§ã¯ãªãæ¢ã«ãã©ãã€ã ã§ãããèšèªã®äžéšã«ããçžåœãããã®ã§ããããããããããšRxãžã®äŸå床ãäžããããªã©ãšèããªãã»ããããã
ãããRx以å€äœ¿ãããããªããã ã£ã? ãšãããšãããªããšããªãããããããã«ã¯åèã®äœå°ã倧ãã«ããã
Androidã¢ããªã±ãŒã·ã§ã³éçºã®æèã§èšããšãåæ§ã®æ©èœãæäŸãããã®ã¯è€æ°ããã
- Rx (RxJava)
- LiveData
- Kotlin Coroutine
ãŸãLiveDataã¯GoogleãæäŸããŠããAndroidåãã®ããŒã¿ãã«ãã©ã€ãã©ãªã ãããã¯Rxãã¢ãã«ã«ããŠãããå¯ã«Androidã®ã©ã€ããµã€ã¯ã«ãšçµåããŠãããAndroidã¢ããªéçºã«éãã°æé©ãªéžæè¢ã«ãªãããã
ãããŠKotlin Coroutineã¯Kotlinèšèªæ©èœã®ã²ãšã€ãšããŠæäŸãããéåæåŠçã©ã€ãã©ãªã§ãç¹å®ã¹ã¬ããã«äŸåããªãéšåãäžæå¯èœã§ããéšåãªã©ãå©çšããAndroidã®ã©ã€ããµã€ã¯ã«ã«åæãããããšã容æã§ããã
ãããã¯Rxã«äŸåããæ¢åã³ãŒããèµ·ãããŠããåé¡ãã¹ãŠã解決ãããããšãã§ããã? çãã¯NOã ãLiveDataã¯Rxãããã©ã€ãã§ã¯ãã£ãŠããåæ§ã«ã€ãã³ãã®äŒæãè¡ãããã«è€æ°ã¢ãžã¥ãŒã«é ã ã¢ããªã±ãŒã·ã§ã³å šäœã§äŸåãããããKotlin Coroutineã¯ããã«ããã«ã©ã€ãã§ã¯ãã£ãŠãçµå±è€æ°ã¢ãžã¥ãŒã«ããšã«åå¥ã§launchãè¡ãããšã«ãªãããã
ãããæãè¿ããŠã¿ãã°ãRxã¯æ¢ã«ãã®ã¢ããªã«ãããŠã¯ã²ãšã€ã®èšèªã«çžåœãã圹å²ãæ ã£ãŠããã¯ãã ãã ãšããã°ãèšèªéžæãšåãããã«èããã°ã¢ããã³ããŒãžãèŠã€ããã®ã§ã¯ãªããã
ã¢ããªã±ãŒã·ã§ã³éçºã«ãããèšèªéžæãšããã®ã¯é¢çœããŠããããŸã§ããŒã«ã§ãããªãã«ããããããããã®ã¢ããªã®çãæ¹ããæ±ºããã
èšèªæ©èœãšããŠäœãæäŸãããã? ãããçç£æ§ã®åäžã«ç¹ããã? ãšããã®ã¯ã©ã€ãã©ãªãããŒã«ã®éžå®åºæºãšäœãå€ãããªããããã®ããŒã«ã¯ã³ãŒãã®æžãæ¹ã決å®ãããã³ãŒãã¯ããžãã¹ãã®ãã®ãäœããè³ç£ãäœã£ãŠããã®ã§ããã
ãããã®èšèªã®å®è¡ç°å¢ãæªæ¥æ°žå«ã«å€±ããããšããããããžãã¹å
šäœãå¥ã®èšèªãžç§»æ€ãããšããå€§èŠæš¡ãªäœæ¥ãããããšã«ãªãã
ãã®ãããªããšãèµ·ãããªããããååã«æ
å ±éãããããã¡ã³ããã³ã¹ã§ããã ãã®ãªãœãŒã¹ã確ä¿ã§ããããå°æ¥ã«æž¡ã£ãŠã®å質ãæ
ä¿ãããŠãããããªã©ãæ
éã«èª¿æ»ããã¯ãã ã
èšèªãããŒã«ã§ãããèšèªã«çžåœãã圹å²ãæ ã£ãã©ã€ãã©ãªããããªãã°ãããã¯åãéžå®åºæºãæã£ãŠéžæããã°ãããããªãã¡ãäžç·ã«çãããããã ãä»ã¡ã³ããã³ã¹ããŠããã³ãŒãããã€ãã¯å¯¿åœãå°œããããã®å¯¿åœã«èããããã§èšèªéžå®ãããã®ãšåæ§ã«éžã¹ã°è¯ãã
ããã»ã©æãã3ã€ã¯ã©ããOSSã ãããªãã¡èªåèªèº«ãã¡ã³ããã³ã¹ãããéã寿åœã¯æ°žé ã ããããçŸå®åé¡ãšããŠããã¯é£ããã
Androidã¢ããªã§ããã°ãAndroidãã©ãããã©ãŒã ã®å¯¿åœãå°œãããšåæã«ãã®ã¢ããªã®å¯¿åœã¯å°œãããããã»ã©ãŸã§ã«Androidåãã¢ããªã¯Androidãã©ãããã©ãŒã ã«äŸåããã³ãŒãããŒã¹ãšãªã£ãŠãããã ãšããã°LiveDataã¯Androidãã©ãããã©ãŒã ã®ããã ãã«GoogleãéçºããŠãããšããç¹ã§ãã¢ããªã®å¯¿åœã«èããããããããªãã
ãã®Androidã¢ããªãKotlinã§æžãããŠãããšããããKotlinèšèªã®å¯¿åœãå°œãããšåæã«ãã®ã¢ããªã®æ¢åã³ãŒãã®å¯¿åœã¯å°œãããã ãšããã°Kotlin Coroutineã¯ã³ãŒãã®å¯¿åœã«èããããããããªãã
ãã¡ããæåŸ ããŠã¯ãããªãããã©ãããã©ãŒã ã®APIããç¬ç«ããã©ã€ãã©ãªã¯å®¹æã«ã¯ããŒãºã§ããããèšèªæ©èœã®äžéšãéæšå¥šã«ãªãããšããããã話ã ã
ãããããããªããRxã«äŸåããã³ãŒããšå¥ããã¹ãã ãšæããã®ã ãšãããããã®ã¢ããªã¯Rxãšäžçãå ±ã«ã§ããªãã£ãã®ãããããªãããæ¬¡ã®ããŒãããŒéžã³ã¯æ éã«ãªãã¹ãã ãäžçä»ãåãããšã«ãªããããããªãã®ã ããã
ãã¡ããããªã¢ã¯ãã£ãããã°ã©ãã³ã°ã«çžåœãããã©ãã€ã ããé¢ãããšããéžæè¢ãå¿ããŠã¯ãããªããããšãã°FluxãReduxãšããã¢ãŒããã¯ãã£ã¯ããã«åã£ãŠä»£ãããã®ãããããªããããã«Rxã®å°é 以åã¯ããããªããšããªããšããã£ãŠããã¯ãã ã
ããã«èšãã°ããªã¢ã¯ãã£ãããã°ã©ãã³ã°ãšã®ä»ãåãæ¹ãèŠçŽããšããæ¹æ³ããããåã¢ãžã¥ãŒã«å
ã§çºè¡ãããµãã¹ã¯ãªãã·ã§ã³ã管çããä»ã®ã¢ãžã¥ãŒã«ãžåœè©²ãã©ãã€ã ãæŒãåºãããªããšããæ¹æ³ã ãKotlin Coroutineãªãäœ¿ãæ¹æ¬¡ç¬¬ã§ã¯ãããªããããããªãã
ãããããã¯æ¬åœã«ããããã£ãããšã ããããçµå±ã®ãšãããªã¢ã¯ãã£ãããã°ã©ãã³ã°ã®ãã©ãã€ã ã«ãã£ãŠå®çŸãããã£ãã€ãã³ãäŒæã®å®¹ææ§ã¯å€±ãããæ¬æ¥ã®boilerplateãæžãç¶ããããšã«ãªãã®ã§ã¯ãªãã ãããã
ããæ¢åã®ã³ãŒãããããŸã§Rxã«ããã€ãã³ãäŒæã«ããã¿ãªã ãšããããããããå¥ããã³ã¹ããæããã ãããïŒããã¯èšèªãå€ããã®ã«çžåœããåŽåãå¿
èŠãããããªãã
ããæåã«èšèªéžæã誀ã£ãã®ã ãšããããã¯ãããŠä»èšèªãžã®ç§»æ€ãæ¬åœã«ãã¹ããªã®ãããã®ã³ã¹ãã¯å¹æã«èŠåããã®ãªã®ããããèããã»ããããã