ã°ããŒãã«ãªãŠãŒã¶ãŒã«ã·ãŒã ã¬ã¹ãªäœéšãæäŸãããããã¢ãã€ã«ã¢ããªã®ããããªãŒäœ¿çšéãšã¡ã¢ãªæ¶è²»ãæé©åããæ¹æ³ãåŠã³ãŸããããã©ãŒãã³ã¹ãæ¹åããè§£çŽçãæžããããŠãŒã¶ãŒæºè¶³åºŠãé«ããŸãããã
ã¢ãã€ã«ããã©ãŒãã³ã¹ïŒã°ããŒãã«ãŠãŒã¶ãŒåãã®ããããªãŒãšã¡ã¢ãªã®æé©å
仿¥ã®ã°ããŒãã«åããäžçã«ãããŠãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã¯ã³ãã¥ãã±ãŒã·ã§ã³ããšã³ã¿ãŒãã€ã¡ã³ããçç£æ§ã®ããã®äžå¯æ¬ ãªããŒã«ã§ãã倿§ãªå°åãããŸããŸãªããã€ã¹èœåãæã€ãŠãŒã¶ãŒã¯ãã·ãŒã ã¬ã¹ã§å¹ççãªäœéšãæ±ããŠããŸããæ¥æ¿ãªããããªãŒæ¶èãéå°ãªã¡ã¢ãªäœ¿çšãç¹åŸŽãšããäœãã¢ãã€ã«ããã©ãŒãã³ã¹ã¯ãäžæºãåŠå®çãªã¬ãã¥ãŒããããŠæçµçã«ã¯ã¢ããªã®ã¢ã³ã€ã³ã¹ããŒã«ã«ã€ãªããå¯èœæ§ããããŸããç¹ã«ã倿§ãªããã€ã¹ä»æ§ããããã¯ãŒã¯æ¡ä»¶ãæã€ã°ããŒãã«ãªãŠãŒã¶ãŒå±€ãã¿ãŒã²ããã«ããå ŽåãããããªãŒãšã¡ã¢ãªã®å¹çãæé©åããããšã¯ããŠãŒã¶ãŒæºè¶³åºŠãå®ççããããŠå šäœçãªæåã«ãšã£ãŠæ¥µããŠéèŠã§ãã
ã°ããŒãã«ãªã¢ãã€ã«ããã©ãŒãã³ã¹ã®èª²é¡ãçè§£ãã
ã°ããŒãã«ãªãŠãŒã¶ãŒåãã«éçºããããšã¯ãã¢ãã€ã«ããã©ãŒãã³ã¹ã«é¢ããŠç¬èªã®èª²é¡ããããããŸãïŒ
- 倿§ãªããã€ã¹ç°å¢ïŒç¹ã«Androidãšã³ã·ã¹ãã ã¯æçåããŠãããããŒãšã³ããããã€ãšã³ããŸã§å¹ åºãããã€ã¹ãååšããããããåŠçèœåãã¡ã¢ãªå®¹éãããããªãŒå¯¿åœãç°ãªããŸããiOSããã€ã¹ã¯æçåãå°ãªããã®ã®ãäžä»£ã«ãã£ãŠããã©ãŒãã³ã¹ã®éããååšããŸãã
- ããŸããŸãªãããã¯ãŒã¯æ¡ä»¶ïŒãããã¯ãŒã¯ã®é床ãšå®å®æ§ã¯å°åã«ãã£ãŠå€§ããç°ãªããŸããã¢ããªã¯äœéãŸãã¯æç¶çãªæ¥ç¶ã«å¯ŸããŠå埩åãæã€å¿ èŠããããŸãã
- ãŠãŒã¶ãŒã®æåŸ ïŒäžçäžã®ãŠãŒã¶ãŒã¯ãããã€ã¹ãå Žæã«é¢ããããé«éã§å¿çæ§ãè¯ãããšãã«ã®ãŒå¹çã®é«ãã¢ããªãæåŸ ããŠããŸãã
- ããŒã«ã©ã€ãŒãŒã·ã§ã³ãšåœéåïŒè€æ°ã®èšèªãå°åããµããŒãããããšã¯ãæ éã«æ±ããªããã°ããããªãè€éããšæœåšçãªããã©ãŒãã³ã¹ã®ããã«ããã¯ãåŒãèµ·ããå¯èœæ§ããããŸãã
ããããªãŒæé©åæŠç¥
ããããªãŒã®æ¶èã¯ãã¢ãã€ã«ãŠãŒã¶ãŒã«ãšã£ãŠå€§ããªæžå¿µäºé ã§ãã广çãªããããªãŒæé©åæŠç¥ãå®è£ ããããšã¯ããŠãŒã¶ãŒã®ãšã³ã²ãŒãžã¡ã³ããšæºè¶³åºŠãç¶æããããã«äžå¯æ¬ ã§ãã以äžã«ããã€ãã®äž»èŠãªãã¯ããã¯ã玹ä»ããŸãïŒ
1. ãããã¯ãŒã¯ãªã¯ãšã¹ããæå°åãã
ãããã¯ãŒã¯ãªã¯ãšã¹ãã¯ãã¢ãã€ã«ããã€ã¹ã§æããšãã«ã®ãŒãæ¶è²»ããæäœã®äžã€ã§ããããããªãŒå¯¿åœãç¯çŽããããã«ããããã¯ãŒã¯ãªã¯ãšã¹ãã®é »åºŠãšãµã€ãºãåæžããŸãã
- ãªã¯ãšã¹ãã®ãããåŠçïŒè€æ°ã®å°ããªãªã¯ãšã¹ããäžã€ã®å€§ããªãªã¯ãšã¹ãã«ãŸãšããŸããäŸãã°ãåã ã®ãŠãŒã¶ãŒãããã£ãŒã«ãäžã€ãã€ååŸãã代ããã«ããããã§ååŸããŸãã
- ããŒã¿è»¢éã®æé©åïŒJSONãProtocol Buffersã®ãããªå¹ççãªããŒã¿åœ¢åŒã䜿çšããŠãããŒã¿è»¢éãµã€ãºãæå°åããŸãããããã¯ãŒã¯çµç±ã§éä¿¡ããåã«ããŒã¿ãå§çž®ããŸãã
- ããŒã¿ã®ãã£ãã·ã¥ïŒé »ç¹ã«ã¢ã¯ã»ã¹ãããããŒã¿ãããŒã«ã«ã«ãã£ãã·ã¥ããŠããããã¯ãŒã¯ãªã¯ãšã¹ãã®å¿ èŠæ§ãæžãããŸããããŒã¿ã®é®®åºŠã確ä¿ããããã«ãé©åãªãã£ãã·ã¥ç¡å¹åæŠç¥ãå®è£ ããŸãã
- å¹ççãªAPIã®äœ¿çšïŒå¹ççãªãããã¯ãŒã¯éä¿¡ã®ããã«èšèšããããã©ãããã©ãŒã åºæã®APIïŒäŸïŒAndroidã®`HttpURLConnection`ãiOSã®`URLSession`ïŒãå©çšããŸãã
- ããã¯ã°ã©ãŠã³ãã¿ã¹ã¯ãè³¢ãã¹ã±ãžã¥ãŒã«ããïŒããã¯ã°ã©ãŠã³ãã¿ã¹ã¯ã®äœ¿çšã¯æ§ããã«ããè³¢ãã¹ã±ãžã¥ãŒã«ããŸããéèŠã§ãªãã¿ã¹ã¯ã¯ãããã€ã¹ãã¢ã€ãã«ç¶æ ãŸãã¯å é»äžã®æéã«å»¶æããŸããäŸãã°ãAndroidã§ã¯`WorkManager` APIããiOSã§ã¯`BackgroundTasks.framework`ã䜿çšããŸãã
äŸïŒãŠãŒã¶ãŒãã£ãŒããååŸãããœãŒã·ã£ã«ã¡ãã£ã¢ã¢ããªã¯ãåå¥ã«ååŸãã代ããã«ãè€æ°ã®æçš¿ãåäžã®ãªã¯ãšã¹ãã«ãããåŠçã§ããŸããé »ç¹ã«é²èЧããããããã£ãŒã«ãç»åãããŒã«ã«ã«ãã£ãã·ã¥ããããšã§ããããã¯ãŒã¯äœ¿çšéãããã«åæžã§ããŸãã
2. äœçœ®æ å ±ãµãŒãã¹ãæé©åãã
äœçœ®æ å ±ãµãŒãã¹ã¯ãç¹ã«ç¶ç¶çã«äœ¿çšãããå Žåãããªãã®ããããªãŒé»åãæ¶è²»ããå¯èœæ§ããããŸããããããªãŒæ¶èãæå°éã«æããããã«ãäœçœ®æ å ±ã®äœ¿çšãæé©åããŸãã
- å¿ èŠãªå Žåã«ã®ã¿äœçœ®æ å ±ã䜿çšããïŒã¢ããªã®æ©èœã«äžå¯æ¬ ãªå Žåã«ã®ã¿äœçœ®æ å ±ããŒã¿ãèŠæ±ããŸãã
- æã粟床ã®äœãäœçœ®æ å ±ãããã€ããŒã䜿çšããïŒæå°éã®ãšãã«ã®ãŒæ¶è²»ã§å¿ èŠãªç²ŸåºŠãæäŸããäœçœ®æ å ±ãããã€ããŒãéžæããŸããäŸãã°ãé«ã粟床ãäžèŠãªå Žåã¯ãGPSã®ä»£ããã«Wi-Fiãæºåž¯é»è©±ã®åºå°å±äžè§æž¬éã䜿çšããŸãã
- ãžãªãã§ã³ã·ã³ã°ïŒãžãªãã§ã³ã·ã³ã°ã䜿çšããŠããŠãŒã¶ãŒãç¹å®ã®å°ççãšãªã¢ã«åºå ¥ããããšãã«ã®ã¿äœçœ®æ å ±ããŒã¹ã®ã€ãã³ããããªã¬ãŒããŸããããã«ãããç¶ç¶çãªäœçœ®è¿œè·¡ã®å¿ èŠããªããªããŸãã
- äœçœ®æ å ±ã®æŽæ°ããããåŠçããïŒäœçœ®æ å ±ã®æŽæ°ããŸãšããŠãããåŠçããåå¥ã«éä¿¡ããã®ã§ã¯ãªãã宿çã«ãµãŒããŒã«éä¿¡ããŸãã
äŸïŒã©ã€ãã·ã§ã¢ã¢ããªã¯ããŠãŒã¶ãŒã®ä¹è»ãç©æ¥µçã«è¿œè·¡ããŠãããšãã«ã®ã¿ãæ£ç¢ºãªGPSäœçœ®æ å ±ãèŠæ±ãã¹ãã§ããã¢ããªãããã¯ã°ã©ãŠã³ãã«ãããšãã¯ãããããªãŒãç¯çŽããããã«ããã粟床ã®äœãäœçœ®æ å ±ããŒã¿ã«äŸåããããšãã§ããŸãã
3. å¹ççãªããã¯ã°ã©ãŠã³ãåŠç
ããã¯ã°ã©ãŠã³ãããã»ã¹ã¯ãé©åã«ç®¡çãããªããšããããªãŒå¯¿åœãæ¶èãããå¯èœæ§ããããŸãããšãã«ã®ãŒæ¶è²»ãæå°éã«æããããã«ãå¹ççãªããã¯ã°ã©ãŠã³ãåŠçæè¡ãå®è£ ããŸãã
- éåæã¿ã¹ã¯ã䜿çšããïŒé·æéå®è¡ãããæäœãéåæã«å®è¡ããŠãã¡ã€ã³ã¹ã¬ããããããã¯ããã¢ããªãå¿çããªããªãã®ãé²ããŸãã
- ã¹ã±ãžã¥ãŒã«ãããã¿ã¹ã¯ã䜿çšããïŒã¹ã±ãžã¥ãŒã«ãããã¿ã¹ã¯ïŒäŸïŒAndroidã®`AlarmManager`ãiOSã®`Timer`ïŒã䜿çšããŠãç¹å®ã®ééã§ããã¯ã°ã©ãŠã³ãæäœãå®è¡ããŸããããã¯ã°ã©ãŠã³ãã¿ã¹ã¯ãç¶ç¶çã«å®è¡ããããšã¯é¿ããŸãã
- éèŠã§ãªãã¿ã¹ã¯ãå»¶æããïŒéèŠã§ãªãããã¯ã°ã©ãŠã³ãã¿ã¹ã¯ã¯ãããã€ã¹ãã¢ã€ãã«ç¶æ ãŸãã¯å é»äžã®æéã«å»¶æããŸãã
- ããã¯ã°ã©ãŠã³ãåæã®æé©åïŒããã¯ã°ã©ãŠã³ãã®ããŒã¿åæãæé©åããŠããããã¯ãŒã¯äœ¿çšéãšåŠçæéãæå°éã«æããŸããããŒã¿ã»ããå šäœã§ã¯ãªãã倿Žç¹ã®ã¿ã転éããããã«å·®ååæã䜿çšããŸãã
äŸïŒã¡ãŒã«ã¢ããªã¯ã宿çã«æ°ããã¡ãŒã«ããã§ãã¯ããããã«ããã¯ã°ã©ãŠã³ãåæãã¹ã±ãžã¥ãŒã«ãã¹ãã§ããç¹ã«ããã€ã¹ãããããªãŒã§åäœããŠãããšãã¯ãããŸãã«ãé »ç¹ã«æ°ããã¡ãŒã«ããã§ãã¯ããããšã¯é¿ããã¹ãã§ãã
4. UIã¬ã³ããªã³ã°ãæé©åãã
éå¹çãªUIã¬ã³ããªã³ã°ã¯ãããããªãŒæ¶èã®äžå ãšãªãå¯èœæ§ããããŸããUIã¬ã³ããªã³ã°ãæé©åããŠãã¢ããªã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã衚瀺ããããã«å¿ èŠãªåŠçèœåãåæžããŸãã
- ãªãŒããŒãããŒã®æå°åïŒãªãŒããŒãããŒã¯ãã·ã¹ãã ãåããã¬ãŒã å ã§åããã¯ã»ã«ãè€æ°åæç»ãããšãã«çºçããŸããUIéå±€ãåçŽåããäžèŠãªã¬ã€ã€ãŒãé¿ããããšã§ãªãŒããŒãããŒãåæžããŸãã
- ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã®äœ¿çšïŒããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãæå¹ã«ããŠãUIã¬ã³ããªã³ã°ã¿ã¹ã¯ãCPUãããå¹ççãªGPUã«ãªãããŒãããŸãã
- ã¢ãã¡ãŒã·ã§ã³ã®æé©åïŒå¹ççãªã¢ãã¡ãŒã·ã§ã³æè¡ã䜿çšããŠãUIèŠçŽ ãã¢ãã¡ãŒã·ã§ã³åããããã«å¿ èŠãªåŠçèœåãæå°éã«æããŸããè€éãŸãã¯äžèŠãªã¢ãã¡ãŒã·ã§ã³ã®äœ¿çšã¯é¿ããŸãã
- å¹ççãªç»å圢åŒã®äœ¿çšïŒWebPãJPEG XRãªã©ã®æé©åãããç»å圢åŒã䜿çšããŠãç»åãã¡ã€ã«ãµã€ãºãåæžããŸãã
- äžèŠãªUIæŽæ°ã®åé¿ïŒå¿ èŠãªå Žåã«ã®ã¿UIèŠçŽ ãæŽæ°ããŸããã«ãŒãå ã§ç¹°ãè¿ãUIèŠçŽ ãæŽæ°ããããšã¯é¿ããŸãã
äŸïŒã²ãŒã ã¢ããªã¯ãã¬ã³ããªã³ã°ãã€ãã©ã€ã³ãæé©åããŠãªãŒããŒãããŒãæå°éã«æããå¹ççãªã¢ãã¡ãŒã·ã§ã³æè¡ã䜿çšããŠããããªãŒæ¶èãåæžãã¹ãã§ãã
5. æ¶è²»é»åã¢ãŒããæé©åãã
ãã©ãããã©ãŒã åºæã®çé»åã¢ãŒããæŽ»çšããŠãããããªãŒå¯¿åœãããã«æé©åããŸãã
- Android Dozeã¢ãŒãïŒAndroidã®Dozeã¢ãŒãã¯ãããã€ã¹ãã¢ã€ãã«ç¶æ ã®ãšãã«ããã¯ã°ã©ãŠã³ãã¢ã¯ãã£ããã£ãåæžããŸããããã¯ã°ã©ãŠã³ãã¿ã¹ã¯ã«`JobScheduler` APIã䜿çšããŠãã¢ããªãDozeã¢ãŒãã«å¯Ÿå¿ãããŸãã
- ã¢ããªã¹ã¿ã³ãã€ãã±ããïŒAndroidã®ã¢ããªã¹ã¿ã³ãã€ãã±ããã¯ã䜿çšãã¿ãŒã³ã«åºã¥ããŠã¢ããªãå©çšã§ãããªãœãŒã¹ãå¶éããŸããå¶éã®å³ãããã±ããã«é 眮ãããªãããã«ãã¢ããªã®åäœãæé©åããŸãã
- iOSäœé»åã¢ãŒãïŒiOSã®äœé»åã¢ãŒãã¯ãããã¯ã°ã©ãŠã³ãã¢ã¯ãã£ããã£ãšããã©ãŒãã³ã¹ãåæžããŠããããªãŒå¯¿åœãç¯çŽããŸããäœé»åã¢ãŒããæå¹ã«ãªã£ãŠãããšãã¯ãã¢ããªã®åäœã調æŽããããšãæ€èšããŸãã
ã¡ã¢ãªæé©åæŠç¥
éå°ãªã¡ã¢ãªäœ¿çšã¯ãã¢ããªã®ã¯ã©ãã·ã¥ãããã©ãŒãã³ã¹ã®äœäžãããã³å£æªãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªããå¯èœæ§ããããŸããå®å®æ§ãšå¿çæ§ã確ä¿ããããã«ãã¢ããªã®ã¡ã¢ãªæ¶è²»ãæé©åããŸãã以äžã«ããã€ãã®äž»èŠãªãã¯ããã¯ã玹ä»ããŸãïŒ
1. ã¡ã¢ãªãªãŒã¯ã®ç¹å®ãšä¿®æ£
ã¡ã¢ãªãªãŒã¯ã¯ãã¡ã¢ãªãå²ãåœãŠããããŸãŸé©åã«è§£æŸããããæéãšãšãã«ã¡ã¢ãªäœ¿çšéãåŸã ã«å¢å ããçŸè±¡ã§ããã¢ããªã®ã¯ã©ãã·ã¥ãé²ããããã©ãŒãã³ã¹ãåäžãããããã«ãã¡ã¢ãªãªãŒã¯ãç¹å®ããŠä¿®æ£ããŸãã
- ã¡ã¢ãªãããã¡ã€ãªã³ã°ããŒã«ã®äœ¿çšïŒã¡ã¢ãªãããã¡ã€ãªã³ã°ããŒã«ïŒäŸïŒAndroid Studio Profiler, Xcode InstrumentsïŒã䜿çšããŠãã¡ã¢ãªãªãŒã¯ãç¹å®ããã¡ã¢ãªå²ãåœãŠã远跡ããŸãã
- Activity/Contextãžã®éçåç §ãé¿ããïŒActivityãContextãžã®åç §ãéç倿°ã«æ ŒçŽããããšã¯é¿ããŸããããã«ãããããããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãããã®ã劚ããå¯èœæ§ããããŸãã
- ãªãœãŒã¹ãé©åã«è§£æŸããïŒãªãœãŒã¹ïŒäŸïŒãããããããã¹ããªãŒã ãããŒã¿ããŒã¹æ¥ç¶ïŒãäžèŠã«ãªã£ããè§£æŸããŸãã`try-with-resources`ãããã¯ã䜿çšããŠããªãœãŒã¹ãé©åã«éããããããšãä¿èšŒããŸãã
- ãªã¹ããŒã®ç»é²è§£é€ïŒã¡ã¢ãªãªãŒã¯ãé²ãããã«ããªã¹ããŒïŒäŸïŒã€ãã³ããªã¹ããŒããããŒããã£ã¹ãã¬ã·ãŒããŒïŒãäžèŠã«ãªã£ããç»é²ãè§£é€ããŸãã
äŸïŒç»åã衚瀺ããã¢ããªã¯ãç»åã衚瀺ãããªããªã£ããšãã«ãããããããå æããã¡ã¢ãªãè§£æŸãã¹ãã§ãã
2. ç»ååŠçã®æé©å
ç»åãç¹ã«é«è§£å床ã®ç»åã¯ã倧éã®ã¡ã¢ãªãæ¶è²»ããå¯èœæ§ããããŸããã¡ã¢ãªäœ¿çšéãåæžããããã«ãç»ååŠçãæé©åããŸãã
- ç»åãéåæã§èªã¿èŸŒãïŒã¡ã€ã³ã¹ã¬ããããããã¯ããªãããã«ãç»åãéåæã§èªã¿èŸŒã¿ãŸãã
- ç»åã®ãµã€ãºå€æŽïŒè¡šç€ºããåã«ãç»åãé©åãªãµã€ãºã«å€æŽããŸããå°ãããµã€ãºã§ãã衚瀺ãããªãå Žåãå ã®è§£å床ã§ç»åãèªã¿èŸŒãããšã¯é¿ããŸãã
- ç»åãã£ãã·ã³ã°ã®äœ¿çšïŒé »ç¹ã«ã¢ã¯ã»ã¹ãããç»åãã¡ã¢ãªã«ä¿åããããã«ç»åãã£ãã·ã³ã°ã䜿çšããŸãããã£ãã·ã¥ããã£ã±ãã«ãªã£ããšãã«ãæãæè¿äœ¿çšãããŠããªãç»åãåé€ããããã®ãã£ãã·ã¥åé€ããªã·ãŒãå®è£ ããŸãã
- ããããããããŒãªã³ã°ã®äœ¿çšïŒæ°ãããããããããå²ãåœãŠã代ããã«ãæ¢åã®ãããããããåå©çšããããã«ããããããããŒãªã³ã°ã䜿çšããŸããããã«ãããã¡ã¢ãªå²ãåœãŠãåæžãããããã©ãŒãã³ã¹ãåäžããŸãã
- WebP圢åŒã®äœ¿çšïŒJPEGãPNGãšæ¯èŒããŠåªããå§çž®çãšå質ãæäŸããWebPç»å圢åŒãå©çšããŸãã
äŸïŒeã³ããŒã¹ã¢ããªã¯ãååç»åãéåæã§èªã¿èŸŒã¿ãååãªã¹ãã«è¡šç€ºããåã«é©åãªãµã€ãºã«å€æŽãã¹ãã§ãã
3. ããŒã¿æ§é ãå¹ççã«äœ¿çšãã
åœé¢ã®ã¿ã¹ã¯ã«é©ããããŒã¿æ§é ãéžæããã¡ã¢ãªäœ¿çšéãæå°éã«æããããã«å¹ççã«äœ¿çšããŸãã
- ã¹ããŒã¹é å/ãããã®äœ¿çšïŒãŸã°ãã«ããŒã¿ãæ ŒçŽãããŠããå Žåã¯ãã¹ããŒã¹é åãŸãã¯ãããã䜿çšããŸããããã«ãããnullã§ãªãèŠçŽ ã«å¯ŸããŠã®ã¿ã¹ããŒã¹ãå²ãåœãŠãããšã§ã¡ã¢ãªãç¯çŽã§ããŸãã
- ããªããã£ãããŒã¿åã®äœ¿çšïŒå¯èœãªå Žåã¯ãã©ãããŒãªããžã§ã¯ãïŒäŸïŒ`Integer`, `Float`, `Boolean`ïŒã®ä»£ããã«ããªããã£ãããŒã¿åïŒäŸïŒ`int`, `float`, `boolean`ïŒã䜿çšããŸããããªããã£ãããŒã¿åã¯ã¡ã¢ãªæ¶è²»ãå°ãªãã§ãã
- äžèŠãªãªããžã§ã¯ãã®äœæãé¿ããïŒç¹ã«ã«ãŒãå ã§ãäžèŠãªãªããžã§ã¯ãã®äœæãé¿ããŸããå¯èœãªå Žåã¯æ¢åã®ãªããžã§ã¯ããåå©çšããŸãã
- ã€ãã¥ãŒã¿ãã«ãªããžã§ã¯ãã®äœ¿çšïŒå¯èœãªéãã€ãã¥ãŒã¿ãã«ïŒäžå€ïŒãªããžã§ã¯ãã䜿çšããŸããã€ãã¥ãŒã¿ãã«ãªããžã§ã¯ãã¯ã¹ã¬ããã»ãŒãã§ãããåæãªãã§è€æ°ã®ã¹ã¬ããéã§å ±æã§ããŸãã
äŸïŒå€æ°ã®ããŒãšå€ã®ãã¢ãæ ŒçŽããã¢ããªã¯ã`ArrayList`ã®ä»£ããã«`HashMap`ã䜿çšãã¹ãã§ãã
4. ãªããžã§ã¯ãçæã®æå°å
ãªããžã§ã¯ãã®çæã¯ãã¡ã¢ãªãšCPU䜿çšéã®ç¹ã§ã³ã¹ãããããå¯èœæ§ããããŸããããã©ãŒãã³ã¹ãåäžãããã¡ã¢ãªæ¶è²»ãåæžããããã«ããªããžã§ã¯ãã®çæãæå°éã«æããŸãã
- ãªããžã§ã¯ãããŒãªã³ã°ã®äœ¿çšïŒæ°ãããªããžã§ã¯ããäœæãã代ããã«ãæ¢åã®ãªããžã§ã¯ããåå©çšããããã«ãªããžã§ã¯ãããŒãªã³ã°ã䜿çšããŸããããã¯ãé »ç¹ã«äœæããã³ç Žæ£ããããªããžã§ã¯ãã«ç¹ã«æçã§ãã
- ãã©ã€ãŠã§ã€ããã¿ãŒã³ã®äœ¿çšïŒå éšç¶æ ãæã€ãªããžã§ã¯ããå ±æããããã«ãã©ã€ãŠã§ã€ããã¿ãŒã³ã䜿çšããŸããããã«ãããå ±æç¶æ ãåäžã®ãªããžã§ã¯ãã«æ ŒçŽããå€éšç¶æ ããã©ã¡ãŒã¿ãšããŠæž¡ãããšã§ãã¡ã¢ãªäœ¿çšéãåæžã§ããŸãã
- ã«ãŒãå ã§ã®æååé£çµãé¿ããïŒã«ãŒãå ã§ã®æååé£çµã¯ã倿°ã®äžæçãªæååãªããžã§ã¯ããäœæããå¯èœæ§ãããããé¿ããŸãã代ããã«`StringBuilder`ã䜿çšããŸãã
äŸïŒã²ãŒã ã¢ããªã¯ãåã·ã§ããããšã«æ°ãã匟䞞ãªããžã§ã¯ããäœæãã代ããã«ããªããžã§ã¯ãããŒãªã³ã°ã䜿çšããŠåŒŸäžžãªããžã§ã¯ããåå©çšã§ããŸãã
5. ããŒã¿ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ã®æé©å
ããŒã¿ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ã¯ãç¹ã«å€§èŠæš¡ãŸãã¯è€éãªããŒã¿æ§é ãæ±ãå Žåã«ã倧éã®ã¡ã¢ãªãæ¶è²»ããå¯èœæ§ããããŸããã¡ã¢ãªäœ¿çšéãåæžããããã©ãŒãã³ã¹ãåäžãããããã«ãããŒã¿ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ãæé©åããŸãã
- å¹ççãªã·ãªã¢ã©ã€ãŒãŒã·ã§ã³åœ¢åŒã®äœ¿çšïŒæšæºã®Javaã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ãããã³ã³ãã¯ãã§é«éãªProtocol BuffersãFlatBuffersãªã©ã®å¹ççãªã·ãªã¢ã©ã€ãŒãŒã·ã§ã³åœ¢åŒã䜿çšããŸãã
- äžèŠãªããŒã¿ã®ã·ãªã¢ã©ã€ãºãé¿ããïŒéä¿¡ãŸãã¯ä¿åã«å¿ èŠãªããŒã¿ã®ã¿ãã·ãªã¢ã©ã€ãºããŸããäžæçãŸãã¯æŽŸçãã£ãŒã«ãã®ã·ãªã¢ã©ã€ãºã¯é¿ããŸãã
- ã«ã¹ã¿ã ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ã®äœ¿çšïŒç¹å®ã®ããŒã¿æ§é ã«åãããŠã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ããã»ã¹ãæé©åããããã«ãã«ã¹ã¿ã ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ããžãã¯ãå®è£ ããŸãã
äŸïŒãããã¯ãŒã¯çµç±ã§å€§èŠæš¡ãªããŒã¿ã»ãããéä¿¡ããã¢ããªã¯ãã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ã«Protocol Buffersã䜿çšãã¹ãã§ãã
6. ã¡ã¢ãªå¹çã®è¯ãã©ã€ãã©ãªã䜿çšãã
ã¡ã¢ãªå¹çãè¯ãããã«èšèšãããæ¢åã®ã©ã€ãã©ãªããã¬ãŒã ã¯ãŒã¯ã掻çšããŸãã
- Picasso/Glide/Coil (Android): ãããã®ã©ã€ãã©ãªã¯ãç»åã®èªã¿èŸŒã¿ãšãã£ãã·ã³ã°ãå¹ççã«åŠçããŸãã
- Kingfisher/SDWebImage (iOS): éåæã®ç»åããŠã³ããŒãããã£ãã·ã³ã°ã衚瀺ã®ããã®äººæ°ã®ããã©ã€ãã©ãªã§ãã
- Retrofit/OkHttp: ãããã®ã©ã€ãã©ãªã¯ããããã¯ãŒã¯éä¿¡ã«æé©åãããŠããŸãã
ããã©ãŒãã³ã¹ç£èŠã®ããã®ããŒã«ãšãã¯ããã¯
æœåšçãªåé¡ãç¹å®ã察åŠããããã«ãã¢ããªã®ããã©ãŒãã³ã¹ã宿çã«ç£èŠããŸãã以äžã®ããŒã«ãšãã¯ããã¯ã掻çšããŠãã ããïŒ
- Android Studio Profiler: CPU䜿çšçãã¡ã¢ãªå²ãåœãŠããããã¯ãŒã¯ã¢ã¯ãã£ããã£ãããããªãŒæ¶è²»ããããã¡ã€ãªã³ã°ããããã®å æ¬çãªããŒã«ã
- Xcode Instruments: iOSéçºã®ããã®åŒ·åãªããã©ãŒãã³ã¹åæããŒã«ã¹ã€ãŒãã
- Firebase Performance Monitoring: ã¢ããªã®ããã©ãŒãã³ã¹ã¡ããªã¯ã¹ã远跡ããã³åæããããã®ã¯ã©ãŠãããŒã¹ã®ãµãŒãã¹ã
- Crashlytics/Firebase Crash Reporting: ã¯ã©ãã·ã¥ãšäŸå€ã远跡ããŠãæœåšçãªã¡ã¢ãªãªãŒã¯ããã®ä»ã®ããã©ãŒãã³ã¹åé¡ãç¹å®ããŸãã
- ããã©ãŒãã³ã¹ãã¹ã: ããŸããŸãªããã€ã¹ãšãããã¯ãŒã¯æ¡ä»¶ã§ããã©ãŒãã³ã¹ãã¹ãã宿œããããã«ããã¯ãç¹å®ããŠã¹ã±ãŒã©ããªãã£ã確ä¿ããŸãã
ããã©ãŒãã³ã¹ãã¹ãã«ãããã°ããŒãã«ãªèæ ®äºé
ã¢ããªã®ããã©ãŒãã³ã¹ããã¹ãããéã«ã¯ãäžçäžã«ååšãã倿§ãªããã€ã¹ãšãããã¯ãŒã¯æ¡ä»¶ãèæ ®ããããšãéèŠã§ããã°ããŒãã«ãªããã©ãŒãã³ã¹ãã¹ãã®ããã®ããã€ãã®ãã³ãã以äžã«ç€ºããŸãïŒ
- ããŸããŸãªããã€ã¹ã§ãã¹ãããïŒããŒãšã³ããããã€ãšã³ããŸã§ãããŸããŸãªããã€ã¹ã§ã¢ããªããã¹ããããã¹ãŠã®ããã€ã¹ã§è¯å¥œãªããã©ãŒãã³ã¹ãçºæ®ããããšã確èªããŸããããåºç¯å²ã®ããã€ã¹ã§ãã¹ãããããã«ãããã€ã¹ãã¡ãŒã ããšãã¥ã¬ãŒã¿ã®äœ¿çšãæ€èšããŸãã
- ç°ãªããããã¯ãŒã¯æ¡ä»¶ã§ãã¹ãããïŒäœéã§æç¶çãªæ¥ç¶ãå«ãããŸããŸãªãããã¯ãŒã¯æ¡ä»¶ã§ã¢ããªããã¹ããããããã¯ãŒã¯ã®å€åã«å¯Ÿããå埩åãããããšã確èªããŸããããŸããŸãªãããã¯ãŒã¯æ¡ä»¶ãã·ãã¥ã¬ãŒãããããã«ããããã¯ãŒã¯ã·ãã¥ã¬ãŒã¿ã®äœ¿çšãæ€èšããŸãã
- ç°ãªãå°åã§ãã¹ãããïŒç°ãªããããã¯ãŒã¯ç°å¢ã§è¯å¥œã«åäœããããšã確èªããããã«ãç°ãªãå°åã§ã¢ããªããã¹ãããŸããç°ãªãå°åãããã¹ãããããã«ãVPNãã¯ã©ãŠãããŒã¹ã®ãã¹ããµãŒãã¹ã®äœ¿çšãæ€èšããŸãã
- æ¬çªç°å¢ã§ã®ããã©ãŒãã³ã¹ãç£èŠããïŒæ¬çªç°å¢ã§ã®ã¢ããªã®ããã©ãŒãã³ã¹ãç£èŠããå®éã®äœ¿çšã·ããªãªã§çºçããå¯èœæ§ã®ããåé¡ãç¹å®ããŠå¯ŸåŠããŸããããã©ãŒãã³ã¹ç£èŠããŒã«ã䜿çšããŠãã¢ããªã®èµ·åæéãç»é¢ã®èªã¿èŸŒã¿æéãã¯ã©ãã·ã¥çãªã©ã®äž»èŠãªããã©ãŒãã³ã¹ã¡ããªã¯ã¹ã远跡ããŸãã
- ãŠãŒã¶ãŒããã®ãã£ãŒãããã¯ãåéããïŒãŠãŒã¶ãŒãçµéšããŠããããã©ãŒãã³ã¹ã®åé¡ãç¹å®ããããã«ããŠãŒã¶ãŒããã®ãã£ãŒãããã¯ãåéããŸããã¢ããªå ã¢ã³ã±ãŒãããã£ãŒãããã¯ãã©ãŒã ã䜿çšããŠããŠãŒã¶ãŒã®ãã£ãŒãããã¯ãåéããŸãã
çµè«
ããããªãŒãšã¡ã¢ãªäœ¿çšéã«é¢ããŠã¢ãã€ã«ã¢ããªã®ããã©ãŒãã³ã¹ãæé©åããããšã¯ãã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«ã·ãŒã ã¬ã¹ã§é åçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããããã«äžå¯æ¬ ã§ãããã®ã¬ã€ãã§æŠèª¬ãããæŠç¥ãå®è£ ããããšã«ãããéçºè ã¯ã¢ããªã®ããã©ãŒãã³ã¹ãåäžãããããããªãŒã®æ¶èãæžãããã¡ã¢ãªæ¶è²»ãæå°éã«æããããšãã§ããçµæãšããŠãŠãŒã¶ãŒæºè¶³åºŠãå®ççãããã³ã¢ããªå šäœã®æåã«ã€ãªãããŸããçµ¶ããé²åããã¢ãã€ã«ã®ç¶æ³ã«ãããŠæé©ãªããã©ãŒãã³ã¹ãç¶æããããã«ã¯ãç¶ç¶çãªç£èŠããã¹ããããã³ååŸ©ãæ¥µããŠéèŠã§ãã