TechFeedã1ã½ã¼ã¹ã§å ¨ããã¤ã¹å¯¾å¿ï¼Progressive Web Appsåãã話
大å¤ãç¡æ²æ±°ãã¦ããã¾ããTechFeedã®ç½ç³ã§ãã
ååã®è¨äºã§ãä¼ãããã¨ãããå æ¥2016/11/7ãTechFeedååãªãªã¼ã¹ï¼7æ26æ¥ï¼ä»¥æ¥åãã¦ã®ã¡ã¸ã£ã¼ãã¼ã¸ã§ã³ã¢ãããæããã¾ããã
ã³ã¼ããã¼ã¹ãå¤§å¹ ã«æ¸ãæããWebã¢ããªã¨ã¢ãã¤ã«ã¢ããªãå ¨ã¦ä¸ã¤ã®ã½ã¼ã¹ã³ã¼ãã§å®ç¾ããããã«ãã¾ããï¼å®éã«ã¯ãä¸é¨ä»¥åã®ã³ã¼ããæ®ã£ã¦ãã¾ããï¼ãã¤ãã§ã«Service Workerã«ããããã·ã¥éç¥ããªãã©ã¤ã³ãã£ãã·ã¥ï¼ç¾å¨ç¡å¹åãã¦ãã¾ããè¿ã æå¹åï¼ãWeb App Manifestã®é ç½®ãªã©ãè¡ããProgressive Web Appsåãæããã¾ããã
Progressive Web Appsã®å®ç¾©ãããã¾ããªæ°ããã¦ãã¾ãããã¼ããã¨ãã¦ã¯ã対å¿ãã©ã¦ã¶ï¼Android Chromeãªã©ï¼ã§Webãµã¤ãã«ã¢ã¯ã»ã¹ããéã«ããã¼ã ç»é¢ã«è¿½å ãã¾ããï¼ãã¨è¨ã£ãã¤ã³ã¹ãã¼ã«ããã¼ã表示ãããããã·ã¥éç¥ãªã©ã®Service Workerãæä¾ããæ©è½ãæã¤ãã£ã¦ãããããã®ãµãã£ã¨ãã解éããã¦ãã¾ãã
Progressive Web Apps対å¿ã¨è¨ãã¾ããããããã¸ã®å¯¾å¿ã«ã¯å®ã¯ããã»ã©æéã¯æãã£ã¦ãã¾ããã
ã¨ããã®ãã¼ããã¯æåããCordovaããã¼ã¹ã¨ããã¢ãã¤ã«ã¢ããªããªãªã¼ã¹ãã¦ããã®ã§ãããã·ã¥ãéä¿¡ããã³ã¼ããããã¾ããããã¢ããªã±ã¼ã·ã§ã³ãå¿ è¦ã¨ããå ¨ã¦ã®éçãªã½ã¼ã¹ãä¸ã¤ã®ã¢ããªã«ããã±ã¼ã¸ã³ã°ããããã«ããªã£ã¦ãã¾ããããªã®ã§ãæ¢åã®ã³ã¼ãã«å¤å°æãå ããã ãã§Progressive Web Appsåã§ãã¾ããã
以ä¸ã«ãPWAã£ã½ãæ©è½ã®ãTechFeedã§ã®å®ç¾æ¹æ³ã軽ããç´¹ä»ãã¦ããã¾ããï¼ã¨è¨ã£ã¦ããè³ã£ã¦ããã¼ã§ãï¼
ã»Webããã·ã¥â¦Node.jsã§æ¸ãããWebããã·ã¥ç¨ã©ã¤ãã©ãªãweb-pushãã使ç¨ãã¾ãããããã使ç¨ãããã¨ã«ãããå°ãåã¾ã§ã¯ä¸å¯è½ã ã£ããã¤ãã¼ãä»ãWebããã·ã¥ã¡ãã»ã¼ã¸ãå¯è½ã«ãªãã¾ããããã«ãããç¾å¨TechFeedã«ãã°ã¤ã³ããã¨ãããã©ã¦ã¶ããããã·ã¥éç¥ã®è¨±å¯ãæ±ãããããã¨ãããä»ã¯ã¾ã ã¾ã 馴æã¿ããªãã§ãããä½é¨ããããã¨ã«ãªãã¾ãï¼é¦´æã¿ããªããããã®ãããããã¯ãã人ãå¤ãã¦å°ã£ã¦ããã®ã¯ã¾ãå¥ã®è©±ã§ãwï¼ã
ã»ãªãã©ã¤ã³ãã£ãã·ã¥â¦Service Workerã§éçãªã½ã¼ã¹ã®ãªãã©ã¤ã³ãã£ãã·ã¥ãå®ç¾ããããã®ã©ã¤ãã©ãªãsw-precacheãã使ç¨ãã¾ãããããã使ç¨ããã¨ãä»ã¯ããã¬ã¬ã·ã¼æ±ãã¨ãªã£ã¦ãã¾ã£ãHTML5 Application Cacheã¨ããã»ã©å¤ãããªãï¼ãããããå¤æ©è½ï¼æè¦ã§ããªãã©ã¤ã³ãã£ãã·ã¥ãå®ç¾ã§ãã¾ãã
ã¡ãªã¿ã«ãService Workerã«å¯¾å¿ãã¦ããªããã©ã¦ã¶ã§ã¯å½ç¶ãªãããªãã©ã¤ã³ãã£ãã·ã¥ãå¹ãã¾ãããTechFeedã§ã¯ãiOSã¯ç¹ã«éè¦ãã¦ããã®ã§ãiOS Safariã§ããªãã©ã¤ã³ãã£ãã·ã¥ãå¯è½ã«ãã¹ãApplication Cacheã®ä½¿ç¨ãæ¤è¨ãã¾ãããããApplication Cacheã¯URLã«ã¼ãã£ã³ã°ã¨ç¸æ§ãæªãï¼ç¹ã«ãã£ã¼ããªã³ã¯URLã§ãªãã¼ããè¡ã£ãå ´åã«ãã£ãã·ã¥ãå©ç¨ãããªãï¼ãæ³£ãæ³£ãæ念ãã¾ããã
ææ
ã§ããã®ãããªãã¼ã¸ã§ã³ã¢ãããè¡ã£ã¦ã¿ã¦ã®ææã§ãããProgressive Web Apps対å¿ã¯ãããã¾ã§é£ããã¯ãªããã¨è¨ããã¨æãã¾ããæ£ç´ãä½æ¥ã¨ãã¦ã¯manifest.jsonãç¨æããã ããªã®ã§ãå ¨ç¶ã§ããService Workerã®ã³ã¼ããæ¸ãå¿ è¦ãããã¾ãããå¿ è¦æå°éã§ãããªããã»ã¨ãã©ä½ãããªãService Workerã追å ããã ãã§æ§ãã¾ããã
ããããããã¯ãPWAã®èã¯ããã¢ãã¤ã«ã¢ããªã«æ¯è©ããUXãæã¤ã¢ããªãè¨è¨ã»éçºããããã§ããã°ãã®Webã¢ããªã¯ã¬ã¹ãã³ã·ãã«éçºãããã¹ã¯ãããã§ãåä½ããããã«ãããã¨ããããããå®ç¾ãããã¨ã®ã»ããé£ããã
ããããã¢ããªãä½ãã«ããã£ã¦ãä»åAngular2ãæ¡ç¨ããã®ã§ãããAngular2ãããã¨ãããã¨ã ãã¯è¨ããã¨æãã¾ãã
Angular2ã®ããã
ç¾å¨ã®TechFeedã¯ããªã大ããªã¢ããªã±ã¼ã·ã§ã³ã«ãªã£ã¦ãã¾ãããåä»ãè¨èªã§ããTypeScriptããã¼ã¹ã¨ããã³ã³ãã¼ãã³ãæåã®ãã¬ã¼ã ã¯ã¼ã¯ã§ãããããã§ãæªã ã«ã³ã¼ãã®è¦éãã®è¯ãã¯ä¿ã¦ã¦ããã¨æãã¾ãã
ããã¦ä½ããããã®å®æ度ãAngular2ã®ãµã¤ãã§ãOne Frameworkãã謳ã£ã¦ããã¨ãããå¤é¨ã©ã¤ãã©ãªãå¿ è¦ã¨ããã·ã¼ã³ããã¾ãããã¾ããï¼ç¾å¨ä½¿ã£ã¦ããå¤é¨ã©ã¤ãã©ãªã¯lodashã¨momentãããã§ãï¼ãããã§ããªããããã¬ã¼ã ã¯ã¼ã¯ã®ãµã¤ãºã¯ããªãå°ãããé«éãç¹ã«AoTãã«ããè¡ã£ãã¨ãã®ãã¢ããªã±ã¼ã·ã§ã³ã®ããã©ã¼ãã³ã¹ã¨ææç©ã®ãµã¤ãºã®å°ããã¯ç®ãã¿ã¯ããã®ãããã¾ãï¼AoTãã«ãã«ã¤ãã¦ã¯ã¾ãå¥éè¨äºãæ¸ãã¾ãï¼ã
JavaScriptã¢ããªãç¹ã«SPAã¯å®ç¾ãã¹ãè¦ä»¶ãå¤å²ã«ãããããããå ¨ã¦ãã«ãã¼ããã¢ããªãä½ã£ã¦ããã®ã¯è³é£ã®æ¥ã§ããããããAngular2ã¯ãããããè¦ä»¶ããã¾ã解ãã»ãããé«ãçç£æ§ã¨éãããã©ã¼ãã³ã¹ãããã¦ããããã¦ã¼ã¹ã±ã¼ã¹ã«å¯¾å¿ã§ããå¤æ©è½æ§ãå ¼ãåãã¦ããæ°ããã¾ãã
ããã¦Angular2ããã¼ã¹ã«éçºããã¦ããUIã³ã³ãã¼ãã³ããã¬ã¼ã ã¯ã¼ã¯ãIonic2ããããªããªãã®ãã®ã§ããä»ã¯ã¾ã æ£å¼ãªãªã¼ã¹åã§ããããããªãã°ã«æ©ã¾ããããã¨ãããã¾ããã以ä¸ã®ãããªç¹ã§ã¯ãã¯ã便å©ã§ãã
ã»æ±ç¨UIã³ã³ãã¼ãã³ãã®å©ç¨ã«ããçç£æ§ã®é«ã
ã»ç°å¢ã«å¿ãã¦èªåçã«UIãåãæ¿ããæè»æ§
ã»ã¢ãã¤ã«ï¼Progressive Web Appsãåæã¨ããUIé¨å群
ã¤ãã¿
ãã ãããã¾ã§Angular2ãIonic2ãè¤ãã¦ã°ããã§ããããPWAéçºï¼ã¨ãããWebæè¡ã«ããã¯ãã¹ãã©ãããã©ã¼ã éçºï¼ã«ã¯ã以ä¸ã®ãããªç¹ã§ã¯é常ãªã¤ãã¿ãããã¾ããã
ã»ã¯ãã¹ãã©ãããã©ã¼ã éçºãã®ãã®ãã¤ããã対象ã¨ããããã¤ã¹ã»ãã©ãããã©ã¼ã ãå¤ãããã¹ãããããªãããã©ã¦ã¶ã§ã®åä½ç¢ºèªãã¨ãã¥ã¬ã¼ã¿ã§ã®åä½ç¢ºèªãå®æ©ã§ã®åä½ç¢ºèªãªã©ããã¹ãç°å¢ã®åãæ¿ãã«ããªãæéããããããã¹ãçãããã
ã»éçºç°å¢å¨ããã¡ã³ããã³ã¹ãç¶ããã®ãã¤ãããã¼ããã¯Angular2ãβçã®é ããå©ç¨ãã¦ããããã®é ã«ä½ã£ãéçºç°å¢ï¼Webpackã¨ãGulpã¨ãï¼ãã¡ã³ããã³ã¹ãç¶ããªããéçºãé²ãã¦ãã¾ãããã ãAoTã«å¯¾å¿ãããããã«ãç°å¢ãæç´ãããããéçºããã¼ã¸ã®é æ ®ã足ãããéçºé度ãè½ã¡ã¦ãã¾ã£ããâ¦ä»ãªãããã³ã¼ããå°ãä¿®æ£ããã ãã§ãã«ããå®äºããã¾ã§ã«10ç§ãããããã£ãããã¾ããã
ä»ããå§ãã人ã¯ãangular-cliã¨ã使ãã¨å¹¸ãã«ãªããã®ããããã¾ããï¼ãã ãangular-cliã§åºåãããããã¸ã§ã¯ãã®ãã«ãç°å¢ã¯ããªãè¤éãªã®ã§ããã«ãããã»ã¹ã«æãå ¥ããå ´åã¨ãã«ããããããªæ°ããã¾ããï¼ã
ã¨ãã¤ããã¨ãããå¤ã ããã¾ãããAngular2ã§ã®éçºã¯ãWebéçºã®é大æãæããã£ã¦ãªããªã楽ãããããã¾ãããªããã¡ãããï¼Angular2ãã³ã»ã¼ã£ã¦ããçµè«ã§ãããã ã£ãããã®è¨äºãã¾ããããã