æè¿ PS4 ã®ã°ã©ã³ããŒãªã¹ã¢ã¹ããŒããããå§ããŠãèªå®
ã®ãããç°å¢ã®é
ãã«æ°ã¥ãããã¶ã€ããŒã® ããšã ã§ããåå㯠DLS ã«ã€ã㊠ã玹ä»ãããŠããã ããŸããããä»åã¯ã¡ãã¬ãŒã«å
¥ç€ŸããŠæããããã¶ã€ã³ããã»ã¹ã®éããã«ã€ããŠèªåãªãã«ãŸãšããŠã¿ãŸããã ããšã§èªã¿ãã人åãã«ããšã¬ããŒã¿ãŒããã颚ã«ãŸãšãããšã [ CLINICS ] ãšãããµãŒãã¹ã¯ [ æ£è
ãšå»çæ©é¢åã ] ãããããµãŒãã¹ãæäŸããŠããã [ æäŸäŸ¡å€ã®éã ] ã«ãã£ãŠ [ ãã¶ã€ã³ã®åœ¹å²ãç°ãªã ] ããšã«æ°ã¥ãã ç¹ã« [ å»çæ©é¢åã ] 㯠[ UI ãéèŠ ] ãšãªã [ äŒããããšãç®çãšãã Web ãµã€ã ] ãšã¯éã£ãŠ [ UI ãã¶ã€ã³ã®è¯ãæªãããããã¯ãå
šäœã®å質ã«é¢ãã ] ãã [ äºæ¥ãæè¡ãçè§£ ] ãã[ ãã¶ã€ã³ãªãªãšã³ããã ] ãæ±ãããã ãšãããããªå
容ã§ãã ãŠãŒã¶ãŒã«ãã£ãŠç°ãªãæäŸäŸ¡å€ ã¡ãã¬ãŒã«å
¥ç€ŸããŠããããªã³ã©ã€ã³èšºçã¢ããªã CLINICSïŒã¯ãªãã¯ã¹ïŒ ããšãããµãŒãã¹ã®ãã¶ã€ã³ãäž»ã«æ
åœããŠããã®ã§ãããæ£è
ãšå»çæ©é¢åŽã§æäŸããŠãããããã¯ãã®å
容ãç°ãªããŸãã ãªã³ã©ã€ã³èšºçã®å
容ãäŒããå©çšãä¿ãããã® Web ãµã€ãïŒæ£è
ã»å»çæ©é¢åæ¹ïŒ æ£è
ããªã³ã©ã€ã³ã§éé¢ãè¡ãããã®ã¢ã㪠å»çæ©é¢åŽããªã³ã©ã€ã³ã§é é蚺çãè¡ãããã®ã·ã¹ãã ãµãŒãã¹ã®å
¥ãå£ãšãªã Web ãµã€ã Web ããŒãžã®åœ¹å²ãšããŠã¯ããªã³ã©ã€ã³èšºçãšãããã®ãã©ããã£ããã®ã§ãCLINICS ãå©çšãããšã©ããã課é¡è§£æ±ºã«ã€ãªããã®ãããšãããµãŒãã¹ã®ç¹åŸŽãæ£è
ãšå»çæ©é¢åæ¹ã«ã äŒããããã®ãã¶ã€ã³ ããå¿
èŠãšãªããŸãã ãã¶ã€ã³ããã«ããã£ãŠæ³šåãã¹ããã€ã³ãã¯ãè£
食ãã€ã¡ãŒãžç»åãªã©ã·ã³ããªãã¯ãªãã¶ã€ã³ãšã¹ããŒãªãŒæ§ã®ããå°ç·èšèšãããããšã§ãèŠèŠçã«ç¹åŸŽãäŒããããããããŸãã³ã³ããŒãžã§ã³ãã€ã³ããžèªå°ããããããã¿ã³çã¯ç®ç«ããããªã©ãé©åã«æ
å ±ãäŒããè¡åãä¿ãããã®ãã¶ã€ã³ãéèŠã«ãªããŸãã æ£è
ããªã³ã©ã€ã³èšºçãè¡ãããã®ã¢ã㪠ã¢ããªã¯æ£è
ããªã³ã©ã€ã³èšºçãããããã®ãç
颿€çŽ¢ãâãäºçŽãâãå蚺ãâã蚺å¯ãâãæ±ºæžãã®æ©èœãã·ãŒã ã¬ã¹ã«ç¹ããããã¹ãã¬ã¹ã®ããããªããŠãŒã¶ãŒäœéšãæäŸããããšãéèŠã§ãã ãããããªã³ã©ã€ã³èšºçã®ã¡ãªãããšããŠãåŸ
ã¡æéã®è»œæžããèœã¡çããç°å¢ã§èšºå¯ãã§ãããªã©ãæãããããããããã«è³ããŸã§ã®ãŠãŒã¶ãŒäœéšãå°ç¡ãã«ããŠããŸã UI ã§ã¯å
ãåããªããªã£ãŠããŸããŸãã ã¢ããªã§ã¯ãäŒãããã¶ã€ã³ããããã æ©èœçãªãã¶ã€ã³ ããå¿
èŠã«ãªããŸããããŠãŒã¶ãŒã®è¡åãéåããããªããããäžå¿
èŠãªèŠçŽ ãå°ç·ã極åæé€ããŠãéåžžã«ã·ã³ãã«ãª UI èšèšããããªã£ãŠãããæ©èœèªäœã䞻匵ããªããã¶ã€ã³ãå¿ãããŠããŸããååãã®ããã°ã§ããšãããã DLS ãããããã£ãèšèšææ³ã®ããšéçºãé²ããŠããããããå®çŸã§ãããšæã£ãŠããŸãã å»çæ©é¢åãã®é é蚺çã·ã¹ãã å»çæ©é¢åŽã«æäŸããŠããã·ã¹ãã ã¯ããªã³ã©ã€ã³èšºçãè¡ãããã®ããŒã«ã§ãã Web ãµã€ãã®ããã«ãäŒãããã¶ã€ã³ããã³ã³ããŒãžã§ã³éèŠã§ã¯ãªããã ããæ©èœçã«äœ¿ãããããã¶ã€ã³ ããéèŠã«ãªããŸãã ãã®ãããªç»é¢ã Bootstrap ã®ãã㪠UI ãã³ãã¬ãŒããã®ãŸãŸã®èŠãç®ã§æ§ç¯ããŠããŸããšãæè¡çã«çŽ æŽããããã®ãã§ãããšããŠãã䜿ãåæãæªãè²§åŒ±ãªæ©èœãšèŠãããããªãããã ãã¶ã€ããŒã管çç»é¢ã® UI èšèšã«æºããããšã¯ãããžãã¹çã«ãéåžžã«éèŠãªèŠçŽ ã§ãã ç¹ã« CLINICS ã®å»çæ©é¢åãã®ã·ã¹ãã ã¯ãå®éã«ãªã³ã©ã€ã³ã§æ£è
ã®èšºå¯ãè¡ãããŒã«ã®ãããå»çæ©é¢åŽã蚺çè¡çºãã€ã€ããªãçµãããããã㪠UI èšèšãéèŠã§ãã MVP çãªææ³ã§ããšãããããªãªãŒã¹ããŠæ€èšŒãéããŠãããšããã¹ã¿ã³ã¹ããšããªãããããªãªãŒã¹ãããŸã§ã«æ©èœçã«äžåããªãããå»çåŸäºè
ãè¿·ããæ£ãã䜿ãã UI èšèšã«ãªã£ãŠããããªã©ã瀟å
ãå®éã®å»çæ©é¢ã®ãã¹ããç¹°ãè¿ãã詊è¡é¯èª€ãçµãŠãªãªãŒã¹ãããšããããããã¯ããã¶ã€ã³ãããŠããæèŠã«ãªããäŒãããã¶ã€ã³ããšã¯éã£ãæèã§ãã¶ã€ã³ã«åãçµãã§ããŸãã æ©èœéèŠãªãµãŒãã¹ãããçŽæçã«ã·ã³ãã«ãª UI ãéèŠ ãã®ããã« CLINICS ãšãã 1 ã€ã®ãµãŒãã¹ãæ§æããèŠçŽ ã®äžã§ããã¿ãŒã²ãããŠãŒã¶ãŒãæäŸäŸ¡å€ã®éãã«ãã£ãŠããã¶ã€ã³ã¢ãããŒããéèŠèŠããèŠç¹ãç°ãªããŸãã ããšãã°ãèªåãæ¥åã§ããå©çšãããããã¿ã€ãã³ã°ããŒã«ã® inVision ããã°ã€ã³åã¯ãå©çšã·ãŒã³ãããé
åçãªãµãŒãã¹ã§ãããšããããšãäŒããããã®ãã¶ã€ã³ãããŠããããã°ã€ã³åŸã¯çŽæçã«ããããããã·ã³ãã«ãª UI èšèšã§ããã°ã€ã³ååŸã§ãµãŒãã¹ã® UI ãç°ãªããŸãã inVision ãæ©èœã¯è±å¯ã§ããããããã¿ã€ãã³ã°ãè¡ãäžã§éåžžã«ã·ã³ãã«ãªæäœæ§ãæäŸããŠãããç¡é§ãªèª¬æãå°ç·ããªããŠãçŽæçã«äœ¿ãã UI ã¯ãç¶ç¶ããŠå©çšã§ããå®å¿æã«ãã€ãªãããèŠç¿ãã¹ã UI ã ãªãšæã£ãŠããŸãã ïŒinVision ã®ç»é¢ã®éãïŒ CLINICS ã®å»çæ©é¢åãã·ã¹ãã ãåä»ç®¡çãã¹ã±ãžã¥ãŒã«ããªã³ã©ã€ã³èšºçãè¡ãæ©èœãªã©è€æ°ã®æ©èœãã²ãšã€ã®ãµãŒãã¹ãšããŠæäŸããŠãããããUI çã«è€éã«ãªããããŸãããè€éãªæ©èœããŸãšããç»é¢äžã«ã·ã³ãã«ã«èœãšã蟌ãããã©ãããšããã®ãåå³ããäœã£ãŠã¯å£ããäœã£ãŠã¯å£ããç¹°ãè¿ãããŸãã ãããªããããïŒãšããã£ã UI ããæ©èœé¢ã§ã®èŠèœãšããªã©ããã£ãããããšå°ç·ã«ççŸãçããããã·ã³ãã«ã«è¡šçŸããã€ããããéã«äœ¿ãåæã®æªã UI ã«ãªã£ãŠããŸã£ãããUI ãèãããšããã®ã¯ãææ§ã«èšŽãããã¶ã€ã³ãšã¯éã£ãããããžã«ã«ãªæèãå¿
èŠã§ããã¶ã€ã³ããªããåèŠå
«èŠããŠãã¶ã€ã¶ã€ç¬ãèšãèšãããšãå€ããªããŸã w ãã¶ã€ã³ãªãªãšã³ããããªãããã¯ãéçº Web ãµãŒãã¹ã§ããã°ããã«ç®æšãšããŠããã³ã³ããŒãžã§ã³çãé«ãããã©ãããåæã調æ»ãéçºãšãããµã€ã¯ã«ãããŒã¹ãšããéçšã«ãªããŸãããç¹ã« å»çæ©é¢åãã®ã·ã¹ãã ã®å Žåã¯ãã ããªæ©èœã䜿ãã¥ãã UI ã ãšãµãŒãã¹çã«äžå®èŠçŽ ãæ±ãããèŠå ã«ããªããããžãã¹ã®æåå¯åŠã«çŽçµããŸã ã ãã®ããããªãªãŒã¹ãŸã§ã« UI ã磚ããã ã磚ããå®éã«å»çæ©é¢ã®çŸå Žã«åºåããŠã©ããããããŒã§èšºå¯ãè¡ã£ãŠããã®ããªã©ãã¢ãªã³ã°ããããåºæ¥äžãã£ãæ©èœã詊ããŠããããªã©ããååã«æ€èšããäžã§ãªãªãŒã¹ããŠããŸãããããããã¶ã€ã³ãéèŠããéçºãè¡ããç¹ã¯ã¡ãã¬ãŒã ããããã®éçºäœå¶ãããããŸããã ãã®ãã㪠ãã¶ã€ã³ãªãªãšã³ããããªãããã¯ãéçºãè¡ãäžã§éèŠãªãã€ã³ãã¯ãäºæ¥çè§£ãšãšã³ãžãã¢ãšã®å¯ãªé£æº ã§ãã衚é¢çãªãã¶ã€ã³ã§ã¯ãªããå®éã«äœ¿ãããå©çšã·ãŒã³ãæ³åãã€ã€ããäœéšããããšãé£ããå»çãµãŒãã¹ã ãããããåæã®ç¥èããã¢ãªã³ã°ããŠãŒã¶ãŒãã¹ããªã©ãéèŠãšãªããŸãããæ©èœçãªéšåã«é¢ããŠã¯ãšã³ãžãã¢ãšä»æ§ã«ã€ããŠè°è«ãããããŠãŒã¹ã±ãŒã¹ãèžãŸããŠã©ã®ãã㪠UI ã«èœãšã蟌ãã¹ãããèããªãããã¶ã€ã³ã«èœãšã蟌ãã§ãããŸããã€ã³ã¿ã©ã¯ãã£ããªè¡šçŸãªã© inVision ã§ã衚çŸããããªã现ããåããå°ç·ãªã©ã¯ãå®è£
æã«ãšã³ãžãã¢ã«äŒãããããããããã³ããšã³ãéšåã®ã³ãŒãã£ã³ã°ãèªãè¡ãããšã§ã³ãŒããéããŠãšã³ãžãã¢ãšã³ãã¥ãã±ãŒã·ã§ã³ãåããããããªãã®ã§ãããã³ããšã³ããææ¡ããŠããããšã¯éèŠã§ãã ãŸãšã å人çã«ã¯ãäŒãããã¶ã€ã³ããšãæ©èœçãªãã¶ã€ã³ãã§ãæç¢ºã«æèããããŠèããŠãã¶ã€ã³ããŠããããã§ã¯ãªãã£ãã®ã§ãããæäŸãã¹ã䟡å€ã®éãã«ãã£ãŠ å·Šè³ãšå³è³ãããã䜿ãåããŠãã¶ã€ã³ããŠãã ãããããªããšããããšã«æ°ä»ããããŸãããããã¯ä»¥åãã¶ã€ããŒã®å°å±±ãããã°ã§æžãã ã·ã¹ãã 1ïŒèªåçã«çŽæã§åãâæ©ãæèâïŒãšã·ã¹ãã 2ïŒæåã§è«ççã«åãâé
ãæèâïŒ ãèªåã®äžã§æ¯ãåã®ããã«è¡ãæ¥ããŠãã ãããªãšæããã®ã§ãèå³ã®ããæ¹ã¯ãæèãšãã¶ã€ã³ã¹ãã«ããèªãã§ããããšããããããã§ãã https://developer.medley.jp/entry/2017/09/14/132031 æåŸã« ãµã ãããŒã«ã°ã£ããåãã§ é©åœãªäººãšã¬ããã«ã貌ãããŠããããšãã§ãããä»åã¯çé¢ç®ãªããšãæžããŠã¿ãŸããããããã§ããã§ããããããã®ããã°ãæžããŠãŠæ£çŽç²ããã®ã§ãã·ã¹ãã 2 ãåããŠãã«éããªããšæããŸãããããªç§ãšäžç·ã«ä»äºãããããåã¿ãããšãããã¶ã€ããŒããšã³ãžãã¢ãããå¿åãåŸ
ã¡ããŠãããŸãã https://www.medley.jp/jobs/ https://www.medley.jp/team/creator-story.html
æè¿ PS4 ã®ã°ã©ã³ããŒãªã¹ã¢ã¹ããŒããããå§ããŠãèªå®
ã®ãããç°å¢ã®é
ãã«æ°ã¥ãããã¶ã€ããŒã® ããšã ã§ããåå㯠DLS ã«ã€ã㊠ã玹ä»ãããŠããã ããŸããããä»åã¯ã¡ãã¬ãŒã«å
¥ç€ŸããŠæããããã¶ã€ã³ããã»ã¹ã®éããã«ã€ããŠèªåãªãã«ãŸãšããŠã¿ãŸããã ããšã§èªã¿ãã人åãã«ããšã¬ããŒã¿ãŒããã颚ã«ãŸãšãããšã [ CLINICS ] ãšãããµãŒãã¹ã¯ [ æ£è
ãšå»çæ©é¢åã ] ãããããµãŒãã¹ãæäŸããŠããã [ æäŸäŸ¡å€ã®éã ] ã«ãã£ãŠ [ ãã¶ã€ã³ã®åœ¹å²ãç°ãªã ] ããšã«æ°ã¥ãã ç¹ã« [ å»çæ©é¢åã ] 㯠[ UI ãéèŠ ] ãšãªã [ äŒããããšãç®çãšãã Web ãµã€ã ] ãšã¯éã£ãŠ [ UI ãã¶ã€ã³ã®è¯ãæªãããããã¯ãå
šäœã®å質ã«é¢ãã ] ãã [ äºæ¥ãæè¡ãçè§£ ] ãã[ ãã¶ã€ã³ãªãªãšã³ããã ] ãæ±ãããã ãšãããããªå
容ã§ãã ãŠãŒã¶ãŒã«ãã£ãŠç°ãªãæäŸäŸ¡å€ ã¡ãã¬ãŒã«å
¥ç€ŸããŠããããªã³ã©ã€ã³èšºçã¢ããªã CLINICSïŒã¯ãªãã¯ã¹ïŒ ããšãããµãŒãã¹ã®ãã¶ã€ã³ãäž»ã«æ
åœããŠããã®ã§ãããæ£è
ãšå»çæ©é¢åŽã§æäŸããŠãããããã¯ãã®å
容ãç°ãªããŸãã ãªã³ã©ã€ã³èšºçã®å
容ãäŒããå©çšãä¿ãããã® Web ãµã€ãïŒæ£è
ã»å»çæ©é¢åæ¹ïŒ æ£è
ããªã³ã©ã€ã³ã§éé¢ãè¡ãããã®ã¢ã㪠å»çæ©é¢åŽããªã³ã©ã€ã³ã§é é蚺çãè¡ãããã®ã·ã¹ãã ãµãŒãã¹ã®å
¥ãå£ãšãªã Web ãµã€ã Web ããŒãžã®åœ¹å²ãšããŠã¯ããªã³ã©ã€ã³èšºçãšãããã®ãã©ããã£ããã®ã§ãCLINICS ãå©çšãããšã©ããã課é¡è§£æ±ºã«ã€ãªããã®ãããšãããµãŒãã¹ã®ç¹åŸŽãæ£è
ãšå»çæ©é¢åæ¹ã«ã äŒããããã®ãã¶ã€ã³ ããå¿
èŠãšãªããŸãã ãã¶ã€ã³ããã«ããã£ãŠæ³šåãã¹ããã€ã³ãã¯ãè£
食ãã€ã¡ãŒãžç»åãªã©ã·ã³ããªãã¯ãªãã¶ã€ã³ãšã¹ããŒãªãŒæ§ã®ããå°ç·èšèšãããããšã§ãèŠèŠçã«ç¹åŸŽãäŒããããããããŸãã³ã³ããŒãžã§ã³ãã€ã³ããžèªå°ããããããã¿ã³çã¯ç®ç«ããããªã©ãé©åã«æ
å ±ãäŒããè¡åãä¿ãããã®ãã¶ã€ã³ãéèŠã«ãªããŸãã æ£è
ããªã³ã©ã€ã³èšºçãè¡ãããã®ã¢ã㪠ã¢ããªã¯æ£è
ããªã³ã©ã€ã³èšºçãããããã®ãç
颿€çŽ¢ãâãäºçŽãâãå蚺ãâã蚺å¯ãâãæ±ºæžãã®æ©èœãã·ãŒã ã¬ã¹ã«ç¹ããããã¹ãã¬ã¹ã®ããããªããŠãŒã¶ãŒäœéšãæäŸããããšãéèŠã§ãã ãããããªã³ã©ã€ã³èšºçã®ã¡ãªãããšããŠãåŸ
ã¡æéã®è»œæžããèœã¡çããç°å¢ã§èšºå¯ãã§ãããªã©ãæãããããããããã«è³ããŸã§ã®ãŠãŒã¶ãŒäœéšãå°ç¡ãã«ããŠããŸã UI ã§ã¯å
ãåããªããªã£ãŠããŸããŸãã ã¢ããªã§ã¯ãäŒãããã¶ã€ã³ããããã æ©èœçãªãã¶ã€ã³ ããå¿
èŠã«ãªããŸããããŠãŒã¶ãŒã®è¡åãéåããããªããããäžå¿
èŠãªèŠçŽ ãå°ç·ã極åæé€ããŠãéåžžã«ã·ã³ãã«ãª UI èšèšããããªã£ãŠãããæ©èœèªäœã䞻匵ããªããã¶ã€ã³ãå¿ãããŠããŸããååãã®ããã°ã§ããšãããã DLS ãããããã£ãèšèšææ³ã®ããšéçºãé²ããŠããããããå®çŸã§ãããšæã£ãŠããŸãã å»çæ©é¢åãã®é é蚺çã·ã¹ãã å»çæ©é¢åŽã«æäŸããŠããã·ã¹ãã ã¯ããªã³ã©ã€ã³èšºçãè¡ãããã®ããŒã«ã§ãã Web ãµã€ãã®ããã«ãäŒãããã¶ã€ã³ããã³ã³ããŒãžã§ã³éèŠã§ã¯ãªããã ããæ©èœçã«äœ¿ãããããã¶ã€ã³ ããéèŠã«ãªããŸãã ãã®ãããªç»é¢ã Bootstrap ã®ãã㪠UI ãã³ãã¬ãŒããã®ãŸãŸã®èŠãç®ã§æ§ç¯ããŠããŸããšãæè¡çã«çŽ æŽããããã®ãã§ãããšããŠãã䜿ãåæãæªãè²§åŒ±ãªæ©èœãšèŠãããããªãããã ãã¶ã€ããŒã管çç»é¢ã® UI èšèšã«æºããããšã¯ãããžãã¹çã«ãéåžžã«éèŠãªèŠçŽ ã§ãã ç¹ã« CLINICS ã®å»çæ©é¢åãã®ã·ã¹ãã ã¯ãå®éã«ãªã³ã©ã€ã³ã§æ£è
ã®èšºå¯ãè¡ãããŒã«ã®ãããå»çæ©é¢åŽã蚺çè¡çºãã€ã€ããªãçµãããããã㪠UI èšèšãéèŠã§ãã MVP çãªææ³ã§ããšãããããªãªãŒã¹ããŠæ€èšŒãéããŠãããšããã¹ã¿ã³ã¹ããšããªãããããªãªãŒã¹ãããŸã§ã«æ©èœçã«äžåããªãããå»çåŸäºè
ãè¿·ããæ£ãã䜿ãã UI èšèšã«ãªã£ãŠããããªã©ã瀟å
ãå®éã®å»çæ©é¢ã®ãã¹ããç¹°ãè¿ãã詊è¡é¯èª€ãçµãŠãªãªãŒã¹ãããšããããããã¯ããã¶ã€ã³ãããŠããæèŠã«ãªããäŒãããã¶ã€ã³ããšã¯éã£ãæèã§ãã¶ã€ã³ã«åãçµãã§ããŸãã æ©èœéèŠãªãµãŒãã¹ãããçŽæçã«ã·ã³ãã«ãª UI ãéèŠ ãã®ããã« CLINICS ãšãã 1 ã€ã®ãµãŒãã¹ãæ§æããèŠçŽ ã®äžã§ããã¿ãŒã²ãããŠãŒã¶ãŒãæäŸäŸ¡å€ã®éãã«ãã£ãŠããã¶ã€ã³ã¢ãããŒããéèŠèŠããèŠç¹ãç°ãªããŸãã ããšãã°ãèªåãæ¥åã§ããå©çšãããããã¿ã€ãã³ã°ããŒã«ã® inVision ããã°ã€ã³åã¯ãå©çšã·ãŒã³ãããé
åçãªãµãŒãã¹ã§ãããšããããšãäŒããããã®ãã¶ã€ã³ãããŠããããã°ã€ã³åŸã¯çŽæçã«ããããããã·ã³ãã«ãª UI èšèšã§ããã°ã€ã³ååŸã§ãµãŒãã¹ã® UI ãç°ãªããŸãã inVision ãæ©èœã¯è±å¯ã§ããããããã¿ã€ãã³ã°ãè¡ãäžã§éåžžã«ã·ã³ãã«ãªæäœæ§ãæäŸããŠãããç¡é§ãªèª¬æãå°ç·ããªããŠãçŽæçã«äœ¿ãã UI ã¯ãç¶ç¶ããŠå©çšã§ããå®å¿æã«ãã€ãªãããèŠç¿ãã¹ã UI ã ãªãšæã£ãŠããŸãã ïŒinVision ã®ç»é¢ã®éãïŒ CLINICS ã®å»çæ©é¢åãã·ã¹ãã ãåä»ç®¡çãã¹ã±ãžã¥ãŒã«ããªã³ã©ã€ã³èšºçãè¡ãæ©èœãªã©è€æ°ã®æ©èœãã²ãšã€ã®ãµãŒãã¹ãšããŠæäŸããŠãããããUI çã«è€éã«ãªããããŸãããè€éãªæ©èœããŸãšããç»é¢äžã«ã·ã³ãã«ã«èœãšã蟌ãããã©ãããšããã®ãåå³ããäœã£ãŠã¯å£ããäœã£ãŠã¯å£ããç¹°ãè¿ãããŸãã ãããªããããïŒãšããã£ã UI ããæ©èœé¢ã§ã®èŠèœãšããªã©ããã£ãããããšå°ç·ã«ççŸãçããããã·ã³ãã«ã«è¡šçŸããã€ããããéã«äœ¿ãåæã®æªã UI ã«ãªã£ãŠããŸã£ãããUI ãèãããšããã®ã¯ãææ§ã«èšŽãããã¶ã€ã³ãšã¯éã£ãããããžã«ã«ãªæèãå¿
èŠã§ããã¶ã€ã³ããªããåèŠå
«èŠããŠãã¶ã€ã¶ã€ç¬ãèšãèšãããšãå€ããªããŸã w ãã¶ã€ã³ãªãªãšã³ããããªãããã¯ãéçº Web ãµãŒãã¹ã§ããã°ããã«ç®æšãšããŠããã³ã³ããŒãžã§ã³çãé«ãããã©ãããåæã調æ»ãéçºãšãããµã€ã¯ã«ãããŒã¹ãšããéçšã«ãªããŸãããç¹ã« å»çæ©é¢åãã®ã·ã¹ãã ã®å Žåã¯ãã ããªæ©èœã䜿ãã¥ãã UI ã ãšãµãŒãã¹çã«äžå®èŠçŽ ãæ±ãããèŠå ã«ããªããããžãã¹ã®æåå¯åŠã«çŽçµããŸã ã ãã®ããããªãªãŒã¹ãŸã§ã« UI ã磚ããã ã磚ããå®éã«å»çæ©é¢ã®çŸå Žã«åºåããŠã©ããããããŒã§èšºå¯ãè¡ã£ãŠããã®ããªã©ãã¢ãªã³ã°ããããåºæ¥äžãã£ãæ©èœã詊ããŠããããªã©ããååã«æ€èšããäžã§ãªãªãŒã¹ããŠããŸãããããããã¶ã€ã³ãéèŠããéçºãè¡ããç¹ã¯ã¡ãã¬ãŒã ããããã®éçºäœå¶ãããããŸããã ãã®ãã㪠ãã¶ã€ã³ãªãªãšã³ããããªãããã¯ãéçºãè¡ãäžã§éèŠãªãã€ã³ãã¯ãäºæ¥çè§£ãšãšã³ãžãã¢ãšã®å¯ãªé£æº ã§ãã衚é¢çãªãã¶ã€ã³ã§ã¯ãªããå®éã«äœ¿ãããå©çšã·ãŒã³ãæ³åãã€ã€ããäœéšããããšãé£ããå»çãµãŒãã¹ã ãããããåæã®ç¥èããã¢ãªã³ã°ããŠãŒã¶ãŒãã¹ããªã©ãéèŠãšãªããŸãããæ©èœçãªéšåã«é¢ããŠã¯ãšã³ãžãã¢ãšä»æ§ã«ã€ããŠè°è«ãããããŠãŒã¹ã±ãŒã¹ãèžãŸããŠã©ã®ãã㪠UI ã«èœãšã蟌ãã¹ãããèããªãããã¶ã€ã³ã«èœãšã蟌ãã§ãããŸããã€ã³ã¿ã©ã¯ãã£ããªè¡šçŸãªã© inVision ã§ã衚çŸããããªã现ããåããå°ç·ãªã©ã¯ãå®è£
æã«ãšã³ãžãã¢ã«äŒãããããããããã³ããšã³ãéšåã®ã³ãŒãã£ã³ã°ãèªãè¡ãããšã§ã³ãŒããéããŠãšã³ãžãã¢ãšã³ãã¥ãã±ãŒã·ã§ã³ãåããããããªãã®ã§ãããã³ããšã³ããææ¡ããŠããããšã¯éèŠã§ãã ãŸãšã å人çã«ã¯ãäŒãããã¶ã€ã³ããšãæ©èœçãªãã¶ã€ã³ãã§ãæç¢ºã«æèããããŠèããŠãã¶ã€ã³ããŠããããã§ã¯ãªãã£ãã®ã§ãããæäŸãã¹ã䟡å€ã®éãã«ãã£ãŠ å·Šè³ãšå³è³ãããã䜿ãåããŠãã¶ã€ã³ããŠãã ãããããªããšããããšã«æ°ä»ããããŸãããããã¯ä»¥åãã¶ã€ããŒã®å°å±±ãããã°ã§æžãã ã·ã¹ãã 1ïŒèªåçã«çŽæã§åãâæ©ãæèâïŒãšã·ã¹ãã 2ïŒæåã§è«ççã«åãâé
ãæèâïŒ ãèªåã®äžã§æ¯ãåã®ããã«è¡ãæ¥ããŠãã ãããªãšæããã®ã§ãèå³ã®ããæ¹ã¯ãæèãšãã¶ã€ã³ã¹ãã«ããèªãã§ããããšããããããã§ãã æèãšãã¶ã€ã³ã¹ãã« ãã¡ãã¬ãŒ TechLunchã | MEDLEY Developer Portal ã¯ãããŸããŠïŒæè¿ã¿ãã¿ã倪ãã ããŠã¯ãããã®ã®ããŸã æ©ã¯çããŠããªããšãã€ãšããã®ææããã£ãšå ªããŠããéçºæ¬éšã€ã±ã¡ã³æ
åœã®ãã¶ã€ããŒã»å°å±±ã§ãã ã¡ãã¬ãŒã§ã¯ TechLunch ãšãã瀟å
å匷äŒã宿œããŠããã®ã§ãããåç°ã«åŒãç¶ã... developer.medley.jp æåŸã« ãµã ãããŒã«ã°ã£ããåãã§ é©åœãªäººãšã¬ããã«ã貌ãããŠããããšãã§ãããä»åã¯çé¢ç®ãªããšãæžããŠã¿ãŸããããããã§ããã§ããããããã®ããã°ãæžããŠãŠæ£çŽç²ããã®ã§ãã·ã¹ãã 2 ãåããŠãã«éããªããšæããŸãããããªç§ãšäžç·ã«ä»äºãããããåã¿ãããšãããã¶ã€ããŒããšã³ãžãã¢ãããå¿åãåŸ
ã¡ããŠãããŸãã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp
æè¿ PS4 ã®ã°ã©ã³ããŒãªã¹ã¢ã¹ããŒããããå§ããŠãèªå®
ã®ãããç°å¢ã®é
ãã«æ°ã¥ãããã¶ã€ããŒã® ããšã ã§ããåå㯠DLS ã«ã€ã㊠ã玹ä»ãããŠããã ããŸããããä»åã¯ã¡ãã¬ãŒã«å
¥ç€ŸããŠæããããã¶ã€ã³ããã»ã¹ã®éããã«ã€ããŠèªåãªãã«ãŸãšããŠã¿ãŸããã ããšã§èªã¿ãã人åãã«ããšã¬ããŒã¿ãŒããã颚ã«ãŸãšãããšã [ CLINICS ] ãšãããµãŒãã¹ã¯ [ æ£è
ãšå»çæ©é¢åã ] ãããããµãŒãã¹ãæäŸããŠããã [ æäŸäŸ¡å€ã®éã ] ã«ãã£ãŠ [ ãã¶ã€ã³ã®åœ¹å²ãç°ãªã ] ããšã«æ°ã¥ãã ç¹ã« [ å»çæ©é¢åã ] 㯠[ UI ãéèŠ ] ãšãªã [ äŒããããšãç®çãšãã Web ãµã€ã ] ãšã¯éã£ãŠ [ UI ãã¶ã€ã³ã®è¯ãæªãããããã¯ãå
šäœã®å質ã«é¢ãã ] ãã [ äºæ¥ãæè¡ãçè§£ ] ãã[ ãã¶ã€ã³ãªãªãšã³ããã ] ãæ±ãããã ãšãããããªå
容ã§ãã ãŠãŒã¶ãŒã«ãã£ãŠç°ãªãæäŸäŸ¡å€ ã¡ãã¬ãŒã«å
¥ç€ŸããŠããããªã³ã©ã€ã³èšºçã¢ããªã CLINICSïŒã¯ãªãã¯ã¹ïŒ ããšãããµãŒãã¹ã®ãã¶ã€ã³ãäž»ã«æ
åœããŠããã®ã§ãããæ£è
ãšå»çæ©é¢åŽã§æäŸããŠãããããã¯ãã®å
容ãç°ãªããŸãã ãªã³ã©ã€ã³èšºçã®å
容ãäŒããå©çšãä¿ãããã® Web ãµã€ãïŒæ£è
ã»å»çæ©é¢åæ¹ïŒ æ£è
ããªã³ã©ã€ã³ã§éé¢ãè¡ãããã®ã¢ã㪠å»çæ©é¢åŽããªã³ã©ã€ã³ã§é é蚺çãè¡ãããã®ã·ã¹ãã ãµãŒãã¹ã®å
¥ãå£ãšãªã Web ãµã€ã Web ããŒãžã®åœ¹å²ãšããŠã¯ããªã³ã©ã€ã³èšºçãšãããã®ãã©ããã£ããã®ã§ãCLINICS ãå©çšãããšã©ããã課é¡è§£æ±ºã«ã€ãªããã®ãããšãããµãŒãã¹ã®ç¹åŸŽãæ£è
ãšå»çæ©é¢åæ¹ã«ã äŒããããã®ãã¶ã€ã³ ããå¿
èŠãšãªããŸãã ãã¶ã€ã³ããã«ããã£ãŠæ³šåãã¹ããã€ã³ãã¯ãè£
食ãã€ã¡ãŒãžç»åãªã©ã·ã³ããªãã¯ãªãã¶ã€ã³ãšã¹ããŒãªãŒæ§ã®ããå°ç·èšèšãããããšã§ãèŠèŠçã«ç¹åŸŽãäŒããããããããŸãã³ã³ããŒãžã§ã³ãã€ã³ããžèªå°ããããããã¿ã³çã¯ç®ç«ããããªã©ãé©åã«æ
å ±ãäŒããè¡åãä¿ãããã®ãã¶ã€ã³ãéèŠã«ãªããŸãã æ£è
ããªã³ã©ã€ã³èšºçãè¡ãããã®ã¢ã㪠ã¢ããªã¯æ£è
ããªã³ã©ã€ã³èšºçãããããã®ãç
颿€çŽ¢ãâãäºçŽãâãå蚺ãâã蚺å¯ãâãæ±ºæžãã®æ©èœãã·ãŒã ã¬ã¹ã«ç¹ããããã¹ãã¬ã¹ã®ããããªããŠãŒã¶ãŒäœéšãæäŸããããšãéèŠã§ãã ãããããªã³ã©ã€ã³èšºçã®ã¡ãªãããšããŠãåŸ
ã¡æéã®è»œæžããèœã¡çããç°å¢ã§èšºå¯ãã§ãããªã©ãæãããããããããã«è³ããŸã§ã®ãŠãŒã¶ãŒäœéšãå°ç¡ãã«ããŠããŸã UI ã§ã¯å
ãåããªããªã£ãŠããŸããŸãã ã¢ããªã§ã¯ãäŒãããã¶ã€ã³ããããã æ©èœçãªãã¶ã€ã³ ããå¿
èŠã«ãªããŸããããŠãŒã¶ãŒã®è¡åãéåããããªããããäžå¿
èŠãªèŠçŽ ãå°ç·ã極åæé€ããŠãéåžžã«ã·ã³ãã«ãª UI èšèšããããªã£ãŠãããæ©èœèªäœã䞻匵ããªããã¶ã€ã³ãå¿ãããŠããŸããååãã®ããã°ã§ããšãããã DLS ãããããã£ãèšèšææ³ã®ããšéçºãé²ããŠããããããå®çŸã§ãããšæã£ãŠããŸãã å»çæ©é¢åãã®é é蚺çã·ã¹ãã å»çæ©é¢åŽã«æäŸããŠããã·ã¹ãã ã¯ããªã³ã©ã€ã³èšºçãè¡ãããã®ããŒã«ã§ãã Web ãµã€ãã®ããã«ãäŒãããã¶ã€ã³ããã³ã³ããŒãžã§ã³éèŠã§ã¯ãªããã ããæ©èœçã«äœ¿ãããããã¶ã€ã³ ããéèŠã«ãªããŸãã ãã®ãããªç»é¢ã Bootstrap ã®ãã㪠UI ãã³ãã¬ãŒããã®ãŸãŸã®èŠãç®ã§æ§ç¯ããŠããŸããšãæè¡çã«çŽ æŽããããã®ãã§ãããšããŠãã䜿ãåæãæªãè²§åŒ±ãªæ©èœãšèŠãããããªãããã ãã¶ã€ããŒã管çç»é¢ã® UI èšèšã«æºããããšã¯ãããžãã¹çã«ãéåžžã«éèŠãªèŠçŽ ã§ãã ç¹ã« CLINICS ã®å»çæ©é¢åãã®ã·ã¹ãã ã¯ãå®éã«ãªã³ã©ã€ã³ã§æ£è
ã®èšºå¯ãè¡ãããŒã«ã®ãããå»çæ©é¢åŽã蚺çè¡çºãã€ã€ããªãçµãããããã㪠UI èšèšãéèŠã§ãã MVP çãªææ³ã§ããšãããããªãªãŒã¹ããŠæ€èšŒãéããŠãããšããã¹ã¿ã³ã¹ããšããªãããããªãªãŒã¹ãããŸã§ã«æ©èœçã«äžåããªãããå»çåŸäºè
ãè¿·ããæ£ãã䜿ãã UI èšèšã«ãªã£ãŠããããªã©ã瀟å
ãå®éã®å»çæ©é¢ã®ãã¹ããç¹°ãè¿ãã詊è¡é¯èª€ãçµãŠãªãªãŒã¹ãããšããããããã¯ããã¶ã€ã³ãããŠããæèŠã«ãªããäŒãããã¶ã€ã³ããšã¯éã£ãæèã§ãã¶ã€ã³ã«åãçµãã§ããŸãã æ©èœéèŠãªãµãŒãã¹ãããçŽæçã«ã·ã³ãã«ãª UI ãéèŠ ãã®ããã« CLINICS ãšãã 1 ã€ã®ãµãŒãã¹ãæ§æããèŠçŽ ã®äžã§ããã¿ãŒã²ãããŠãŒã¶ãŒãæäŸäŸ¡å€ã®éãã«ãã£ãŠããã¶ã€ã³ã¢ãããŒããéèŠèŠããèŠç¹ãç°ãªããŸãã ããšãã°ãèªåãæ¥åã§ããå©çšãããããã¿ã€ãã³ã°ããŒã«ã® inVision ããã°ã€ã³åã¯ãå©çšã·ãŒã³ãããé
åçãªãµãŒãã¹ã§ãããšããããšãäŒããããã®ãã¶ã€ã³ãããŠããããã°ã€ã³åŸã¯çŽæçã«ããããããã·ã³ãã«ãª UI èšèšã§ããã°ã€ã³ååŸã§ãµãŒãã¹ã® UI ãç°ãªããŸãã inVision ãæ©èœã¯è±å¯ã§ããããããã¿ã€ãã³ã°ãè¡ãäžã§éåžžã«ã·ã³ãã«ãªæäœæ§ãæäŸããŠãããç¡é§ãªèª¬æãå°ç·ããªããŠãçŽæçã«äœ¿ãã UI ã¯ãç¶ç¶ããŠå©çšã§ããå®å¿æã«ãã€ãªãããèŠç¿ãã¹ã UI ã ãªãšæã£ãŠããŸãã ïŒinVision ã®ç»é¢ã®éãïŒ CLINICS ã®å»çæ©é¢åãã·ã¹ãã ãåä»ç®¡çãã¹ã±ãžã¥ãŒã«ããªã³ã©ã€ã³èšºçãè¡ãæ©èœãªã©è€æ°ã®æ©èœãã²ãšã€ã®ãµãŒãã¹ãšããŠæäŸããŠãããããUI çã«è€éã«ãªããããŸãããè€éãªæ©èœããŸãšããç»é¢äžã«ã·ã³ãã«ã«èœãšã蟌ãããã©ãããšããã®ãåå³ããäœã£ãŠã¯å£ããäœã£ãŠã¯å£ããç¹°ãè¿ãããŸãã ãããªããããïŒãšããã£ã UI ããæ©èœé¢ã§ã®èŠèœãšããªã©ããã£ãããããšå°ç·ã«ççŸãçããããã·ã³ãã«ã«è¡šçŸããã€ããããéã«äœ¿ãåæã®æªã UI ã«ãªã£ãŠããŸã£ãããUI ãèãããšããã®ã¯ãææ§ã«èšŽãããã¶ã€ã³ãšã¯éã£ãããããžã«ã«ãªæèãå¿
èŠã§ããã¶ã€ã³ããªããåèŠå
«èŠããŠãã¶ã€ã¶ã€ç¬ãèšãèšãããšãå€ããªããŸã w ãã¶ã€ã³ãªãªãšã³ããããªãããã¯ãéçº Web ãµãŒãã¹ã§ããã°ããã«ç®æšãšããŠããã³ã³ããŒãžã§ã³çãé«ãããã©ãããåæã調æ»ãéçºãšãããµã€ã¯ã«ãããŒã¹ãšããéçšã«ãªããŸãããç¹ã« å»çæ©é¢åãã®ã·ã¹ãã ã®å Žåã¯ãã ããªæ©èœã䜿ãã¥ãã UI ã ãšãµãŒãã¹çã«äžå®èŠçŽ ãæ±ãããèŠå ã«ããªããããžãã¹ã®æåå¯åŠã«çŽçµããŸã ã ãã®ããããªãªãŒã¹ãŸã§ã« UI ã磚ããã ã磚ããå®éã«å»çæ©é¢ã®çŸå Žã«åºåããŠã©ããããããŒã§èšºå¯ãè¡ã£ãŠããã®ããªã©ãã¢ãªã³ã°ããããåºæ¥äžãã£ãæ©èœã詊ããŠããããªã©ããååã«æ€èšããäžã§ãªãªãŒã¹ããŠããŸãããããããã¶ã€ã³ãéèŠããéçºãè¡ããç¹ã¯ã¡ãã¬ãŒã ããããã®éçºäœå¶ãããããŸããã ãã®ãã㪠ãã¶ã€ã³ãªãªãšã³ããããªãããã¯ãéçºãè¡ãäžã§éèŠãªãã€ã³ãã¯ãäºæ¥çè§£ãšãšã³ãžãã¢ãšã®å¯ãªé£æº ã§ãã衚é¢çãªãã¶ã€ã³ã§ã¯ãªããå®éã«äœ¿ãããå©çšã·ãŒã³ãæ³åãã€ã€ããäœéšããããšãé£ããå»çãµãŒãã¹ã ãããããåæã®ç¥èããã¢ãªã³ã°ããŠãŒã¶ãŒãã¹ããªã©ãéèŠãšãªããŸãããæ©èœçãªéšåã«é¢ããŠã¯ãšã³ãžãã¢ãšä»æ§ã«ã€ããŠè°è«ãããããŠãŒã¹ã±ãŒã¹ãèžãŸããŠã©ã®ãã㪠UI ã«èœãšã蟌ãã¹ãããèããªãããã¶ã€ã³ã«èœãšã蟌ãã§ãããŸããã€ã³ã¿ã©ã¯ãã£ããªè¡šçŸãªã© inVision ã§ã衚çŸããããªã现ããåããå°ç·ãªã©ã¯ãå®è£
æã«ãšã³ãžãã¢ã«äŒãããããããããã³ããšã³ãéšåã®ã³ãŒãã£ã³ã°ãèªãè¡ãããšã§ã³ãŒããéããŠãšã³ãžãã¢ãšã³ãã¥ãã±ãŒã·ã§ã³ãåããããããªãã®ã§ãããã³ããšã³ããææ¡ããŠããããšã¯éèŠã§ãã ãŸãšã å人çã«ã¯ãäŒãããã¶ã€ã³ããšãæ©èœçãªãã¶ã€ã³ãã§ãæç¢ºã«æèããããŠèããŠãã¶ã€ã³ããŠããããã§ã¯ãªãã£ãã®ã§ãããæäŸãã¹ã䟡å€ã®éãã«ãã£ãŠ å·Šè³ãšå³è³ãããã䜿ãåããŠãã¶ã€ã³ããŠãã ãããããªããšããããšã«æ°ä»ããããŸãããããã¯ä»¥åãã¶ã€ããŒã®å°å±±ãããã°ã§æžãã ã·ã¹ãã 1ïŒèªåçã«çŽæã§åãâæ©ãæèâïŒãšã·ã¹ãã 2ïŒæåã§è«ççã«åãâé
ãæèâïŒ ãèªåã®äžã§æ¯ãåã®ããã«è¡ãæ¥ããŠãã ãããªãšæããã®ã§ãèå³ã®ããæ¹ã¯ãæèãšãã¶ã€ã³ã¹ãã«ããèªãã§ããããšããããããã§ãã æèãšãã¶ã€ã³ã¹ãã« ãã¡ãã¬ãŒ TechLunchã | MEDLEY Developer Portal ã¯ãããŸããŠïŒæè¿ã¿ãã¿ã倪ãã ããŠã¯ãããã®ã®ããŸã æ©ã¯çããŠããªããšãã€ãšããã®ææããã£ãšå ªããŠããéçºæ¬éšã€ã±ã¡ã³æ
åœã®ãã¶ã€ããŒã»å°å±±ã§ãã ã¡ãã¬ãŒã§ã¯ TechLunch ãšãã瀟å
å匷äŒã宿œããŠããã®ã§ãããåç°ã«åŒãç¶ã... developer.medley.jp æåŸã« ãµã ãããŒã«ã°ã£ããåãã§ é©åœãªäººãšã¬ããã«ã貌ãããŠããããšãã§ãããä»åã¯çé¢ç®ãªããšãæžããŠã¿ãŸããããããã§ããã§ããããããã®ããã°ãæžããŠãŠæ£çŽç²ããã®ã§ãã·ã¹ãã 2 ãåããŠãã«éããªããšæããŸãããããªç§ãšäžç·ã«ä»äºãããããåã¿ãããšãããã¶ã€ããŒããšã³ãžãã¢ãããå¿åãåŸ
ã¡ããŠãããŸãã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp
æè¿ PS4 ã®ã°ã©ã³ããŒãªã¹ã¢ã¹ããŒããããå§ããŠãèªå®
ã®ãããç°å¢ã®é
ãã«æ°ã¥ãããã¶ã€ããŒã® ããšã ã§ããåå㯠DLS ã«ã€ã㊠ã玹ä»ãããŠããã ããŸããããä»åã¯ã¡ãã¬ãŒã«å
¥ç€ŸããŠæããããã¶ã€ã³ããã»ã¹ã®éããã«ã€ããŠèªåãªãã«ãŸãšããŠã¿ãŸããã ããšã§èªã¿ãã人åãã«ããšã¬ããŒã¿ãŒããã颚ã«ãŸãšãããšã [ CLINICS ] ãšãããµãŒãã¹ã¯ [ æ£è
ãšå»çæ©é¢åã ] ãããããµãŒãã¹ãæäŸããŠããã [ æäŸäŸ¡å€ã®éã ] ã«ãã£ãŠ [ ãã¶ã€ã³ã®åœ¹å²ãç°ãªã ] ããšã«æ°ã¥ãã ç¹ã« [ å»çæ©é¢åã ] 㯠[ UI ãéèŠ ] ãšãªã [ äŒããããšãç®çãšãã Web ãµã€ã ] ãšã¯éã£ãŠ [ UI ãã¶ã€ã³ã®è¯ãæªãããããã¯ãå
šäœã®å質ã«é¢ãã ] ãã [ äºæ¥ãæè¡ãçè§£ ] ãã[ ãã¶ã€ã³ãªãªãšã³ããã ] ãæ±ãããã ãšãããããªå
容ã§ãã ãŠãŒã¶ãŒã«ãã£ãŠç°ãªãæäŸäŸ¡å€ ã¡ãã¬ãŒã«å
¥ç€ŸããŠããããªã³ã©ã€ã³èšºçã¢ããªã CLINICSïŒã¯ãªãã¯ã¹ïŒ ããšãããµãŒãã¹ã®ãã¶ã€ã³ãäž»ã«æ
åœããŠããã®ã§ãããæ£è
ãšå»çæ©é¢åŽã§æäŸããŠãããããã¯ãã®å
容ãç°ãªããŸãã ãªã³ã©ã€ã³èšºçã®å
容ãäŒããå©çšãä¿ãããã® Web ãµã€ãïŒæ£è
ã»å»çæ©é¢åæ¹ïŒ æ£è
ããªã³ã©ã€ã³ã§éé¢ãè¡ãããã®ã¢ã㪠å»çæ©é¢åŽããªã³ã©ã€ã³ã§é é蚺çãè¡ãããã®ã·ã¹ãã ãµãŒãã¹ã®å
¥ãå£ãšãªã Web ãµã€ã Web ããŒãžã®åœ¹å²ãšããŠã¯ããªã³ã©ã€ã³èšºçãšãããã®ãã©ããã£ããã®ã§ãCLINICS ãå©çšãããšã©ããã課é¡è§£æ±ºã«ã€ãªããã®ãããšãããµãŒãã¹ã®ç¹åŸŽãæ£è
ãšå»çæ©é¢åæ¹ã«ã äŒããããã®ãã¶ã€ã³ ããå¿
èŠãšãªããŸãã ãã¶ã€ã³ããã«ããã£ãŠæ³šåãã¹ããã€ã³ãã¯ãè£
食ãã€ã¡ãŒãžç»åãªã©ã·ã³ããªãã¯ãªãã¶ã€ã³ãšã¹ããŒãªãŒæ§ã®ããå°ç·èšèšãããããšã§ãèŠèŠçã«ç¹åŸŽãäŒããããããããŸãã³ã³ããŒãžã§ã³ãã€ã³ããžèªå°ããããããã¿ã³çã¯ç®ç«ããããªã©ãé©åã«æ
å ±ãäŒããè¡åãä¿ãããã®ãã¶ã€ã³ãéèŠã«ãªããŸãã æ£è
ããªã³ã©ã€ã³èšºçãè¡ãããã®ã¢ã㪠ã¢ããªã¯æ£è
ããªã³ã©ã€ã³èšºçãããããã®ãç
颿€çŽ¢ãâãäºçŽãâãå蚺ãâã蚺å¯ãâãæ±ºæžãã®æ©èœãã·ãŒã ã¬ã¹ã«ç¹ããããã¹ãã¬ã¹ã®ããããªããŠãŒã¶ãŒäœéšãæäŸããããšãéèŠã§ãã ãããããªã³ã©ã€ã³èšºçã®ã¡ãªãããšããŠãåŸ
ã¡æéã®è»œæžããèœã¡çããç°å¢ã§èšºå¯ãã§ãããªã©ãæãããããããããã«è³ããŸã§ã®ãŠãŒã¶ãŒäœéšãå°ç¡ãã«ããŠããŸã UI ã§ã¯å
ãåããªããªã£ãŠããŸããŸãã ã¢ããªã§ã¯ãäŒãããã¶ã€ã³ããããã æ©èœçãªãã¶ã€ã³ ããå¿
èŠã«ãªããŸããããŠãŒã¶ãŒã®è¡åãéåããããªããããäžå¿
èŠãªèŠçŽ ãå°ç·ã極åæé€ããŠãéåžžã«ã·ã³ãã«ãª UI èšèšããããªã£ãŠãããæ©èœèªäœã䞻匵ããªããã¶ã€ã³ãå¿ãããŠããŸããååãã®ããã°ã§ããšãããã DLS ãããããã£ãèšèšææ³ã®ããšéçºãé²ããŠããããããå®çŸã§ãããšæã£ãŠããŸãã å»çæ©é¢åãã®é é蚺çã·ã¹ãã å»çæ©é¢åŽã«æäŸããŠããã·ã¹ãã ã¯ããªã³ã©ã€ã³èšºçãè¡ãããã®ããŒã«ã§ãã Web ãµã€ãã®ããã«ãäŒãããã¶ã€ã³ããã³ã³ããŒãžã§ã³éèŠã§ã¯ãªããã ããæ©èœçã«äœ¿ãããããã¶ã€ã³ ããéèŠã«ãªããŸãã ãã®ãããªç»é¢ã Bootstrap ã®ãã㪠UI ãã³ãã¬ãŒããã®ãŸãŸã®èŠãç®ã§æ§ç¯ããŠããŸããšãæè¡çã«çŽ æŽããããã®ãã§ãããšããŠãã䜿ãåæãæªãè²§åŒ±ãªæ©èœãšèŠãããããªãããã ãã¶ã€ããŒã管çç»é¢ã® UI èšèšã«æºããããšã¯ãããžãã¹çã«ãéåžžã«éèŠãªèŠçŽ ã§ãã ç¹ã« CLINICS ã®å»çæ©é¢åãã®ã·ã¹ãã ã¯ãå®éã«ãªã³ã©ã€ã³ã§æ£è
ã®èšºå¯ãè¡ãããŒã«ã®ãããå»çæ©é¢åŽã蚺çè¡çºãã€ã€ããªãçµãããããã㪠UI èšèšãéèŠã§ãã MVP çãªææ³ã§ããšãããããªãªãŒã¹ããŠæ€èšŒãéããŠãããšããã¹ã¿ã³ã¹ããšããªãããããªãªãŒã¹ãããŸã§ã«æ©èœçã«äžåããªãããå»çåŸäºè
ãè¿·ããæ£ãã䜿ãã UI èšèšã«ãªã£ãŠããããªã©ã瀟å
ãå®éã®å»çæ©é¢ã®ãã¹ããç¹°ãè¿ãã詊è¡é¯èª€ãçµãŠãªãªãŒã¹ãããšããããããã¯ããã¶ã€ã³ãããŠããæèŠã«ãªããäŒãããã¶ã€ã³ããšã¯éã£ãæèã§ãã¶ã€ã³ã«åãçµãã§ããŸãã æ©èœéèŠãªãµãŒãã¹ãããçŽæçã«ã·ã³ãã«ãª UI ãéèŠ ãã®ããã« CLINICS ãšãã 1 ã€ã®ãµãŒãã¹ãæ§æããèŠçŽ ã®äžã§ããã¿ãŒã²ãããŠãŒã¶ãŒãæäŸäŸ¡å€ã®éãã«ãã£ãŠããã¶ã€ã³ã¢ãããŒããéèŠèŠããèŠç¹ãç°ãªããŸãã ããšãã°ãèªåãæ¥åã§ããå©çšãããããã¿ã€ãã³ã°ããŒã«ã® inVision ããã°ã€ã³åã¯ãå©çšã·ãŒã³ãããé
åçãªãµãŒãã¹ã§ãããšããããšãäŒããããã®ãã¶ã€ã³ãããŠããããã°ã€ã³åŸã¯çŽæçã«ããããããã·ã³ãã«ãª UI èšèšã§ããã°ã€ã³ååŸã§ãµãŒãã¹ã® UI ãç°ãªããŸãã inVision ãæ©èœã¯è±å¯ã§ããããããã¿ã€ãã³ã°ãè¡ãäžã§éåžžã«ã·ã³ãã«ãªæäœæ§ãæäŸããŠãããç¡é§ãªèª¬æãå°ç·ããªããŠãçŽæçã«äœ¿ãã UI ã¯ãç¶ç¶ããŠå©çšã§ããå®å¿æã«ãã€ãªãããèŠç¿ãã¹ã UI ã ãªãšæã£ãŠããŸãã ïŒinVision ã®ç»é¢ã®éãïŒ CLINICS ã®å»çæ©é¢åãã·ã¹ãã ãåä»ç®¡çãã¹ã±ãžã¥ãŒã«ããªã³ã©ã€ã³èšºçãè¡ãæ©èœãªã©è€æ°ã®æ©èœãã²ãšã€ã®ãµãŒãã¹ãšããŠæäŸããŠãããããUI çã«è€éã«ãªããããŸãããè€éãªæ©èœããŸãšããç»é¢äžã«ã·ã³ãã«ã«èœãšã蟌ãããã©ãããšããã®ãåå³ããäœã£ãŠã¯å£ããäœã£ãŠã¯å£ããç¹°ãè¿ãããŸãã ãããªããããïŒãšããã£ã UI ããæ©èœé¢ã§ã®èŠèœãšããªã©ããã£ãããããšå°ç·ã«ççŸãçããããã·ã³ãã«ã«è¡šçŸããã€ããããéã«äœ¿ãåæã®æªã UI ã«ãªã£ãŠããŸã£ãããUI ãèãããšããã®ã¯ãææ§ã«èšŽãããã¶ã€ã³ãšã¯éã£ãããããžã«ã«ãªæèãå¿
èŠã§ããã¶ã€ã³ããªããåèŠå
«èŠããŠãã¶ã€ã¶ã€ç¬ãèšãèšãããšãå€ããªããŸã w ãã¶ã€ã³ãªãªãšã³ããããªãããã¯ãéçº Web ãµãŒãã¹ã§ããã°ããã«ç®æšãšããŠããã³ã³ããŒãžã§ã³çãé«ãããã©ãããåæã調æ»ãéçºãšãããµã€ã¯ã«ãããŒã¹ãšããéçšã«ãªããŸãããç¹ã« å»çæ©é¢åãã®ã·ã¹ãã ã®å Žåã¯ãã ããªæ©èœã䜿ãã¥ãã UI ã ãšãµãŒãã¹çã«äžå®èŠçŽ ãæ±ãããèŠå ã«ããªããããžãã¹ã®æåå¯åŠã«çŽçµããŸã ã ãã®ããããªãªãŒã¹ãŸã§ã« UI ã磚ããã ã磚ããå®éã«å»çæ©é¢ã®çŸå Žã«åºåããŠã©ããããããŒã§èšºå¯ãè¡ã£ãŠããã®ããªã©ãã¢ãªã³ã°ããããåºæ¥äžãã£ãæ©èœã詊ããŠããããªã©ããååã«æ€èšããäžã§ãªãªãŒã¹ããŠããŸãããããããã¶ã€ã³ãéèŠããéçºãè¡ããç¹ã¯ã¡ãã¬ãŒã ããããã®éçºäœå¶ãããããŸããã ãã®ãã㪠ãã¶ã€ã³ãªãªãšã³ããããªãããã¯ãéçºãè¡ãäžã§éèŠãªãã€ã³ãã¯ãäºæ¥çè§£ãšãšã³ãžãã¢ãšã®å¯ãªé£æº ã§ãã衚é¢çãªãã¶ã€ã³ã§ã¯ãªããå®éã«äœ¿ãããå©çšã·ãŒã³ãæ³åãã€ã€ããäœéšããããšãé£ããå»çãµãŒãã¹ã ãããããåæã®ç¥èããã¢ãªã³ã°ããŠãŒã¶ãŒãã¹ããªã©ãéèŠãšãªããŸãããæ©èœçãªéšåã«é¢ããŠã¯ãšã³ãžãã¢ãšä»æ§ã«ã€ããŠè°è«ãããããŠãŒã¹ã±ãŒã¹ãèžãŸããŠã©ã®ãã㪠UI ã«èœãšã蟌ãã¹ãããèããªãããã¶ã€ã³ã«èœãšã蟌ãã§ãããŸããã€ã³ã¿ã©ã¯ãã£ããªè¡šçŸãªã© inVision ã§ã衚çŸããããªã现ããåããå°ç·ãªã©ã¯ãå®è£
æã«ãšã³ãžãã¢ã«äŒãããããããããã³ããšã³ãéšåã®ã³ãŒãã£ã³ã°ãèªãè¡ãããšã§ã³ãŒããéããŠãšã³ãžãã¢ãšã³ãã¥ãã±ãŒã·ã§ã³ãåããããããªãã®ã§ãããã³ããšã³ããææ¡ããŠããããšã¯éèŠã§ãã ãŸãšã å人çã«ã¯ãäŒãããã¶ã€ã³ããšãæ©èœçãªãã¶ã€ã³ãã§ãæç¢ºã«æèããããŠèããŠãã¶ã€ã³ããŠããããã§ã¯ãªãã£ãã®ã§ãããæäŸãã¹ã䟡å€ã®éãã«ãã£ãŠ å·Šè³ãšå³è³ãããã䜿ãåããŠãã¶ã€ã³ããŠãã ãããããªããšããããšã«æ°ä»ããããŸãããããã¯ä»¥åãã¶ã€ããŒã®å°å±±ãããã°ã§æžãã ã·ã¹ãã 1ïŒèªåçã«çŽæã§åãâæ©ãæèâïŒãšã·ã¹ãã 2ïŒæåã§è«ççã«åãâé
ãæèâïŒ ãèªåã®äžã§æ¯ãåã®ããã«è¡ãæ¥ããŠãã ãããªãšæããã®ã§ãèå³ã®ããæ¹ã¯ãæèãšãã¶ã€ã³ã¹ãã«ããèªãã§ããããšããããããã§ãã æèãšãã¶ã€ã³ã¹ãã« ãã¡ãã¬ãŒ TechLunchã | MEDLEY Developer Portal ã¯ãããŸããŠïŒæè¿ã¿ãã¿ã倪ãã ããŠã¯ãããã®ã®ããŸã æ©ã¯çããŠããªããšãã€ãšããã®ææããã£ãšå ªããŠããéçºæ¬éšã€ã±ã¡ã³æ
åœã®ãã¶ã€ããŒã»å°å±±ã§ãã ã¡ãã¬ãŒã§ã¯ TechLunch ãšãã瀟å
å匷äŒã宿œããŠããã®ã§ãããåç°ã«åŒãç¶ã... developer.medley.jp æåŸã« ãµã ãããŒã«ã°ã£ããåãã§ é©åœãªäººãšã¬ããã«ã貌ãããŠããããšãã§ãããä»åã¯çé¢ç®ãªããšãæžããŠã¿ãŸããããããã§ããã§ããããããã®ããã°ãæžããŠãŠæ£çŽç²ããã®ã§ãã·ã¹ãã 2 ãåããŠãã«éããªããšæããŸãããããªç§ãšäžç·ã«ä»äºãããããåã¿ãããšãããã¶ã€ããŒããšã³ãžãã¢ãããå¿åãåŸ
ã¡ããŠãããŸãã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp
æè¿ PS4 ã®ã°ã©ã³ããŒãªã¹ã¢ã¹ããŒããããå§ããŠãèªå®
ã®ãããç°å¢ã®é
ãã«æ°ã¥ãããã¶ã€ããŒã® ããšã ã§ããåå㯠DLS ã«ã€ã㊠ã玹ä»ãããŠããã ããŸããããä»åã¯ã¡ãã¬ãŒã«å
¥ç€ŸããŠæããããã¶ã€ã³ããã»ã¹ã®éããã«ã€ããŠèªåãªãã«ãŸãšããŠã¿ãŸããã ããšã§èªã¿ãã人åãã«ããšã¬ããŒã¿ãŒããã颚ã«ãŸãšãããšã [ CLINICS ] ãšãããµãŒãã¹ã¯ [ æ£è
ãšå»çæ©é¢åã ] ãããããµãŒãã¹ãæäŸããŠããã [ æäŸäŸ¡å€ã®éã ] ã«ãã£ãŠ [ ãã¶ã€ã³ã®åœ¹å²ãç°ãªã ] ããšã«æ°ã¥ãã ç¹ã« [ å»çæ©é¢åã ] 㯠[ UI ãéèŠ ] ãšãªã [ äŒããããšãç®çãšãã Web ãµã€ã ] ãšã¯éã£ãŠ [ UI ãã¶ã€ã³ã®è¯ãæªãããããã¯ãå
šäœã®å質ã«é¢ãã ] ãã [ äºæ¥ãæè¡ãçè§£ ] ãã[ ãã¶ã€ã³ãªãªãšã³ããã ] ãæ±ãããã ãšãããããªå
容ã§ãã ãŠãŒã¶ãŒã«ãã£ãŠç°ãªãæäŸäŸ¡å€ ã¡ãã¬ãŒã«å
¥ç€ŸããŠããããªã³ã©ã€ã³èšºçã¢ããªã CLINICSïŒã¯ãªãã¯ã¹ïŒ ããšãããµãŒãã¹ã®ãã¶ã€ã³ãäž»ã«æ
åœããŠããã®ã§ãããæ£è
ãšå»çæ©é¢åŽã§æäŸããŠãããããã¯ãã®å
容ãç°ãªããŸãã ãªã³ã©ã€ã³èšºçã®å
容ãäŒããå©çšãä¿ãããã® Web ãµã€ãïŒæ£è
ã»å»çæ©é¢åæ¹ïŒ æ£è
ããªã³ã©ã€ã³ã§éé¢ãè¡ãããã®ã¢ã㪠å»çæ©é¢åŽããªã³ã©ã€ã³ã§é é蚺çãè¡ãããã®ã·ã¹ãã ãµãŒãã¹ã®å
¥ãå£ãšãªã Web ãµã€ã Web ããŒãžã®åœ¹å²ãšããŠã¯ããªã³ã©ã€ã³èšºçãšãããã®ãã©ããã£ããã®ã§ãCLINICS ãå©çšãããšã©ããã課é¡è§£æ±ºã«ã€ãªããã®ãããšãããµãŒãã¹ã®ç¹åŸŽãæ£è
ãšå»çæ©é¢åæ¹ã«ã äŒããããã®ãã¶ã€ã³ ããå¿
èŠãšãªããŸãã ãã¶ã€ã³ããã«ããã£ãŠæ³šåãã¹ããã€ã³ãã¯ãè£
食ãã€ã¡ãŒãžç»åãªã©ã·ã³ããªãã¯ãªãã¶ã€ã³ãšã¹ããŒãªãŒæ§ã®ããå°ç·èšèšãããããšã§ãèŠèŠçã«ç¹åŸŽãäŒããããããããŸãã³ã³ããŒãžã§ã³ãã€ã³ããžèªå°ããããããã¿ã³çã¯ç®ç«ããããªã©ãé©åã«æ
å ±ãäŒããè¡åãä¿ãããã®ãã¶ã€ã³ãéèŠã«ãªããŸãã æ£è
ããªã³ã©ã€ã³èšºçãè¡ãããã®ã¢ã㪠ã¢ããªã¯æ£è
ããªã³ã©ã€ã³èšºçãããããã®ãç
颿€çŽ¢ãâãäºçŽãâãå蚺ãâã蚺å¯ãâãæ±ºæžãã®æ©èœãã·ãŒã ã¬ã¹ã«ç¹ããããã¹ãã¬ã¹ã®ããããªããŠãŒã¶ãŒäœéšãæäŸããããšãéèŠã§ãã ãããããªã³ã©ã€ã³èšºçã®ã¡ãªãããšããŠãåŸ
ã¡æéã®è»œæžããèœã¡çããç°å¢ã§èšºå¯ãã§ãããªã©ãæãããããããããã«è³ããŸã§ã®ãŠãŒã¶ãŒäœéšãå°ç¡ãã«ããŠããŸã UI ã§ã¯å
ãåããªããªã£ãŠããŸããŸãã ã¢ããªã§ã¯ãäŒãããã¶ã€ã³ããããã æ©èœçãªãã¶ã€ã³ ããå¿
èŠã«ãªããŸããããŠãŒã¶ãŒã®è¡åãéåããããªããããäžå¿
èŠãªèŠçŽ ãå°ç·ã極åæé€ããŠãéåžžã«ã·ã³ãã«ãª UI èšèšããããªã£ãŠãããæ©èœèªäœã䞻匵ããªããã¶ã€ã³ãå¿ãããŠããŸããååãã®ããã°ã§ããšãããã DLS ãããããã£ãèšèšææ³ã®ããšéçºãé²ããŠããããããå®çŸã§ãããšæã£ãŠããŸãã å»çæ©é¢åãã®é é蚺çã·ã¹ãã å»çæ©é¢åŽã«æäŸããŠããã·ã¹ãã ã¯ããªã³ã©ã€ã³èšºçãè¡ãããã®ããŒã«ã§ãã Web ãµã€ãã®ããã«ãäŒãããã¶ã€ã³ããã³ã³ããŒãžã§ã³éèŠã§ã¯ãªããã ããæ©èœçã«äœ¿ãããããã¶ã€ã³ ããéèŠã«ãªããŸãã ãã®ãããªç»é¢ã Bootstrap ã®ãã㪠UI ãã³ãã¬ãŒããã®ãŸãŸã®èŠãç®ã§æ§ç¯ããŠããŸããšãæè¡çã«çŽ æŽããããã®ãã§ãããšããŠãã䜿ãåæãæªãè²§åŒ±ãªæ©èœãšèŠãããããªãããã ãã¶ã€ããŒã管çç»é¢ã® UI èšèšã«æºããããšã¯ãããžãã¹çã«ãéåžžã«éèŠãªèŠçŽ ã§ãã ç¹ã« CLINICS ã®å»çæ©é¢åãã®ã·ã¹ãã ã¯ãå®éã«ãªã³ã©ã€ã³ã§æ£è
ã®èšºå¯ãè¡ãããŒã«ã®ãããå»çæ©é¢åŽã蚺çè¡çºãã€ã€ããªãçµãããããã㪠UI èšèšãéèŠã§ãã MVP çãªææ³ã§ããšãããããªãªãŒã¹ããŠæ€èšŒãéããŠãããšããã¹ã¿ã³ã¹ããšããªãããããªãªãŒã¹ãããŸã§ã«æ©èœçã«äžåããªãããå»çåŸäºè
ãè¿·ããæ£ãã䜿ãã UI èšèšã«ãªã£ãŠããããªã©ã瀟å
ãå®éã®å»çæ©é¢ã®ãã¹ããç¹°ãè¿ãã詊è¡é¯èª€ãçµãŠãªãªãŒã¹ãããšããããããã¯ããã¶ã€ã³ãããŠããæèŠã«ãªããäŒãããã¶ã€ã³ããšã¯éã£ãæèã§ãã¶ã€ã³ã«åãçµãã§ããŸãã æ©èœéèŠãªãµãŒãã¹ãããçŽæçã«ã·ã³ãã«ãª UI ãéèŠ ãã®ããã« CLINICS ãšãã 1 ã€ã®ãµãŒãã¹ãæ§æããèŠçŽ ã®äžã§ããã¿ãŒã²ãããŠãŒã¶ãŒãæäŸäŸ¡å€ã®éãã«ãã£ãŠããã¶ã€ã³ã¢ãããŒããéèŠèŠããèŠç¹ãç°ãªããŸãã ããšãã°ãèªåãæ¥åã§ããå©çšãããããã¿ã€ãã³ã°ããŒã«ã® inVision ããã°ã€ã³åã¯ãå©çšã·ãŒã³ãããé
åçãªãµãŒãã¹ã§ãããšããããšãäŒããããã®ãã¶ã€ã³ãããŠããããã°ã€ã³åŸã¯çŽæçã«ããããããã·ã³ãã«ãª UI èšèšã§ããã°ã€ã³ååŸã§ãµãŒãã¹ã® UI ãç°ãªããŸãã inVision ãæ©èœã¯è±å¯ã§ããããããã¿ã€ãã³ã°ãè¡ãäžã§éåžžã«ã·ã³ãã«ãªæäœæ§ãæäŸããŠãããç¡é§ãªèª¬æãå°ç·ããªããŠãçŽæçã«äœ¿ãã UI ã¯ãç¶ç¶ããŠå©çšã§ããå®å¿æã«ãã€ãªãããèŠç¿ãã¹ã UI ã ãªãšæã£ãŠããŸãã ïŒinVision ã®ç»é¢ã®éãïŒ CLINICS ã®å»çæ©é¢åãã·ã¹ãã ãåä»ç®¡çãã¹ã±ãžã¥ãŒã«ããªã³ã©ã€ã³èšºçãè¡ãæ©èœãªã©è€æ°ã®æ©èœãã²ãšã€ã®ãµãŒãã¹ãšããŠæäŸããŠãããããUI çã«è€éã«ãªããããŸãããè€éãªæ©èœããŸãšããç»é¢äžã«ã·ã³ãã«ã«èœãšã蟌ãããã©ãããšããã®ãåå³ããäœã£ãŠã¯å£ããäœã£ãŠã¯å£ããç¹°ãè¿ãããŸãã ãããªããããïŒãšããã£ã UI ããæ©èœé¢ã§ã®èŠèœãšããªã©ããã£ãããããšå°ç·ã«ççŸãçããããã·ã³ãã«ã«è¡šçŸããã€ããããéã«äœ¿ãåæã®æªã UI ã«ãªã£ãŠããŸã£ãããUI ãèãããšããã®ã¯ãææ§ã«èšŽãããã¶ã€ã³ãšã¯éã£ãããããžã«ã«ãªæèãå¿
èŠã§ããã¶ã€ã³ããªããåèŠå
«èŠããŠãã¶ã€ã¶ã€ç¬ãèšãèšãããšãå€ããªããŸã w ãã¶ã€ã³ãªãªãšã³ããããªãããã¯ãéçº Web ãµãŒãã¹ã§ããã°ããã«ç®æšãšããŠããã³ã³ããŒãžã§ã³çãé«ãããã©ãããåæã調æ»ãéçºãšãããµã€ã¯ã«ãããŒã¹ãšããéçšã«ãªããŸãããç¹ã« å»çæ©é¢åãã®ã·ã¹ãã ã®å Žåã¯ãã ããªæ©èœã䜿ãã¥ãã UI ã ãšãµãŒãã¹çã«äžå®èŠçŽ ãæ±ãããèŠå ã«ããªããããžãã¹ã®æåå¯åŠã«çŽçµããŸã ã ãã®ããããªãªãŒã¹ãŸã§ã« UI ã磚ããã ã磚ããå®éã«å»çæ©é¢ã®çŸå Žã«åºåããŠã©ããããããŒã§èšºå¯ãè¡ã£ãŠããã®ããªã©ãã¢ãªã³ã°ããããåºæ¥äžãã£ãæ©èœã詊ããŠããããªã©ããååã«æ€èšããäžã§ãªãªãŒã¹ããŠããŸãããããããã¶ã€ã³ãéèŠããéçºãè¡ããç¹ã¯ã¡ãã¬ãŒã ããããã®éçºäœå¶ãããããŸããã ãã®ãã㪠ãã¶ã€ã³ãªãªãšã³ããããªãããã¯ãéçºãè¡ãäžã§éèŠãªãã€ã³ãã¯ãäºæ¥çè§£ãšãšã³ãžãã¢ãšã®å¯ãªé£æº ã§ãã衚é¢çãªãã¶ã€ã³ã§ã¯ãªããå®éã«äœ¿ãããå©çšã·ãŒã³ãæ³åãã€ã€ããäœéšããããšãé£ããå»çãµãŒãã¹ã ãããããåæã®ç¥èããã¢ãªã³ã°ããŠãŒã¶ãŒãã¹ããªã©ãéèŠãšãªããŸãããæ©èœçãªéšåã«é¢ããŠã¯ãšã³ãžãã¢ãšä»æ§ã«ã€ããŠè°è«ãããããŠãŒã¹ã±ãŒã¹ãèžãŸããŠã©ã®ãã㪠UI ã«èœãšã蟌ãã¹ãããèããªãããã¶ã€ã³ã«èœãšã蟌ãã§ãããŸããã€ã³ã¿ã©ã¯ãã£ããªè¡šçŸãªã© inVision ã§ã衚çŸããããªã现ããåããå°ç·ãªã©ã¯ãå®è£
æã«ãšã³ãžãã¢ã«äŒãããããããããã³ããšã³ãéšåã®ã³ãŒãã£ã³ã°ãèªãè¡ãããšã§ã³ãŒããéããŠãšã³ãžãã¢ãšã³ãã¥ãã±ãŒã·ã§ã³ãåããããããªãã®ã§ãããã³ããšã³ããææ¡ããŠããããšã¯éèŠã§ãã ãŸãšã å人çã«ã¯ãäŒãããã¶ã€ã³ããšãæ©èœçãªãã¶ã€ã³ãã§ãæç¢ºã«æèããããŠèããŠãã¶ã€ã³ããŠããããã§ã¯ãªãã£ãã®ã§ãããæäŸãã¹ã䟡å€ã®éãã«ãã£ãŠ å·Šè³ãšå³è³ãããã䜿ãåããŠãã¶ã€ã³ããŠãã ãããããªããšããããšã«æ°ä»ããããŸãããããã¯ä»¥åãã¶ã€ããŒã®å°å±±ãããã°ã§æžãã ã·ã¹ãã 1ïŒèªåçã«çŽæã§åãâæ©ãæèâïŒãšã·ã¹ãã 2ïŒæåã§è«ççã«åãâé
ãæèâïŒ ãèªåã®äžã§æ¯ãåã®ããã«è¡ãæ¥ããŠãã ãããªãšæããã®ã§ãèå³ã®ããæ¹ã¯ãæèãšãã¶ã€ã³ã¹ãã«ããèªãã§ããããšããããããã§ãã æèãšãã¶ã€ã³ã¹ãã« ãã¡ãã¬ãŒ TechLunchã | MEDLEY Developer Portal ã¯ãããŸããŠïŒæè¿ã¿ãã¿ã倪ãã ããŠã¯ãããã®ã®ããŸã æ©ã¯çããŠããªããšãã€ãšããã®ææããã£ãšå ªããŠããéçºæ¬éšã€ã±ã¡ã³æ
åœã®ãã¶ã€ããŒã»å°å±±ã§ãã ã¡ãã¬ãŒã§ã¯ TechLunch ãšãã瀟å
å匷äŒã宿œããŠããã®ã§ãããåç°ã«åŒãç¶ã... developer.medley.jp æåŸã« ãµã ãããŒã«ã°ã£ããåãã§ é©åœãªäººãšã¬ããã«ã貌ãããŠããããšãã§ãããä»åã¯çé¢ç®ãªããšãæžããŠã¿ãŸããããããã§ããã§ããããããã®ããã°ãæžããŠãŠæ£çŽç²ããã®ã§ãã·ã¹ãã 2 ãåããŠãã«éããªããšæããŸãããããªç§ãšäžç·ã«ä»äºãããããåã¿ãããšãããã¶ã€ããŒããšã³ãžãã¢ãããå¿åãåŸ
ã¡ããŠãããŸãã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp
æè¿ PS4 ã®ã°ã©ã³ããŒãªã¹ã¢ã¹ããŒããããå§ããŠãèªå®
ã®ãããç°å¢ã®é
ãã«æ°ã¥ãããã¶ã€ããŒã® ããšã ã§ããåå㯠DLS ã«ã€ã㊠ã玹ä»ãããŠããã ããŸããããä»åã¯ã¡ãã¬ãŒã«å
¥ç€ŸããŠæããããã¶ã€ã³ããã»ã¹ã®éããã«ã€ããŠèªåãªãã«ãŸãšããŠã¿ãŸããã ããšã§èªã¿ãã人åãã«ããšã¬ããŒã¿ãŒããã颚ã«ãŸãšãããšã [ CLINICS ] ãšãããµãŒãã¹ã¯ [ æ£è
ãšå»çæ©é¢åã ] ãããããµãŒãã¹ãæäŸããŠããã [ æäŸäŸ¡å€ã®éã ] ã«ãã£ãŠ [ ãã¶ã€ã³ã®åœ¹å²ãç°ãªã ] ããšã«æ°ã¥ãã ç¹ã« [ å»çæ©é¢åã ] 㯠[ UI ãéèŠ ] ãšãªã [ äŒããããšãç®çãšãã Web ãµã€ã ] ãšã¯éã£ãŠ [ UI ãã¶ã€ã³ã®è¯ãæªãããããã¯ãå
šäœã®å質ã«é¢ãã ] ãã [ äºæ¥ãæè¡ãçè§£ ] ãã[ ãã¶ã€ã³ãªãªãšã³ããã ] ãæ±ãããã ãšãããããªå
容ã§ãã ãŠãŒã¶ãŒã«ãã£ãŠç°ãªãæäŸäŸ¡å€ ã¡ãã¬ãŒã«å
¥ç€ŸããŠããããªã³ã©ã€ã³èšºçã¢ããªã CLINICSïŒã¯ãªãã¯ã¹ïŒ ããšãããµãŒãã¹ã®ãã¶ã€ã³ãäž»ã«æ
åœããŠããã®ã§ãããæ£è
ãšå»çæ©é¢åŽã§æäŸããŠãããããã¯ãã®å
容ãç°ãªããŸãã ãªã³ã©ã€ã³èšºçã®å
容ãäŒããå©çšãä¿ãããã® Web ãµã€ãïŒæ£è
ã»å»çæ©é¢åæ¹ïŒ æ£è
ããªã³ã©ã€ã³ã§éé¢ãè¡ãããã®ã¢ã㪠å»çæ©é¢åŽããªã³ã©ã€ã³ã§é é蚺çãè¡ãããã®ã·ã¹ãã ãµãŒãã¹ã®å
¥ãå£ãšãªã Web ãµã€ã Web ããŒãžã®åœ¹å²ãšããŠã¯ããªã³ã©ã€ã³èšºçãšãããã®ãã©ããã£ããã®ã§ãCLINICS ãå©çšãããšã©ããã課é¡è§£æ±ºã«ã€ãªããã®ãããšãããµãŒãã¹ã®ç¹åŸŽãæ£è
ãšå»çæ©é¢åæ¹ã«ã äŒããããã®ãã¶ã€ã³ ããå¿
èŠãšãªããŸãã ãã¶ã€ã³ããã«ããã£ãŠæ³šåãã¹ããã€ã³ãã¯ãè£
食ãã€ã¡ãŒãžç»åãªã©ã·ã³ããªãã¯ãªãã¶ã€ã³ãšã¹ããŒãªãŒæ§ã®ããå°ç·èšèšãããããšã§ãèŠèŠçã«ç¹åŸŽãäŒããããããããŸãã³ã³ããŒãžã§ã³ãã€ã³ããžèªå°ããããããã¿ã³çã¯ç®ç«ããããªã©ãé©åã«æ
å ±ãäŒããè¡åãä¿ãããã®ãã¶ã€ã³ãéèŠã«ãªããŸãã æ£è
ããªã³ã©ã€ã³èšºçãè¡ãããã®ã¢ã㪠ã¢ããªã¯æ£è
ããªã³ã©ã€ã³èšºçãããããã®ãç
颿€çŽ¢ãâãäºçŽãâãå蚺ãâã蚺å¯ãâãæ±ºæžãã®æ©èœãã·ãŒã ã¬ã¹ã«ç¹ããããã¹ãã¬ã¹ã®ããããªããŠãŒã¶ãŒäœéšãæäŸããããšãéèŠã§ãã ãããããªã³ã©ã€ã³èšºçã®ã¡ãªãããšããŠãåŸ
ã¡æéã®è»œæžããèœã¡çããç°å¢ã§èšºå¯ãã§ãããªã©ãæãããããããããã«è³ããŸã§ã®ãŠãŒã¶ãŒäœéšãå°ç¡ãã«ããŠããŸã UI ã§ã¯å
ãåããªããªã£ãŠããŸããŸãã ã¢ããªã§ã¯ãäŒãããã¶ã€ã³ããããã æ©èœçãªãã¶ã€ã³ ããå¿
èŠã«ãªããŸããããŠãŒã¶ãŒã®è¡åãéåããããªããããäžå¿
èŠãªèŠçŽ ãå°ç·ã極åæé€ããŠãéåžžã«ã·ã³ãã«ãª UI èšèšããããªã£ãŠãããæ©èœèªäœã䞻匵ããªããã¶ã€ã³ãå¿ãããŠããŸããååãã®ããã°ã§ããšãããã DLS ãããããã£ãèšèšææ³ã®ããšéçºãé²ããŠããããããå®çŸã§ãããšæã£ãŠããŸãã å»çæ©é¢åãã®é é蚺çã·ã¹ãã å»çæ©é¢åŽã«æäŸããŠããã·ã¹ãã ã¯ããªã³ã©ã€ã³èšºçãè¡ãããã®ããŒã«ã§ãã Web ãµã€ãã®ããã«ãäŒãããã¶ã€ã³ããã³ã³ããŒãžã§ã³éèŠã§ã¯ãªããã ããæ©èœçã«äœ¿ãããããã¶ã€ã³ ããéèŠã«ãªããŸãã ãã®ãããªç»é¢ã Bootstrap ã®ãã㪠UI ãã³ãã¬ãŒããã®ãŸãŸã®èŠãç®ã§æ§ç¯ããŠããŸããšãæè¡çã«çŽ æŽããããã®ãã§ãããšããŠãã䜿ãåæãæªãè²§åŒ±ãªæ©èœãšèŠãããããªãããã ãã¶ã€ããŒã管çç»é¢ã® UI èšèšã«æºããããšã¯ãããžãã¹çã«ãéåžžã«éèŠãªèŠçŽ ã§ãã ç¹ã« CLINICS ã®å»çæ©é¢åãã®ã·ã¹ãã ã¯ãå®éã«ãªã³ã©ã€ã³ã§æ£è
ã®èšºå¯ãè¡ãããŒã«ã®ãããå»çæ©é¢åŽã蚺çè¡çºãã€ã€ããªãçµãããããã㪠UI èšèšãéèŠã§ãã MVP çãªææ³ã§ããšãããããªãªãŒã¹ããŠæ€èšŒãéããŠãããšããã¹ã¿ã³ã¹ããšããªãããããªãªãŒã¹ãããŸã§ã«æ©èœçã«äžåããªãããå»çåŸäºè
ãè¿·ããæ£ãã䜿ãã UI èšèšã«ãªã£ãŠããããªã©ã瀟å
ãå®éã®å»çæ©é¢ã®ãã¹ããç¹°ãè¿ãã詊è¡é¯èª€ãçµãŠãªãªãŒã¹ãããšããããããã¯ããã¶ã€ã³ãããŠããæèŠã«ãªããäŒãããã¶ã€ã³ããšã¯éã£ãæèã§ãã¶ã€ã³ã«åãçµãã§ããŸãã æ©èœéèŠãªãµãŒãã¹ãããçŽæçã«ã·ã³ãã«ãª UI ãéèŠ ãã®ããã« CLINICS ãšãã 1 ã€ã®ãµãŒãã¹ãæ§æããèŠçŽ ã®äžã§ããã¿ãŒã²ãããŠãŒã¶ãŒãæäŸäŸ¡å€ã®éãã«ãã£ãŠããã¶ã€ã³ã¢ãããŒããéèŠèŠããèŠç¹ãç°ãªããŸãã ããšãã°ãèªåãæ¥åã§ããå©çšãããããã¿ã€ãã³ã°ããŒã«ã® inVision ããã°ã€ã³åã¯ãå©çšã·ãŒã³ãããé
åçãªãµãŒãã¹ã§ãããšããããšãäŒããããã®ãã¶ã€ã³ãããŠããããã°ã€ã³åŸã¯çŽæçã«ããããããã·ã³ãã«ãª UI èšèšã§ããã°ã€ã³ååŸã§ãµãŒãã¹ã® UI ãç°ãªããŸãã inVision ãæ©èœã¯è±å¯ã§ããããããã¿ã€ãã³ã°ãè¡ãäžã§éåžžã«ã·ã³ãã«ãªæäœæ§ãæäŸããŠãããç¡é§ãªèª¬æãå°ç·ããªããŠãçŽæçã«äœ¿ãã UI ã¯ãç¶ç¶ããŠå©çšã§ããå®å¿æã«ãã€ãªãããèŠç¿ãã¹ã UI ã ãªãšæã£ãŠããŸãã ïŒinVision ã®ç»é¢ã®éãïŒ CLINICS ã®å»çæ©é¢åãã·ã¹ãã ãåä»ç®¡çãã¹ã±ãžã¥ãŒã«ããªã³ã©ã€ã³èšºçãè¡ãæ©èœãªã©è€æ°ã®æ©èœãã²ãšã€ã®ãµãŒãã¹ãšããŠæäŸããŠãããããUI çã«è€éã«ãªããããŸãããè€éãªæ©èœããŸãšããç»é¢äžã«ã·ã³ãã«ã«èœãšã蟌ãããã©ãããšããã®ãåå³ããäœã£ãŠã¯å£ããäœã£ãŠã¯å£ããç¹°ãè¿ãããŸãã ãããªããããïŒãšããã£ã UI ããæ©èœé¢ã§ã®èŠèœãšããªã©ããã£ãããããšå°ç·ã«ççŸãçããããã·ã³ãã«ã«è¡šçŸããã€ããããéã«äœ¿ãåæã®æªã UI ã«ãªã£ãŠããŸã£ãããUI ãèãããšããã®ã¯ãææ§ã«èšŽãããã¶ã€ã³ãšã¯éã£ãããããžã«ã«ãªæèãå¿
èŠã§ããã¶ã€ã³ããªããåèŠå
«èŠããŠãã¶ã€ã¶ã€ç¬ãèšãèšãããšãå€ããªããŸã w ãã¶ã€ã³ãªãªãšã³ããããªãããã¯ãéçº Web ãµãŒãã¹ã§ããã°ããã«ç®æšãšããŠããã³ã³ããŒãžã§ã³çãé«ãããã©ãããåæã調æ»ãéçºãšãããµã€ã¯ã«ãããŒã¹ãšããéçšã«ãªããŸãããç¹ã« å»çæ©é¢åãã®ã·ã¹ãã ã®å Žåã¯ãã ããªæ©èœã䜿ãã¥ãã UI ã ãšãµãŒãã¹çã«äžå®èŠçŽ ãæ±ãããèŠå ã«ããªããããžãã¹ã®æåå¯åŠã«çŽçµããŸã ã ãã®ããããªãªãŒã¹ãŸã§ã« UI ã磚ããã ã磚ããå®éã«å»çæ©é¢ã®çŸå Žã«åºåããŠã©ããããããŒã§èšºå¯ãè¡ã£ãŠããã®ããªã©ãã¢ãªã³ã°ããããåºæ¥äžãã£ãæ©èœã詊ããŠããããªã©ããååã«æ€èšããäžã§ãªãªãŒã¹ããŠããŸãããããããã¶ã€ã³ãéèŠããéçºãè¡ããç¹ã¯ã¡ãã¬ãŒã ããããã®éçºäœå¶ãããããŸããã ãã®ãã㪠ãã¶ã€ã³ãªãªãšã³ããããªãããã¯ãéçºãè¡ãäžã§éèŠãªãã€ã³ãã¯ãäºæ¥çè§£ãšãšã³ãžãã¢ãšã®å¯ãªé£æº ã§ãã衚é¢çãªãã¶ã€ã³ã§ã¯ãªããå®éã«äœ¿ãããå©çšã·ãŒã³ãæ³åãã€ã€ããäœéšããããšãé£ããå»çãµãŒãã¹ã ãããããåæã®ç¥èããã¢ãªã³ã°ããŠãŒã¶ãŒãã¹ããªã©ãéèŠãšãªããŸãããæ©èœçãªéšåã«é¢ããŠã¯ãšã³ãžãã¢ãšä»æ§ã«ã€ããŠè°è«ãããããŠãŒã¹ã±ãŒã¹ãèžãŸããŠã©ã®ãã㪠UI ã«èœãšã蟌ãã¹ãããèããªãããã¶ã€ã³ã«èœãšã蟌ãã§ãããŸããã€ã³ã¿ã©ã¯ãã£ããªè¡šçŸãªã© inVision ã§ã衚çŸããããªã现ããåããå°ç·ãªã©ã¯ãå®è£
æã«ãšã³ãžãã¢ã«äŒãããããããããã³ããšã³ãéšåã®ã³ãŒãã£ã³ã°ãèªãè¡ãããšã§ã³ãŒããéããŠãšã³ãžãã¢ãšã³ãã¥ãã±ãŒã·ã§ã³ãåããããããªãã®ã§ãããã³ããšã³ããææ¡ããŠããããšã¯éèŠã§ãã ãŸãšã å人çã«ã¯ãäŒãããã¶ã€ã³ããšãæ©èœçãªãã¶ã€ã³ãã§ãæç¢ºã«æèããããŠèããŠãã¶ã€ã³ããŠããããã§ã¯ãªãã£ãã®ã§ãããæäŸãã¹ã䟡å€ã®éãã«ãã£ãŠ å·Šè³ãšå³è³ãããã䜿ãåããŠãã¶ã€ã³ããŠãã ãããããªããšããããšã«æ°ä»ããããŸãããããã¯ä»¥åãã¶ã€ããŒã®å°å±±ãããã°ã§æžãã ã·ã¹ãã 1ïŒèªåçã«çŽæã§åãâæ©ãæèâïŒãšã·ã¹ãã 2ïŒæåã§è«ççã«åãâé
ãæèâïŒ ãèªåã®äžã§æ¯ãåã®ããã«è¡ãæ¥ããŠãã ãããªãšæããã®ã§ãèå³ã®ããæ¹ã¯ãæèãšãã¶ã€ã³ã¹ãã«ããèªãã§ããããšããããããã§ãã æèãšãã¶ã€ã³ã¹ãã« ãã¡ãã¬ãŒ TechLunchã | MEDLEY Developer Portal ã¯ãããŸããŠïŒæè¿ã¿ãã¿ã倪ãã ããŠã¯ãããã®ã®ããŸã æ©ã¯çããŠããªããšãã€ãšããã®ææããã£ãšå ªããŠããéçºæ¬éšã€ã±ã¡ã³æ
åœã®ãã¶ã€ããŒã»å°å±±ã§ãã ã¡ãã¬ãŒã§ã¯ TechLunch ãšãã瀟å
å匷äŒã宿œããŠããã®ã§ãããåç°ã«åŒãç¶ã... developer.medley.jp æåŸã« ãµã ãããŒã«ã°ã£ããåãã§ é©åœãªäººãšã¬ããã«ã貌ãããŠããããšãã§ãããä»åã¯çé¢ç®ãªããšãæžããŠã¿ãŸããããããã§ããã§ããããããã®ããã°ãæžããŠãŠæ£çŽç²ããã®ã§ãã·ã¹ãã 2 ãåããŠãã«éããªããšæããŸãããããªç§ãšäžç·ã«ä»äºãããããåã¿ãããšãããã¶ã€ããŒããšã³ãžãã¢ãããå¿åãåŸ
ã¡ããŠãããŸãã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp
æè¿ PS4 ã®ã°ã©ã³ããŒãªã¹ã¢ã¹ããŒããããå§ããŠãèªå®
ã®ãããç°å¢ã®é
ãã«æ°ã¥ãããã¶ã€ããŒã® ããšã ã§ããåå㯠DLS ã«ã€ã㊠ã玹ä»ãããŠããã ããŸããããä»åã¯ã¡ãã¬ãŒã«å
¥ç€ŸããŠæããããã¶ã€ã³ããã»ã¹ã®éããã«ã€ããŠèªåãªãã«ãŸãšããŠã¿ãŸããã ããšã§èªã¿ãã人åãã«ããšã¬ããŒã¿ãŒããã颚ã«ãŸãšãããšã [ CLINICS ] ãšãããµãŒãã¹ã¯ [ æ£è
ãšå»çæ©é¢åã ] ãããããµãŒãã¹ãæäŸããŠããã [ æäŸäŸ¡å€ã®éã ] ã«ãã£ãŠ [ ãã¶ã€ã³ã®åœ¹å²ãç°ãªã ] ããšã«æ°ã¥ãã ç¹ã« [ å»çæ©é¢åã ] 㯠[ UI ãéèŠ ] ãšãªã [ äŒããããšãç®çãšãã Web ãµã€ã ] ãšã¯éã£ãŠ [ UI ãã¶ã€ã³ã®è¯ãæªãããããã¯ãå
šäœã®å質ã«é¢ãã ] ãã [ äºæ¥ãæè¡ãçè§£ ] ãã[ ãã¶ã€ã³ãªãªãšã³ããã ] ãæ±ãããã ãšãããããªå
容ã§ãã ãŠãŒã¶ãŒã«ãã£ãŠç°ãªãæäŸäŸ¡å€ ã¡ãã¬ãŒã«å
¥ç€ŸããŠããããªã³ã©ã€ã³èšºçã¢ããªã CLINICSïŒã¯ãªãã¯ã¹ïŒ ããšãããµãŒãã¹ã®ãã¶ã€ã³ãäž»ã«æ
åœããŠããã®ã§ãããæ£è
ãšå»çæ©é¢åŽã§æäŸããŠãããããã¯ãã®å
容ãç°ãªããŸãã ãªã³ã©ã€ã³èšºçã®å
容ãäŒããå©çšãä¿ãããã® Web ãµã€ãïŒæ£è
ã»å»çæ©é¢åæ¹ïŒ æ£è
ããªã³ã©ã€ã³ã§éé¢ãè¡ãããã®ã¢ã㪠å»çæ©é¢åŽããªã³ã©ã€ã³ã§é é蚺çãè¡ãããã®ã·ã¹ãã ãµãŒãã¹ã®å
¥ãå£ãšãªã Web ãµã€ã Web ããŒãžã®åœ¹å²ãšããŠã¯ããªã³ã©ã€ã³èšºçãšãããã®ãã©ããã£ããã®ã§ãCLINICS ãå©çšãããšã©ããã課é¡è§£æ±ºã«ã€ãªããã®ãããšãããµãŒãã¹ã®ç¹åŸŽãæ£è
ãšå»çæ©é¢åæ¹ã«ã äŒããããã®ãã¶ã€ã³ ããå¿
èŠãšãªããŸãã ãã¶ã€ã³ããã«ããã£ãŠæ³šåãã¹ããã€ã³ãã¯ãè£
食ãã€ã¡ãŒãžç»åãªã©ã·ã³ããªãã¯ãªãã¶ã€ã³ãšã¹ããŒãªãŒæ§ã®ããå°ç·èšèšãããããšã§ãèŠèŠçã«ç¹åŸŽãäŒããããããããŸãã³ã³ããŒãžã§ã³ãã€ã³ããžèªå°ããããããã¿ã³çã¯ç®ç«ããããªã©ãé©åã«æ
å ±ãäŒããè¡åãä¿ãããã®ãã¶ã€ã³ãéèŠã«ãªããŸãã æ£è
ããªã³ã©ã€ã³èšºçãè¡ãããã®ã¢ã㪠ã¢ããªã¯æ£è
ããªã³ã©ã€ã³èšºçãããããã®ãç
颿€çŽ¢ãâãäºçŽãâãå蚺ãâã蚺å¯ãâãæ±ºæžãã®æ©èœãã·ãŒã ã¬ã¹ã«ç¹ããããã¹ãã¬ã¹ã®ããããªããŠãŒã¶ãŒäœéšãæäŸããããšãéèŠã§ãã ãããããªã³ã©ã€ã³èšºçã®ã¡ãªãããšããŠãåŸ
ã¡æéã®è»œæžããèœã¡çããç°å¢ã§èšºå¯ãã§ãããªã©ãæãããããããããã«è³ããŸã§ã®ãŠãŒã¶ãŒäœéšãå°ç¡ãã«ããŠããŸã UI ã§ã¯å
ãåããªããªã£ãŠããŸããŸãã ã¢ããªã§ã¯ãäŒãããã¶ã€ã³ããããã æ©èœçãªãã¶ã€ã³ ããå¿
èŠã«ãªããŸããããŠãŒã¶ãŒã®è¡åãéåããããªããããäžå¿
èŠãªèŠçŽ ãå°ç·ã極åæé€ããŠãéåžžã«ã·ã³ãã«ãª UI èšèšããããªã£ãŠãããæ©èœèªäœã䞻匵ããªããã¶ã€ã³ãå¿ãããŠããŸããååãã®ããã°ã§ããšãããã DLS ãããããã£ãèšèšææ³ã®ããšéçºãé²ããŠããããããå®çŸã§ãããšæã£ãŠããŸãã å»çæ©é¢åãã®é é蚺çã·ã¹ãã å»çæ©é¢åŽã«æäŸããŠããã·ã¹ãã ã¯ããªã³ã©ã€ã³èšºçãè¡ãããã®ããŒã«ã§ãã Web ãµã€ãã®ããã«ãäŒãããã¶ã€ã³ããã³ã³ããŒãžã§ã³éèŠã§ã¯ãªããã ããæ©èœçã«äœ¿ãããããã¶ã€ã³ ããéèŠã«ãªããŸãã ãã®ãããªç»é¢ã Bootstrap ã®ãã㪠UI ãã³ãã¬ãŒããã®ãŸãŸã®èŠãç®ã§æ§ç¯ããŠããŸããšãæè¡çã«çŽ æŽããããã®ãã§ãããšããŠãã䜿ãåæãæªãè²§åŒ±ãªæ©èœãšèŠãããããªãããã ãã¶ã€ããŒã管çç»é¢ã® UI èšèšã«æºããããšã¯ãããžãã¹çã«ãéåžžã«éèŠãªèŠçŽ ã§ãã ç¹ã« CLINICS ã®å»çæ©é¢åãã®ã·ã¹ãã ã¯ãå®éã«ãªã³ã©ã€ã³ã§æ£è
ã®èšºå¯ãè¡ãããŒã«ã®ãããå»çæ©é¢åŽã蚺çè¡çºãã€ã€ããªãçµãããããã㪠UI èšèšãéèŠã§ãã MVP çãªææ³ã§ããšãããããªãªãŒã¹ããŠæ€èšŒãéããŠãããšããã¹ã¿ã³ã¹ããšããªãããããªãªãŒã¹ãããŸã§ã«æ©èœçã«äžåããªãããå»çåŸäºè
ãè¿·ããæ£ãã䜿ãã UI èšèšã«ãªã£ãŠããããªã©ã瀟å
ãå®éã®å»çæ©é¢ã®ãã¹ããç¹°ãè¿ãã詊è¡é¯èª€ãçµãŠãªãªãŒã¹ãããšããããããã¯ããã¶ã€ã³ãããŠããæèŠã«ãªããäŒãããã¶ã€ã³ããšã¯éã£ãæèã§ãã¶ã€ã³ã«åãçµãã§ããŸãã æ©èœéèŠãªãµãŒãã¹ãããçŽæçã«ã·ã³ãã«ãª UI ãéèŠ ãã®ããã« CLINICS ãšãã 1 ã€ã®ãµãŒãã¹ãæ§æããèŠçŽ ã®äžã§ããã¿ãŒã²ãããŠãŒã¶ãŒãæäŸäŸ¡å€ã®éãã«ãã£ãŠããã¶ã€ã³ã¢ãããŒããéèŠèŠããèŠç¹ãç°ãªããŸãã ããšãã°ãèªåãæ¥åã§ããå©çšãããããã¿ã€ãã³ã°ããŒã«ã® inVision ããã°ã€ã³åã¯ãå©çšã·ãŒã³ãããé
åçãªãµãŒãã¹ã§ãããšããããšãäŒããããã®ãã¶ã€ã³ãããŠããããã°ã€ã³åŸã¯çŽæçã«ããããããã·ã³ãã«ãª UI èšèšã§ããã°ã€ã³ååŸã§ãµãŒãã¹ã® UI ãç°ãªããŸãã inVision ãæ©èœã¯è±å¯ã§ããããããã¿ã€ãã³ã°ãè¡ãäžã§éåžžã«ã·ã³ãã«ãªæäœæ§ãæäŸããŠãããç¡é§ãªèª¬æãå°ç·ããªããŠãçŽæçã«äœ¿ãã UI ã¯ãç¶ç¶ããŠå©çšã§ããå®å¿æã«ãã€ãªãããèŠç¿ãã¹ã UI ã ãªãšæã£ãŠããŸãã ïŒinVision ã®ç»é¢ã®éãïŒ CLINICS ã®å»çæ©é¢åãã·ã¹ãã ãåä»ç®¡çãã¹ã±ãžã¥ãŒã«ããªã³ã©ã€ã³èšºçãè¡ãæ©èœãªã©è€æ°ã®æ©èœãã²ãšã€ã®ãµãŒãã¹ãšããŠæäŸããŠãããããUI çã«è€éã«ãªããããŸãããè€éãªæ©èœããŸãšããç»é¢äžã«ã·ã³ãã«ã«èœãšã蟌ãããã©ãããšããã®ãåå³ããäœã£ãŠã¯å£ããäœã£ãŠã¯å£ããç¹°ãè¿ãããŸãã ãããªããããïŒãšããã£ã UI ããæ©èœé¢ã§ã®èŠèœãšããªã©ããã£ãããããšå°ç·ã«ççŸãçããããã·ã³ãã«ã«è¡šçŸããã€ããããéã«äœ¿ãåæã®æªã UI ã«ãªã£ãŠããŸã£ãããUI ãèãããšããã®ã¯ãææ§ã«èšŽãããã¶ã€ã³ãšã¯éã£ãããããžã«ã«ãªæèãå¿
èŠã§ããã¶ã€ã³ããªããåèŠå
«èŠããŠãã¶ã€ã¶ã€ç¬ãèšãèšãããšãå€ããªããŸã w ãã¶ã€ã³ãªãªãšã³ããããªãããã¯ãéçº Web ãµãŒãã¹ã§ããã°ããã«ç®æšãšããŠããã³ã³ããŒãžã§ã³çãé«ãããã©ãããåæã調æ»ãéçºãšãããµã€ã¯ã«ãããŒã¹ãšããéçšã«ãªããŸãããç¹ã« å»çæ©é¢åãã®ã·ã¹ãã ã®å Žåã¯ãã ããªæ©èœã䜿ãã¥ãã UI ã ãšãµãŒãã¹çã«äžå®èŠçŽ ãæ±ãããèŠå ã«ããªããããžãã¹ã®æåå¯åŠã«çŽçµããŸã ã ãã®ããããªãªãŒã¹ãŸã§ã« UI ã磚ããã ã磚ããå®éã«å»çæ©é¢ã®çŸå Žã«åºåããŠã©ããããããŒã§èšºå¯ãè¡ã£ãŠããã®ããªã©ãã¢ãªã³ã°ããããåºæ¥äžãã£ãæ©èœã詊ããŠããããªã©ããååã«æ€èšããäžã§ãªãªãŒã¹ããŠããŸãããããããã¶ã€ã³ãéèŠããéçºãè¡ããç¹ã¯ã¡ãã¬ãŒã ããããã®éçºäœå¶ãããããŸããã ãã®ãã㪠ãã¶ã€ã³ãªãªãšã³ããããªãããã¯ãéçºãè¡ãäžã§éèŠãªãã€ã³ãã¯ãäºæ¥çè§£ãšãšã³ãžãã¢ãšã®å¯ãªé£æº ã§ãã衚é¢çãªãã¶ã€ã³ã§ã¯ãªããå®éã«äœ¿ãããå©çšã·ãŒã³ãæ³åãã€ã€ããäœéšããããšãé£ããå»çãµãŒãã¹ã ãããããåæã®ç¥èããã¢ãªã³ã°ããŠãŒã¶ãŒãã¹ããªã©ãéèŠãšãªããŸãããæ©èœçãªéšåã«é¢ããŠã¯ãšã³ãžãã¢ãšä»æ§ã«ã€ããŠè°è«ãããããŠãŒã¹ã±ãŒã¹ãèžãŸããŠã©ã®ãã㪠UI ã«èœãšã蟌ãã¹ãããèããªãããã¶ã€ã³ã«èœãšã蟌ãã§ãããŸããã€ã³ã¿ã©ã¯ãã£ããªè¡šçŸãªã© inVision ã§ã衚çŸããããªã现ããåããå°ç·ãªã©ã¯ãå®è£
æã«ãšã³ãžãã¢ã«äŒãããããããããã³ããšã³ãéšåã®ã³ãŒãã£ã³ã°ãèªãè¡ãããšã§ã³ãŒããéããŠãšã³ãžãã¢ãšã³ãã¥ãã±ãŒã·ã§ã³ãåããããããªãã®ã§ãããã³ããšã³ããææ¡ããŠããããšã¯éèŠã§ãã ãŸãšã å人çã«ã¯ãäŒãããã¶ã€ã³ããšãæ©èœçãªãã¶ã€ã³ãã§ãæç¢ºã«æèããããŠèããŠãã¶ã€ã³ããŠããããã§ã¯ãªãã£ãã®ã§ãããæäŸãã¹ã䟡å€ã®éãã«ãã£ãŠ å·Šè³ãšå³è³ãããã䜿ãåããŠãã¶ã€ã³ããŠãã ãããããªããšããããšã«æ°ä»ããããŸãããããã¯ä»¥åãã¶ã€ããŒã®å°å±±ãããã°ã§æžãã ã·ã¹ãã 1ïŒèªåçã«çŽæã§åãâæ©ãæèâïŒãšã·ã¹ãã 2ïŒæåã§è«ççã«åãâé
ãæèâïŒ ãèªåã®äžã§æ¯ãåã®ããã«è¡ãæ¥ããŠãã ãããªãšæããã®ã§ãèå³ã®ããæ¹ã¯ãæèãšãã¶ã€ã³ã¹ãã«ããèªãã§ããããšããããããã§ãã æèãšãã¶ã€ã³ã¹ãã« ãã¡ãã¬ãŒ TechLunchã | MEDLEY Developer Portal ã¯ãããŸããŠïŒæè¿ã¿ãã¿ã倪ãã ããŠã¯ãããã®ã®ããŸã æ©ã¯çããŠããªããšãã€ãšããã®ææããã£ãšå ªããŠããéçºæ¬éšã€ã±ã¡ã³æ
åœã®ãã¶ã€ããŒã»å°å±±ã§ãã ã¡ãã¬ãŒã§ã¯ TechLunch ãšãã瀟å
å匷äŒã宿œããŠããã®ã§ãããåç°ã«åŒãç¶ã... developer.medley.jp æåŸã« ãµã ãããŒã«ã°ã£ããåãã§ é©åœãªäººãšã¬ããã«ã貌ãããŠããããšãã§ãããä»åã¯çé¢ç®ãªããšãæžããŠã¿ãŸããããããã§ããã§ããããããã®ããã°ãæžããŠãŠæ£çŽç²ããã®ã§ãã·ã¹ãã 2 ãåããŠãã«éããªããšæããŸãããããªç§ãšäžç·ã«ä»äºãããããåã¿ãããšãããã¶ã€ããŒããšã³ãžãã¢ãããå¿åãåŸ
ã¡ããŠãããŸãã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp
ããã«ã¡ã¯ãéçºæ¬éšã® 宿ž ã§ãã ã¡ãã¬ãŒã§ã¯å®æçã«ãããŒãã«æ²¿ã£ãŠçµç¹ã®æè¡çãªåºäžããè¡ãããã®æ©äŒïŒ ã¿ã¹ã¯ãã©ãŒã¹ ãšåŒãã§ããŸãïŒãè¡ã£ãŠããŸãããã®ã¿ã¹ã¯ãã©ãŒã¹ã®ïŒã€ãšããŠå
æ¥ãããã³ããšã³ãéçºåã®ããŒã¹ã¢ãããç®çãšããã¿ã¹ã¯ãã©ãŒã¹ãè¡ããŸãããæ¬èšäºã§ã¯ããã®åçµã¿ã«ã€ããŠã玹ä»ããããšæããŸãã èæ¯ ã¡ãã¬ãŒã«ã¯çŸåš 20 人匱ã®ãšã³ãžãã¢ãåšç±ããŠããããã®çŽåæ°ããµãŒããŒãµã€ãåºèº«è
ã§ãããŸãæ®æ®µã®éçºã«ãããŠã¯ãäžã€ã®æ©èœãããã³ããããµãŒããŒãµã€ããŸã§äžè²«ããŠäžäººãæ
åœããã±ãŒã¹ãå€ããããŸãããµãŒããŒãµã€ãåºèº«è
ã®ããã³ããšã³ãéçºã®ã¹ãã«ã»ããã«ã¯å€å°ã°ãã€ãã¯ãããã®ã®ãæ®æ®µã®éçºæ¥åã§ã¯ã¬ãã¥ãŒçã§ãããããµããŒããã€ã€éçºãè¡ã£ãŠããŸãã ããããããã³ããšã³ãã®åºç€çãªéšåãææ°ã®æµããŸã§èããããšäžå®ãªã¡ã³ããŒãå°ãªããããŸãããããã³ããšã³ãåºèº«ã®ã¡ã³ããŒãäž»å°ããæ¹ããŠåºç€ãææ°æ
å ±ã«é¢ããŠæŽçã»ãã©ããŒãè¡ãããšã§ãçµç¹å
šäœã®ããã³ããšã³ãã®éçºåãé«ããŠãããããšèããŸããã ã¿ã¹ã¯ãã©ãŒã¹ã®ç®ç ä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã¯ãããã³ããšã³ãã®åºæ¬ãæè¿ã®ãã¬ã³ãã«é¢ããŠåŠã¶ãããšã§ãïŒããã³ããšã³ãéçºã«ãããïŒæè¡éžå®ãèšèšãå®è£
ãã§ããåºç€ã身ã«ã€ãããããããŠããããããšã«ãæ°èŠã®ãããžã§ã¯ãã§èšè𿮵éããèªèµ°ã§ããããã«ãªããããšãç®çãšããŸããã ãã®äžã§ãç¹ã«ããæ°å¹Žãå€åã®æµããæ©ãã£ã JavaScript ãäžå¿ã«ãããã¯ãéžå®ããŸããã åå è
ã¯ããããŸã§ãµãŒããŒãµã€ãéçºãäžå¿ã«è¡ã£ãŠããã¡ã³ããŒæ°åã§ããèæ¯ã§ãè§Šãããšãããæ¥åçµéšã¯ããããããåæã§ã®ã¹ã¿ãŒãã§ãã£ããããåºç€ãã¿ã£ã¡ããšããããã¯ãåºç€çãªè©±ããæè¿ã®è©±é¡ãŸã§ãäžéã確èªããªãããåèªã®æã£ãŠããç¥èã®æŽçãšåå°ãåºããããšã§ãä»åŸã®èšèšãæè¡éžå®ãè¡ãéã®æéãåŸãããšãç®çãšããŸããã é²ãæ¹ ä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã¯æéã 3 ã¶æãšå®ããæ¯é± 1 æéçšåºŠéãŸã£ãŠè¡ããŸããã æ¯é±ãäºåã«è¬åž«é£ãéžãã è³æãèªãã§ãããåœæ¥ã¯è¬åž«é£ãåå è
ã®äžæç¹ãçåç¹ã«å¯ŸããŠãã©ããŒã¢ãããããšãã圢åŒã§é²ããŸããããã®ä»ã«ã¯ã瀟å
ã®ãããã¯ãã§ã®å©çšäºäŸãªã©ã亀ããªããããŒãã«é¢ãã質åäŒã®ãããªåœ¢ã§é²ãããšãå€ãã£ãã§ãã ãŸãæ¯åã®ã¿ã¹ã¯ãã©ãŒã¹ã®æéã®ããšã«ãåå è
ããã®æ¥ã®å
容ããŸãšããè°äºé²åœ¢åŒã®è³æãäœæããåå è
å
šå¡ãšå
±æããããšã§ããã®æ¥ã«è©±ãããå
容ããããããã®ç解床ãå床確èªããããã«ããŸããã å
容 ãããã®æµãã¯äžèšã®éãã§ãããçŽ 3 ã¶æã§ã©ã®ãããªããŒãã«è§ŠããŠããã®ããäžéšãã玹ä»ããŸãã ããã³ããšã³ãã®åºç€ åºç€ã¯ãã¡ãã®è³æãå©çšãããŠããã ããªããé²ããŸããã ãã©ãŠã¶ã®ä»çµã¿: ææ°ãŠã§ããã©ãŠã¶ã®å
éšæ§é Asg Boot Camp ã HTML/CSS An Introduction to JavaScript ãã©ãŠã¶ã®ä»çµã¿ãHTML/CSS ã®åºæ¬çãªè©±ã®ãããããJavaScript ã®è©±ã«é¢é£ããŠããããŸã§ã«åºãŠãã AltJS ã«ã€ããŠãããã€ãç¹åŸŽãäœæ
æµè¡ã£ãã®ããªã©ã«ã€ããŠèªã¿èŸŒã¿ãŸããã ãã®äžã§ãã ãã©ãŠã¶ã®ä»çµã¿: ææ°ãŠã§ããã©ãŠã¶ã®å
éšæ§é ã§ DOM ã®è§£æãã¬ã³ããªã³ã°ãã¬ã€ã¢ãŠããšãã£ããã©ãŠã¶å
éšã§å
·äœçã«äœãè¡ãããŠããã®ããšãã£ã話ã¯ããã§ç¢ºèªã§ããŠããã£ããšãã声ãå€ããããŸããã JavaScriptïŒåºç€ãES2015 以éïŒ JavaScript ã®è©±é¡ãžã®å°å
¥ç·šãšããŠãã¡ããè³æãšããŠèªã¿èŸŒã¿ãŸããã You Donât Know JS: Up & Going JavaScript Garden ãã®ããŒãã§ã¯ JavaScript ã®åºç€ã¯ããã㊠ES3ã5 ãããŒã¹ã«ããããšã§ JavaScript ãšä»èšèªãšã®éãã»ç¹åŸŽãå確èªããŠãããŸãããäžèšã®å
容ãèžãŸããä»ã§ã¯äœ¿ããªãæžãæ¹ãªã©ã«ã€ããŠã¯ãã®çç±ã確èªããªããé²ããŠãããŸããã ãã®åŸã¯ Learn ES2015 · Babel ãåç
§ããªãããPromise, Class ãªã©ã¯æ®æ®µã®éçºã§ãåœããåã®ããã«å©çšããŠãããã®ã®ãES2015 以éã§ã®æžãæ¹ã¯ ES5 ã ãšã©ã®ããã«ãªã£ãŠããããããã§åæã«åŠç¿ããŠãããŸãããïŒ Playground ã» TypeScript ã§ããã®é°å²æ°ãèŠãããšãåºæ¥ãŸãïŒ ã¢ãã³ JavaScript ãããŸã§ã®ç¥èãèžãŸããã¢ãã³ãª JavaScript ã®å©çš(å®è£
)äŸãšããŠã jser.github.io ãš preact-www ã®ãœãŒã¹ãèªãã§ãããŸããã ãããŸã§ã® JavaScript ã®èšèªèªäœã«é¢ããå
容ãããã©ã€ãã©ãªãå©çšããã³ã³ããŒãã³ãéã§ã®ããŒã¿ãããŒããã³ã³ããŒãã³ãã®ã©ã€ããµã€ã¯ã«ã«é¢ããéšåãŸã§ç¢ºèªããŠãããŸããããŸãåèŠã®ãããžã§ã¯ãã§ããã°ã©ã®ãããããç®ãéããŠãããããªã©ã³ãŒãå
šäœã®èªã¿æ¹ã«ã€ããŠãè¬åž«é£ããã¢ããã€ã¹ããããŸããããŸãææåºãŠãã DOM API ã«ããªãã ã£ãããã»ã»ã»ïŒããªã©ãšãªãã€ã€ãã³ãŒããçŽè§£ããŠããããšã§æ¹ããŠããã³ããšã³ã JavaScript ã®ç¹åŸŽçãªéšåãå£éèŠãããšãã§ããããã«æããŸãã ãŸãæåŸã«ãçŸåšéçºã«å©çšãããŠããããŒã«çŸ€ã«ã€ããŠã Qiita:JavaScript ãã¬ãŒã ã¯ãŒã¯éžå®ã®è°è« ãåèã«ç¢ºèªããŸãããããããã®ããŒã«ãã©ã®ãããªèæ¯ã§äœ¿ãããŠããïŒãããã¯ããªãïŒã®ããªã©ãåãããŠç¢ºèªãããŸããã ãããŸã§ã®ããŒããæ¯ãè¿ãã€ã€ãJavaScript ãèšèªãšããŠã©ã®ããã«å€åããŠããããèããæãwebpack ã TypeScript ããªã䜿ãããã®ããããããè
¹ã«èœã¡ãããã«æããŸãããŸãäžèšè³æããã©ã®ãããªã±ãŒã¹ã§äœãéžæããã®ãããã¢ããªã±ãŒã·ã§ã³ã®å¯¿åœãšã©ã€ãã©ãªãããŒã«ã®å¯¿åœãšãã£ãéçšãã§ãŒãºã§çè§£ããŠããå¿
èŠã®ããäºé
ã«ãè§ŠããããŠãããéåžžã«åèã«ãªããŸããã å®éã«ãã£ãŠã¿ãŠ ä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã§ã¯ã3 ã¶æãšããæéã®äžã§ã1 ã¶æåã®æç¹ãšãå
šäœçµäºåŸã«æ¯ãè¿ãã宿œããŸããã ãã®äžã§ãåå ã¡ã³ããŒãã㯠æ¥åã«ãããŠã¯å¿
èŠãªéšåã«çµã£ã調æ»ã§çµãã£ãŠããŸã£ãããåšãã®ã³ãŒããåèã«ãããããããšã§ãªããšãªãã§ããæ°ã«ãªã£ãŠããŸã£ãŠããããä»åæ¹ããŠåºç€çãªç¥èãåŠç¿ããã埩ç¿ããæéãšããŠã§ããŠããã£ãã æççã§ãŸã°ããªç¥èããæã£ãŠããªãã£ãéšåãè³æãèªã¿èŸŒãããšã§çè§£ãæ·±ãŸã£ã æ°å¹Žåã«ããºã£ãŠããšã§èªãŸãªããããšã§èªãããã¯ãèšäºããã¡ããšèªããŠããã£ã ããã³ããšã³ãçµéšã®é·ãè¬åž«é£ã®çããç¥èŠïŒãã©ããªã©ãå«ããŠïŒãèãããšãã§ããã®ã¯ãããããã£ã ãªã©ã®ææ³ãåºãŸããã ç§èªèº«ãåå ããŠããŸããããå人çã«ã¯åºç€éšåãæ¹ããŠåºããããšãã§ããæ©äŒã ã£ãããã«æããŠããŸãã ãŸããæ®æ®µã¯æ°ããããŒã«ãªã©ã®æ
å ±ã®ãã£ããã¢ãããžã®æèãåããã¡ã§ãããä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã§èšèªã»ããŒã«ã®å€é·ãäžåºŠéããŠèŠãããšãã§ããããšã§ãæ°ããçŸããæè¡ãã©ããã£ã課é¡ã解決ãããã®ãªã®ãããããŸã§ã«äŒŒãããŒã«ããã£ãã®ãã©ãããªã©ã調ã¹ãæéãåŸãããããšã¯ããã£ãã®ããªãšæã£ãŠããŸãã äžæ¹ã§ãä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã®äžã§ã¯ãã³ãŒããæžããæéã¯äœããŸããã§ãããããã«ã€ããŠã¯æ¯ãè¿ãã®äžã§ã話é¡ãšãªããŸããããããã«ã€ããŠã¯ TodoMVC ãªã©ãåèã«ãèªåã§æãåãããŠã¿ãããšãå¿
èŠã ãããšä»åŸã®èª²é¡ãšããŠæããããŸããããã®ãããã¯å®å以å€ã§ã®åã
ã®é 匵ããå¿
èŠã«ãªã£ãŠããéšåããšæããŸãã ãŸãšã ããµãŒããŒãµã€ããšã³ãžãã¢ã®ããã³ããšã³ãéçºåã®åºäžãããããŒããšããã¿ã¹ã¯ãã©ãŒã¹ã«ã€ããŠã玹ä»ããŸããããããã£ã圢ã§ãåããããªã¹ãã«ã»ããã®ã¡ã³ããŒãéãŸãããäºãã«ããããªãéšåã«ã€ããŠè©±ãããããçµéšè±å¯ãªã¡ã³ããŒãããå人ã®çµéšãå«ããŠè©±ãèããšããã®ã¯ãæ¹ããŠéåžžã«è²Žéãªæ©äŒã ã£ãããã«æããŸãã ãããã£ãåãçµã¿ãç¹°ãè¿ããŠããããšã§ãåã
ã§å°ã£ãéšåã¯ãã¡ãã䌞ã°ãã€ã€ãå
šäœã®åºäžããè¡ããªããããããããããã¯ãéçºã«ç¹ããããã°ãšèããŠããŸãã
ããã«ã¡ã¯ãéçºæ¬éšã® 宿ž ã§ãã ã¡ãã¬ãŒã§ã¯å®æçã«ãããŒãã«æ²¿ã£ãŠçµç¹ã®æè¡çãªåºäžããè¡ãããã®æ©äŒïŒ ã¿ã¹ã¯ãã©ãŒã¹ ãšåŒãã§ããŸãïŒãè¡ã£ãŠããŸãããã®ã¿ã¹ã¯ãã©ãŒã¹ã®ïŒã€ãšããŠå
æ¥ãããã³ããšã³ãéçºåã®ããŒã¹ã¢ãããç®çãšããã¿ã¹ã¯ãã©ãŒã¹ãè¡ããŸãããæ¬èšäºã§ã¯ããã®åçµã¿ã«ã€ããŠã玹ä»ããããšæããŸãã èæ¯ ã¡ãã¬ãŒã«ã¯çŸåš 20 人匱ã®ãšã³ãžãã¢ãåšç±ããŠããããã®çŽåæ°ããµãŒããŒãµã€ãåºèº«è
ã§ãããŸãæ®æ®µã®éçºã«ãããŠã¯ãäžã€ã®æ©èœãããã³ããããµãŒããŒãµã€ããŸã§äžè²«ããŠäžäººãæ
åœããã±ãŒã¹ãå€ããããŸãããµãŒããŒãµã€ãåºèº«è
ã®ããã³ããšã³ãéçºã®ã¹ãã«ã»ããã«ã¯å€å°ã°ãã€ãã¯ãããã®ã®ãæ®æ®µã®éçºæ¥åã§ã¯ã¬ãã¥ãŒçã§ãããããµããŒããã€ã€éçºãè¡ã£ãŠããŸãã ããããããã³ããšã³ãã®åºç€çãªéšåãææ°ã®æµããŸã§èããããšäžå®ãªã¡ã³ããŒãå°ãªããããŸãããããã³ããšã³ãåºèº«ã®ã¡ã³ããŒãäž»å°ããæ¹ããŠåºç€ãææ°æ
å ±ã«é¢ããŠæŽçã»ãã©ããŒãè¡ãããšã§ãçµç¹å
šäœã®ããã³ããšã³ãã®éçºåãé«ããŠãããããšèããŸããã ã¿ã¹ã¯ãã©ãŒã¹ã®ç®ç ä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã¯ãããã³ããšã³ãã®åºæ¬ãæè¿ã®ãã¬ã³ãã«é¢ããŠåŠã¶ãããšã§ãïŒããã³ããšã³ãéçºã«ãããïŒæè¡éžå®ãèšèšãå®è£
ãã§ããåºç€ã身ã«ã€ãããããããŠããããããšã«ãæ°èŠã®ãããžã§ã¯ãã§èšè𿮵éããèªèµ°ã§ããããã«ãªããããšãç®çãšããŸããã ãã®äžã§ãç¹ã«ããæ°å¹Žãå€åã®æµããæ©ãã£ã JavaScript ãäžå¿ã«ãããã¯ãéžå®ããŸããã åå è
ã¯ããããŸã§ãµãŒããŒãµã€ãéçºãäžå¿ã«è¡ã£ãŠããã¡ã³ããŒæ°åã§ããèæ¯ã§ãè§Šãããšãããæ¥åçµéšã¯ããããããåæã§ã®ã¹ã¿ãŒãã§ãã£ããããåºç€ãã¿ã£ã¡ããšããããã¯ãåºç€çãªè©±ããæè¿ã®è©±é¡ãŸã§ãäžéã確èªããªãããåèªã®æã£ãŠããç¥èã®æŽçãšåå°ãåºããããšã§ãä»åŸã®èšèšãæè¡éžå®ãè¡ãéã®æéãåŸãããšãç®çãšããŸããã é²ãæ¹ ä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã¯æéã 3 ã¶æãšå®ããæ¯é± 1 æéçšåºŠéãŸã£ãŠè¡ããŸããã æ¯é±ãäºåã«è¬åž«é£ãéžãã è³æãèªãã§ãããåœæ¥ã¯è¬åž«é£ãåå è
ã®äžæç¹ãçåç¹ã«å¯ŸããŠãã©ããŒã¢ãããããšãã圢åŒã§é²ããŸããããã®ä»ã«ã¯ã瀟å
ã®ãããã¯ãã§ã®å©çšäºäŸãªã©ã亀ããªããããŒãã«é¢ãã質åäŒã®ãããªåœ¢ã§é²ãããšãå€ãã£ãã§ãã ãŸãæ¯åã®ã¿ã¹ã¯ãã©ãŒã¹ã®æéã®ããšã«ãåå è
ããã®æ¥ã®å
容ããŸãšããè°äºé²åœ¢åŒã®è³æãäœæããåå è
å
šå¡ãšå
±æããããšã§ããã®æ¥ã«è©±ãããå
容ããããããã®ç解床ãå床確èªããããã«ããŸããã å
容 ãããã®æµãã¯äžèšã®éãã§ãããçŽ 3 ã¶æã§ã©ã®ãããªããŒãã«è§ŠããŠããã®ããäžéšãã玹ä»ããŸãã ããã³ããšã³ãã®åºç€ åºç€ã¯ãã¡ãã®è³æãå©çšãããŠããã ããªããé²ããŸããã ãã©ãŠã¶ã®ä»çµã¿: ææ°ãŠã§ããã©ãŠã¶ã®å
éšæ§é Asg Boot Camp ã HTML/CSS An Introduction to JavaScript ãã©ãŠã¶ã®ä»çµã¿ãHTML/CSS ã®åºæ¬çãªè©±ã®ãããããJavaScript ã®è©±ã«é¢é£ããŠããããŸã§ã«åºãŠãã AltJS ã«ã€ããŠãããã€ãç¹åŸŽãäœæ
æµè¡ã£ãã®ããªã©ã«ã€ããŠèªã¿èŸŒã¿ãŸããã ãã®äžã§ãã ãã©ãŠã¶ã®ä»çµã¿: ææ°ãŠã§ããã©ãŠã¶ã®å
éšæ§é ã§ DOM ã®è§£æãã¬ã³ããªã³ã°ãã¬ã€ã¢ãŠããšãã£ããã©ãŠã¶å
éšã§å
·äœçã«äœãè¡ãããŠããã®ããšãã£ã話ã¯ããã§ç¢ºèªã§ããŠããã£ããšãã声ãå€ããããŸããã JavaScriptïŒåºç€ãES2015 以éïŒ JavaScript ã®è©±é¡ãžã®å°å
¥ç·šãšããŠãã¡ããè³æãšããŠèªã¿èŸŒã¿ãŸããã You Donât Know JS: Up & Going JavaScript Garden ãã®ããŒãã§ã¯ JavaScript ã®åºç€ã¯ããã㊠ES3ã5 ãããŒã¹ã«ããããšã§ JavaScript ãšä»èšèªãšã®éãã»ç¹åŸŽãå確èªããŠãããŸãããäžèšã®å
容ãèžãŸããä»ã§ã¯äœ¿ããªãæžãæ¹ãªã©ã«ã€ããŠã¯ãã®çç±ã確èªããªããé²ããŠãããŸããã ãã®åŸã¯ Learn ES2015 · Babel ãåç
§ããªãããPromise, Class ãªã©ã¯æ®æ®µã®éçºã§ãåœããåã®ããã«å©çšããŠãããã®ã®ãES2015 以éã§ã®æžãæ¹ã¯ ES5 ã ãšã©ã®ããã«ãªã£ãŠããããããã§åæã«åŠç¿ããŠãããŸãããïŒ Playground ã» TypeScript ã§ããã®é°å²æ°ãèŠãããšãåºæ¥ãŸãïŒ ã¢ãã³ JavaScript ãããŸã§ã®ç¥èãèžãŸããã¢ãã³ãª JavaScript ã®å©çš(å®è£
)äŸãšããŠã jser.github.io ãš preact-www ã®ãœãŒã¹ãèªãã§ãããŸããã ãããŸã§ã® JavaScript ã®èšèªèªäœã«é¢ããå
容ãããã©ã€ãã©ãªãå©çšããã³ã³ããŒãã³ãéã§ã®ããŒã¿ãããŒããã³ã³ããŒãã³ãã®ã©ã€ããµã€ã¯ã«ã«é¢ããéšåãŸã§ç¢ºèªããŠãããŸããããŸãåèŠã®ãããžã§ã¯ãã§ããã°ã©ã®ãããããç®ãéããŠãããããªã©ã³ãŒãå
šäœã®èªã¿æ¹ã«ã€ããŠãè¬åž«é£ããã¢ããã€ã¹ããããŸããããŸãææåºãŠãã DOM API ã«ããªãã ã£ãããã»ã»ã»ïŒããªã©ãšãªãã€ã€ãã³ãŒããçŽè§£ããŠããããšã§æ¹ããŠããã³ããšã³ã JavaScript ã®ç¹åŸŽçãªéšåãå£éèŠãããšãã§ããããã«æããŸãã ãŸãæåŸã«ãçŸåšéçºã«å©çšãããŠããããŒã«çŸ€ã«ã€ããŠã Qiita:JavaScript ãã¬ãŒã ã¯ãŒã¯éžå®ã®è°è« ãåèã«ç¢ºèªããŸãããããããã®ããŒã«ãã©ã®ãããªèæ¯ã§äœ¿ãããŠããïŒãããã¯ããªãïŒã®ããªã©ãåãããŠç¢ºèªãããŸããã ãããŸã§ã®ããŒããæ¯ãè¿ãã€ã€ãJavaScript ãèšèªãšããŠã©ã®ããã«å€åããŠããããèããæãwebpack ã TypeScript ããªã䜿ãããã®ããããããè
¹ã«èœã¡ãããã«æããŸãããŸãäžèšè³æããã©ã®ãããªã±ãŒã¹ã§äœãéžæããã®ãããã¢ããªã±ãŒã·ã§ã³ã®å¯¿åœãšã©ã€ãã©ãªãããŒã«ã®å¯¿åœãšãã£ãéçšãã§ãŒãºã§çè§£ããŠããå¿
èŠã®ããäºé
ã«ãè§ŠããããŠãããéåžžã«åèã«ãªããŸããã å®éã«ãã£ãŠã¿ãŠ ä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã§ã¯ã3 ã¶æãšããæéã®äžã§ã1 ã¶æåã®æç¹ãšãå
šäœçµäºåŸã«æ¯ãè¿ãã宿œããŸããã ãã®äžã§ãåå ã¡ã³ããŒãã㯠æ¥åã«ãããŠã¯å¿
èŠãªéšåã«çµã£ã調æ»ã§çµãã£ãŠããŸã£ãããåšãã®ã³ãŒããåèã«ãããããããšã§ãªããšãªãã§ããæ°ã«ãªã£ãŠããŸã£ãŠããããä»åæ¹ããŠåºç€çãªç¥èãåŠç¿ããã埩ç¿ããæéãšããŠã§ããŠããã£ãã æççã§ãŸã°ããªç¥èããæã£ãŠããªãã£ãéšåãè³æãèªã¿èŸŒãããšã§çè§£ãæ·±ãŸã£ã æ°å¹Žåã«ããºã£ãŠããšã§èªãŸãªããããšã§èªãããã¯ãèšäºããã¡ããšèªããŠããã£ã ããã³ããšã³ãçµéšã®é·ãè¬åž«é£ã®çããç¥èŠïŒãã©ããªã©ãå«ããŠïŒãèãããšãã§ããã®ã¯ãããããã£ã ãªã©ã®ææ³ãåºãŸããã ç§èªèº«ãåå ããŠããŸããããå人çã«ã¯åºç€éšåãæ¹ããŠåºããããšãã§ããæ©äŒã ã£ãããã«æããŠããŸãã ãŸããæ®æ®µã¯æ°ããããŒã«ãªã©ã®æ
å ±ã®ãã£ããã¢ãããžã®æèãåããã¡ã§ãããä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã§èšèªã»ããŒã«ã®å€é·ãäžåºŠéããŠèŠãããšãã§ããããšã§ãæ°ããçŸããæè¡ãã©ããã£ã課é¡ã解決ãããã®ãªã®ãããããŸã§ã«äŒŒãããŒã«ããã£ãã®ãã©ãããªã©ã調ã¹ãæéãåŸãããããšã¯ããã£ãã®ããªãšæã£ãŠããŸãã äžæ¹ã§ãä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã®äžã§ã¯ãã³ãŒããæžããæéã¯äœããŸããã§ãããããã«ã€ããŠã¯æ¯ãè¿ãã®äžã§ã話é¡ãšãªããŸããããããã«ã€ããŠã¯ TodoMVC ãªã©ãåèã«ãèªåã§æãåãããŠã¿ãããšãå¿
èŠã ãããšä»åŸã®èª²é¡ãšããŠæããããŸããããã®ãããã¯å®å以å€ã§ã®åã
ã®é 匵ããå¿
èŠã«ãªã£ãŠããéšåããšæããŸãã ãŸãšã ããµãŒããŒãµã€ããšã³ãžãã¢ã®ããã³ããšã³ãéçºåã®åºäžãããããŒããšããã¿ã¹ã¯ãã©ãŒã¹ã«ã€ããŠã玹ä»ããŸããããããã£ã圢ã§ãåããããªã¹ãã«ã»ããã®ã¡ã³ããŒãéãŸãããäºãã«ããããªãéšåã«ã€ããŠè©±ãããããçµéšè±å¯ãªã¡ã³ããŒãããå人ã®çµéšãå«ããŠè©±ãèããšããã®ã¯ãæ¹ããŠéåžžã«è²Žéãªæ©äŒã ã£ãããã«æããŸãã ãããã£ãåãçµã¿ãç¹°ãè¿ããŠããããšã§ãåã
ã§å°ã£ãéšåã¯ãã¡ãã䌞ã°ãã€ã€ãå
šäœã®åºäžããè¡ããªããããããããããã¯ãéçºã«ç¹ããããã°ãšèããŠããŸãã
ããã«ã¡ã¯ãéçºæ¬éšã® 宿ž ã§ãã ã¡ãã¬ãŒã§ã¯å®æçã«ãããŒãã«æ²¿ã£ãŠçµç¹ã®æè¡çãªåºäžããè¡ãããã®æ©äŒïŒ ã¿ã¹ã¯ãã©ãŒã¹ ãšåŒãã§ããŸãïŒãè¡ã£ãŠããŸãããã®ã¿ã¹ã¯ãã©ãŒã¹ã®ïŒã€ãšããŠå
æ¥ãããã³ããšã³ãéçºåã®ããŒã¹ã¢ãããç®çãšããã¿ã¹ã¯ãã©ãŒã¹ãè¡ããŸãããæ¬èšäºã§ã¯ããã®åçµã¿ã«ã€ããŠã玹ä»ããããšæããŸãã èæ¯ ã¡ãã¬ãŒã«ã¯çŸåš 20 人匱ã®ãšã³ãžãã¢ãåšç±ããŠããããã®çŽåæ°ããµãŒããŒãµã€ãåºèº«è
ã§ãããŸãæ®æ®µã®éçºã«ãããŠã¯ãäžã€ã®æ©èœãããã³ããããµãŒããŒãµã€ããŸã§äžè²«ããŠäžäººãæ
åœããã±ãŒã¹ãå€ããããŸãããµãŒããŒãµã€ãåºèº«è
ã®ããã³ããšã³ãéçºã®ã¹ãã«ã»ããã«ã¯å€å°ã°ãã€ãã¯ãããã®ã®ãæ®æ®µã®éçºæ¥åã§ã¯ã¬ãã¥ãŒçã§ãããããµããŒããã€ã€éçºãè¡ã£ãŠããŸãã ããããããã³ããšã³ãã®åºç€çãªéšåãææ°ã®æµããŸã§èããããšäžå®ãªã¡ã³ããŒãå°ãªããããŸãããããã³ããšã³ãåºèº«ã®ã¡ã³ããŒãäž»å°ããæ¹ããŠåºç€ãææ°æ
å ±ã«é¢ããŠæŽçã»ãã©ããŒãè¡ãããšã§ãçµç¹å
šäœã®ããã³ããšã³ãã®éçºåãé«ããŠãããããšèããŸããã ã¿ã¹ã¯ãã©ãŒã¹ã®ç®ç ä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã¯ãããã³ããšã³ãã®åºæ¬ãæè¿ã®ãã¬ã³ãã«é¢ããŠåŠã¶ãããšã§ãïŒããã³ããšã³ãéçºã«ãããïŒæè¡éžå®ãèšèšãå®è£
ãã§ããåºç€ã身ã«ã€ãããããããŠããããããšã«ãæ°èŠã®ãããžã§ã¯ãã§èšè𿮵éããèªèµ°ã§ããããã«ãªããããšãç®çãšããŸããã ãã®äžã§ãç¹ã«ããæ°å¹Žãå€åã®æµããæ©ãã£ã JavaScript ãäžå¿ã«ãããã¯ãéžå®ããŸããã åå è
ã¯ããããŸã§ãµãŒããŒãµã€ãéçºãäžå¿ã«è¡ã£ãŠããã¡ã³ããŒæ°åã§ããèæ¯ã§ãè§Šãããšãããæ¥åçµéšã¯ããããããåæã§ã®ã¹ã¿ãŒãã§ãã£ããããåºç€ãã¿ã£ã¡ããšããããã¯ãåºç€çãªè©±ããæè¿ã®è©±é¡ãŸã§ãäžéã確èªããªãããåèªã®æã£ãŠããç¥èã®æŽçãšåå°ãåºããããšã§ãä»åŸã®èšèšãæè¡éžå®ãè¡ãéã®æéãåŸãããšãç®çãšããŸããã é²ãæ¹ ä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã¯æéã 3 ã¶æãšå®ããæ¯é± 1 æéçšåºŠéãŸã£ãŠè¡ããŸããã æ¯é±ãäºåã«è¬åž«é£ãéžãã è³æãèªãã§ãããåœæ¥ã¯è¬åž«é£ãåå è
ã®äžæç¹ãçåç¹ã«å¯ŸããŠãã©ããŒã¢ãããããšãã圢åŒã§é²ããŸããããã®ä»ã«ã¯ã瀟å
ã®ãããã¯ãã§ã®å©çšäºäŸãªã©ã亀ããªããããŒãã«é¢ãã質åäŒã®ãããªåœ¢ã§é²ãããšãå€ãã£ãã§ãã ãŸãæ¯åã®ã¿ã¹ã¯ãã©ãŒã¹ã®æéã®ããšã«ãåå è
ããã®æ¥ã®å
容ããŸãšããè°äºé²åœ¢åŒã®è³æãäœæããåå è
å
šå¡ãšå
±æããããšã§ããã®æ¥ã«è©±ãããå
容ããããããã®ç解床ãå床確èªããããã«ããŸããã å
容 ãããã®æµãã¯äžèšã®éãã§ãããçŽ 3 ã¶æã§ã©ã®ãããªããŒãã«è§ŠããŠããã®ããäžéšãã玹ä»ããŸãã ããã³ããšã³ãã®åºç€ åºç€ã¯ãã¡ãã®è³æãå©çšãããŠããã ããªããé²ããŸããã ãã©ãŠã¶ã®ä»çµã¿: ææ°ãŠã§ããã©ãŠã¶ã®å
éšæ§é Asg Boot Camp ã HTML/CSS An Introduction to JavaScript ãã©ãŠã¶ã®ä»çµã¿ãHTML/CSS ã®åºæ¬çãªè©±ã®ãããããJavaScript ã®è©±ã«é¢é£ããŠããããŸã§ã«åºãŠãã AltJS ã«ã€ããŠãããã€ãç¹åŸŽãäœæ
æµè¡ã£ãã®ããªã©ã«ã€ããŠèªã¿èŸŒã¿ãŸããã ãã®äžã§ãã ãã©ãŠã¶ã®ä»çµã¿: ææ°ãŠã§ããã©ãŠã¶ã®å
éšæ§é ã§ DOM ã®è§£æãã¬ã³ããªã³ã°ãã¬ã€ã¢ãŠããšãã£ããã©ãŠã¶å
éšã§å
·äœçã«äœãè¡ãããŠããã®ããšãã£ã話ã¯ããã§ç¢ºèªã§ããŠããã£ããšãã声ãå€ããããŸããã JavaScriptïŒåºç€ãES2015 以éïŒ JavaScript ã®è©±é¡ãžã®å°å
¥ç·šãšããŠãã¡ããè³æãšããŠèªã¿èŸŒã¿ãŸããã You Donât Know JS: Up & Going JavaScript Garden ãã®ããŒãã§ã¯ JavaScript ã®åºç€ã¯ããã㊠ES3ã5 ãããŒã¹ã«ããããšã§ JavaScript ãšä»èšèªãšã®éãã»ç¹åŸŽãå確èªããŠãããŸãããäžèšã®å
容ãèžãŸããä»ã§ã¯äœ¿ããªãæžãæ¹ãªã©ã«ã€ããŠã¯ãã®çç±ã確èªããªããé²ããŠãããŸããã ãã®åŸã¯ Learn ES2015 · Babel ãåç
§ããªãããPromise, Class ãªã©ã¯æ®æ®µã®éçºã§ãåœããåã®ããã«å©çšããŠãããã®ã®ãES2015 以éã§ã®æžãæ¹ã¯ ES5 ã ãšã©ã®ããã«ãªã£ãŠããããããã§åæã«åŠç¿ããŠãããŸãããïŒ Playground ã» TypeScript ã§ããã®é°å²æ°ãèŠãããšãåºæ¥ãŸãïŒ ã¢ãã³ JavaScript ãããŸã§ã®ç¥èãèžãŸããã¢ãã³ãª JavaScript ã®å©çš(å®è£
)äŸãšããŠã jser.github.io ãš preact-www ã®ãœãŒã¹ãèªãã§ãããŸããã ãããŸã§ã® JavaScript ã®èšèªèªäœã«é¢ããå
容ãããã©ã€ãã©ãªãå©çšããã³ã³ããŒãã³ãéã§ã®ããŒã¿ãããŒããã³ã³ããŒãã³ãã®ã©ã€ããµã€ã¯ã«ã«é¢ããéšåãŸã§ç¢ºèªããŠãããŸããããŸãåèŠã®ãããžã§ã¯ãã§ããã°ã©ã®ãããããç®ãéããŠãããããªã©ã³ãŒãå
šäœã®èªã¿æ¹ã«ã€ããŠãè¬åž«é£ããã¢ããã€ã¹ããããŸããããŸãææåºãŠãã DOM API ã«ããªãã ã£ãããã»ã»ã»ïŒããªã©ãšãªãã€ã€ãã³ãŒããçŽè§£ããŠããããšã§æ¹ããŠããã³ããšã³ã JavaScript ã®ç¹åŸŽçãªéšåãå£éèŠãããšãã§ããããã«æããŸãã ãŸãæåŸã«ãçŸåšéçºã«å©çšãããŠããããŒã«çŸ€ã«ã€ããŠã Qiita:JavaScript ãã¬ãŒã ã¯ãŒã¯éžå®ã®è°è« ãåèã«ç¢ºèªããŸãããããããã®ããŒã«ãã©ã®ãããªèæ¯ã§äœ¿ãããŠããïŒãããã¯ããªãïŒã®ããªã©ãåãããŠç¢ºèªãããŸããã ãããŸã§ã®ããŒããæ¯ãè¿ãã€ã€ãJavaScript ãèšèªãšããŠã©ã®ããã«å€åããŠããããèããæãwebpack ã TypeScript ããªã䜿ãããã®ããããããè
¹ã«èœã¡ãããã«æããŸãããŸãäžèšè³æããã©ã®ãããªã±ãŒã¹ã§äœãéžæããã®ãããã¢ããªã±ãŒã·ã§ã³ã®å¯¿åœãšã©ã€ãã©ãªãããŒã«ã®å¯¿åœãšãã£ãéçšãã§ãŒãºã§çè§£ããŠããå¿
èŠã®ããäºé
ã«ãè§ŠããããŠãããéåžžã«åèã«ãªããŸããã å®éã«ãã£ãŠã¿ãŠ ä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã§ã¯ã3 ã¶æãšããæéã®äžã§ã1 ã¶æåã®æç¹ãšãå
šäœçµäºåŸã«æ¯ãè¿ãã宿œããŸããã ãã®äžã§ãåå ã¡ã³ããŒãã㯠æ¥åã«ãããŠã¯å¿
èŠãªéšåã«çµã£ã調æ»ã§çµãã£ãŠããŸã£ãããåšãã®ã³ãŒããåèã«ãããããããšã§ãªããšãªãã§ããæ°ã«ãªã£ãŠããŸã£ãŠããããä»åæ¹ããŠåºç€çãªç¥èãåŠç¿ããã埩ç¿ããæéãšããŠã§ããŠããã£ãã æççã§ãŸã°ããªç¥èããæã£ãŠããªãã£ãéšåãè³æãèªã¿èŸŒãããšã§çè§£ãæ·±ãŸã£ã æ°å¹Žåã«ããºã£ãŠããšã§èªãŸãªããããšã§èªãããã¯ãèšäºããã¡ããšèªããŠããã£ã ããã³ããšã³ãçµéšã®é·ãè¬åž«é£ã®çããç¥èŠïŒãã©ããªã©ãå«ããŠïŒãèãããšãã§ããã®ã¯ãããããã£ã ãªã©ã®ææ³ãåºãŸããã ç§èªèº«ãåå ããŠããŸããããå人çã«ã¯åºç€éšåãæ¹ããŠåºããããšãã§ããæ©äŒã ã£ãããã«æããŠããŸãã ãŸããæ®æ®µã¯æ°ããããŒã«ãªã©ã®æ
å ±ã®ãã£ããã¢ãããžã®æèãåããã¡ã§ãããä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã§èšèªã»ããŒã«ã®å€é·ãäžåºŠéããŠèŠãããšãã§ããããšã§ãæ°ããçŸããæè¡ãã©ããã£ã課é¡ã解決ãããã®ãªã®ãããããŸã§ã«äŒŒãããŒã«ããã£ãã®ãã©ãããªã©ã調ã¹ãæéãåŸãããããšã¯ããã£ãã®ããªãšæã£ãŠããŸãã äžæ¹ã§ãä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã®äžã§ã¯ãã³ãŒããæžããæéã¯äœããŸããã§ãããããã«ã€ããŠã¯æ¯ãè¿ãã®äžã§ã話é¡ãšãªããŸããããããã«ã€ããŠã¯ TodoMVC ãªã©ãåèã«ãèªåã§æãåãããŠã¿ãããšãå¿
èŠã ãããšä»åŸã®èª²é¡ãšããŠæããããŸããããã®ãããã¯å®å以å€ã§ã®åã
ã®é 匵ããå¿
èŠã«ãªã£ãŠããéšåããšæããŸãã ãŸãšã ããµãŒããŒãµã€ããšã³ãžãã¢ã®ããã³ããšã³ãéçºåã®åºäžãããããŒããšããã¿ã¹ã¯ãã©ãŒã¹ã«ã€ããŠã玹ä»ããŸããããããã£ã圢ã§ãåããããªã¹ãã«ã»ããã®ã¡ã³ããŒãéãŸãããäºãã«ããããªãéšåã«ã€ããŠè©±ãããããçµéšè±å¯ãªã¡ã³ããŒãããå人ã®çµéšãå«ããŠè©±ãèããšããã®ã¯ãæ¹ããŠéåžžã«è²Žéãªæ©äŒã ã£ãããã«æããŸãã ãããã£ãåãçµã¿ãç¹°ãè¿ããŠããããšã§ãåã
ã§å°ã£ãéšåã¯ãã¡ãã䌞ã°ãã€ã€ãå
šäœã®åºäžããè¡ããªããããããããããã¯ãéçºã«ç¹ããããã°ãšèããŠããŸãã
ããã«ã¡ã¯ãéçºæ¬éšã® 宿ž ã§ãã ã¡ãã¬ãŒã§ã¯å®æçã«ãããŒãã«æ²¿ã£ãŠçµç¹ã®æè¡çãªåºäžããè¡ãããã®æ©äŒïŒ ã¿ã¹ã¯ãã©ãŒã¹ ãšåŒãã§ããŸãïŒãè¡ã£ãŠããŸãããã®ã¿ã¹ã¯ãã©ãŒã¹ã®ïŒã€ãšããŠå
æ¥ãããã³ããšã³ãéçºåã®ããŒã¹ã¢ãããç®çãšããã¿ã¹ã¯ãã©ãŒã¹ãè¡ããŸãããæ¬èšäºã§ã¯ããã®åçµã¿ã«ã€ããŠã玹ä»ããããšæããŸãã èæ¯ ã¡ãã¬ãŒã«ã¯çŸåš 20 人匱ã®ãšã³ãžãã¢ãåšç±ããŠããããã®çŽåæ°ããµãŒããŒãµã€ãåºèº«è
ã§ãããŸãæ®æ®µã®éçºã«ãããŠã¯ãäžã€ã®æ©èœãããã³ããããµãŒããŒãµã€ããŸã§äžè²«ããŠäžäººãæ
åœããã±ãŒã¹ãå€ããããŸãããµãŒããŒãµã€ãåºèº«è
ã®ããã³ããšã³ãéçºã®ã¹ãã«ã»ããã«ã¯å€å°ã°ãã€ãã¯ãããã®ã®ãæ®æ®µã®éçºæ¥åã§ã¯ã¬ãã¥ãŒçã§ãããããµããŒããã€ã€éçºãè¡ã£ãŠããŸãã ããããããã³ããšã³ãã®åºç€çãªéšåãææ°ã®æµããŸã§èããããšäžå®ãªã¡ã³ããŒãå°ãªããããŸãããããã³ããšã³ãåºèº«ã®ã¡ã³ããŒãäž»å°ããæ¹ããŠåºç€ãææ°æ
å ±ã«é¢ããŠæŽçã»ãã©ããŒãè¡ãããšã§ãçµç¹å
šäœã®ããã³ããšã³ãã®éçºåãé«ããŠãããããšèããŸããã ã¿ã¹ã¯ãã©ãŒã¹ã®ç®ç ä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã¯ãããã³ããšã³ãã®åºæ¬ãæè¿ã®ãã¬ã³ãã«é¢ããŠåŠã¶ãããšã§ãïŒããã³ããšã³ãéçºã«ãããïŒæè¡éžå®ãèšèšãå®è£
ãã§ããåºç€ã身ã«ã€ãããããããŠããããããšã«ãæ°èŠã®ãããžã§ã¯ãã§èšè𿮵éããèªèµ°ã§ããããã«ãªããããšãç®çãšããŸããã ãã®äžã§ãç¹ã«ããæ°å¹Žãå€åã®æµããæ©ãã£ã JavaScript ãäžå¿ã«ãããã¯ãéžå®ããŸããã åå è
ã¯ããããŸã§ãµãŒããŒãµã€ãéçºãäžå¿ã«è¡ã£ãŠããã¡ã³ããŒæ°åã§ããèæ¯ã§ãè§Šãããšãããæ¥åçµéšã¯ããããããåæã§ã®ã¹ã¿ãŒãã§ãã£ããããåºç€ãã¿ã£ã¡ããšããããã¯ãåºç€çãªè©±ããæè¿ã®è©±é¡ãŸã§ãäžéã確èªããªãããåèªã®æã£ãŠããç¥èã®æŽçãšåå°ãåºããããšã§ãä»åŸã®èšèšãæè¡éžå®ãè¡ãéã®æéãåŸãããšãç®çãšããŸããã é²ãæ¹ ä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã¯æéã 3 ã¶æãšå®ããæ¯é± 1 æéçšåºŠéãŸã£ãŠè¡ããŸããã æ¯é±ãäºåã«è¬åž«é£ãéžãã è³æãèªãã§ãããåœæ¥ã¯è¬åž«é£ãåå è
ã®äžæç¹ãçåç¹ã«å¯ŸããŠãã©ããŒã¢ãããããšãã圢åŒã§é²ããŸããããã®ä»ã«ã¯ã瀟å
ã®ãããã¯ãã§ã®å©çšäºäŸãªã©ã亀ããªããããŒãã«é¢ãã質åäŒã®ãããªåœ¢ã§é²ãããšãå€ãã£ãã§ãã ãŸãæ¯åã®ã¿ã¹ã¯ãã©ãŒã¹ã®æéã®ããšã«ãåå è
ããã®æ¥ã®å
容ããŸãšããè°äºé²åœ¢åŒã®è³æãäœæããåå è
å
šå¡ãšå
±æããããšã§ããã®æ¥ã«è©±ãããå
容ããããããã®ç解床ãå床確èªããããã«ããŸããã å
容 ãããã®æµãã¯äžèšã®éãã§ãããçŽ 3 ã¶æã§ã©ã®ãããªããŒãã«è§ŠããŠããã®ããäžéšãã玹ä»ããŸãã ããã³ããšã³ãã®åºç€ åºç€ã¯ãã¡ãã®è³æãå©çšãããŠããã ããªããé²ããŸããã ãã©ãŠã¶ã®ä»çµã¿: ææ°ãŠã§ããã©ãŠã¶ã®å
éšæ§é Asg Boot Camp ã HTML/CSS An Introduction to JavaScript ãã©ãŠã¶ã®ä»çµã¿ãHTML/CSS ã®åºæ¬çãªè©±ã®ãããããJavaScript ã®è©±ã«é¢é£ããŠããããŸã§ã«åºãŠãã AltJS ã«ã€ããŠãããã€ãç¹åŸŽãäœæ
æµè¡ã£ãã®ããªã©ã«ã€ããŠèªã¿èŸŒã¿ãŸããã ãã®äžã§ãã ãã©ãŠã¶ã®ä»çµã¿: ææ°ãŠã§ããã©ãŠã¶ã®å
éšæ§é ã§ DOM ã®è§£æãã¬ã³ããªã³ã°ãã¬ã€ã¢ãŠããšãã£ããã©ãŠã¶å
éšã§å
·äœçã«äœãè¡ãããŠããã®ããšãã£ã話ã¯ããã§ç¢ºèªã§ããŠããã£ããšãã声ãå€ããããŸããã JavaScriptïŒåºç€ãES2015 以éïŒ JavaScript ã®è©±é¡ãžã®å°å
¥ç·šãšããŠãã¡ããè³æãšããŠèªã¿èŸŒã¿ãŸããã You Donât Know JS: Up & Going JavaScript Garden ãã®ããŒãã§ã¯ JavaScript ã®åºç€ã¯ããã㊠ES3ã5 ãããŒã¹ã«ããããšã§ JavaScript ãšä»èšèªãšã®éãã»ç¹åŸŽãå確èªããŠãããŸãããäžèšã®å
容ãèžãŸããä»ã§ã¯äœ¿ããªãæžãæ¹ãªã©ã«ã€ããŠã¯ãã®çç±ã確èªããªããé²ããŠãããŸããã ãã®åŸã¯ Learn ES2015 · Babel ãåç
§ããªãããPromise, Class ãªã©ã¯æ®æ®µã®éçºã§ãåœããåã®ããã«å©çšããŠãããã®ã®ãES2015 以éã§ã®æžãæ¹ã¯ ES5 ã ãšã©ã®ããã«ãªã£ãŠããããããã§åæã«åŠç¿ããŠãããŸãããïŒ Playground ã» TypeScript ã§ããã®é°å²æ°ãèŠãããšãåºæ¥ãŸãïŒ ã¢ãã³ JavaScript ãããŸã§ã®ç¥èãèžãŸããã¢ãã³ãª JavaScript ã®å©çš(å®è£
)äŸãšããŠã jser.github.io ãš preact-www ã®ãœãŒã¹ãèªãã§ãããŸããã ãããŸã§ã® JavaScript ã®èšèªèªäœã«é¢ããå
容ãããã©ã€ãã©ãªãå©çšããã³ã³ããŒãã³ãéã§ã®ããŒã¿ãããŒããã³ã³ããŒãã³ãã®ã©ã€ããµã€ã¯ã«ã«é¢ããéšåãŸã§ç¢ºèªããŠãããŸããããŸãåèŠã®ãããžã§ã¯ãã§ããã°ã©ã®ãããããç®ãéããŠãããããªã©ã³ãŒãå
šäœã®èªã¿æ¹ã«ã€ããŠãè¬åž«é£ããã¢ããã€ã¹ããããŸããããŸãææåºãŠãã DOM API ã«ããªãã ã£ãããã»ã»ã»ïŒããªã©ãšãªãã€ã€ãã³ãŒããçŽè§£ããŠããããšã§æ¹ããŠããã³ããšã³ã JavaScript ã®ç¹åŸŽçãªéšåãå£éèŠãããšãã§ããããã«æããŸãã ãŸãæåŸã«ãçŸåšéçºã«å©çšãããŠããããŒã«çŸ€ã«ã€ããŠã Qiita:JavaScript ãã¬ãŒã ã¯ãŒã¯éžå®ã®è°è« ãåèã«ç¢ºèªããŸãããããããã®ããŒã«ãã©ã®ãããªèæ¯ã§äœ¿ãããŠããïŒãããã¯ããªãïŒã®ããªã©ãåãããŠç¢ºèªãããŸããã ãããŸã§ã®ããŒããæ¯ãè¿ãã€ã€ãJavaScript ãèšèªãšããŠã©ã®ããã«å€åããŠããããèããæãwebpack ã TypeScript ããªã䜿ãããã®ããããããè
¹ã«èœã¡ãããã«æããŸãããŸãäžèšè³æããã©ã®ãããªã±ãŒã¹ã§äœãéžæããã®ãããã¢ããªã±ãŒã·ã§ã³ã®å¯¿åœãšã©ã€ãã©ãªãããŒã«ã®å¯¿åœãšãã£ãéçšãã§ãŒãºã§çè§£ããŠããå¿
èŠã®ããäºé
ã«ãè§ŠããããŠãããéåžžã«åèã«ãªããŸããã å®éã«ãã£ãŠã¿ãŠ ä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã§ã¯ã3 ã¶æãšããæéã®äžã§ã1 ã¶æåã®æç¹ãšãå
šäœçµäºåŸã«æ¯ãè¿ãã宿œããŸããã ãã®äžã§ãåå ã¡ã³ããŒãã㯠æ¥åã«ãããŠã¯å¿
èŠãªéšåã«çµã£ã調æ»ã§çµãã£ãŠããŸã£ãããåšãã®ã³ãŒããåèã«ãããããããšã§ãªããšãªãã§ããæ°ã«ãªã£ãŠããŸã£ãŠããããä»åæ¹ããŠåºç€çãªç¥èãåŠç¿ããã埩ç¿ããæéãšããŠã§ããŠããã£ãã æççã§ãŸã°ããªç¥èããæã£ãŠããªãã£ãéšåãè³æãèªã¿èŸŒãããšã§çè§£ãæ·±ãŸã£ã æ°å¹Žåã«ããºã£ãŠããšã§èªãŸãªããããšã§èªãããã¯ãèšäºããã¡ããšèªããŠããã£ã ããã³ããšã³ãçµéšã®é·ãè¬åž«é£ã®çããç¥èŠïŒãã©ããªã©ãå«ããŠïŒãèãããšãã§ããã®ã¯ãããããã£ã ãªã©ã®ææ³ãåºãŸããã ç§èªèº«ãåå ããŠããŸããããå人çã«ã¯åºç€éšåãæ¹ããŠåºããããšãã§ããæ©äŒã ã£ãããã«æããŠããŸãã ãŸããæ®æ®µã¯æ°ããããŒã«ãªã©ã®æ
å ±ã®ãã£ããã¢ãããžã®æèãåããã¡ã§ãããä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã§èšèªã»ããŒã«ã®å€é·ãäžåºŠéããŠèŠãããšãã§ããããšã§ãæ°ããçŸããæè¡ãã©ããã£ã課é¡ã解決ãããã®ãªã®ãããããŸã§ã«äŒŒãããŒã«ããã£ãã®ãã©ãããªã©ã調ã¹ãæéãåŸãããããšã¯ããã£ãã®ããªãšæã£ãŠããŸãã äžæ¹ã§ãä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã®äžã§ã¯ãã³ãŒããæžããæéã¯äœããŸããã§ãããããã«ã€ããŠã¯æ¯ãè¿ãã®äžã§ã話é¡ãšãªããŸããããããã«ã€ããŠã¯ TodoMVC ãªã©ãåèã«ãèªåã§æãåãããŠã¿ãããšãå¿
èŠã ãããšä»åŸã®èª²é¡ãšããŠæããããŸããããã®ãããã¯å®å以å€ã§ã®åã
ã®é 匵ããå¿
èŠã«ãªã£ãŠããéšåããšæããŸãã ãŸãšã ããµãŒããŒãµã€ããšã³ãžãã¢ã®ããã³ããšã³ãéçºåã®åºäžãããããŒããšããã¿ã¹ã¯ãã©ãŒã¹ã«ã€ããŠã玹ä»ããŸããããããã£ã圢ã§ãåããããªã¹ãã«ã»ããã®ã¡ã³ããŒãéãŸãããäºãã«ããããªãéšåã«ã€ããŠè©±ãããããçµéšè±å¯ãªã¡ã³ããŒãããå人ã®çµéšãå«ããŠè©±ãèããšããã®ã¯ãæ¹ããŠéåžžã«è²Žéãªæ©äŒã ã£ãããã«æããŸãã ãããã£ãåãçµã¿ãç¹°ãè¿ããŠããããšã§ãåã
ã§å°ã£ãéšåã¯ãã¡ãã䌞ã°ãã€ã€ãå
šäœã®åºäžããè¡ããªããããããããããã¯ãéçºã«ç¹ããããã°ãšèããŠããŸãã
ããã«ã¡ã¯ãéçºæ¬éšã® 宿ž ã§ãã ã¡ãã¬ãŒã§ã¯å®æçã«ãããŒãã«æ²¿ã£ãŠçµç¹ã®æè¡çãªåºäžããè¡ãããã®æ©äŒïŒ ã¿ã¹ã¯ãã©ãŒã¹ ãšåŒãã§ããŸãïŒãè¡ã£ãŠããŸãããã®ã¿ã¹ã¯ãã©ãŒã¹ã®ïŒã€ãšããŠå
æ¥ãããã³ããšã³ãéçºåã®ããŒã¹ã¢ãããç®çãšããã¿ã¹ã¯ãã©ãŒã¹ãè¡ããŸãããæ¬èšäºã§ã¯ããã®åçµã¿ã«ã€ããŠã玹ä»ããããšæããŸãã èæ¯ ã¡ãã¬ãŒã«ã¯çŸåš 20 人匱ã®ãšã³ãžãã¢ãåšç±ããŠããããã®çŽåæ°ããµãŒããŒãµã€ãåºèº«è
ã§ãããŸãæ®æ®µã®éçºã«ãããŠã¯ãäžã€ã®æ©èœãããã³ããããµãŒããŒãµã€ããŸã§äžè²«ããŠäžäººãæ
åœããã±ãŒã¹ãå€ããããŸãããµãŒããŒãµã€ãåºèº«è
ã®ããã³ããšã³ãéçºã®ã¹ãã«ã»ããã«ã¯å€å°ã°ãã€ãã¯ãããã®ã®ãæ®æ®µã®éçºæ¥åã§ã¯ã¬ãã¥ãŒçã§ãããããµããŒããã€ã€éçºãè¡ã£ãŠããŸãã ããããããã³ããšã³ãã®åºç€çãªéšåãææ°ã®æµããŸã§èããããšäžå®ãªã¡ã³ããŒãå°ãªããããŸãããããã³ããšã³ãåºèº«ã®ã¡ã³ããŒãäž»å°ããæ¹ããŠåºç€ãææ°æ
å ±ã«é¢ããŠæŽçã»ãã©ããŒãè¡ãããšã§ãçµç¹å
šäœã®ããã³ããšã³ãã®éçºåãé«ããŠãããããšèããŸããã ã¿ã¹ã¯ãã©ãŒã¹ã®ç®ç ä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã¯ãããã³ããšã³ãã®åºæ¬ãæè¿ã®ãã¬ã³ãã«é¢ããŠåŠã¶ãããšã§ãïŒããã³ããšã³ãéçºã«ãããïŒæè¡éžå®ãèšèšãå®è£
ãã§ããåºç€ã身ã«ã€ãããããããŠããããããšã«ãæ°èŠã®ãããžã§ã¯ãã§èšè𿮵éããèªèµ°ã§ããããã«ãªããããšãç®çãšããŸããã ãã®äžã§ãç¹ã«ããæ°å¹Žãå€åã®æµããæ©ãã£ã JavaScript ãäžå¿ã«ãããã¯ãéžå®ããŸããã åå è
ã¯ããããŸã§ãµãŒããŒãµã€ãéçºãäžå¿ã«è¡ã£ãŠããã¡ã³ããŒæ°åã§ããèæ¯ã§ãè§Šãããšãããæ¥åçµéšã¯ããããããåæã§ã®ã¹ã¿ãŒãã§ãã£ããããåºç€ãã¿ã£ã¡ããšããããã¯ãåºç€çãªè©±ããæè¿ã®è©±é¡ãŸã§ãäžéã確èªããªãããåèªã®æã£ãŠããç¥èã®æŽçãšåå°ãåºããããšã§ãä»åŸã®èšèšãæè¡éžå®ãè¡ãéã®æéãåŸãããšãç®çãšããŸããã é²ãæ¹ ä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã¯æéã 3 ã¶æãšå®ããæ¯é± 1 æéçšåºŠéãŸã£ãŠè¡ããŸããã æ¯é±ãäºåã«è¬åž«é£ãéžãã è³æãèªãã§ãããåœæ¥ã¯è¬åž«é£ãåå è
ã®äžæç¹ãçåç¹ã«å¯ŸããŠãã©ããŒã¢ãããããšãã圢åŒã§é²ããŸããããã®ä»ã«ã¯ã瀟å
ã®ãããã¯ãã§ã®å©çšäºäŸãªã©ã亀ããªããããŒãã«é¢ãã質åäŒã®ãããªåœ¢ã§é²ãããšãå€ãã£ãã§ãã ãŸãæ¯åã®ã¿ã¹ã¯ãã©ãŒã¹ã®æéã®ããšã«ãåå è
ããã®æ¥ã®å
容ããŸãšããè°äºé²åœ¢åŒã®è³æãäœæããåå è
å
šå¡ãšå
±æããããšã§ããã®æ¥ã«è©±ãããå
容ããããããã®ç解床ãå床確èªããããã«ããŸããã å
容 ãããã®æµãã¯äžèšã®éãã§ãããçŽ 3 ã¶æã§ã©ã®ãããªããŒãã«è§ŠããŠããã®ããäžéšãã玹ä»ããŸãã ããã³ããšã³ãã®åºç€ åºç€ã¯ãã¡ãã®è³æãå©çšãããŠããã ããªããé²ããŸããã ãã©ãŠã¶ã®ä»çµã¿: ææ°ãŠã§ããã©ãŠã¶ã®å
éšæ§é Asg Boot Camp ã HTML/CSS An Introduction to JavaScript ãã©ãŠã¶ã®ä»çµã¿ãHTML/CSS ã®åºæ¬çãªè©±ã®ãããããJavaScript ã®è©±ã«é¢é£ããŠããããŸã§ã«åºãŠãã AltJS ã«ã€ããŠãããã€ãç¹åŸŽãäœæ
æµè¡ã£ãã®ããªã©ã«ã€ããŠèªã¿èŸŒã¿ãŸããã ãã®äžã§ãã ãã©ãŠã¶ã®ä»çµã¿: ææ°ãŠã§ããã©ãŠã¶ã®å
éšæ§é ã§ DOM ã®è§£æãã¬ã³ããªã³ã°ãã¬ã€ã¢ãŠããšãã£ããã©ãŠã¶å
éšã§å
·äœçã«äœãè¡ãããŠããã®ããšãã£ã話ã¯ããã§ç¢ºèªã§ããŠããã£ããšãã声ãå€ããããŸããã JavaScriptïŒåºç€ãES2015 以éïŒ JavaScript ã®è©±é¡ãžã®å°å
¥ç·šãšããŠãã¡ããè³æãšããŠèªã¿èŸŒã¿ãŸããã You Donât Know JS: Up & Going JavaScript Garden ãã®ããŒãã§ã¯ JavaScript ã®åºç€ã¯ããã㊠ES3ã5 ãããŒã¹ã«ããããšã§ JavaScript ãšä»èšèªãšã®éãã»ç¹åŸŽãå確èªããŠãããŸãããäžèšã®å
容ãèžãŸããä»ã§ã¯äœ¿ããªãæžãæ¹ãªã©ã«ã€ããŠã¯ãã®çç±ã確èªããªããé²ããŠãããŸããã ãã®åŸã¯ Learn ES2015 · Babel ãåç
§ããªãããPromise, Class ãªã©ã¯æ®æ®µã®éçºã§ãåœããåã®ããã«å©çšããŠãããã®ã®ãES2015 以éã§ã®æžãæ¹ã¯ ES5 ã ãšã©ã®ããã«ãªã£ãŠããããããã§åæã«åŠç¿ããŠãããŸãããïŒ Playground ã» TypeScript ã§ããã®é°å²æ°ãèŠãããšãåºæ¥ãŸãïŒ ã¢ãã³ JavaScript ãããŸã§ã®ç¥èãèžãŸããã¢ãã³ãª JavaScript ã®å©çš(å®è£
)äŸãšããŠã jser.github.io ãš preact-www ã®ãœãŒã¹ãèªãã§ãããŸããã ãããŸã§ã® JavaScript ã®èšèªèªäœã«é¢ããå
容ãããã©ã€ãã©ãªãå©çšããã³ã³ããŒãã³ãéã§ã®ããŒã¿ãããŒããã³ã³ããŒãã³ãã®ã©ã€ããµã€ã¯ã«ã«é¢ããéšåãŸã§ç¢ºèªããŠãããŸããããŸãåèŠã®ãããžã§ã¯ãã§ããã°ã©ã®ãããããç®ãéããŠãããããªã©ã³ãŒãå
šäœã®èªã¿æ¹ã«ã€ããŠãè¬åž«é£ããã¢ããã€ã¹ããããŸããããŸãææåºãŠãã DOM API ã«ããªãã ã£ãããã»ã»ã»ïŒããªã©ãšãªãã€ã€ãã³ãŒããçŽè§£ããŠããããšã§æ¹ããŠããã³ããšã³ã JavaScript ã®ç¹åŸŽçãªéšåãå£éèŠãããšãã§ããããã«æããŸãã ãŸãæåŸã«ãçŸåšéçºã«å©çšãããŠããããŒã«çŸ€ã«ã€ããŠã Qiita:JavaScript ãã¬ãŒã ã¯ãŒã¯éžå®ã®è°è« ãåèã«ç¢ºèªããŸãããããããã®ããŒã«ãã©ã®ãããªèæ¯ã§äœ¿ãããŠããïŒãããã¯ããªãïŒã®ããªã©ãåãããŠç¢ºèªãããŸããã ãããŸã§ã®ããŒããæ¯ãè¿ãã€ã€ãJavaScript ãèšèªãšããŠã©ã®ããã«å€åããŠããããèããæãwebpack ã TypeScript ããªã䜿ãããã®ããããããè
¹ã«èœã¡ãããã«æããŸãããŸãäžèšè³æããã©ã®ãããªã±ãŒã¹ã§äœãéžæããã®ãããã¢ããªã±ãŒã·ã§ã³ã®å¯¿åœãšã©ã€ãã©ãªãããŒã«ã®å¯¿åœãšãã£ãéçšãã§ãŒãºã§çè§£ããŠããå¿
èŠã®ããäºé
ã«ãè§ŠããããŠãããéåžžã«åèã«ãªããŸããã å®éã«ãã£ãŠã¿ãŠ ä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã§ã¯ã3 ã¶æãšããæéã®äžã§ã1 ã¶æåã®æç¹ãšãå
šäœçµäºåŸã«æ¯ãè¿ãã宿œããŸããã ãã®äžã§ãåå ã¡ã³ããŒãã㯠æ¥åã«ãããŠã¯å¿
èŠãªéšåã«çµã£ã調æ»ã§çµãã£ãŠããŸã£ãããåšãã®ã³ãŒããåèã«ãããããããšã§ãªããšãªãã§ããæ°ã«ãªã£ãŠããŸã£ãŠããããä»åæ¹ããŠåºç€çãªç¥èãåŠç¿ããã埩ç¿ããæéãšããŠã§ããŠããã£ãã æççã§ãŸã°ããªç¥èããæã£ãŠããªãã£ãéšåãè³æãèªã¿èŸŒãããšã§çè§£ãæ·±ãŸã£ã æ°å¹Žåã«ããºã£ãŠããšã§èªãŸãªããããšã§èªãããã¯ãèšäºããã¡ããšèªããŠããã£ã ããã³ããšã³ãçµéšã®é·ãè¬åž«é£ã®çããç¥èŠïŒãã©ããªã©ãå«ããŠïŒãèãããšãã§ããã®ã¯ãããããã£ã ãªã©ã®ææ³ãåºãŸããã ç§èªèº«ãåå ããŠããŸããããå人çã«ã¯åºç€éšåãæ¹ããŠåºããããšãã§ããæ©äŒã ã£ãããã«æããŠããŸãã ãŸããæ®æ®µã¯æ°ããããŒã«ãªã©ã®æ
å ±ã®ãã£ããã¢ãããžã®æèãåããã¡ã§ãããä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã§èšèªã»ããŒã«ã®å€é·ãäžåºŠéããŠèŠãããšãã§ããããšã§ãæ°ããçŸããæè¡ãã©ããã£ã課é¡ã解決ãããã®ãªã®ãããããŸã§ã«äŒŒãããŒã«ããã£ãã®ãã©ãããªã©ã調ã¹ãæéãåŸãããããšã¯ããã£ãã®ããªãšæã£ãŠããŸãã äžæ¹ã§ãä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã®äžã§ã¯ãã³ãŒããæžããæéã¯äœããŸããã§ãããããã«ã€ããŠã¯æ¯ãè¿ãã®äžã§ã話é¡ãšãªããŸããããããã«ã€ããŠã¯ TodoMVC ãªã©ãåèã«ãèªåã§æãåãããŠã¿ãããšãå¿
èŠã ãããšä»åŸã®èª²é¡ãšããŠæããããŸããããã®ãããã¯å®å以å€ã§ã®åã
ã®é 匵ããå¿
èŠã«ãªã£ãŠããéšåããšæããŸãã ãŸãšã ããµãŒããŒãµã€ããšã³ãžãã¢ã®ããã³ããšã³ãéçºåã®åºäžãããããŒããšããã¿ã¹ã¯ãã©ãŒã¹ã«ã€ããŠã玹ä»ããŸããããããã£ã圢ã§ãåããããªã¹ãã«ã»ããã®ã¡ã³ããŒãéãŸãããäºãã«ããããªãéšåã«ã€ããŠè©±ãããããçµéšè±å¯ãªã¡ã³ããŒãããå人ã®çµéšãå«ããŠè©±ãèããšããã®ã¯ãæ¹ããŠéåžžã«è²Žéãªæ©äŒã ã£ãããã«æããŸãã ãããã£ãåãçµã¿ãç¹°ãè¿ããŠããããšã§ãåã
ã§å°ã£ãéšåã¯ãã¡ãã䌞ã°ãã€ã€ãå
šäœã®åºäžããè¡ããªããããããããããã¯ãéçºã«ç¹ããããã°ãšèããŠããŸãã
ããã«ã¡ã¯ãéçºæ¬éšã® 宿ž ã§ãã ã¡ãã¬ãŒã§ã¯å®æçã«ãããŒãã«æ²¿ã£ãŠçµç¹ã®æè¡çãªåºäžããè¡ãããã®æ©äŒïŒ ã¿ã¹ã¯ãã©ãŒã¹ ãšåŒãã§ããŸãïŒãè¡ã£ãŠããŸãããã®ã¿ã¹ã¯ãã©ãŒã¹ã®ïŒã€ãšããŠå
æ¥ãããã³ããšã³ãéçºåã®ããŒã¹ã¢ãããç®çãšããã¿ã¹ã¯ãã©ãŒã¹ãè¡ããŸãããæ¬èšäºã§ã¯ããã®åçµã¿ã«ã€ããŠã玹ä»ããããšæããŸãã èæ¯ ã¡ãã¬ãŒã«ã¯çŸåš 20 人匱ã®ãšã³ãžãã¢ãåšç±ããŠããããã®çŽåæ°ããµãŒããŒãµã€ãåºèº«è
ã§ãããŸãæ®æ®µã®éçºã«ãããŠã¯ãäžã€ã®æ©èœãããã³ããããµãŒããŒãµã€ããŸã§äžè²«ããŠäžäººãæ
åœããã±ãŒã¹ãå€ããããŸãããµãŒããŒãµã€ãåºèº«è
ã®ããã³ããšã³ãéçºã®ã¹ãã«ã»ããã«ã¯å€å°ã°ãã€ãã¯ãããã®ã®ãæ®æ®µã®éçºæ¥åã§ã¯ã¬ãã¥ãŒçã§ãããããµããŒããã€ã€éçºãè¡ã£ãŠããŸãã ããããããã³ããšã³ãã®åºç€çãªéšåãææ°ã®æµããŸã§èããããšäžå®ãªã¡ã³ããŒãå°ãªããããŸãããããã³ããšã³ãåºèº«ã®ã¡ã³ããŒãäž»å°ããæ¹ããŠåºç€ãææ°æ
å ±ã«é¢ããŠæŽçã»ãã©ããŒãè¡ãããšã§ãçµç¹å
šäœã®ããã³ããšã³ãã®éçºåãé«ããŠãããããšèããŸããã ã¿ã¹ã¯ãã©ãŒã¹ã®ç®ç ä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã¯ãããã³ããšã³ãã®åºæ¬ãæè¿ã®ãã¬ã³ãã«é¢ããŠåŠã¶ãããšã§ãïŒããã³ããšã³ãéçºã«ãããïŒæè¡éžå®ãèšèšãå®è£
ãã§ããåºç€ã身ã«ã€ãããããããŠããããããšã«ãæ°èŠã®ãããžã§ã¯ãã§èšè𿮵éããèªèµ°ã§ããããã«ãªããããšãç®çãšããŸããã ãã®äžã§ãç¹ã«ããæ°å¹Žãå€åã®æµããæ©ãã£ã JavaScript ãäžå¿ã«ãããã¯ãéžå®ããŸããã åå è
ã¯ããããŸã§ãµãŒããŒãµã€ãéçºãäžå¿ã«è¡ã£ãŠããã¡ã³ããŒæ°åã§ããèæ¯ã§ãè§Šãããšãããæ¥åçµéšã¯ããããããåæã§ã®ã¹ã¿ãŒãã§ãã£ããããåºç€ãã¿ã£ã¡ããšããããã¯ãåºç€çãªè©±ããæè¿ã®è©±é¡ãŸã§ãäžéã確èªããªãããåèªã®æã£ãŠããç¥èã®æŽçãšåå°ãåºããããšã§ãä»åŸã®èšèšãæè¡éžå®ãè¡ãéã®æéãåŸãããšãç®çãšããŸããã é²ãæ¹ ä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã¯æéã 3 ã¶æãšå®ããæ¯é± 1 æéçšåºŠéãŸã£ãŠè¡ããŸããã æ¯é±ãäºåã«è¬åž«é£ãéžãã è³æãèªãã§ãããåœæ¥ã¯è¬åž«é£ãåå è
ã®äžæç¹ãçåç¹ã«å¯ŸããŠãã©ããŒã¢ãããããšãã圢åŒã§é²ããŸããããã®ä»ã«ã¯ã瀟å
ã®ãããã¯ãã§ã®å©çšäºäŸãªã©ã亀ããªããããŒãã«é¢ãã質åäŒã®ãããªåœ¢ã§é²ãããšãå€ãã£ãã§ãã ãŸãæ¯åã®ã¿ã¹ã¯ãã©ãŒã¹ã®æéã®ããšã«ãåå è
ããã®æ¥ã®å
容ããŸãšããè°äºé²åœ¢åŒã®è³æãäœæããåå è
å
šå¡ãšå
±æããããšã§ããã®æ¥ã«è©±ãããå
容ããããããã®ç解床ãå床確èªããããã«ããŸããã å
容 ãããã®æµãã¯äžèšã®éãã§ãããçŽ 3 ã¶æã§ã©ã®ãããªããŒãã«è§ŠããŠããã®ããäžéšãã玹ä»ããŸãã ããã³ããšã³ãã®åºç€ åºç€ã¯ãã¡ãã®è³æãå©çšãããŠããã ããªããé²ããŸããã ãã©ãŠã¶ã®ä»çµã¿: ææ°ãŠã§ããã©ãŠã¶ã®å
éšæ§é Asg Boot Camp ã HTML/CSS An Introduction to JavaScript ãã©ãŠã¶ã®ä»çµã¿ãHTML/CSS ã®åºæ¬çãªè©±ã®ãããããJavaScript ã®è©±ã«é¢é£ããŠããããŸã§ã«åºãŠãã AltJS ã«ã€ããŠãããã€ãç¹åŸŽãäœæ
æµè¡ã£ãã®ããªã©ã«ã€ããŠèªã¿èŸŒã¿ãŸããã ãã®äžã§ãã ãã©ãŠã¶ã®ä»çµã¿: ææ°ãŠã§ããã©ãŠã¶ã®å
éšæ§é ã§ DOM ã®è§£æãã¬ã³ããªã³ã°ãã¬ã€ã¢ãŠããšãã£ããã©ãŠã¶å
éšã§å
·äœçã«äœãè¡ãããŠããã®ããšãã£ã話ã¯ããã§ç¢ºèªã§ããŠããã£ããšãã声ãå€ããããŸããã JavaScriptïŒåºç€ãES2015 以éïŒ JavaScript ã®è©±é¡ãžã®å°å
¥ç·šãšããŠãã¡ããè³æãšããŠèªã¿èŸŒã¿ãŸããã You Donât Know JS: Up & Going JavaScript Garden ãã®ããŒãã§ã¯ JavaScript ã®åºç€ã¯ããã㊠ES3ã5 ãããŒã¹ã«ããããšã§ JavaScript ãšä»èšèªãšã®éãã»ç¹åŸŽãå確èªããŠãããŸãããäžèšã®å
容ãèžãŸããä»ã§ã¯äœ¿ããªãæžãæ¹ãªã©ã«ã€ããŠã¯ãã®çç±ã確èªããªããé²ããŠãããŸããã ãã®åŸã¯ Learn ES2015 · Babel ãåç
§ããªãããPromise, Class ãªã©ã¯æ®æ®µã®éçºã§ãåœããåã®ããã«å©çšããŠãããã®ã®ãES2015 以éã§ã®æžãæ¹ã¯ ES5 ã ãšã©ã®ããã«ãªã£ãŠããããããã§åæã«åŠç¿ããŠãããŸãããïŒ Playground ã» TypeScript ã§ããã®é°å²æ°ãèŠãããšãåºæ¥ãŸãïŒ ã¢ãã³ JavaScript ãããŸã§ã®ç¥èãèžãŸããã¢ãã³ãª JavaScript ã®å©çš(å®è£
)äŸãšããŠã jser.github.io ãš preact-www ã®ãœãŒã¹ãèªãã§ãããŸããã ãããŸã§ã® JavaScript ã®èšèªèªäœã«é¢ããå
容ãããã©ã€ãã©ãªãå©çšããã³ã³ããŒãã³ãéã§ã®ããŒã¿ãããŒããã³ã³ããŒãã³ãã®ã©ã€ããµã€ã¯ã«ã«é¢ããéšåãŸã§ç¢ºèªããŠãããŸããããŸãåèŠã®ãããžã§ã¯ãã§ããã°ã©ã®ãããããç®ãéããŠãããããªã©ã³ãŒãå
šäœã®èªã¿æ¹ã«ã€ããŠãè¬åž«é£ããã¢ããã€ã¹ããããŸããããŸãææåºãŠãã DOM API ã«ããªãã ã£ãããã»ã»ã»ïŒããªã©ãšãªãã€ã€ãã³ãŒããçŽè§£ããŠããããšã§æ¹ããŠããã³ããšã³ã JavaScript ã®ç¹åŸŽçãªéšåãå£éèŠãããšãã§ããããã«æããŸãã ãŸãæåŸã«ãçŸåšéçºã«å©çšãããŠããããŒã«çŸ€ã«ã€ããŠã Qiita:JavaScript ãã¬ãŒã ã¯ãŒã¯éžå®ã®è°è« ãåèã«ç¢ºèªããŸãããããããã®ããŒã«ãã©ã®ãããªèæ¯ã§äœ¿ãããŠããïŒãããã¯ããªãïŒã®ããªã©ãåãããŠç¢ºèªãããŸããã ãããŸã§ã®ããŒããæ¯ãè¿ãã€ã€ãJavaScript ãèšèªãšããŠã©ã®ããã«å€åããŠããããèããæãwebpack ã TypeScript ããªã䜿ãããã®ããããããè
¹ã«èœã¡ãããã«æããŸãããŸãäžèšè³æããã©ã®ãããªã±ãŒã¹ã§äœãéžæããã®ãããã¢ããªã±ãŒã·ã§ã³ã®å¯¿åœãšã©ã€ãã©ãªãããŒã«ã®å¯¿åœãšãã£ãéçšãã§ãŒãºã§çè§£ããŠããå¿
èŠã®ããäºé
ã«ãè§ŠããããŠãããéåžžã«åèã«ãªããŸããã å®éã«ãã£ãŠã¿ãŠ ä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã§ã¯ã3 ã¶æãšããæéã®äžã§ã1 ã¶æåã®æç¹ãšãå
šäœçµäºåŸã«æ¯ãè¿ãã宿œããŸããã ãã®äžã§ãåå ã¡ã³ããŒãã㯠æ¥åã«ãããŠã¯å¿
èŠãªéšåã«çµã£ã調æ»ã§çµãã£ãŠããŸã£ãããåšãã®ã³ãŒããåèã«ãããããããšã§ãªããšãªãã§ããæ°ã«ãªã£ãŠããŸã£ãŠããããä»åæ¹ããŠåºç€çãªç¥èãåŠç¿ããã埩ç¿ããæéãšããŠã§ããŠããã£ãã æççã§ãŸã°ããªç¥èããæã£ãŠããªãã£ãéšåãè³æãèªã¿èŸŒãããšã§çè§£ãæ·±ãŸã£ã æ°å¹Žåã«ããºã£ãŠããšã§èªãŸãªããããšã§èªãããã¯ãèšäºããã¡ããšèªããŠããã£ã ããã³ããšã³ãçµéšã®é·ãè¬åž«é£ã®çããç¥èŠïŒãã©ããªã©ãå«ããŠïŒãèãããšãã§ããã®ã¯ãããããã£ã ãªã©ã®ææ³ãåºãŸããã ç§èªèº«ãåå ããŠããŸããããå人çã«ã¯åºç€éšåãæ¹ããŠåºããããšãã§ããæ©äŒã ã£ãããã«æããŠããŸãã ãŸããæ®æ®µã¯æ°ããããŒã«ãªã©ã®æ
å ±ã®ãã£ããã¢ãããžã®æèãåããã¡ã§ãããä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã§èšèªã»ããŒã«ã®å€é·ãäžåºŠéããŠèŠãããšãã§ããããšã§ãæ°ããçŸããæè¡ãã©ããã£ã課é¡ã解決ãããã®ãªã®ãããããŸã§ã«äŒŒãããŒã«ããã£ãã®ãã©ãããªã©ã調ã¹ãæéãåŸãããããšã¯ããã£ãã®ããªãšæã£ãŠããŸãã äžæ¹ã§ãä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã®äžã§ã¯ãã³ãŒããæžããæéã¯äœããŸããã§ãããããã«ã€ããŠã¯æ¯ãè¿ãã®äžã§ã話é¡ãšãªããŸããããããã«ã€ããŠã¯ TodoMVC ãªã©ãåèã«ãèªåã§æãåãããŠã¿ãããšãå¿
èŠã ãããšä»åŸã®èª²é¡ãšããŠæããããŸããããã®ãããã¯å®å以å€ã§ã®åã
ã®é 匵ããå¿
èŠã«ãªã£ãŠããéšåããšæããŸãã ãŸãšã ããµãŒããŒãµã€ããšã³ãžãã¢ã®ããã³ããšã³ãéçºåã®åºäžãããããŒããšããã¿ã¹ã¯ãã©ãŒã¹ã«ã€ããŠã玹ä»ããŸããããããã£ã圢ã§ãåããããªã¹ãã«ã»ããã®ã¡ã³ããŒãéãŸãããäºãã«ããããªãéšåã«ã€ããŠè©±ãããããçµéšè±å¯ãªã¡ã³ããŒãããå人ã®çµéšãå«ããŠè©±ãèããšããã®ã¯ãæ¹ããŠéåžžã«è²Žéãªæ©äŒã ã£ãããã«æããŸãã ãããã£ãåãçµã¿ãç¹°ãè¿ããŠããããšã§ãåã
ã§å°ã£ãéšåã¯ãã¡ãã䌞ã°ãã€ã€ãå
šäœã®åºäžããè¡ããªããããããããããã¯ãéçºã«ç¹ããããã°ãšèããŠããŸãã
ããã«ã¡ã¯ãéçºæ¬éšã® 宿ž ã§ãã ã¡ãã¬ãŒã§ã¯å®æçã«ãããŒãã«æ²¿ã£ãŠçµç¹ã®æè¡çãªåºäžããè¡ãããã®æ©äŒïŒ ã¿ã¹ã¯ãã©ãŒã¹ ãšåŒãã§ããŸãïŒãè¡ã£ãŠããŸãããã®ã¿ã¹ã¯ãã©ãŒã¹ã®ïŒã€ãšããŠå
æ¥ãããã³ããšã³ãéçºåã®ããŒã¹ã¢ãããç®çãšããã¿ã¹ã¯ãã©ãŒã¹ãè¡ããŸãããæ¬èšäºã§ã¯ããã®åçµã¿ã«ã€ããŠã玹ä»ããããšæããŸãã èæ¯ ã¡ãã¬ãŒã«ã¯çŸåš 20 人匱ã®ãšã³ãžãã¢ãåšç±ããŠããããã®çŽåæ°ããµãŒããŒãµã€ãåºèº«è
ã§ãããŸãæ®æ®µã®éçºã«ãããŠã¯ãäžã€ã®æ©èœãããã³ããããµãŒããŒãµã€ããŸã§äžè²«ããŠäžäººãæ
åœããã±ãŒã¹ãå€ããããŸãããµãŒããŒãµã€ãåºèº«è
ã®ããã³ããšã³ãéçºã®ã¹ãã«ã»ããã«ã¯å€å°ã°ãã€ãã¯ãããã®ã®ãæ®æ®µã®éçºæ¥åã§ã¯ã¬ãã¥ãŒçã§ãããããµããŒããã€ã€éçºãè¡ã£ãŠããŸãã ããããããã³ããšã³ãã®åºç€çãªéšåãææ°ã®æµããŸã§èããããšäžå®ãªã¡ã³ããŒãå°ãªããããŸãããããã³ããšã³ãåºèº«ã®ã¡ã³ããŒãäž»å°ããæ¹ããŠåºç€ãææ°æ
å ±ã«é¢ããŠæŽçã»ãã©ããŒãè¡ãããšã§ãçµç¹å
šäœã®ããã³ããšã³ãã®éçºåãé«ããŠãããããšèããŸããã ã¿ã¹ã¯ãã©ãŒã¹ã®ç®ç ä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã¯ãããã³ããšã³ãã®åºæ¬ãæè¿ã®ãã¬ã³ãã«é¢ããŠåŠã¶ãããšã§ãïŒããã³ããšã³ãéçºã«ãããïŒæè¡éžå®ãèšèšãå®è£
ãã§ããåºç€ã身ã«ã€ãããããããŠããããããšã«ãæ°èŠã®ãããžã§ã¯ãã§èšè𿮵éããèªèµ°ã§ããããã«ãªããããšãç®çãšããŸããã ãã®äžã§ãç¹ã«ããæ°å¹Žãå€åã®æµããæ©ãã£ã JavaScript ãäžå¿ã«ãããã¯ãéžå®ããŸããã åå è
ã¯ããããŸã§ãµãŒããŒãµã€ãéçºãäžå¿ã«è¡ã£ãŠããã¡ã³ããŒæ°åã§ããèæ¯ã§ãè§Šãããšãããæ¥åçµéšã¯ããããããåæã§ã®ã¹ã¿ãŒãã§ãã£ããããåºç€ãã¿ã£ã¡ããšããããã¯ãåºç€çãªè©±ããæè¿ã®è©±é¡ãŸã§ãäžéã確èªããªãããåèªã®æã£ãŠããç¥èã®æŽçãšåå°ãåºããããšã§ãä»åŸã®èšèšãæè¡éžå®ãè¡ãéã®æéãåŸãããšãç®çãšããŸããã é²ãæ¹ ä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã¯æéã 3 ã¶æãšå®ããæ¯é± 1 æéçšåºŠéãŸã£ãŠè¡ããŸããã æ¯é±ãäºåã«è¬åž«é£ãéžãã è³æãèªãã§ãããåœæ¥ã¯è¬åž«é£ãåå è
ã®äžæç¹ãçåç¹ã«å¯ŸããŠãã©ããŒã¢ãããããšãã圢åŒã§é²ããŸããããã®ä»ã«ã¯ã瀟å
ã®ãããã¯ãã§ã®å©çšäºäŸãªã©ã亀ããªããããŒãã«é¢ãã質åäŒã®ãããªåœ¢ã§é²ãããšãå€ãã£ãã§ãã ãŸãæ¯åã®ã¿ã¹ã¯ãã©ãŒã¹ã®æéã®ããšã«ãåå è
ããã®æ¥ã®å
容ããŸãšããè°äºé²åœ¢åŒã®è³æãäœæããåå è
å
šå¡ãšå
±æããããšã§ããã®æ¥ã«è©±ãããå
容ããããããã®ç解床ãå床確èªããããã«ããŸããã å
容 ãããã®æµãã¯äžèšã®éãã§ãããçŽ 3 ã¶æã§ã©ã®ãããªããŒãã«è§ŠããŠããã®ããäžéšãã玹ä»ããŸãã ããã³ããšã³ãã®åºç€ åºç€ã¯ãã¡ãã®è³æãå©çšãããŠããã ããªããé²ããŸããã ãã©ãŠã¶ã®ä»çµã¿: ææ°ãŠã§ããã©ãŠã¶ã®å
éšæ§é Asg Boot Camp ã HTML/CSS An Introduction to JavaScript ãã©ãŠã¶ã®ä»çµã¿ãHTML/CSS ã®åºæ¬çãªè©±ã®ãããããJavaScript ã®è©±ã«é¢é£ããŠããããŸã§ã«åºãŠãã AltJS ã«ã€ããŠãããã€ãç¹åŸŽãäœæ
æµè¡ã£ãã®ããªã©ã«ã€ããŠèªã¿èŸŒã¿ãŸããã ãã®äžã§ãã ãã©ãŠã¶ã®ä»çµã¿: ææ°ãŠã§ããã©ãŠã¶ã®å
éšæ§é ã§ DOM ã®è§£æãã¬ã³ããªã³ã°ãã¬ã€ã¢ãŠããšãã£ããã©ãŠã¶å
éšã§å
·äœçã«äœãè¡ãããŠããã®ããšãã£ã話ã¯ããã§ç¢ºèªã§ããŠããã£ããšãã声ãå€ããããŸããã JavaScriptïŒåºç€ãES2015 以éïŒ JavaScript ã®è©±é¡ãžã®å°å
¥ç·šãšããŠãã¡ããè³æãšããŠèªã¿èŸŒã¿ãŸããã You Donât Know JS: Up & Going JavaScript Garden ãã®ããŒãã§ã¯ JavaScript ã®åºç€ã¯ããã㊠ES3ã5 ãããŒã¹ã«ããããšã§ JavaScript ãšä»èšèªãšã®éãã»ç¹åŸŽãå確èªããŠãããŸãããäžèšã®å
容ãèžãŸããä»ã§ã¯äœ¿ããªãæžãæ¹ãªã©ã«ã€ããŠã¯ãã®çç±ã確èªããªããé²ããŠãããŸããã ãã®åŸã¯ Learn ES2015 · Babel ãåç
§ããªãããPromise, Class ãªã©ã¯æ®æ®µã®éçºã§ãåœããåã®ããã«å©çšããŠãããã®ã®ãES2015 以éã§ã®æžãæ¹ã¯ ES5 ã ãšã©ã®ããã«ãªã£ãŠããããããã§åæã«åŠç¿ããŠãããŸãããïŒ Playground ã» TypeScript ã§ããã®é°å²æ°ãèŠãããšãåºæ¥ãŸãïŒ ã¢ãã³ JavaScript ãããŸã§ã®ç¥èãèžãŸããã¢ãã³ãª JavaScript ã®å©çš(å®è£
)äŸãšããŠã jser.github.io ãš preact-www ã®ãœãŒã¹ãèªãã§ãããŸããã ãããŸã§ã® JavaScript ã®èšèªèªäœã«é¢ããå
容ãããã©ã€ãã©ãªãå©çšããã³ã³ããŒãã³ãéã§ã®ããŒã¿ãããŒããã³ã³ããŒãã³ãã®ã©ã€ããµã€ã¯ã«ã«é¢ããéšåãŸã§ç¢ºèªããŠãããŸããããŸãåèŠã®ãããžã§ã¯ãã§ããã°ã©ã®ãããããç®ãéããŠãããããªã©ã³ãŒãå
šäœã®èªã¿æ¹ã«ã€ããŠãè¬åž«é£ããã¢ããã€ã¹ããããŸããããŸãææåºãŠãã DOM API ã«ããªãã ã£ãããã»ã»ã»ïŒããªã©ãšãªãã€ã€ãã³ãŒããçŽè§£ããŠããããšã§æ¹ããŠããã³ããšã³ã JavaScript ã®ç¹åŸŽçãªéšåãå£éèŠãããšãã§ããããã«æããŸãã ãŸãæåŸã«ãçŸåšéçºã«å©çšãããŠããããŒã«çŸ€ã«ã€ããŠã Qiita:JavaScript ãã¬ãŒã ã¯ãŒã¯éžå®ã®è°è« ãåèã«ç¢ºèªããŸãããããããã®ããŒã«ãã©ã®ãããªèæ¯ã§äœ¿ãããŠããïŒãããã¯ããªãïŒã®ããªã©ãåãããŠç¢ºèªãããŸããã ãããŸã§ã®ããŒããæ¯ãè¿ãã€ã€ãJavaScript ãèšèªãšããŠã©ã®ããã«å€åããŠããããèããæãwebpack ã TypeScript ããªã䜿ãããã®ããããããè
¹ã«èœã¡ãããã«æããŸãããŸãäžèšè³æããã©ã®ãããªã±ãŒã¹ã§äœãéžæããã®ãããã¢ããªã±ãŒã·ã§ã³ã®å¯¿åœãšã©ã€ãã©ãªãããŒã«ã®å¯¿åœãšãã£ãéçšãã§ãŒãºã§çè§£ããŠããå¿
èŠã®ããäºé
ã«ãè§ŠããããŠãããéåžžã«åèã«ãªããŸããã å®éã«ãã£ãŠã¿ãŠ ä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã§ã¯ã3 ã¶æãšããæéã®äžã§ã1 ã¶æåã®æç¹ãšãå
šäœçµäºåŸã«æ¯ãè¿ãã宿œããŸããã ãã®äžã§ãåå ã¡ã³ããŒãã㯠æ¥åã«ãããŠã¯å¿
èŠãªéšåã«çµã£ã調æ»ã§çµãã£ãŠããŸã£ãããåšãã®ã³ãŒããåèã«ãããããããšã§ãªããšãªãã§ããæ°ã«ãªã£ãŠããŸã£ãŠããããä»åæ¹ããŠåºç€çãªç¥èãåŠç¿ããã埩ç¿ããæéãšããŠã§ããŠããã£ãã æççã§ãŸã°ããªç¥èããæã£ãŠããªãã£ãéšåãè³æãèªã¿èŸŒãããšã§çè§£ãæ·±ãŸã£ã æ°å¹Žåã«ããºã£ãŠããšã§èªãŸãªããããšã§èªãããã¯ãèšäºããã¡ããšèªããŠããã£ã ããã³ããšã³ãçµéšã®é·ãè¬åž«é£ã®çããç¥èŠïŒãã©ããªã©ãå«ããŠïŒãèãããšãã§ããã®ã¯ãããããã£ã ãªã©ã®ææ³ãåºãŸããã ç§èªèº«ãåå ããŠããŸããããå人çã«ã¯åºç€éšåãæ¹ããŠåºããããšãã§ããæ©äŒã ã£ãããã«æããŠããŸãã ãŸããæ®æ®µã¯æ°ããããŒã«ãªã©ã®æ
å ±ã®ãã£ããã¢ãããžã®æèãåããã¡ã§ãããä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã§èšèªã»ããŒã«ã®å€é·ãäžåºŠéããŠèŠãããšãã§ããããšã§ãæ°ããçŸããæè¡ãã©ããã£ã課é¡ã解決ãããã®ãªã®ãããããŸã§ã«äŒŒãããŒã«ããã£ãã®ãã©ãããªã©ã調ã¹ãæéãåŸãããããšã¯ããã£ãã®ããªãšæã£ãŠããŸãã äžæ¹ã§ãä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã®äžã§ã¯ãã³ãŒããæžããæéã¯äœããŸããã§ãããããã«ã€ããŠã¯æ¯ãè¿ãã®äžã§ã話é¡ãšãªããŸããããããã«ã€ããŠã¯ TodoMVC ãªã©ãåèã«ãèªåã§æãåãããŠã¿ãããšãå¿
èŠã ãããšä»åŸã®èª²é¡ãšããŠæããããŸããããã®ãããã¯å®å以å€ã§ã®åã
ã®é 匵ããå¿
èŠã«ãªã£ãŠããéšåããšæããŸãã ãŸãšã ããµãŒããŒãµã€ããšã³ãžãã¢ã®ããã³ããšã³ãéçºåã®åºäžãããããŒããšããã¿ã¹ã¯ãã©ãŒã¹ã«ã€ããŠã玹ä»ããŸããããããã£ã圢ã§ãåããããªã¹ãã«ã»ããã®ã¡ã³ããŒãéãŸãããäºãã«ããããªãéšåã«ã€ããŠè©±ãããããçµéšè±å¯ãªã¡ã³ããŒãããå人ã®çµéšãå«ããŠè©±ãèããšããã®ã¯ãæ¹ããŠéåžžã«è²Žéãªæ©äŒã ã£ãããã«æããŸãã ãããã£ãåãçµã¿ãç¹°ãè¿ããŠããããšã§ãåã
ã§å°ã£ãéšåã¯ãã¡ãã䌞ã°ãã€ã€ãå
šäœã®åºäžããè¡ããªããããããããããã¯ãéçºã«ç¹ããããã°ãšèããŠããŸãã
ããã«ã¡ã¯ãéçºæ¬éšã® 宿ž ã§ãã ã¡ãã¬ãŒã§ã¯å®æçã«ãããŒãã«æ²¿ã£ãŠçµç¹ã®æè¡çãªåºäžããè¡ãããã®æ©äŒïŒ ã¿ã¹ã¯ãã©ãŒã¹ ãšåŒãã§ããŸãïŒãè¡ã£ãŠããŸãããã®ã¿ã¹ã¯ãã©ãŒã¹ã®ïŒã€ãšããŠå
æ¥ãããã³ããšã³ãéçºåã®ããŒã¹ã¢ãããç®çãšããã¿ã¹ã¯ãã©ãŒã¹ãè¡ããŸãããæ¬èšäºã§ã¯ããã®åçµã¿ã«ã€ããŠã玹ä»ããããšæããŸãã èæ¯ ã¡ãã¬ãŒã«ã¯çŸåš 20 人匱ã®ãšã³ãžãã¢ãåšç±ããŠããããã®çŽåæ°ããµãŒããŒãµã€ãåºèº«è
ã§ãããŸãæ®æ®µã®éçºã«ãããŠã¯ãäžã€ã®æ©èœãããã³ããããµãŒããŒãµã€ããŸã§äžè²«ããŠäžäººãæ
åœããã±ãŒã¹ãå€ããããŸãããµãŒããŒãµã€ãåºèº«è
ã®ããã³ããšã³ãéçºã®ã¹ãã«ã»ããã«ã¯å€å°ã°ãã€ãã¯ãããã®ã®ãæ®æ®µã®éçºæ¥åã§ã¯ã¬ãã¥ãŒçã§ãããããµããŒããã€ã€éçºãè¡ã£ãŠããŸãã ããããããã³ããšã³ãã®åºç€çãªéšåãææ°ã®æµããŸã§èããããšäžå®ãªã¡ã³ããŒãå°ãªããããŸãããããã³ããšã³ãåºèº«ã®ã¡ã³ããŒãäž»å°ããæ¹ããŠåºç€ãææ°æ
å ±ã«é¢ããŠæŽçã»ãã©ããŒãè¡ãããšã§ãçµç¹å
šäœã®ããã³ããšã³ãã®éçºåãé«ããŠãããããšèããŸããã ã¿ã¹ã¯ãã©ãŒã¹ã®ç®ç ä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã¯ãããã³ããšã³ãã®åºæ¬ãæè¿ã®ãã¬ã³ãã«é¢ããŠåŠã¶ãããšã§ãïŒããã³ããšã³ãéçºã«ãããïŒæè¡éžå®ãèšèšãå®è£
ãã§ããåºç€ã身ã«ã€ãããããããŠããããããšã«ãæ°èŠã®ãããžã§ã¯ãã§èšè𿮵éããèªèµ°ã§ããããã«ãªããããšãç®çãšããŸããã ãã®äžã§ãç¹ã«ããæ°å¹Žãå€åã®æµããæ©ãã£ã JavaScript ãäžå¿ã«ãããã¯ãéžå®ããŸããã åå è
ã¯ããããŸã§ãµãŒããŒãµã€ãéçºãäžå¿ã«è¡ã£ãŠããã¡ã³ããŒæ°åã§ããèæ¯ã§ãè§Šãããšãããæ¥åçµéšã¯ããããããåæã§ã®ã¹ã¿ãŒãã§ãã£ããããåºç€ãã¿ã£ã¡ããšããããã¯ãåºç€çãªè©±ããæè¿ã®è©±é¡ãŸã§ãäžéã確èªããªãããåèªã®æã£ãŠããç¥èã®æŽçãšåå°ãåºããããšã§ãä»åŸã®èšèšãæè¡éžå®ãè¡ãéã®æéãåŸãããšãç®çãšããŸããã é²ãæ¹ ä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã¯æéã 3 ã¶æãšå®ããæ¯é± 1 æéçšåºŠéãŸã£ãŠè¡ããŸããã æ¯é±ãäºåã«è¬åž«é£ãéžãã è³æãèªãã§ãããåœæ¥ã¯è¬åž«é£ãåå è
ã®äžæç¹ãçåç¹ã«å¯ŸããŠãã©ããŒã¢ãããããšãã圢åŒã§é²ããŸããããã®ä»ã«ã¯ã瀟å
ã®ãããã¯ãã§ã®å©çšäºäŸãªã©ã亀ããªããããŒãã«é¢ãã質åäŒã®ãããªåœ¢ã§é²ãããšãå€ãã£ãã§ãã ãŸãæ¯åã®ã¿ã¹ã¯ãã©ãŒã¹ã®æéã®ããšã«ãåå è
ããã®æ¥ã®å
容ããŸãšããè°äºé²åœ¢åŒã®è³æãäœæããåå è
å
šå¡ãšå
±æããããšã§ããã®æ¥ã«è©±ãããå
容ããããããã®ç解床ãå床確èªããããã«ããŸããã å
容 ãããã®æµãã¯äžèšã®éãã§ãããçŽ 3 ã¶æã§ã©ã®ãããªããŒãã«è§ŠããŠããã®ããäžéšãã玹ä»ããŸãã ããã³ããšã³ãã®åºç€ åºç€ã¯ãã¡ãã®è³æãå©çšãããŠããã ããªããé²ããŸããã ãã©ãŠã¶ã®ä»çµã¿: ææ°ãŠã§ããã©ãŠã¶ã®å
éšæ§é Asg Boot Camp ã HTML/CSS An Introduction to JavaScript ãã©ãŠã¶ã®ä»çµã¿ãHTML/CSS ã®åºæ¬çãªè©±ã®ãããããJavaScript ã®è©±ã«é¢é£ããŠããããŸã§ã«åºãŠãã AltJS ã«ã€ããŠãããã€ãç¹åŸŽãäœæ
æµè¡ã£ãã®ããªã©ã«ã€ããŠèªã¿èŸŒã¿ãŸããã ãã®äžã§ãã ãã©ãŠã¶ã®ä»çµã¿: ææ°ãŠã§ããã©ãŠã¶ã®å
éšæ§é ã§ DOM ã®è§£æãã¬ã³ããªã³ã°ãã¬ã€ã¢ãŠããšãã£ããã©ãŠã¶å
éšã§å
·äœçã«äœãè¡ãããŠããã®ããšãã£ã話ã¯ããã§ç¢ºèªã§ããŠããã£ããšãã声ãå€ããããŸããã JavaScriptïŒåºç€ãES2015 以éïŒ JavaScript ã®è©±é¡ãžã®å°å
¥ç·šãšããŠãã¡ããè³æãšããŠèªã¿èŸŒã¿ãŸããã You Donât Know JS: Up & Going JavaScript Garden ãã®ããŒãã§ã¯ JavaScript ã®åºç€ã¯ããã㊠ES3ã5 ãããŒã¹ã«ããããšã§ JavaScript ãšä»èšèªãšã®éãã»ç¹åŸŽãå確èªããŠãããŸãããäžèšã®å
容ãèžãŸããä»ã§ã¯äœ¿ããªãæžãæ¹ãªã©ã«ã€ããŠã¯ãã®çç±ã確èªããªããé²ããŠãããŸããã ãã®åŸã¯ Learn ES2015 · Babel ãåç
§ããªãããPromise, Class ãªã©ã¯æ®æ®µã®éçºã§ãåœããåã®ããã«å©çšããŠãããã®ã®ãES2015 以éã§ã®æžãæ¹ã¯ ES5 ã ãšã©ã®ããã«ãªã£ãŠããããããã§åæã«åŠç¿ããŠãããŸãããïŒ Playground ã» TypeScript ã§ããã®é°å²æ°ãèŠãããšãåºæ¥ãŸãïŒ ã¢ãã³ JavaScript ãããŸã§ã®ç¥èãèžãŸããã¢ãã³ãª JavaScript ã®å©çš(å®è£
)äŸãšããŠã jser.github.io ãš preact-www ã®ãœãŒã¹ãèªãã§ãããŸããã ãããŸã§ã® JavaScript ã®èšèªèªäœã«é¢ããå
容ãããã©ã€ãã©ãªãå©çšããã³ã³ããŒãã³ãéã§ã®ããŒã¿ãããŒããã³ã³ããŒãã³ãã®ã©ã€ããµã€ã¯ã«ã«é¢ããéšåãŸã§ç¢ºèªããŠãããŸããããŸãåèŠã®ãããžã§ã¯ãã§ããã°ã©ã®ãããããç®ãéããŠãããããªã©ã³ãŒãå
šäœã®èªã¿æ¹ã«ã€ããŠãè¬åž«é£ããã¢ããã€ã¹ããããŸããããŸãææåºãŠãã DOM API ã«ããªãã ã£ãããã»ã»ã»ïŒããªã©ãšãªãã€ã€ãã³ãŒããçŽè§£ããŠããããšã§æ¹ããŠããã³ããšã³ã JavaScript ã®ç¹åŸŽçãªéšåãå£éèŠãããšãã§ããããã«æããŸãã ãŸãæåŸã«ãçŸåšéçºã«å©çšãããŠããããŒã«çŸ€ã«ã€ããŠã Qiita:JavaScript ãã¬ãŒã ã¯ãŒã¯éžå®ã®è°è« ãåèã«ç¢ºèªããŸãããããããã®ããŒã«ãã©ã®ãããªèæ¯ã§äœ¿ãããŠããïŒãããã¯ããªãïŒã®ããªã©ãåãããŠç¢ºèªãããŸããã ãããŸã§ã®ããŒããæ¯ãè¿ãã€ã€ãJavaScript ãèšèªãšããŠã©ã®ããã«å€åããŠããããèããæãwebpack ã TypeScript ããªã䜿ãããã®ããããããè
¹ã«èœã¡ãããã«æããŸãããŸãäžèšè³æããã©ã®ãããªã±ãŒã¹ã§äœãéžæããã®ãããã¢ããªã±ãŒã·ã§ã³ã®å¯¿åœãšã©ã€ãã©ãªãããŒã«ã®å¯¿åœãšãã£ãéçšãã§ãŒãºã§çè§£ããŠããå¿
èŠã®ããäºé
ã«ãè§ŠããããŠãããéåžžã«åèã«ãªããŸããã å®éã«ãã£ãŠã¿ãŠ ä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã§ã¯ã3 ã¶æãšããæéã®äžã§ã1 ã¶æåã®æç¹ãšãå
šäœçµäºåŸã«æ¯ãè¿ãã宿œããŸããã ãã®äžã§ãåå ã¡ã³ããŒãã㯠æ¥åã«ãããŠã¯å¿
èŠãªéšåã«çµã£ã調æ»ã§çµãã£ãŠããŸã£ãããåšãã®ã³ãŒããåèã«ãããããããšã§ãªããšãªãã§ããæ°ã«ãªã£ãŠããŸã£ãŠããããä»åæ¹ããŠåºç€çãªç¥èãåŠç¿ããã埩ç¿ããæéãšããŠã§ããŠããã£ãã æççã§ãŸã°ããªç¥èããæã£ãŠããªãã£ãéšåãè³æãèªã¿èŸŒãããšã§çè§£ãæ·±ãŸã£ã æ°å¹Žåã«ããºã£ãŠããšã§èªãŸãªããããšã§èªãããã¯ãèšäºããã¡ããšèªããŠããã£ã ããã³ããšã³ãçµéšã®é·ãè¬åž«é£ã®çããç¥èŠïŒãã©ããªã©ãå«ããŠïŒãèãããšãã§ããã®ã¯ãããããã£ã ãªã©ã®ææ³ãåºãŸããã ç§èªèº«ãåå ããŠããŸããããå人çã«ã¯åºç€éšåãæ¹ããŠåºããããšãã§ããæ©äŒã ã£ãããã«æããŠããŸãã ãŸããæ®æ®µã¯æ°ããããŒã«ãªã©ã®æ
å ±ã®ãã£ããã¢ãããžã®æèãåããã¡ã§ãããä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã§èšèªã»ããŒã«ã®å€é·ãäžåºŠéããŠèŠãããšãã§ããããšã§ãæ°ããçŸããæè¡ãã©ããã£ã課é¡ã解決ãããã®ãªã®ãããããŸã§ã«äŒŒãããŒã«ããã£ãã®ãã©ãããªã©ã調ã¹ãæéãåŸãããããšã¯ããã£ãã®ããªãšæã£ãŠããŸãã äžæ¹ã§ãä»åã®ã¿ã¹ã¯ãã©ãŒã¹ã®äžã§ã¯ãã³ãŒããæžããæéã¯äœããŸããã§ãããããã«ã€ããŠã¯æ¯ãè¿ãã®äžã§ã話é¡ãšãªããŸããããããã«ã€ããŠã¯ TodoMVC ãªã©ãåèã«ãèªåã§æãåãããŠã¿ãããšãå¿
èŠã ãããšä»åŸã®èª²é¡ãšããŠæããããŸããããã®ãããã¯å®å以å€ã§ã®åã
ã®é 匵ããå¿
èŠã«ãªã£ãŠããéšåããšæããŸãã ãŸãšã ããµãŒããŒãµã€ããšã³ãžãã¢ã®ããã³ããšã³ãéçºåã®åºäžãããããŒããšããã¿ã¹ã¯ãã©ãŒã¹ã«ã€ããŠã玹ä»ããŸããããããã£ã圢ã§ãåããããªã¹ãã«ã»ããã®ã¡ã³ããŒãéãŸãããäºãã«ããããªãéšåã«ã€ããŠè©±ãããããçµéšè±å¯ãªã¡ã³ããŒãããå人ã®çµéšãå«ããŠè©±ãèããšããã®ã¯ãæ¹ããŠéåžžã«è²Žéãªæ©äŒã ã£ãããã«æããŸãã ãããã£ãåãçµã¿ãç¹°ãè¿ããŠããããšã§ãåã
ã§å°ã£ãéšåã¯ãã¡ãã䌞ã°ãã€ã€ãå
šäœã®åºäžããè¡ããªããããããããããã¯ãéçºã«ç¹ããããã°ãšèããŠããŸãã
ããã«ã¡ã¯ãéçºæ¬éšã® çš²æ¬ ã§ããå»çä»è·ã®æ±äººãµã€ãã ãžã§ãã¡ãã¬ãŒ ãã®éçºãæ
åœããŠãããšã³ãžãã¢ã§ãã æè¿ãžã§ãã¡ãã¬ãŒã§ã¯ CircleCI2.0 ãžã®ç§»è¡ãè¡ããŸãããç§»è¡ã®æ¹æ³ã¯ãã¡ããããã®éã«èª¿ã¹ãããšãCircleCI ã®æ°æ©èœãå©çšããŠã©ãã ã£ãããªã©ãæžããŠãããããšæããŸãã èª²é¡æ åŒç€Ÿã§ã¯ãå
šãããã¯ã( CLINICS ã MEDLEY ã ä»è·ã®ã»ãã ã ãžã§ãã¡ãã¬ãŒ )ã§ CircleCI ãå©çšããŠããŸãã ãžã§ãã¡ãã¬ãŒã§ã¯ CI ã«ãããã¹ãå®è¡ã« 37 åååŸæãã£ãŠããŸãã(ã³ã³ããã 2 ã€å©çšããå®è¡æéã§ã)ã ããã«ãéçºã¡ã³ããŒãå¢ããŠæ¥ãããšããããCI ã®ãªãœãŒã¹ãè¶³ããªããªãéçºå¹çãèœã¡ãããªãç¶æ³ã§ããã ãŸããããã話ã§ãããã ã³ã³ãããå¢ãããšããã®ã解決çã®äžã€ãšããŠã¯ããã®ã§ãããéåºŠã®æ¹åã«æåŸ
ãåºæ¥ããšè©å€ãè¯ãã£ãã®ã§ CirclecCI2.0 ãžç§»è¡ããŸããã CircleCI2.0 ãžã®ç§»è¡ã¡ãªãã åºæ¬çã«ã¯éåºŠã®æ¹åã«æåŸ
ãåºæ¥ãããšããã®ã倧ããªã¡ãªããã§ã¯ãããŸãããå
¬åŒã§ã¯ä»¥äžã®ããã«èšèŒãããŠããŸãã æç²ã§ãã倧ããªç¹åŸŽãšããŠã¯ä»¥äžã®ç¹ã§ããããã First-class Docker Support: Docker ã®ãã€ãã£ããµããŒããš Docker ã¬ã€ã€ãŒãã£ãã·ã¥ã®å°å
¥ Workflows: ãã«ãããã¹ãããããã€ããžã§ããšããŠæè»ã«ç®¡çã§ããããã«ãªã£ã Advanced Caching: ãã£ãã·ã¥ã®ä¿åãšãªã¹ãã¢ãã€ã¡ãŒãžããœãŒã¹ã³ãŒããäŸåé¢ä¿ã«å¯ŸããŠè¡ãããšãã§ããããã«ãªã£ãã ãã®èŸºãã®æ©èœã掻çšã CI ã®é床æ¹åãžç¹ããŠã¿ãããšæããŸãã ãžã§ãã¡ãã¬ãŒã®ã¢ããªã±ãŒã·ã§ã³æ§æ ç§»è¡ã®åæãšããŠããžã§ãã¡ãã¬ãŒã®ã¢ããªã±ãŒã·ã§ã³æ§æã«ã€ããŠèšèŒããŸãã ããã³ããšã³ãã®ãã«ãã yarn+webpack ã§è¡ããçæããã¢ã»ããã public/assets ãžåãåºããmanifest ãã¡ã€ã«ã®ãã¹ã rails ã® helper çµç±ã§ååŸãèªã¿èŸŒãã§ããŸããïŒRails4.2.xïŒ ãã®ãããªæ§æã®ã¢ããªã±ãŒã·ã§ã³ã CirlceCI2.0 ã§ãã«ãããã¹ãããããã€åºæ¥ãããã«ããŠãããŸãã config.yml ã®å
šäœå ä»åãäœæãã config.yml ã¯ãã®ãããªåœ¢ã«ãªããŸããã ãã£ãã㯠build: bundle install, yarn install code_analyze: rubocop, brakeman, scss-lint rspec deploy: capistrano ãè¡ã£ãŠããããã©ã³ãã«ãã£ãŠã©ã®ãžã§ããå®è¡ããã®ãã workflows ãå©çšããŠäœ¿ãåããŠããŸãã 詳ãã解説ã¯ä»¥éãèšèŒããŠãããŸãã defaults : & defaults working_directory : ~/job-medley docker : - image : circleci/ruby:2.4.2-node-browsers environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : circleci/mysql:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : redis:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo version : 2 jobs : build : << : * defaults steps : - checkout - restore_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} - run : name : bundle install command : bundle install --jobs=4 --path=vendor/bundle - save_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} paths : - vendor/bundle - restore_cache : key : job-medley-yarn-{{ checksum "yarn.lock" }} - run : name : Yarn install command : | echo "Node $(node -v)" echo "Yarn v$(yarn --version)" yarn config set cache-folder ./yarn_cache echo "Yarn v$(yarn cache dir)" yarn install - save_cache : key : job-medley-yarn-{{ checksum "yarn.lock" }} paths : - node_modules - yarn_cache - persist_to_workspace : root : ~/job-medley paths : - ./* code_analyze : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run rubocop command : bundle exec rubocop - run : name : run brakeman command : bundle exec brakeman -qz - run : name : run scss-lint command : bundle exec scss-lint rspec : parallelism : 2 << : * defaults steps : - attach_workspace : at : ~/job-medley - restore_cache : key : job-medley-elasticsearch # rspec ã§ es ã®ã³ãã³ããäžéšå®è¡ããŠãããããprimary container åŽãž install - run : name : Elasticsearch install command : | wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-x.x.x.tar.gz && \ tar -xvf elasticsearch-x.x.x.tar.gz && \ if [ -z "`elasticsearch-x.x.x/bin/plugin -l | grep analysis-kuromoji`" ]; then \ elasticsearch-x.x.x/bin/plugin -install elasticsearch/elasticsearch-analysis-kuromoji/x.x.x; fi - save_cache : key : job-medley-elasticsearch paths : - ./elasticsearch-x.x.x - run : name : database create command : bundle exec rake db:create environment : RAILS_ENV : test - run : name : run test command : | circleci tests glob 'spec/**/*_spec.*' \ | circleci tests split --split-by=timings --timings-type=filename \ | tee -a /dev/stderr \ | xargs bundle exec rspec \ --profile 100 \ --format RspecJunitFormatter \ --out rspec/rspec.xml \ --format progress environment : RAILS_ENV : test TEST_CLUSTER_COMMAND : elasticsearch-x.x.x/bin/elasticsearch - store_artifacts : path : artifacts/ - store_test_results : path : rspec/ deploy_qa : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run deploy command : | sh scripts/init_deploy.sh BRANCH="${CIRCLE_BRANCH}" bundle exec cap develop deploy deploy:restart deploy_only : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run deploy command : | BRANCH="${CIRCLE_BRANCH}" bundle exec cap production deploy deploy:restart workflows : version : 2 workflows : jobs : - build - code_analyze : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - rspec : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - deploy_qa : requires : - code_analyze - rspec filters : branches : only : develop - deploy_only : requires : - build filters : branches : only : /^sandbox.*|^master$|^staging$/ DockerImage ã®éžå® å
ã
ãDocker ã䜿ããã« CI ãåããŠããŸããããCircleCI2.0 ãžç§»è¡ããã«èŸºã Docker ãžã®å©çšã«åãæ¿ããŸããã â» Specifying Container Images DockerImage 㯠DockerHub ãžç»é²ãããŠãã CircleCI å
¬åŒã®ã ã® ãå©çšããŸããã ã¢ããªã±ãŒã·ã§ã³ã®äžéšã§ React ã䜿çšããŠãããããã³ãã®ãã«ã㯠yarn+webpack ãå©çšããŠããŸãããã®çºã以äžã® image ãéžæããŸããã circleci/ruby:2.4.2-node-browsers node ã®ã€ã³ã¹ããŒã«ãšãE2E ã®ãã¹ãã«å¿
èŠãªãœãããŠã§ã¢ãã€ã³ã¹ããŒã«ãããŠããŸãã â»è©³çŽ°ã¯ ãã¡ãã®èšäº ãåèã«ãããŠããã ããŸããã ãã®ä»ãçŸåšå©çšããŠãã MySQL ã®ããŒãžã§ã³ãElasticCacheRedis ã®ããŒãžã§ã³ãšåããã image ãéžæããŸããã æ³šæç¹ãšããŠã¯ãè€æ°ã® DockerImage ãå©çšããå Žåãäžã€ç®ã«æå®ãã image ã primary ãšããŠæ±ãããŸãã 以äžã®äŸã§ããšãRuby ã® image ãæåã«æå®ããMySQLãRedis ã® image ãæå®ããŠããŸãããMySQL ã³ãã³ãèªäœã¯ Ruby ã® image ã«å«ãŸããŠããªããããRuby ã³ãã³ããå®è¡ã§ããŠã MySQL ã³ãã³ããå®è¡ããããšã¯åºæ¥ãŸããã â»è©³çŽ°ã¯ ãã¡ã ã«èšèŒãããŠããŸãã docker : - image : circleci/ruby:2.4.2-node-browsers environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : circleci/mysql:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : redis:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo ãŸããçšæãããŠãã image ãã«ã¹ã¿ãã€ãºããå¿
èŠãããå Žåã¯ãDocker ã§ã«ã¹ã¿ã image ãäœããpublic ã§è¯ããã° Docker Hub ãžç»é²ãprivate ãè¯ããã° Amazon EC2 Container Registry ãžç»é²ããŠããããšã§åŒã³åºãããšãå¯èœã«ãªã£ãŠããŸãã â»Using Custom-Built Docker Images https://circleci.com/docs/ja/2.0/custom-images/ â»Using Private Images https://circleci.com/docs/ja/2.0/private-images/ build ã®èšå®ãš cache CI ã§å®è¡ããã¢ããªã±ãŒã·ã§ã³ã® build ã«é¢ããŠã§ãã checkout ã§ github ããã³ãŒãã checkout ãããã®åŸã®å®çŸ©ã§ã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ã¹ããŒã«ããã£ãã·ã¥ä¿åããã£ãã·ã¥ã®å±éãè¡ã£ãŠããŸãã steps : - checkout # Rails application setup - restore_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} - run : name : bundle install command : bundle install --jobs=4 --path=vendor/bundle - save_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} paths : - vendor/bundle save_cache: key ã« Gemfile.lock ãæå®ããããšã§ãã£ãã·ã¥ããŒãšããŠæ±ããpaths ã«èšå®ãããã¹ããã£ãã·ã¥ããããã«ããŠããŸãã restore_cache: key ãšäžèŽãããã£ãã·ã¥ãããã°ãsave_cache æã«æå®ãããã¹ãå±éãçŽããŠããŸãã run: ãã¡ã㯠rails ã®ã¢ããªã±ãŒã·ã§ã³ã€ã³ã¹ããŒã«ããŠããã ãã§ãã CircleCI1.0 ããããã£ãã·ã¥ç®¡çãæè»ã«è¡ããããšãããããŸãã circleci ã³ãã³ãã«ãã Rspec ã®äžŠåå®è¡ rspec ã«ãããã¹ãã®å®è¡ã«é¢ããŠã§ãã circleci ã³ãã³ã ãå©çšããããšã§ãã¹ãã®äžŠåå®è¡ãå¹ççã«è¡ãããšãåºæ¥ããŸãã ä»å㯠--split-by=timings --timings-type=filename ã®ãªãã·ã§ã³ãæå®ãããã¡ã€ã«åããŒã¹ã§ã®åå²ã§ãã¹ããå®è¡ããŸãã - run : name : run test command : | circleci tests glob 'spec/**/*_spec.*' \ | circleci tests split --split-by=timings --timings-type=filename \ | tee -a /dev/stderr \ | xargs bundle exec rspec \ --profile 100 \ --format RspecJunitFormatter \ --out rspec/rspec.xml \ --format progress environment : RAILS_ENV : test TEST_CLUSTER_COMMAND : elasticsearch-x.x.x/bin/elasticsearch - store_artifacts : path : artifacts/ - store_test_results : path : rspec/ store_artifacts: 以åãããããæ©èœã§ããããã¹ãçµæã®ææç©ãä¿åãããã¹ã«ãªããŸãã store_test_results: ãã¡ãã¯ãã¹ãã®å®è¡çµæãä¿åããŠããããšã§ãã³ã³ããéã§ rspec ã®å®è¡æéã«ã°ãã€ããåºãªãããã察象ã®ãã¡ã€ã«ãæé©ã«æ¯ãåããŠããããããªã®ã§ãããworkflows ãå©çšãããšãµããŒããããªãããã§ãã â»åèïŒ https://circleci.com/docs/ja/2.0/configuration-reference/#store_test_results ãã®ãããªåœ¢ã§ Artifacts ãä¿åãããŠããŸãã ãŸããartifacts ã«ã¯ coverage ãš capybara ã® screenshot ãªã©ãä¿åããŠããŸã - simple_cov if ENV['CI'] SimpleCov.coverage_dir File.join(ENV['CIRCLE_WORKING_DIRECTORY'], 'artifacts', 'coverage') SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[ SimpleCov::Formatter::HTMLFormatter ] SimpleCov.start do add_filter '/vendor/' add_filter '/spec/' add_filter '/config/' add_filter '/db/' end end capybara Capybara.save_and_open_page_path = File.join(ENV['CIRCLE_WORKING_DIRECTORY'], 'artifacts', 'capybara') if ENV['CI'] â»CircleCI2.0 ãã CI ã®ç°å¢å€æ°ãå€ãã£ãŠããŸãã詳现ã¯ä»¥äžã®ãªã³ã¯ãžèšèŒãããŠããŸãã Introduction to environment variables - CircleCI Introduction to environment variables in CircleCI circleci.com Workflows ã®èšå® CircleCI2.0 ãã Workflows ã®å©çšãå¯èœã«ãªããŸããã Workflow orchestration - CircleCI Learn about using CircleCI workflows to orchestrate jobs circleci.com ã³ã³ããæ¯ã«åå²ããžã§ããå®è¡ããããšã§æŽãªã䞊åå®è¡ã®å¹çåãåã³ããžã§ãéã®äŸåé¢ä¿ãŸã§èšå®ã§ããããã§ãã ãžã§ãã¡ãã¬ãŒã§ã¯ã³ãŒãã®éçè§£æã«å°ãå®è¡æéãæãã£ãŠããããšãããå€å°ã®æ¹åãå³ãããšèã åçŽã«äœ¿ã£ãŠã¿ããã£ã ãã¡ãã®æ©èœãå©çšããŠã¿ãŸããã workflows : version : 2 workflows : jobs : - build - code_analyze : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - rspec : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - deploy_qa : requires : - code_analyze - rspec filters : branches : only : develop - deploy_only : requires : - build filters : branches : only : /^sandbox.*|^master$|^staging$/ build: åãžã§ãã§å®è¡åã«è¡ã£ãŠããåŠçãå®çŸ© code_analyze: rubocopãbrakemanãscss-lint ãªã©ã®éçè§£æåŠçãå®çŸ© rspec: ã¢ããªã±ãŒã·ã§ã³ã®ãã¹ããå®çŸ© deploy: ãããã€ã«é¢ããåŠçãå®çŸ© ãžã§ãã¡ãã¬ãŒã§ã¯ããã©ã³ã管çã« Git-flow ãæ¡çšããŠããŸããããããšã¯å¥ã« sandbox ãšãããã¹ãç°å¢ãçšæãéçšããŠããŸãã develop ãã©ã³ãã§ã³ãŒãè§£æããã¹ããã¯ãªã¢ããã³ãŒãã ããmaster ãžåæ ããmaster ã§ã¯ãã¹ããã§ãŒãºãªãã« deploy ããæ§æãåã£ãŠããŸãã æ¥µåãCI ã®ãªãœãŒã¹ãç¯çŽããããã«åãã©ã³ãããšã§å®è¡ããåŠçãåããŠããŸãã åãã©ã³ãã®éçšã¯ä»¥äžã®éãã§ãã feature: ã³ãŒãè§£æããã¹ãå®è¡ sandbox: ãããã€ã®ã¿å®è¡(äžæã¬ãã¥ãŒçšãã©ã³ã) develop: ã³ãŒãè§£æããã¹ãå®è¡ããããã€å®è¡ master: ãããã€ã®ã¿å®è¡ äžèšã®äŸã§ã¯ã code_analyze: sandboxãmasterãstaging ãã©ã³ã以å€ã¯å®è¡ requires ã§äŸåé¢ä¿ãæå®ããbuild ãæ£åžžã«çµäºããªããã°å®è¡ãããªãããã«ãªã£ãŠããŸãã rspec: sandboxãmasterãstaging ãã©ã³ã以å€ã¯å®è¡ requires ã§äŸåé¢ä¿ãæå®ããbuild ãæ£åžžã«çµäºããªããã°å®è¡ãããªãããã«ãªã£ãŠããŸãã deploy_qa: develop ãã©ã³ãã§ã®ã¿å®è¡ requires ã§äŸåé¢ä¿ãæå®ããcode_analyzeãrspec ãæ£åžžã«çµäºããªããã°å®è¡ãããªãããã«ãªã£ãŠããŸãã deploy_only: sandboxãmasterãstaging ãã©ã³ãã®ã¿å©çšãããžã§ã requires ã§äŸåé¢ä¿ãæå®ããbuild ãæ£åžžã«çµäºããªããã°å®è¡ãããªãããã«ãªã£ãŠããŸãã ã©ã®ãã㪠workflow ãåºæ¥ãããã®ãã以äžã«äŸã瀺ããŸãã feature ãã©ã³ãã®äŸ: develop ãã©ã³ãã®äŸ: masterãsandbox ãã©ã³ãã®äŸ: ä»åã®äŸã ãšãã©ã³ãæ¯ã« workflow ãå€ããŠãããããignoreãonly ã®æžãæ¹ã§æå³ããæ¯ãåããããªãããã«èæ
®ã¯å¿
èŠã§ãããæè»ã« workflow ãäœããããšãããããšæããŸãã(ããéãããšèªã¿è§£ãã®ã倧å€ã«ãªãããã§ãã) Workflows ã«é¢ããŠã¯ ãã¡ã ã«è²ã
ãªãã¿ãŒã³ã®çµã¿æ¹ãèšèŒãããŠããã®ã§ããã¡ããèªããšããçè§£ãæ·±ãŸããšæããŸãã ãžã§ãéã§ã®ããŒã¿å
±æ ãžã§ããåããŠãã«ããã=äœåãã¢ããªã±ãŒã·ã§ã³ã®åæåãå¿
èŠãªããããªããïŒ ãšåœç¶çåã«æãç¹ã§ã¯ãããŸãããããã«å¯Ÿãã解決çãçšæãããŠããŸãã build : steps : ===çç¥=== - persist_to_workspace : root : ~/job-medley paths : - ./* deploy_qa : << : * defaults steps : - attach_workspace : at : ~/job-medley persist_to_workspace: æå®ãããã¹ã«ããããŒã¿ãäžæçã«ä¿ç®¡ããŠãããŸã attach_workspace: ä¿ç®¡æžã¿ã®ããŒã¿ãå±éããŠãããŸã ãã®æ©èœã«ããããã«ãããã»ã¹ã§çæãããã®ãåãžã§ãã§å®è¡ããã³ã³ãããžæž¡ãããšãåºæ¥ãŸãã ãã ãããããããã«ãããã»ã¹ã§ãã£ãã·ã¥ãå
¥ããŠããããšããããããèªäœã®å¹æã¯æ®ã©ãããŸããã§ããã ã³ã³ãã€ã«æžã¿ã®ããŒã¿ãåãæž¡ãéã«ã¯å¹æãçºæ®ãããã§ããã( å
¬åŒã§ã ãã®ãããªå©çšãæ³å®ããŠãããã§ã) æ¹åçµæ èå¿ã®é床æ¹åçµæã§ããçµæã¯ä»¥äžã®éãã«ãªããŸããã æ¹åå: CircleCI1.0 rspec ã®å®è¡æé: 26:59 以äžã¯ãCircleCI2.0 ãžç§»è¡ããã ãã®çµæã§ãããã®ã±ãŒã¹ã§ã¯ workflows ãå©çšããŠããŸããã æ¹ååŸ: CircleCI2.0 rspec ã®å®è¡æé: 19:40 CircleCI1.0 ãã CircleCI2.0 ãžç§»è¡ããããšã«ããã çŽ 12 åçš ãã¹ãã®å®è¡æéãççž®ããããšãåºæ¥ãŸããã Workflows ãªã©ç¹ã«å©çšããŠããªãããã€ããã«ããã§ãŒãºã®å®è¡æéãé¢ä¿ããªããããCircleCI2.0 ãå©çšããã ãã§åçŽã«ãã¹ãå®è¡é床ã®åäžãèŠèŸŒããããšãããããšæããŸãã ç¶ã㊠Workflows ãå©çšããçµæã§ãã æ¹ååŸ: CircleCI2.0 with Workflows rspec ã®å®è¡æé: 21:14 çµæã¯ãWorkflows ãå©çšããªãã±ãŒã¹ãšãå©çšããã±ãŒã¹ã§ã¯ãWorkflows ãå©çšããã»ãã rspec ã®å®è¡æéã¯é·ããªã£ãŠããŸããŸããããbuild-code-analyze-rspec ã®å®è¡ã«æãã£ãããŒã¿ã«ã®æéã«å·®ã¯èŠãããŸããã§ããã ããã¯ããcircleci ã³ãã³ãã«ãã Rspec ã®äžŠåå®è¡ãã®ã»ã¯ã·ã§ã³ãžãèšèŒããéããstore_test_results ããµããŒããšãããªãããšã«ãããã³ã³ããéã§ã®åæ£ãæé©åãããŠããªãçºã§ãã ã³ã³ããéã§ rspec ã®å®è¡æéã«ã°ãã€ããåºãªãããã察象ã®ãã¡ã€ã«ãæé©ã«æ¯ãåããŠããããããªã®ã§ãããWorkflows ãå©çšãããšãµããŒããããªãããã§ãã å®è¡æéã«ã°ãã€ããåºãŠããŸããcode_analyze ã®ãžã§ãã忣ããããšã§èŠèŸŒãã§ããæ¹åæé(çŽ 3 å)ãšã°ãã€ãã«ããçºçãããã¹ãå®è¡æéã®ãã¹( (20:01 - 14:57) / 2 = 2:32 )ã倧äœåãã§ãããããããŒã¿ã«ã§ã®å®è¡æéã«å·®ãåºãªãçµæãšãªããŸããã ã°ãã€ããåºããªãæ¹æ³ãããžã§ãã®åãæ¹ã«ã€ããŠã¯ä»åŸã工倫ããŠã¿ãããšæããŸãã ãŸããããã³ããšã³ãã®ãã¹ããããå°ãåãããŠãããããšèããŠããã®ã§ãããã³ããšã³ãã®ãã¹ãããµãŒããµã€ãã®ãã¹ãã Workflows ãäžæã䜿ããªãã忣ããŠãããã°è¯ãã®ããªãšãæã£ãŠããŸãã ãããã« ç§»è¡ã«éããŠã CircleCI2.0 ã®ç§»è¡ã¬ã€ã ãèªã¿ãªããé²ããŠããŸããããåºæ¬çãªèšæ³ã®å€æŽãtimezoneãenvironment ã®å®çŸ©æ¹æ³ã®å€æŽãvariable ã®å€æŽãªã©ãå€ã
æããããã¥ã¡ã³ããçµæ§èªã¿èŸŒãŸãªããšã©ãã«äœãå®çŸ©ã§ããã®ãææ¡ã§ããŸããã§ããã ãŸããWorkflows ã®çµã¿ç«ãŠãªã© å
¬åŒã«è¯ããµã³ãã« ã¯æ²¢å±±ããã®ã§ãããäŸåé¢ä¿ã®å®çŸ©ãè²ã
詊ãã®ã«èŠåŽããæ°ãããŸãã â»çŽ çŽã«å°èŠæš¡ãªã¢ããªãçšæããŠã ããŒã«ã«ã§ circleci ãå®è¡ ããŠã¿ãæ¹ãå¹çè¯ãé²ãããããããããŸããã â»ãã ã å
¬åŒã®ããã¥ã¡ã³ã ã CommunityForum ããã£ããèªãã°äœãããšãªãæ
å ±ã¯åã£ãã®ã§éåžžã«å©ãããŸããã CircleCI2.0 ã§ã©ã®ãããªäºãåºæ¥ãã®ããããã¯ã©ã®ããã«è¡ããã®ãã ãã®èšäºããã®æŠèгãã€ããå©ãã«ãªãã°è¯ããªãšæã£ãŠããŸãã åèãªã³ã¯ CircleCI2.0 ãžç§»è¡ããã«ãããã以äžã®èšäºãåèã«ãããŠããã ããŸãããããããšãããããŸãã circleci/ruby:2.4.1-node-browsersã£ãŠäœå
¥ã£ãŠãã®ãç¥ãããã£ã - Qiita 2018-11-19è¿œèš https://github.com/CircleCI-Public/circleci-dockerfiles/blob/master/ruby/images/ ãã€ã®éã«ãå
¬éãããŠãŸãã åæ© circleciãæäŸããŠããdockerãã¡... qiita.com CircleCI2.0ã®Workflowsã詊ã âCircleCI2.0ã®Workflowsã詊ãâ is published by timakin. medium.com ãç¥ãã ã¡ãã¬ãŒã§ã¯ãå»çä»è·ã®æ±äººãµã€ãã ãžã§ãã¡ãã¬ãŒ ããå»åž«ãã¡ãã€ãããªã³ã©ã€ã³å»çäºå
žã MEDLEY ããå£ã³ãã§æ¢ããä»è·æœèšã®æ€çŽ¢ãµã€ãã ä»è·ã®ã»ãã ãããªã³ã©ã€ã³èšºçã¢ããªã CLINICS ããªã©ã®ãããã¯ããæäŸããŠããŸãããããã®ãµãŒãã¹ã®æ¡å€§ãåããŠããã®æé·ãæ¯ãããšã³ãžãã¢ã»ãã¶ã€ããŒãåéããŠããŸãã ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp ã¡ãã¬ãŒã§äžç·ã«å»çäœéšãå€ãããããã¯ãäœãã«é¢ããããæ¹ã®ãé£çµ¡ãåŸ
ã¡ããŠãããŸãã
ããã«ã¡ã¯ãéçºæ¬éšã® çš²æ¬ ã§ããå»çä»è·ã®æ±äººãµã€ãã ãžã§ãã¡ãã¬ãŒ ãã®éçºãæ
åœããŠãããšã³ãžãã¢ã§ãã æè¿ãžã§ãã¡ãã¬ãŒã§ã¯ CircleCI2.0 ãžã®ç§»è¡ãè¡ããŸãããç§»è¡ã®æ¹æ³ã¯ãã¡ããããã®éã«èª¿ã¹ãããšãCircleCI ã®æ°æ©èœãå©çšããŠã©ãã ã£ãããªã©ãæžããŠãããããšæããŸãã èª²é¡æ åŒç€Ÿã§ã¯ãå
šãããã¯ã( CLINICS ã MEDLEY ã ä»è·ã®ã»ãã ã ãžã§ãã¡ãã¬ãŒ )ã§ CircleCI ãå©çšããŠããŸãã ãžã§ãã¡ãã¬ãŒã§ã¯ CI ã«ãããã¹ãå®è¡ã« 37 åååŸæãã£ãŠããŸãã(ã³ã³ããã 2 ã€å©çšããå®è¡æéã§ã)ã ããã«ãéçºã¡ã³ããŒãå¢ããŠæ¥ãããšããããCI ã®ãªãœãŒã¹ãè¶³ããªããªãéçºå¹çãèœã¡ãããªãç¶æ³ã§ããã ãŸããããã話ã§ãããã ã³ã³ãããå¢ãããšããã®ã解決çã®äžã€ãšããŠã¯ããã®ã§ãããéåºŠã®æ¹åã«æåŸ
ãåºæ¥ããšè©å€ãè¯ãã£ãã®ã§ CirclecCI2.0 ãžç§»è¡ããŸããã CircleCI2.0 ãžã®ç§»è¡ã¡ãªãã åºæ¬çã«ã¯éåºŠã®æ¹åã«æåŸ
ãåºæ¥ãããšããã®ã倧ããªã¡ãªããã§ã¯ãããŸãããå
¬åŒã§ã¯ä»¥äžã®ããã«èšèŒãããŠããŸãã æç²ã§ãã倧ããªç¹åŸŽãšããŠã¯ä»¥äžã®ç¹ã§ããããã First-class Docker Support: Docker ã®ãã€ãã£ããµããŒããš Docker ã¬ã€ã€ãŒãã£ãã·ã¥ã®å°å
¥ Workflows: ãã«ãããã¹ãããããã€ããžã§ããšããŠæè»ã«ç®¡çã§ããããã«ãªã£ã Advanced Caching: ãã£ãã·ã¥ã®ä¿åãšãªã¹ãã¢ãã€ã¡ãŒãžããœãŒã¹ã³ãŒããäŸåé¢ä¿ã«å¯ŸããŠè¡ãããšãã§ããããã«ãªã£ãã ãã®èŸºãã®æ©èœã掻çšã CI ã®é床æ¹åãžç¹ããŠã¿ãããšæããŸãã ãžã§ãã¡ãã¬ãŒã®ã¢ããªã±ãŒã·ã§ã³æ§æ ç§»è¡ã®åæãšããŠããžã§ãã¡ãã¬ãŒã®ã¢ããªã±ãŒã·ã§ã³æ§æã«ã€ããŠèšèŒããŸãã ããã³ããšã³ãã®ãã«ãã yarn+webpack ã§è¡ããçæããã¢ã»ããã public/assets ãžåãåºããmanifest ãã¡ã€ã«ã®ãã¹ã rails ã® helper çµç±ã§ååŸãèªã¿èŸŒãã§ããŸããïŒRails4.2.xïŒ ãã®ãããªæ§æã®ã¢ããªã±ãŒã·ã§ã³ã CirlceCI2.0 ã§ãã«ãããã¹ãããããã€åºæ¥ãããã«ããŠãããŸãã config.yml ã®å
šäœå ä»åãäœæãã config.yml ã¯ãã®ãããªåœ¢ã«ãªããŸããã ãã£ãã㯠build: bundle install, yarn install code_analyze: rubocop, brakeman, scss-lint rspec deploy: capistrano ãè¡ã£ãŠããããã©ã³ãã«ãã£ãŠã©ã®ãžã§ããå®è¡ããã®ãã workflows ãå©çšããŠäœ¿ãåããŠããŸãã 詳ãã解説ã¯ä»¥éãèšèŒããŠãããŸãã defaults : & defaults working_directory : ~/job-medley docker : - image : circleci/ruby:2.4.2-node-browsers environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : circleci/mysql:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : redis:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo version : 2 jobs : build : << : * defaults steps : - checkout - restore_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} - run : name : bundle install command : bundle install --jobs=4 --path=vendor/bundle - save_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} paths : - vendor/bundle - restore_cache : key : job-medley-yarn-{{ checksum "yarn.lock" }} - run : name : Yarn install command : | echo "Node $(node -v)" echo "Yarn v$(yarn --version)" yarn config set cache-folder ./yarn_cache echo "Yarn v$(yarn cache dir)" yarn install - save_cache : key : job-medley-yarn-{{ checksum "yarn.lock" }} paths : - node_modules - yarn_cache - persist_to_workspace : root : ~/job-medley paths : - ./* code_analyze : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run rubocop command : bundle exec rubocop - run : name : run brakeman command : bundle exec brakeman -qz - run : name : run scss-lint command : bundle exec scss-lint rspec : parallelism : 2 << : * defaults steps : - attach_workspace : at : ~/job-medley - restore_cache : key : job-medley-elasticsearch # rspec ã§ es ã®ã³ãã³ããäžéšå®è¡ããŠãããããprimary container åŽãž install - run : name : Elasticsearch install command : | wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-x.x.x.tar.gz && \ tar -xvf elasticsearch-x.x.x.tar.gz && \ if [ -z "`elasticsearch-x.x.x/bin/plugin -l | grep analysis-kuromoji`" ]; then \ elasticsearch-x.x.x/bin/plugin -install elasticsearch/elasticsearch-analysis-kuromoji/x.x.x; fi - save_cache : key : job-medley-elasticsearch paths : - ./elasticsearch-x.x.x - run : name : database create command : bundle exec rake db:create environment : RAILS_ENV : test - run : name : run test command : | circleci tests glob 'spec/**/*_spec.*' \ | circleci tests split --split-by=timings --timings-type=filename \ | tee -a /dev/stderr \ | xargs bundle exec rspec \ --profile 100 \ --format RspecJunitFormatter \ --out rspec/rspec.xml \ --format progress environment : RAILS_ENV : test TEST_CLUSTER_COMMAND : elasticsearch-x.x.x/bin/elasticsearch - store_artifacts : path : artifacts/ - store_test_results : path : rspec/ deploy_qa : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run deploy command : | sh scripts/init_deploy.sh BRANCH="${CIRCLE_BRANCH}" bundle exec cap develop deploy deploy:restart deploy_only : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run deploy command : | BRANCH="${CIRCLE_BRANCH}" bundle exec cap production deploy deploy:restart workflows : version : 2 workflows : jobs : - build - code_analyze : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - rspec : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - deploy_qa : requires : - code_analyze - rspec filters : branches : only : develop - deploy_only : requires : - build filters : branches : only : /^sandbox.*|^master$|^staging$/ DockerImage ã®éžå® å
ã
ãDocker ã䜿ããã« CI ãåããŠããŸããããCircleCI2.0 ãžç§»è¡ããã«èŸºã Docker ãžã®å©çšã«åãæ¿ããŸããã â» Specifying Container Images DockerImage 㯠DockerHub ãžç»é²ãããŠãã CircleCI å
¬åŒã®ã ã® ãå©çšããŸããã ã¢ããªã±ãŒã·ã§ã³ã®äžéšã§ React ã䜿çšããŠãããããã³ãã®ãã«ã㯠yarn+webpack ãå©çšããŠããŸãããã®çºã以äžã® image ãéžæããŸããã circleci/ruby:2.4.2-node-browsers node ã®ã€ã³ã¹ããŒã«ãšãE2E ã®ãã¹ãã«å¿
èŠãªãœãããŠã§ã¢ãã€ã³ã¹ããŒã«ãããŠããŸãã â»è©³çŽ°ã¯ ãã¡ãã®èšäº ãåèã«ãããŠããã ããŸããã ãã®ä»ãçŸåšå©çšããŠãã MySQL ã®ããŒãžã§ã³ãElasticCacheRedis ã®ããŒãžã§ã³ãšåããã image ãéžæããŸããã æ³šæç¹ãšããŠã¯ãè€æ°ã® DockerImage ãå©çšããå Žåãäžã€ç®ã«æå®ãã image ã primary ãšããŠæ±ãããŸãã 以äžã®äŸã§ããšãRuby ã® image ãæåã«æå®ããMySQLãRedis ã® image ãæå®ããŠããŸãããMySQL ã³ãã³ãèªäœã¯ Ruby ã® image ã«å«ãŸããŠããªããããRuby ã³ãã³ããå®è¡ã§ããŠã MySQL ã³ãã³ããå®è¡ããããšã¯åºæ¥ãŸããã â»è©³çŽ°ã¯ ãã¡ã ã«èšèŒãããŠããŸãã docker : - image : circleci/ruby:2.4.2-node-browsers environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : circleci/mysql:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : redis:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo ãŸããçšæãããŠãã image ãã«ã¹ã¿ãã€ãºããå¿
èŠãããå Žåã¯ãDocker ã§ã«ã¹ã¿ã image ãäœããpublic ã§è¯ããã° Docker Hub ãžç»é²ãprivate ãè¯ããã° Amazon EC2 Container Registry ãžç»é²ããŠããããšã§åŒã³åºãããšãå¯èœã«ãªã£ãŠããŸãã â»Using Custom-Built Docker Images https://circleci.com/docs/ja/2.0/custom-images/ â»Using Private Images https://circleci.com/docs/ja/2.0/private-images/ build ã®èšå®ãš cache CI ã§å®è¡ããã¢ããªã±ãŒã·ã§ã³ã® build ã«é¢ããŠã§ãã checkout ã§ github ããã³ãŒãã checkout ãããã®åŸã®å®çŸ©ã§ã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ã¹ããŒã«ããã£ãã·ã¥ä¿åããã£ãã·ã¥ã®å±éãè¡ã£ãŠããŸãã steps : - checkout # Rails application setup - restore_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} - run : name : bundle install command : bundle install --jobs=4 --path=vendor/bundle - save_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} paths : - vendor/bundle save_cache: key ã« Gemfile.lock ãæå®ããããšã§ãã£ãã·ã¥ããŒãšããŠæ±ããpaths ã«èšå®ãããã¹ããã£ãã·ã¥ããããã«ããŠããŸãã restore_cache: key ãšäžèŽãããã£ãã·ã¥ãããã°ãsave_cache æã«æå®ãããã¹ãå±éãçŽããŠããŸãã run: ãã¡ã㯠rails ã®ã¢ããªã±ãŒã·ã§ã³ã€ã³ã¹ããŒã«ããŠããã ãã§ãã CircleCI1.0 ããããã£ãã·ã¥ç®¡çãæè»ã«è¡ããããšãããããŸãã circleci ã³ãã³ãã«ãã Rspec ã®äžŠåå®è¡ rspec ã«ãããã¹ãã®å®è¡ã«é¢ããŠã§ãã circleci ã³ãã³ã ãå©çšããããšã§ãã¹ãã®äžŠåå®è¡ãå¹ççã«è¡ãããšãåºæ¥ããŸãã ä»å㯠--split-by=timings --timings-type=filename ã®ãªãã·ã§ã³ãæå®ãããã¡ã€ã«åããŒã¹ã§ã®åå²ã§ãã¹ããå®è¡ããŸãã - run : name : run test command : | circleci tests glob 'spec/**/*_spec.*' \ | circleci tests split --split-by=timings --timings-type=filename \ | tee -a /dev/stderr \ | xargs bundle exec rspec \ --profile 100 \ --format RspecJunitFormatter \ --out rspec/rspec.xml \ --format progress environment : RAILS_ENV : test TEST_CLUSTER_COMMAND : elasticsearch-x.x.x/bin/elasticsearch - store_artifacts : path : artifacts/ - store_test_results : path : rspec/ store_artifacts: 以åãããããæ©èœã§ããããã¹ãçµæã®ææç©ãä¿åãããã¹ã«ãªããŸãã store_test_results: ãã¡ãã¯ãã¹ãã®å®è¡çµæãä¿åããŠããããšã§ãã³ã³ããéã§ rspec ã®å®è¡æéã«ã°ãã€ããåºãªãããã察象ã®ãã¡ã€ã«ãæé©ã«æ¯ãåããŠããããããªã®ã§ãããworkflows ãå©çšãããšãµããŒããããªãããã§ãã â»åèïŒ https://circleci.com/docs/ja/2.0/configuration-reference/#store_test_results ãã®ãããªåœ¢ã§ Artifacts ãä¿åãããŠããŸãã ãŸããartifacts ã«ã¯ coverage ãš capybara ã® screenshot ãªã©ãä¿åããŠããŸã - simple_cov if ENV['CI'] SimpleCov.coverage_dir File.join(ENV['CIRCLE_WORKING_DIRECTORY'], 'artifacts', 'coverage') SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[ SimpleCov::Formatter::HTMLFormatter ] SimpleCov.start do add_filter '/vendor/' add_filter '/spec/' add_filter '/config/' add_filter '/db/' end end capybara Capybara.save_and_open_page_path = File.join(ENV['CIRCLE_WORKING_DIRECTORY'], 'artifacts', 'capybara') if ENV['CI'] â»CircleCI2.0 ãã CI ã®ç°å¢å€æ°ãå€ãã£ãŠããŸãã詳现ã¯ä»¥äžã®ãªã³ã¯ãžèšèŒãããŠããŸãã https://circleci.com/docs/ja/2.0/env-vars/#circleci-environment-variable-descriptions Workflows ã®èšå® CircleCI2.0 ãã Workflows ã®å©çšãå¯èœã«ãªããŸããã https://circleci.com/docs/ja/2.0/workflows/ ã³ã³ããæ¯ã«åå²ããžã§ããå®è¡ããããšã§æŽãªã䞊åå®è¡ã®å¹çåãåã³ããžã§ãéã®äŸåé¢ä¿ãŸã§èšå®ã§ããããã§ãã ãžã§ãã¡ãã¬ãŒã§ã¯ã³ãŒãã®éçè§£æã«å°ãå®è¡æéãæãã£ãŠããããšãããå€å°ã®æ¹åãå³ãããšèã åçŽã«äœ¿ã£ãŠã¿ããã£ã ãã¡ãã®æ©èœãå©çšããŠã¿ãŸããã workflows : version : 2 workflows : jobs : - build - code_analyze : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - rspec : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - deploy_qa : requires : - code_analyze - rspec filters : branches : only : develop - deploy_only : requires : - build filters : branches : only : /^sandbox.*|^master$|^staging$/ build: åãžã§ãã§å®è¡åã«è¡ã£ãŠããåŠçãå®çŸ© code_analyze: rubocopãbrakemanãscss-lint ãªã©ã®éçè§£æåŠçãå®çŸ© rspec: ã¢ããªã±ãŒã·ã§ã³ã®ãã¹ããå®çŸ© deploy: ãããã€ã«é¢ããåŠçãå®çŸ© ãžã§ãã¡ãã¬ãŒã§ã¯ããã©ã³ã管çã« Git-flow ãæ¡çšããŠããŸããããããšã¯å¥ã« sandbox ãšãããã¹ãç°å¢ãçšæãéçšããŠããŸãã develop ãã©ã³ãã§ã³ãŒãè§£æããã¹ããã¯ãªã¢ããã³ãŒãã ããmaster ãžåæ ããmaster ã§ã¯ãã¹ããã§ãŒãºãªãã« deploy ããæ§æãåã£ãŠããŸãã æ¥µåãCI ã®ãªãœãŒã¹ãç¯çŽããããã«åãã©ã³ãããšã§å®è¡ããåŠçãåããŠããŸãã åãã©ã³ãã®éçšã¯ä»¥äžã®éãã§ãã feature: ã³ãŒãè§£æããã¹ãå®è¡ sandbox: ãããã€ã®ã¿å®è¡(äžæã¬ãã¥ãŒçšãã©ã³ã) develop: ã³ãŒãè§£æããã¹ãå®è¡ããããã€å®è¡ master: ãããã€ã®ã¿å®è¡ äžèšã®äŸã§ã¯ã code_analyze: sandboxãmasterãstaging ãã©ã³ã以å€ã¯å®è¡ requires ã§äŸåé¢ä¿ãæå®ããbuild ãæ£åžžã«çµäºããªããã°å®è¡ãããªãããã«ãªã£ãŠããŸãã rspec: sandboxãmasterãstaging ãã©ã³ã以å€ã¯å®è¡ requires ã§äŸåé¢ä¿ãæå®ããbuild ãæ£åžžã«çµäºããªããã°å®è¡ãããªãããã«ãªã£ãŠããŸãã deploy_qa: develop ãã©ã³ãã§ã®ã¿å®è¡ requires ã§äŸåé¢ä¿ãæå®ããcode_analyzeãrspec ãæ£åžžã«çµäºããªããã°å®è¡ãããªãããã«ãªã£ãŠããŸãã deploy_only: sandboxãmasterãstaging ãã©ã³ãã®ã¿å©çšãããžã§ã requires ã§äŸåé¢ä¿ãæå®ããbuild ãæ£åžžã«çµäºããªããã°å®è¡ãããªãããã«ãªã£ãŠããŸãã ã©ã®ãã㪠workflow ãåºæ¥ãããã®ãã以äžã«äŸã瀺ããŸãã feature ãã©ã³ãã®äŸ: develop ãã©ã³ãã®äŸ: masterãsandbox ãã©ã³ãã®äŸ: ä»åã®äŸã ãšãã©ã³ãæ¯ã« workflow ãå€ããŠãããããignoreãonly ã®æžãæ¹ã§æå³ããæ¯ãåããããªãããã«èæ
®ã¯å¿
èŠã§ãããæè»ã« workflow ãäœããããšãããããšæããŸãã(ããéãããšèªã¿è§£ãã®ã倧å€ã«ãªãããã§ãã) Workflows ã«é¢ããŠã¯ ãã¡ã ã«è²ã
ãªãã¿ãŒã³ã®çµã¿æ¹ãèšèŒãããŠããã®ã§ããã¡ããèªããšããçè§£ãæ·±ãŸããšæããŸãã ãžã§ãéã§ã®ããŒã¿å
±æ ãžã§ããåããŠãã«ããã=äœåãã¢ããªã±ãŒã·ã§ã³ã®åæåãå¿
èŠãªããããªããïŒ ãšåœç¶çåã«æãç¹ã§ã¯ãããŸãããããã«å¯Ÿãã解決çãçšæãããŠããŸãã build : steps : ===çç¥=== - persist_to_workspace : root : ~/job-medley paths : - ./* deploy_qa : << : * defaults steps : - attach_workspace : at : ~/job-medley persist_to_workspace: æå®ãããã¹ã«ããããŒã¿ãäžæçã«ä¿ç®¡ããŠãããŸã attach_workspace: ä¿ç®¡æžã¿ã®ããŒã¿ãå±éããŠãããŸã ãã®æ©èœã«ããããã«ãããã»ã¹ã§çæãããã®ãåãžã§ãã§å®è¡ããã³ã³ãããžæž¡ãããšãåºæ¥ãŸãã ãã ãããããããã«ãããã»ã¹ã§ãã£ãã·ã¥ãå
¥ããŠããããšããããããèªäœã®å¹æã¯æ®ã©ãããŸããã§ããã ã³ã³ãã€ã«æžã¿ã®ããŒã¿ãåãæž¡ãéã«ã¯å¹æãçºæ®ãããã§ããã( å
¬åŒã§ã ãã®ãããªå©çšãæ³å®ããŠãããã§ã) æ¹åçµæ èå¿ã®é床æ¹åçµæã§ããçµæã¯ä»¥äžã®éãã«ãªããŸããã æ¹åå: CircleCI1.0 rspec ã®å®è¡æé: 26:59 以äžã¯ãCircleCI2.0 ãžç§»è¡ããã ãã®çµæã§ãããã®ã±ãŒã¹ã§ã¯ workflows ãå©çšããŠããŸããã æ¹ååŸ: CircleCI2.0 rspec ã®å®è¡æé: 19:40 CircleCI1.0 ãã CircleCI2.0 ãžç§»è¡ããããšã«ããã çŽ 12 åçš ãã¹ãã®å®è¡æéãççž®ããããšãåºæ¥ãŸããã Workflows ãªã©ç¹ã«å©çšããŠããªãããã€ããã«ããã§ãŒãºã®å®è¡æéãé¢ä¿ããªããããCircleCI2.0 ãå©çšããã ãã§åçŽã«ãã¹ãå®è¡é床ã®åäžãèŠèŸŒããããšãããããšæããŸãã ç¶ã㊠Workflows ãå©çšããçµæã§ãã æ¹ååŸ: CircleCI2.0 with Workflows rspec ã®å®è¡æé: 21:14 çµæã¯ãWorkflows ãå©çšããªãã±ãŒã¹ãšãå©çšããã±ãŒã¹ã§ã¯ãWorkflows ãå©çšããã»ãã rspec ã®å®è¡æéã¯é·ããªã£ãŠããŸããŸããããbuild-code-analyze-rspec ã®å®è¡ã«æãã£ãããŒã¿ã«ã®æéã«å·®ã¯èŠãããŸããã§ããã ããã¯ããcircleci ã³ãã³ãã«ãã Rspec ã®äžŠåå®è¡ãã®ã»ã¯ã·ã§ã³ãžãèšèŒããéããstore_test_results ããµããŒããšãããªãããšã«ãããã³ã³ããéã§ã®åæ£ãæé©åãããŠããªãçºã§ãã ã³ã³ããéã§ rspec ã®å®è¡æéã«ã°ãã€ããåºãªãããã察象ã®ãã¡ã€ã«ãæé©ã«æ¯ãåããŠããããããªã®ã§ãããWorkflows ãå©çšãããšãµããŒããããªãããã§ãã å®è¡æéã«ã°ãã€ããåºãŠããŸããcode_analyze ã®ãžã§ãã忣ããããšã§èŠèŸŒãã§ããæ¹åæé(çŽ 3 å)ãšã°ãã€ãã«ããçºçãããã¹ãå®è¡æéã®ãã¹( (20:01 - 14:57) / 2 = 2:32 )ã倧äœåãã§ãããããããŒã¿ã«ã§ã®å®è¡æéã«å·®ãåºãªãçµæãšãªããŸããã ã°ãã€ããåºããªãæ¹æ³ãããžã§ãã®åãæ¹ã«ã€ããŠã¯ä»åŸã工倫ããŠã¿ãããšæããŸãã ãŸããããã³ããšã³ãã®ãã¹ããããå°ãåãããŠãããããšèããŠããã®ã§ãããã³ããšã³ãã®ãã¹ãããµãŒããµã€ãã®ãã¹ãã Workflows ãäžæã䜿ããªãã忣ããŠãããã°è¯ãã®ããªãšãæã£ãŠããŸãã ãããã« ç§»è¡ã«éããŠã CircleCI2.0 ã®ç§»è¡ã¬ã€ã ãèªã¿ãªããé²ããŠããŸããããåºæ¬çãªèšæ³ã®å€æŽãtimezoneãenvironment ã®å®çŸ©æ¹æ³ã®å€æŽãvariable ã®å€æŽãªã©ãå€ã
æããããã¥ã¡ã³ããçµæ§èªã¿èŸŒãŸãªããšã©ãã«äœãå®çŸ©ã§ããã®ãææ¡ã§ããŸããã§ããã ãŸããWorkflows ã®çµã¿ç«ãŠãªã© å
¬åŒã«è¯ããµã³ãã« ã¯æ²¢å±±ããã®ã§ãããäŸåé¢ä¿ã®å®çŸ©ãè²ã
詊ãã®ã«èŠåŽããæ°ãããŸãã â»çŽ çŽã«å°èŠæš¡ãªã¢ããªãçšæããŠã ããŒã«ã«ã§ circleci ãå®è¡ ããŠã¿ãæ¹ãå¹çè¯ãé²ãããããããããŸããã â»ãã ã å
¬åŒã®ããã¥ã¡ã³ã ã CommunityForum ããã£ããèªãã°äœãããšãªãæ
å ±ã¯åã£ãã®ã§éåžžã«å©ãããŸããã CircleCI2.0 ã§ã©ã®ãããªäºãåºæ¥ãã®ããããã¯ã©ã®ããã«è¡ããã®ãã ãã®èšäºããã®æŠèгãã€ããå©ãã«ãªãã°è¯ããªãšæã£ãŠããŸãã åèãªã³ã¯ CircleCI2.0 ãžç§»è¡ããã«ãããã以äžã®èšäºãåèã«ãããŠããã ããŸãããããããšãããããŸãã https://qiita.com/inuscript/items/09d15ee52b1657872f80 https://medium.com/@timakin/circleci2-0%E3%81%AEworkflows%E3%82%92%E8%A9%A6%E3%81%99-1329042122fd ãç¥ãã ã¡ãã¬ãŒã§ã¯ãå»çä»è·ã®æ±äººãµã€ãã ãžã§ãã¡ãã¬ãŒ ããå»åž«ãã¡ãã€ãããªã³ã©ã€ã³å»çäºå
žã MEDLEY ããå£ã³ãã§æ¢ããä»è·æœèšã®æ€çŽ¢ãµã€ãã ä»è·ã®ã»ãã ãããªã³ã©ã€ã³èšºçã¢ããªã CLINICS ããªã©ã®ãããã¯ããæäŸããŠããŸãããããã®ãµãŒãã¹ã®æ¡å€§ãåããŠããã®æé·ãæ¯ãããšã³ãžãã¢ã»ãã¶ã€ããŒãåéããŠããŸãã https://www.medley.jp/recruit/creative.html ã¡ãã¬ãŒã§äžç·ã«å»çäœéšãå€ãããããã¯ãäœãã«é¢ããããæ¹ã®ãé£çµ¡ãåŸ
ã¡ããŠãããŸãã
ããã«ã¡ã¯ãéçºæ¬éšã® çš²æ¬ ã§ããå»çä»è·ã®æ±äººãµã€ãã ãžã§ãã¡ãã¬ãŒ ãã®éçºãæ
åœããŠãããšã³ãžãã¢ã§ãã æè¿ãžã§ãã¡ãã¬ãŒã§ã¯ CircleCI2.0 ãžã®ç§»è¡ãè¡ããŸãããç§»è¡ã®æ¹æ³ã¯ãã¡ããããã®éã«èª¿ã¹ãããšãCircleCI ã®æ°æ©èœãå©çšããŠã©ãã ã£ãããªã©ãæžããŠãããããšæããŸãã èª²é¡æ åŒç€Ÿã§ã¯ãå
šãããã¯ã( CLINICS ã MEDLEY ã ä»è·ã®ã»ãã ã ãžã§ãã¡ãã¬ãŒ )ã§ CircleCI ãå©çšããŠããŸãã ãžã§ãã¡ãã¬ãŒã§ã¯ CI ã«ãããã¹ãå®è¡ã« 37 åååŸæãã£ãŠããŸãã(ã³ã³ããã 2 ã€å©çšããå®è¡æéã§ã)ã ããã«ãéçºã¡ã³ããŒãå¢ããŠæ¥ãããšããããCI ã®ãªãœãŒã¹ãè¶³ããªããªãéçºå¹çãèœã¡ãããªãç¶æ³ã§ããã ãŸããããã話ã§ãããã ã³ã³ãããå¢ãããšããã®ã解決çã®äžã€ãšããŠã¯ããã®ã§ãããéåºŠã®æ¹åã«æåŸ
ãåºæ¥ããšè©å€ãè¯ãã£ãã®ã§ CirclecCI2.0 ãžç§»è¡ããŸããã CircleCI2.0 ãžã®ç§»è¡ã¡ãªãã åºæ¬çã«ã¯éåºŠã®æ¹åã«æåŸ
ãåºæ¥ãããšããã®ã倧ããªã¡ãªããã§ã¯ãããŸãããå
¬åŒã§ã¯ä»¥äžã®ããã«èšèŒãããŠããŸãã æç²ã§ãã倧ããªç¹åŸŽãšããŠã¯ä»¥äžã®ç¹ã§ããããã First-class Docker Support: Docker ã®ãã€ãã£ããµããŒããš Docker ã¬ã€ã€ãŒãã£ãã·ã¥ã®å°å
¥ Workflows: ãã«ãããã¹ãããããã€ããžã§ããšããŠæè»ã«ç®¡çã§ããããã«ãªã£ã Advanced Caching: ãã£ãã·ã¥ã®ä¿åãšãªã¹ãã¢ãã€ã¡ãŒãžããœãŒã¹ã³ãŒããäŸåé¢ä¿ã«å¯ŸããŠè¡ãããšãã§ããããã«ãªã£ãã ãã®èŸºãã®æ©èœã掻çšã CI ã®é床æ¹åãžç¹ããŠã¿ãããšæããŸãã ãžã§ãã¡ãã¬ãŒã®ã¢ããªã±ãŒã·ã§ã³æ§æ ç§»è¡ã®åæãšããŠããžã§ãã¡ãã¬ãŒã®ã¢ããªã±ãŒã·ã§ã³æ§æã«ã€ããŠèšèŒããŸãã ããã³ããšã³ãã®ãã«ãã yarn+webpack ã§è¡ããçæããã¢ã»ããã public/assets ãžåãåºããmanifest ãã¡ã€ã«ã®ãã¹ã rails ã® helper çµç±ã§ååŸãèªã¿èŸŒãã§ããŸããïŒRails4.2.xïŒ ãã®ãããªæ§æã®ã¢ããªã±ãŒã·ã§ã³ã CirlceCI2.0 ã§ãã«ãããã¹ãããããã€åºæ¥ãããã«ããŠãããŸãã config.yml ã®å
šäœå ä»åãäœæãã config.yml ã¯ãã®ãããªåœ¢ã«ãªããŸããã ãã£ãã㯠build: bundle install, yarn install code_analyze: rubocop, brakeman, scss-lint rspec deploy: capistrano ãè¡ã£ãŠããããã©ã³ãã«ãã£ãŠã©ã®ãžã§ããå®è¡ããã®ãã workflows ãå©çšããŠäœ¿ãåããŠããŸãã 詳ãã解説ã¯ä»¥éãèšèŒããŠãããŸãã defaults : & defaults working_directory : ~/job-medley docker : - image : circleci/ruby:2.4.2-node-browsers environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : circleci/mysql:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : redis:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo version : 2 jobs : build : << : * defaults steps : - checkout - restore_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} - run : name : bundle install command : bundle install --jobs=4 --path=vendor/bundle - save_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} paths : - vendor/bundle - restore_cache : key : job-medley-yarn-{{ checksum "yarn.lock" }} - run : name : Yarn install command : | echo "Node $(node -v)" echo "Yarn v$(yarn --version)" yarn config set cache-folder ./yarn_cache echo "Yarn v$(yarn cache dir)" yarn install - save_cache : key : job-medley-yarn-{{ checksum "yarn.lock" }} paths : - node_modules - yarn_cache - persist_to_workspace : root : ~/job-medley paths : - ./* code_analyze : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run rubocop command : bundle exec rubocop - run : name : run brakeman command : bundle exec brakeman -qz - run : name : run scss-lint command : bundle exec scss-lint rspec : parallelism : 2 << : * defaults steps : - attach_workspace : at : ~/job-medley - restore_cache : key : job-medley-elasticsearch # rspec ã§ es ã®ã³ãã³ããäžéšå®è¡ããŠãããããprimary container åŽãž install - run : name : Elasticsearch install command : | wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-x.x.x.tar.gz && \ tar -xvf elasticsearch-x.x.x.tar.gz && \ if [ -z "`elasticsearch-x.x.x/bin/plugin -l | grep analysis-kuromoji`" ]; then \ elasticsearch-x.x.x/bin/plugin -install elasticsearch/elasticsearch-analysis-kuromoji/x.x.x; fi - save_cache : key : job-medley-elasticsearch paths : - ./elasticsearch-x.x.x - run : name : database create command : bundle exec rake db:create environment : RAILS_ENV : test - run : name : run test command : | circleci tests glob 'spec/**/*_spec.*' \ | circleci tests split --split-by=timings --timings-type=filename \ | tee -a /dev/stderr \ | xargs bundle exec rspec \ --profile 100 \ --format RspecJunitFormatter \ --out rspec/rspec.xml \ --format progress environment : RAILS_ENV : test TEST_CLUSTER_COMMAND : elasticsearch-x.x.x/bin/elasticsearch - store_artifacts : path : artifacts/ - store_test_results : path : rspec/ deploy_qa : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run deploy command : | sh scripts/init_deploy.sh BRANCH="${CIRCLE_BRANCH}" bundle exec cap develop deploy deploy:restart deploy_only : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run deploy command : | BRANCH="${CIRCLE_BRANCH}" bundle exec cap production deploy deploy:restart workflows : version : 2 workflows : jobs : - build - code_analyze : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - rspec : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - deploy_qa : requires : - code_analyze - rspec filters : branches : only : develop - deploy_only : requires : - build filters : branches : only : /^sandbox.*|^master$|^staging$/ DockerImage ã®éžå® å
ã
ãDocker ã䜿ããã« CI ãåããŠããŸããããCircleCI2.0 ãžç§»è¡ããã«èŸºã Docker ãžã®å©çšã«åãæ¿ããŸããã â» Specifying Container Images DockerImage 㯠DockerHub ãžç»é²ãããŠãã CircleCI å
¬åŒã®ã ã® ãå©çšããŸããã ã¢ããªã±ãŒã·ã§ã³ã®äžéšã§ React ã䜿çšããŠãããããã³ãã®ãã«ã㯠yarn+webpack ãå©çšããŠããŸãããã®çºã以äžã® image ãéžæããŸããã circleci/ruby:2.4.2-node-browsers node ã®ã€ã³ã¹ããŒã«ãšãE2E ã®ãã¹ãã«å¿
èŠãªãœãããŠã§ã¢ãã€ã³ã¹ããŒã«ãããŠããŸãã â»è©³çŽ°ã¯ ãã¡ãã®èšäº ãåèã«ãããŠããã ããŸããã ãã®ä»ãçŸåšå©çšããŠãã MySQL ã®ããŒãžã§ã³ãElasticCacheRedis ã®ããŒãžã§ã³ãšåããã image ãéžæããŸããã æ³šæç¹ãšããŠã¯ãè€æ°ã® DockerImage ãå©çšããå Žåãäžã€ç®ã«æå®ãã image ã primary ãšããŠæ±ãããŸãã 以äžã®äŸã§ããšãRuby ã® image ãæåã«æå®ããMySQLãRedis ã® image ãæå®ããŠããŸãããMySQL ã³ãã³ãèªäœã¯ Ruby ã® image ã«å«ãŸããŠããªããããRuby ã³ãã³ããå®è¡ã§ããŠã MySQL ã³ãã³ããå®è¡ããããšã¯åºæ¥ãŸããã â»è©³çŽ°ã¯ ãã¡ã ã«èšèŒãããŠããŸãã docker : - image : circleci/ruby:2.4.2-node-browsers environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : circleci/mysql:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : redis:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo ãŸããçšæãããŠãã image ãã«ã¹ã¿ãã€ãºããå¿
èŠãããå Žåã¯ãDocker ã§ã«ã¹ã¿ã image ãäœããpublic ã§è¯ããã° Docker Hub ãžç»é²ãprivate ãè¯ããã° Amazon EC2 Container Registry ãžç»é²ããŠããããšã§åŒã³åºãããšãå¯èœã«ãªã£ãŠããŸãã â»Using Custom-Built Docker Images https://circleci.com/docs/ja/2.0/custom-images/ â»Using Private Images https://circleci.com/docs/ja/2.0/private-images/ build ã®èšå®ãš cache CI ã§å®è¡ããã¢ããªã±ãŒã·ã§ã³ã® build ã«é¢ããŠã§ãã checkout ã§ github ããã³ãŒãã checkout ãããã®åŸã®å®çŸ©ã§ã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ã¹ããŒã«ããã£ãã·ã¥ä¿åããã£ãã·ã¥ã®å±éãè¡ã£ãŠããŸãã steps : - checkout # Rails application setup - restore_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} - run : name : bundle install command : bundle install --jobs=4 --path=vendor/bundle - save_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} paths : - vendor/bundle save_cache: key ã« Gemfile.lock ãæå®ããããšã§ãã£ãã·ã¥ããŒãšããŠæ±ããpaths ã«èšå®ãããã¹ããã£ãã·ã¥ããããã«ããŠããŸãã restore_cache: key ãšäžèŽãããã£ãã·ã¥ãããã°ãsave_cache æã«æå®ãããã¹ãå±éãçŽããŠããŸãã run: ãã¡ã㯠rails ã®ã¢ããªã±ãŒã·ã§ã³ã€ã³ã¹ããŒã«ããŠããã ãã§ãã CircleCI1.0 ããããã£ãã·ã¥ç®¡çãæè»ã«è¡ããããšãããããŸãã circleci ã³ãã³ãã«ãã Rspec ã®äžŠåå®è¡ rspec ã«ãããã¹ãã®å®è¡ã«é¢ããŠã§ãã circleci ã³ãã³ã ãå©çšããããšã§ãã¹ãã®äžŠåå®è¡ãå¹ççã«è¡ãããšãåºæ¥ããŸãã ä»å㯠--split-by=timings --timings-type=filename ã®ãªãã·ã§ã³ãæå®ãããã¡ã€ã«åããŒã¹ã§ã®åå²ã§ãã¹ããå®è¡ããŸãã - run : name : run test command : | circleci tests glob 'spec/**/*_spec.*' \ | circleci tests split --split-by=timings --timings-type=filename \ | tee -a /dev/stderr \ | xargs bundle exec rspec \ --profile 100 \ --format RspecJunitFormatter \ --out rspec/rspec.xml \ --format progress environment : RAILS_ENV : test TEST_CLUSTER_COMMAND : elasticsearch-x.x.x/bin/elasticsearch - store_artifacts : path : artifacts/ - store_test_results : path : rspec/ store_artifacts: 以åãããããæ©èœã§ããããã¹ãçµæã®ææç©ãä¿åãããã¹ã«ãªããŸãã store_test_results: ãã¡ãã¯ãã¹ãã®å®è¡çµæãä¿åããŠããããšã§ãã³ã³ããéã§ rspec ã®å®è¡æéã«ã°ãã€ããåºãªãããã察象ã®ãã¡ã€ã«ãæé©ã«æ¯ãåããŠããããããªã®ã§ãããworkflows ãå©çšãããšãµããŒããããªãããã§ãã â»åèïŒ https://circleci.com/docs/ja/2.0/configuration-reference/#store_test_results ãã®ãããªåœ¢ã§ Artifacts ãä¿åãããŠããŸãã ãŸããartifacts ã«ã¯ coverage ãš capybara ã® screenshot ãªã©ãä¿åããŠããŸã - simple_cov if ENV['CI'] SimpleCov.coverage_dir File.join(ENV['CIRCLE_WORKING_DIRECTORY'], 'artifacts', 'coverage') SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[ SimpleCov::Formatter::HTMLFormatter ] SimpleCov.start do add_filter '/vendor/' add_filter '/spec/' add_filter '/config/' add_filter '/db/' end end capybara Capybara.save_and_open_page_path = File.join(ENV['CIRCLE_WORKING_DIRECTORY'], 'artifacts', 'capybara') if ENV['CI'] â»CircleCI2.0 ãã CI ã®ç°å¢å€æ°ãå€ãã£ãŠããŸãã詳现ã¯ä»¥äžã®ãªã³ã¯ãžèšèŒãããŠããŸãã Introduction to environment variables - CircleCI Introduction to environment variables in CircleCI circleci.com Workflows ã®èšå® CircleCI2.0 ãã Workflows ã®å©çšãå¯èœã«ãªããŸããã Workflow orchestration - CircleCI Learn about using CircleCI workflows to orchestrate jobs circleci.com ã³ã³ããæ¯ã«åå²ããžã§ããå®è¡ããããšã§æŽãªã䞊åå®è¡ã®å¹çåãåã³ããžã§ãéã®äŸåé¢ä¿ãŸã§èšå®ã§ããããã§ãã ãžã§ãã¡ãã¬ãŒã§ã¯ã³ãŒãã®éçè§£æã«å°ãå®è¡æéãæãã£ãŠããããšãããå€å°ã®æ¹åãå³ãããšèã åçŽã«äœ¿ã£ãŠã¿ããã£ã ãã¡ãã®æ©èœãå©çšããŠã¿ãŸããã workflows : version : 2 workflows : jobs : - build - code_analyze : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - rspec : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - deploy_qa : requires : - code_analyze - rspec filters : branches : only : develop - deploy_only : requires : - build filters : branches : only : /^sandbox.*|^master$|^staging$/ build: åãžã§ãã§å®è¡åã«è¡ã£ãŠããåŠçãå®çŸ© code_analyze: rubocopãbrakemanãscss-lint ãªã©ã®éçè§£æåŠçãå®çŸ© rspec: ã¢ããªã±ãŒã·ã§ã³ã®ãã¹ããå®çŸ© deploy: ãããã€ã«é¢ããåŠçãå®çŸ© ãžã§ãã¡ãã¬ãŒã§ã¯ããã©ã³ã管çã« Git-flow ãæ¡çšããŠããŸããããããšã¯å¥ã« sandbox ãšãããã¹ãç°å¢ãçšæãéçšããŠããŸãã develop ãã©ã³ãã§ã³ãŒãè§£æããã¹ããã¯ãªã¢ããã³ãŒãã ããmaster ãžåæ ããmaster ã§ã¯ãã¹ããã§ãŒãºãªãã« deploy ããæ§æãåã£ãŠããŸãã æ¥µåãCI ã®ãªãœãŒã¹ãç¯çŽããããã«åãã©ã³ãããšã§å®è¡ããåŠçãåããŠããŸãã åãã©ã³ãã®éçšã¯ä»¥äžã®éãã§ãã feature: ã³ãŒãè§£æããã¹ãå®è¡ sandbox: ãããã€ã®ã¿å®è¡(äžæã¬ãã¥ãŒçšãã©ã³ã) develop: ã³ãŒãè§£æããã¹ãå®è¡ããããã€å®è¡ master: ãããã€ã®ã¿å®è¡ äžèšã®äŸã§ã¯ã code_analyze: sandboxãmasterãstaging ãã©ã³ã以å€ã¯å®è¡ requires ã§äŸåé¢ä¿ãæå®ããbuild ãæ£åžžã«çµäºããªããã°å®è¡ãããªãããã«ãªã£ãŠããŸãã rspec: sandboxãmasterãstaging ãã©ã³ã以å€ã¯å®è¡ requires ã§äŸåé¢ä¿ãæå®ããbuild ãæ£åžžã«çµäºããªããã°å®è¡ãããªãããã«ãªã£ãŠããŸãã deploy_qa: develop ãã©ã³ãã§ã®ã¿å®è¡ requires ã§äŸåé¢ä¿ãæå®ããcode_analyzeãrspec ãæ£åžžã«çµäºããªããã°å®è¡ãããªãããã«ãªã£ãŠããŸãã deploy_only: sandboxãmasterãstaging ãã©ã³ãã®ã¿å©çšãããžã§ã requires ã§äŸåé¢ä¿ãæå®ããbuild ãæ£åžžã«çµäºããªããã°å®è¡ãããªãããã«ãªã£ãŠããŸãã ã©ã®ãã㪠workflow ãåºæ¥ãããã®ãã以äžã«äŸã瀺ããŸãã feature ãã©ã³ãã®äŸ: develop ãã©ã³ãã®äŸ: masterãsandbox ãã©ã³ãã®äŸ: ä»åã®äŸã ãšãã©ã³ãæ¯ã« workflow ãå€ããŠãããããignoreãonly ã®æžãæ¹ã§æå³ããæ¯ãåããããªãããã«èæ
®ã¯å¿
èŠã§ãããæè»ã« workflow ãäœããããšãããããšæããŸãã(ããéãããšèªã¿è§£ãã®ã倧å€ã«ãªãããã§ãã) Workflows ã«é¢ããŠã¯ ãã¡ã ã«è²ã
ãªãã¿ãŒã³ã®çµã¿æ¹ãèšèŒãããŠããã®ã§ããã¡ããèªããšããçè§£ãæ·±ãŸããšæããŸãã ãžã§ãéã§ã®ããŒã¿å
±æ ãžã§ããåããŠãã«ããã=äœåãã¢ããªã±ãŒã·ã§ã³ã®åæåãå¿
èŠãªããããªããïŒ ãšåœç¶çåã«æãç¹ã§ã¯ãããŸãããããã«å¯Ÿãã解決çãçšæãããŠããŸãã build : steps : ===çç¥=== - persist_to_workspace : root : ~/job-medley paths : - ./* deploy_qa : << : * defaults steps : - attach_workspace : at : ~/job-medley persist_to_workspace: æå®ãããã¹ã«ããããŒã¿ãäžæçã«ä¿ç®¡ããŠãããŸã attach_workspace: ä¿ç®¡æžã¿ã®ããŒã¿ãå±éããŠãããŸã ãã®æ©èœã«ããããã«ãããã»ã¹ã§çæãããã®ãåãžã§ãã§å®è¡ããã³ã³ãããžæž¡ãããšãåºæ¥ãŸãã ãã ãããããããã«ãããã»ã¹ã§ãã£ãã·ã¥ãå
¥ããŠããããšããããããèªäœã®å¹æã¯æ®ã©ãããŸããã§ããã ã³ã³ãã€ã«æžã¿ã®ããŒã¿ãåãæž¡ãéã«ã¯å¹æãçºæ®ãããã§ããã( å
¬åŒã§ã ãã®ãããªå©çšãæ³å®ããŠãããã§ã) æ¹åçµæ èå¿ã®é床æ¹åçµæã§ããçµæã¯ä»¥äžã®éãã«ãªããŸããã æ¹åå: CircleCI1.0 rspec ã®å®è¡æé: 26:59 以äžã¯ãCircleCI2.0 ãžç§»è¡ããã ãã®çµæã§ãããã®ã±ãŒã¹ã§ã¯ workflows ãå©çšããŠããŸããã æ¹ååŸ: CircleCI2.0 rspec ã®å®è¡æé: 19:40 CircleCI1.0 ãã CircleCI2.0 ãžç§»è¡ããããšã«ããã çŽ 12 åçš ãã¹ãã®å®è¡æéãççž®ããããšãåºæ¥ãŸããã Workflows ãªã©ç¹ã«å©çšããŠããªãããã€ããã«ããã§ãŒãºã®å®è¡æéãé¢ä¿ããªããããCircleCI2.0 ãå©çšããã ãã§åçŽã«ãã¹ãå®è¡é床ã®åäžãèŠèŸŒããããšãããããšæããŸãã ç¶ã㊠Workflows ãå©çšããçµæã§ãã æ¹ååŸ: CircleCI2.0 with Workflows rspec ã®å®è¡æé: 21:14 çµæã¯ãWorkflows ãå©çšããªãã±ãŒã¹ãšãå©çšããã±ãŒã¹ã§ã¯ãWorkflows ãå©çšããã»ãã rspec ã®å®è¡æéã¯é·ããªã£ãŠããŸããŸããããbuild-code-analyze-rspec ã®å®è¡ã«æãã£ãããŒã¿ã«ã®æéã«å·®ã¯èŠãããŸããã§ããã ããã¯ããcircleci ã³ãã³ãã«ãã Rspec ã®äžŠåå®è¡ãã®ã»ã¯ã·ã§ã³ãžãèšèŒããéããstore_test_results ããµããŒããšãããªãããšã«ãããã³ã³ããéã§ã®åæ£ãæé©åãããŠããªãçºã§ãã ã³ã³ããéã§ rspec ã®å®è¡æéã«ã°ãã€ããåºãªãããã察象ã®ãã¡ã€ã«ãæé©ã«æ¯ãåããŠããããããªã®ã§ãããWorkflows ãå©çšãããšãµããŒããããªãããã§ãã å®è¡æéã«ã°ãã€ããåºãŠããŸããcode_analyze ã®ãžã§ãã忣ããããšã§èŠèŸŒãã§ããæ¹åæé(çŽ 3 å)ãšã°ãã€ãã«ããçºçãããã¹ãå®è¡æéã®ãã¹( (20:01 - 14:57) / 2 = 2:32 )ã倧äœåãã§ãããããããŒã¿ã«ã§ã®å®è¡æéã«å·®ãåºãªãçµæãšãªããŸããã ã°ãã€ããåºããªãæ¹æ³ãããžã§ãã®åãæ¹ã«ã€ããŠã¯ä»åŸã工倫ããŠã¿ãããšæããŸãã ãŸããããã³ããšã³ãã®ãã¹ããããå°ãåãããŠãããããšèããŠããã®ã§ãããã³ããšã³ãã®ãã¹ãããµãŒããµã€ãã®ãã¹ãã Workflows ãäžæã䜿ããªãã忣ããŠãããã°è¯ãã®ããªãšãæã£ãŠããŸãã ãããã« ç§»è¡ã«éããŠã CircleCI2.0 ã®ç§»è¡ã¬ã€ã ãèªã¿ãªããé²ããŠããŸããããåºæ¬çãªèšæ³ã®å€æŽãtimezoneãenvironment ã®å®çŸ©æ¹æ³ã®å€æŽãvariable ã®å€æŽãªã©ãå€ã
æããããã¥ã¡ã³ããçµæ§èªã¿èŸŒãŸãªããšã©ãã«äœãå®çŸ©ã§ããã®ãææ¡ã§ããŸããã§ããã ãŸããWorkflows ã®çµã¿ç«ãŠãªã© å
¬åŒã«è¯ããµã³ãã« ã¯æ²¢å±±ããã®ã§ãããäŸåé¢ä¿ã®å®çŸ©ãè²ã
詊ãã®ã«èŠåŽããæ°ãããŸãã â»çŽ çŽã«å°èŠæš¡ãªã¢ããªãçšæããŠã ããŒã«ã«ã§ circleci ãå®è¡ ããŠã¿ãæ¹ãå¹çè¯ãé²ãããããããããŸããã â»ãã ã å
¬åŒã®ããã¥ã¡ã³ã ã CommunityForum ããã£ããèªãã°äœãããšãªãæ
å ±ã¯åã£ãã®ã§éåžžã«å©ãããŸããã CircleCI2.0 ã§ã©ã®ãããªäºãåºæ¥ãã®ããããã¯ã©ã®ããã«è¡ããã®ãã ãã®èšäºããã®æŠèгãã€ããå©ãã«ãªãã°è¯ããªãšæã£ãŠããŸãã åèãªã³ã¯ CircleCI2.0 ãžç§»è¡ããã«ãããã以äžã®èšäºãåèã«ãããŠããã ããŸãããããããšãããããŸãã circleci/ruby:2.4.1-node-browsersã£ãŠäœå
¥ã£ãŠãã®ãç¥ãããã£ã - Qiita 2018-11-19远èšhttps://github.com/CircleCI-Public/circleci-dockerfiles/blob/master/ruby/images/ãã€ã®éã«âŠ qiita.com CircleCI2.0ã®Workflowsã詊ã âCircleCI2.0ã®Workflowsã詊ãâ is published by timakin. medium.com ãç¥ãã ã¡ãã¬ãŒã§ã¯ãå»çä»è·ã®æ±äººãµã€ãã ãžã§ãã¡ãã¬ãŒ ããå»åž«ãã¡ãã€ãããªã³ã©ã€ã³å»çäºå
žã MEDLEY ããå£ã³ãã§æ¢ããä»è·æœèšã®æ€çŽ¢ãµã€ãã ä»è·ã®ã»ãã ãããªã³ã©ã€ã³èšºçã¢ããªã CLINICS ããªã©ã®ãããã¯ããæäŸããŠããŸãããããã®ãµãŒãã¹ã®æ¡å€§ãåããŠããã®æé·ãæ¯ãããšã³ãžãã¢ã»ãã¶ã€ããŒãåéããŠããŸãã ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp ã¡ãã¬ãŒã§äžç·ã«å»çäœéšãå€ãããããã¯ãäœãã«é¢ããããæ¹ã®ãé£çµ¡ãåŸ
ã¡ããŠãããŸãã
ããã«ã¡ã¯ãéçºæ¬éšã® çš²æ¬ ã§ããå»çä»è·ã®æ±äººãµã€ãã ãžã§ãã¡ãã¬ãŒ ãã®éçºãæ
åœããŠãããšã³ãžãã¢ã§ãã æè¿ãžã§ãã¡ãã¬ãŒã§ã¯ CircleCI2.0 ãžã®ç§»è¡ãè¡ããŸãããç§»è¡ã®æ¹æ³ã¯ãã¡ããããã®éã«èª¿ã¹ãããšãCircleCI ã®æ°æ©èœãå©çšããŠã©ãã ã£ãããªã©ãæžããŠãããããšæããŸãã èª²é¡æ åŒç€Ÿã§ã¯ãå
šãããã¯ã( CLINICS ã MEDLEY ã ä»è·ã®ã»ãã ã ãžã§ãã¡ãã¬ãŒ )ã§ CircleCI ãå©çšããŠããŸãã ãžã§ãã¡ãã¬ãŒã§ã¯ CI ã«ãããã¹ãå®è¡ã« 37 åååŸæãã£ãŠããŸãã(ã³ã³ããã 2 ã€å©çšããå®è¡æéã§ã)ã ããã«ãéçºã¡ã³ããŒãå¢ããŠæ¥ãããšããããCI ã®ãªãœãŒã¹ãè¶³ããªããªãéçºå¹çãèœã¡ãããªãç¶æ³ã§ããã ãŸããããã話ã§ãããã ã³ã³ãããå¢ãããšããã®ã解決çã®äžã€ãšããŠã¯ããã®ã§ãããéåºŠã®æ¹åã«æåŸ
ãåºæ¥ããšè©å€ãè¯ãã£ãã®ã§ CirclecCI2.0 ãžç§»è¡ããŸããã CircleCI2.0 ãžã®ç§»è¡ã¡ãªãã åºæ¬çã«ã¯éåºŠã®æ¹åã«æåŸ
ãåºæ¥ãããšããã®ã倧ããªã¡ãªããã§ã¯ãããŸãããå
¬åŒã§ã¯ä»¥äžã®ããã«èšèŒãããŠããŸãã æç²ã§ãã倧ããªç¹åŸŽãšããŠã¯ä»¥äžã®ç¹ã§ããããã First-class Docker Support: Docker ã®ãã€ãã£ããµããŒããš Docker ã¬ã€ã€ãŒãã£ãã·ã¥ã®å°å
¥ Workflows: ãã«ãããã¹ãããããã€ããžã§ããšããŠæè»ã«ç®¡çã§ããããã«ãªã£ã Advanced Caching: ãã£ãã·ã¥ã®ä¿åãšãªã¹ãã¢ãã€ã¡ãŒãžããœãŒã¹ã³ãŒããäŸåé¢ä¿ã«å¯ŸããŠè¡ãããšãã§ããããã«ãªã£ãã ãã®èŸºãã®æ©èœã掻çšã CI ã®é床æ¹åãžç¹ããŠã¿ãããšæããŸãã ãžã§ãã¡ãã¬ãŒã®ã¢ããªã±ãŒã·ã§ã³æ§æ ç§»è¡ã®åæãšããŠããžã§ãã¡ãã¬ãŒã®ã¢ããªã±ãŒã·ã§ã³æ§æã«ã€ããŠèšèŒããŸãã ããã³ããšã³ãã®ãã«ãã yarn+webpack ã§è¡ããçæããã¢ã»ããã public/assets ãžåãåºããmanifest ãã¡ã€ã«ã®ãã¹ã rails ã® helper çµç±ã§ååŸãèªã¿èŸŒãã§ããŸããïŒRails4.2.xïŒ ãã®ãããªæ§æã®ã¢ããªã±ãŒã·ã§ã³ã CirlceCI2.0 ã§ãã«ãããã¹ãããããã€åºæ¥ãããã«ããŠãããŸãã config.yml ã®å
šäœå ä»åãäœæãã config.yml ã¯ãã®ãããªåœ¢ã«ãªããŸããã ãã£ãã㯠build: bundle install, yarn install code_analyze: rubocop, brakeman, scss-lint rspec deploy: capistrano ãè¡ã£ãŠããããã©ã³ãã«ãã£ãŠã©ã®ãžã§ããå®è¡ããã®ãã workflows ãå©çšããŠäœ¿ãåããŠããŸãã 詳ãã解説ã¯ä»¥éãèšèŒããŠãããŸãã defaults : & defaults working_directory : ~/job-medley docker : - image : circleci/ruby:2.4.2-node-browsers environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : circleci/mysql:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : redis:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo version : 2 jobs : build : << : * defaults steps : - checkout - restore_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} - run : name : bundle install command : bundle install --jobs=4 --path=vendor/bundle - save_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} paths : - vendor/bundle - restore_cache : key : job-medley-yarn-{{ checksum "yarn.lock" }} - run : name : Yarn install command : | echo "Node $(node -v)" echo "Yarn v$(yarn --version)" yarn config set cache-folder ./yarn_cache echo "Yarn v$(yarn cache dir)" yarn install - save_cache : key : job-medley-yarn-{{ checksum "yarn.lock" }} paths : - node_modules - yarn_cache - persist_to_workspace : root : ~/job-medley paths : - ./* code_analyze : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run rubocop command : bundle exec rubocop - run : name : run brakeman command : bundle exec brakeman -qz - run : name : run scss-lint command : bundle exec scss-lint rspec : parallelism : 2 << : * defaults steps : - attach_workspace : at : ~/job-medley - restore_cache : key : job-medley-elasticsearch # rspec ã§ es ã®ã³ãã³ããäžéšå®è¡ããŠãããããprimary container åŽãž install - run : name : Elasticsearch install command : | wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-x.x.x.tar.gz && \ tar -xvf elasticsearch-x.x.x.tar.gz && \ if [ -z "`elasticsearch-x.x.x/bin/plugin -l | grep analysis-kuromoji`" ]; then \ elasticsearch-x.x.x/bin/plugin -install elasticsearch/elasticsearch-analysis-kuromoji/x.x.x; fi - save_cache : key : job-medley-elasticsearch paths : - ./elasticsearch-x.x.x - run : name : database create command : bundle exec rake db:create environment : RAILS_ENV : test - run : name : run test command : | circleci tests glob 'spec/**/*_spec.*' \ | circleci tests split --split-by=timings --timings-type=filename \ | tee -a /dev/stderr \ | xargs bundle exec rspec \ --profile 100 \ --format RspecJunitFormatter \ --out rspec/rspec.xml \ --format progress environment : RAILS_ENV : test TEST_CLUSTER_COMMAND : elasticsearch-x.x.x/bin/elasticsearch - store_artifacts : path : artifacts/ - store_test_results : path : rspec/ deploy_qa : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run deploy command : | sh scripts/init_deploy.sh BRANCH="${CIRCLE_BRANCH}" bundle exec cap develop deploy deploy:restart deploy_only : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run deploy command : | BRANCH="${CIRCLE_BRANCH}" bundle exec cap production deploy deploy:restart workflows : version : 2 workflows : jobs : - build - code_analyze : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - rspec : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - deploy_qa : requires : - code_analyze - rspec filters : branches : only : develop - deploy_only : requires : - build filters : branches : only : /^sandbox.*|^master$|^staging$/ DockerImage ã®éžå® å
ã
ãDocker ã䜿ããã« CI ãåããŠããŸããããCircleCI2.0 ãžç§»è¡ããã«èŸºã Docker ãžã®å©çšã«åãæ¿ããŸããã â» Specifying Container Images DockerImage 㯠DockerHub ãžç»é²ãããŠãã CircleCI å
¬åŒã®ã ã® ãå©çšããŸããã ã¢ããªã±ãŒã·ã§ã³ã®äžéšã§ React ã䜿çšããŠãããããã³ãã®ãã«ã㯠yarn+webpack ãå©çšããŠããŸãããã®çºã以äžã® image ãéžæããŸããã circleci/ruby:2.4.2-node-browsers node ã®ã€ã³ã¹ããŒã«ãšãE2E ã®ãã¹ãã«å¿
èŠãªãœãããŠã§ã¢ãã€ã³ã¹ããŒã«ãããŠããŸãã â»è©³çŽ°ã¯ ãã¡ãã®èšäº ãåèã«ãããŠããã ããŸããã ãã®ä»ãçŸåšå©çšããŠãã MySQL ã®ããŒãžã§ã³ãElasticCacheRedis ã®ããŒãžã§ã³ãšåããã image ãéžæããŸããã æ³šæç¹ãšããŠã¯ãè€æ°ã® DockerImage ãå©çšããå Žåãäžã€ç®ã«æå®ãã image ã primary ãšããŠæ±ãããŸãã 以äžã®äŸã§ããšãRuby ã® image ãæåã«æå®ããMySQLãRedis ã® image ãæå®ããŠããŸãããMySQL ã³ãã³ãèªäœã¯ Ruby ã® image ã«å«ãŸããŠããªããããRuby ã³ãã³ããå®è¡ã§ããŠã MySQL ã³ãã³ããå®è¡ããããšã¯åºæ¥ãŸããã â»è©³çŽ°ã¯ ãã¡ã ã«èšèŒãããŠããŸãã docker : - image : circleci/ruby:2.4.2-node-browsers environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : circleci/mysql:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : redis:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo ãŸããçšæãããŠãã image ãã«ã¹ã¿ãã€ãºããå¿
èŠãããå Žåã¯ãDocker ã§ã«ã¹ã¿ã image ãäœããpublic ã§è¯ããã° Docker Hub ãžç»é²ãprivate ãè¯ããã° Amazon EC2 Container Registry ãžç»é²ããŠããããšã§åŒã³åºãããšãå¯èœã«ãªã£ãŠããŸãã â»Using Custom-Built Docker Images https://circleci.com/docs/ja/2.0/custom-images/ â»Using Private Images https://circleci.com/docs/ja/2.0/private-images/ build ã®èšå®ãš cache CI ã§å®è¡ããã¢ããªã±ãŒã·ã§ã³ã® build ã«é¢ããŠã§ãã checkout ã§ github ããã³ãŒãã checkout ãããã®åŸã®å®çŸ©ã§ã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ã¹ããŒã«ããã£ãã·ã¥ä¿åããã£ãã·ã¥ã®å±éãè¡ã£ãŠããŸãã steps : - checkout # Rails application setup - restore_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} - run : name : bundle install command : bundle install --jobs=4 --path=vendor/bundle - save_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} paths : - vendor/bundle save_cache: key ã« Gemfile.lock ãæå®ããããšã§ãã£ãã·ã¥ããŒãšããŠæ±ããpaths ã«èšå®ãããã¹ããã£ãã·ã¥ããããã«ããŠããŸãã restore_cache: key ãšäžèŽãããã£ãã·ã¥ãããã°ãsave_cache æã«æå®ãããã¹ãå±éãçŽããŠããŸãã run: ãã¡ã㯠rails ã®ã¢ããªã±ãŒã·ã§ã³ã€ã³ã¹ããŒã«ããŠããã ãã§ãã CircleCI1.0 ããããã£ãã·ã¥ç®¡çãæè»ã«è¡ããããšãããããŸãã circleci ã³ãã³ãã«ãã Rspec ã®äžŠåå®è¡ rspec ã«ãããã¹ãã®å®è¡ã«é¢ããŠã§ãã circleci ã³ãã³ã ãå©çšããããšã§ãã¹ãã®äžŠåå®è¡ãå¹ççã«è¡ãããšãåºæ¥ããŸãã ä»å㯠--split-by=timings --timings-type=filename ã®ãªãã·ã§ã³ãæå®ãããã¡ã€ã«åããŒã¹ã§ã®åå²ã§ãã¹ããå®è¡ããŸãã - run : name : run test command : | circleci tests glob 'spec/**/*_spec.*' \ | circleci tests split --split-by=timings --timings-type=filename \ | tee -a /dev/stderr \ | xargs bundle exec rspec \ --profile 100 \ --format RspecJunitFormatter \ --out rspec/rspec.xml \ --format progress environment : RAILS_ENV : test TEST_CLUSTER_COMMAND : elasticsearch-x.x.x/bin/elasticsearch - store_artifacts : path : artifacts/ - store_test_results : path : rspec/ store_artifacts: 以åãããããæ©èœã§ããããã¹ãçµæã®ææç©ãä¿åãããã¹ã«ãªããŸãã store_test_results: ãã¡ãã¯ãã¹ãã®å®è¡çµæãä¿åããŠããããšã§ãã³ã³ããéã§ rspec ã®å®è¡æéã«ã°ãã€ããåºãªãããã察象ã®ãã¡ã€ã«ãæé©ã«æ¯ãåããŠããããããªã®ã§ãããworkflows ãå©çšãããšãµããŒããããªãããã§ãã â»åèïŒ https://circleci.com/docs/ja/2.0/configuration-reference/#store_test_results ãã®ãããªåœ¢ã§ Artifacts ãä¿åãããŠããŸãã ãŸããartifacts ã«ã¯ coverage ãš capybara ã® screenshot ãªã©ãä¿åããŠããŸã - simple_cov if ENV['CI'] SimpleCov.coverage_dir File.join(ENV['CIRCLE_WORKING_DIRECTORY'], 'artifacts', 'coverage') SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[ SimpleCov::Formatter::HTMLFormatter ] SimpleCov.start do add_filter '/vendor/' add_filter '/spec/' add_filter '/config/' add_filter '/db/' end end capybara Capybara.save_and_open_page_path = File.join(ENV['CIRCLE_WORKING_DIRECTORY'], 'artifacts', 'capybara') if ENV['CI'] â»CircleCI2.0 ãã CI ã®ç°å¢å€æ°ãå€ãã£ãŠããŸãã詳现ã¯ä»¥äžã®ãªã³ã¯ãžèšèŒãããŠããŸãã Introduction to environment variables - CircleCI Introduction to environment variables in CircleCI circleci.com Workflows ã®èšå® CircleCI2.0 ãã Workflows ã®å©çšãå¯èœã«ãªããŸããã Workflow orchestration - CircleCI Learn about using CircleCI workflows to orchestrate jobs circleci.com ã³ã³ããæ¯ã«åå²ããžã§ããå®è¡ããããšã§æŽãªã䞊åå®è¡ã®å¹çåãåã³ããžã§ãéã®äŸåé¢ä¿ãŸã§èšå®ã§ããããã§ãã ãžã§ãã¡ãã¬ãŒã§ã¯ã³ãŒãã®éçè§£æã«å°ãå®è¡æéãæãã£ãŠããããšãããå€å°ã®æ¹åãå³ãããšèã åçŽã«äœ¿ã£ãŠã¿ããã£ã ãã¡ãã®æ©èœãå©çšããŠã¿ãŸããã workflows : version : 2 workflows : jobs : - build - code_analyze : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - rspec : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - deploy_qa : requires : - code_analyze - rspec filters : branches : only : develop - deploy_only : requires : - build filters : branches : only : /^sandbox.*|^master$|^staging$/ build: åãžã§ãã§å®è¡åã«è¡ã£ãŠããåŠçãå®çŸ© code_analyze: rubocopãbrakemanãscss-lint ãªã©ã®éçè§£æåŠçãå®çŸ© rspec: ã¢ããªã±ãŒã·ã§ã³ã®ãã¹ããå®çŸ© deploy: ãããã€ã«é¢ããåŠçãå®çŸ© ãžã§ãã¡ãã¬ãŒã§ã¯ããã©ã³ã管çã« Git-flow ãæ¡çšããŠããŸããããããšã¯å¥ã« sandbox ãšãããã¹ãç°å¢ãçšæãéçšããŠããŸãã develop ãã©ã³ãã§ã³ãŒãè§£æããã¹ããã¯ãªã¢ããã³ãŒãã ããmaster ãžåæ ããmaster ã§ã¯ãã¹ããã§ãŒãºãªãã« deploy ããæ§æãåã£ãŠããŸãã æ¥µåãCI ã®ãªãœãŒã¹ãç¯çŽããããã«åãã©ã³ãããšã§å®è¡ããåŠçãåããŠããŸãã åãã©ã³ãã®éçšã¯ä»¥äžã®éãã§ãã feature: ã³ãŒãè§£æããã¹ãå®è¡ sandbox: ãããã€ã®ã¿å®è¡(äžæã¬ãã¥ãŒçšãã©ã³ã) develop: ã³ãŒãè§£æããã¹ãå®è¡ããããã€å®è¡ master: ãããã€ã®ã¿å®è¡ äžèšã®äŸã§ã¯ã code_analyze: sandboxãmasterãstaging ãã©ã³ã以å€ã¯å®è¡ requires ã§äŸåé¢ä¿ãæå®ããbuild ãæ£åžžã«çµäºããªããã°å®è¡ãããªãããã«ãªã£ãŠããŸãã rspec: sandboxãmasterãstaging ãã©ã³ã以å€ã¯å®è¡ requires ã§äŸåé¢ä¿ãæå®ããbuild ãæ£åžžã«çµäºããªããã°å®è¡ãããªãããã«ãªã£ãŠããŸãã deploy_qa: develop ãã©ã³ãã§ã®ã¿å®è¡ requires ã§äŸåé¢ä¿ãæå®ããcode_analyzeãrspec ãæ£åžžã«çµäºããªããã°å®è¡ãããªãããã«ãªã£ãŠããŸãã deploy_only: sandboxãmasterãstaging ãã©ã³ãã®ã¿å©çšãããžã§ã requires ã§äŸåé¢ä¿ãæå®ããbuild ãæ£åžžã«çµäºããªããã°å®è¡ãããªãããã«ãªã£ãŠããŸãã ã©ã®ãã㪠workflow ãåºæ¥ãããã®ãã以äžã«äŸã瀺ããŸãã feature ãã©ã³ãã®äŸ: develop ãã©ã³ãã®äŸ: masterãsandbox ãã©ã³ãã®äŸ: ä»åã®äŸã ãšãã©ã³ãæ¯ã« workflow ãå€ããŠãããããignoreãonly ã®æžãæ¹ã§æå³ããæ¯ãåããããªãããã«èæ
®ã¯å¿
èŠã§ãããæè»ã« workflow ãäœããããšãããããšæããŸãã(ããéãããšèªã¿è§£ãã®ã倧å€ã«ãªãããã§ãã) Workflows ã«é¢ããŠã¯ ãã¡ã ã«è²ã
ãªãã¿ãŒã³ã®çµã¿æ¹ãèšèŒãããŠããã®ã§ããã¡ããèªããšããçè§£ãæ·±ãŸããšæããŸãã ãžã§ãéã§ã®ããŒã¿å
±æ ãžã§ããåããŠãã«ããã=äœåãã¢ããªã±ãŒã·ã§ã³ã®åæåãå¿
èŠãªããããªããïŒ ãšåœç¶çåã«æãç¹ã§ã¯ãããŸãããããã«å¯Ÿãã解決çãçšæãããŠããŸãã build : steps : ===çç¥=== - persist_to_workspace : root : ~/job-medley paths : - ./* deploy_qa : << : * defaults steps : - attach_workspace : at : ~/job-medley persist_to_workspace: æå®ãããã¹ã«ããããŒã¿ãäžæçã«ä¿ç®¡ããŠãããŸã attach_workspace: ä¿ç®¡æžã¿ã®ããŒã¿ãå±éããŠãããŸã ãã®æ©èœã«ããããã«ãããã»ã¹ã§çæãããã®ãåãžã§ãã§å®è¡ããã³ã³ãããžæž¡ãããšãåºæ¥ãŸãã ãã ãããããããã«ãããã»ã¹ã§ãã£ãã·ã¥ãå
¥ããŠããããšããããããèªäœã®å¹æã¯æ®ã©ãããŸããã§ããã ã³ã³ãã€ã«æžã¿ã®ããŒã¿ãåãæž¡ãéã«ã¯å¹æãçºæ®ãããã§ããã( å
¬åŒã§ã ãã®ãããªå©çšãæ³å®ããŠãããã§ã) æ¹åçµæ èå¿ã®é床æ¹åçµæã§ããçµæã¯ä»¥äžã®éãã«ãªããŸããã æ¹åå: CircleCI1.0 rspec ã®å®è¡æé: 26:59 以äžã¯ãCircleCI2.0 ãžç§»è¡ããã ãã®çµæã§ãããã®ã±ãŒã¹ã§ã¯ workflows ãå©çšããŠããŸããã æ¹ååŸ: CircleCI2.0 rspec ã®å®è¡æé: 19:40 CircleCI1.0 ãã CircleCI2.0 ãžç§»è¡ããããšã«ããã çŽ 12 åçš ãã¹ãã®å®è¡æéãççž®ããããšãåºæ¥ãŸããã Workflows ãªã©ç¹ã«å©çšããŠããªãããã€ããã«ããã§ãŒãºã®å®è¡æéãé¢ä¿ããªããããCircleCI2.0 ãå©çšããã ãã§åçŽã«ãã¹ãå®è¡é床ã®åäžãèŠèŸŒããããšãããããšæããŸãã ç¶ã㊠Workflows ãå©çšããçµæã§ãã æ¹ååŸ: CircleCI2.0 with Workflows rspec ã®å®è¡æé: 21:14 çµæã¯ãWorkflows ãå©çšããªãã±ãŒã¹ãšãå©çšããã±ãŒã¹ã§ã¯ãWorkflows ãå©çšããã»ãã rspec ã®å®è¡æéã¯é·ããªã£ãŠããŸããŸããããbuild-code-analyze-rspec ã®å®è¡ã«æãã£ãããŒã¿ã«ã®æéã«å·®ã¯èŠãããŸããã§ããã ããã¯ããcircleci ã³ãã³ãã«ãã Rspec ã®äžŠåå®è¡ãã®ã»ã¯ã·ã§ã³ãžãèšèŒããéããstore_test_results ããµããŒããšãããªãããšã«ãããã³ã³ããéã§ã®åæ£ãæé©åãããŠããªãçºã§ãã ã³ã³ããéã§ rspec ã®å®è¡æéã«ã°ãã€ããåºãªãããã察象ã®ãã¡ã€ã«ãæé©ã«æ¯ãåããŠããããããªã®ã§ãããWorkflows ãå©çšãããšãµããŒããããªãããã§ãã å®è¡æéã«ã°ãã€ããåºãŠããŸããcode_analyze ã®ãžã§ãã忣ããããšã§èŠèŸŒãã§ããæ¹åæé(çŽ 3 å)ãšã°ãã€ãã«ããçºçãããã¹ãå®è¡æéã®ãã¹( (20:01 - 14:57) / 2 = 2:32 )ã倧äœåãã§ãããããããŒã¿ã«ã§ã®å®è¡æéã«å·®ãåºãªãçµæãšãªããŸããã ã°ãã€ããåºããªãæ¹æ³ãããžã§ãã®åãæ¹ã«ã€ããŠã¯ä»åŸã工倫ããŠã¿ãããšæããŸãã ãŸããããã³ããšã³ãã®ãã¹ããããå°ãåãããŠãããããšèããŠããã®ã§ãããã³ããšã³ãã®ãã¹ãããµãŒããµã€ãã®ãã¹ãã Workflows ãäžæã䜿ããªãã忣ããŠãããã°è¯ãã®ããªãšãæã£ãŠããŸãã ãããã« ç§»è¡ã«éããŠã CircleCI2.0 ã®ç§»è¡ã¬ã€ã ãèªã¿ãªããé²ããŠããŸããããåºæ¬çãªèšæ³ã®å€æŽãtimezoneãenvironment ã®å®çŸ©æ¹æ³ã®å€æŽãvariable ã®å€æŽãªã©ãå€ã
æããããã¥ã¡ã³ããçµæ§èªã¿èŸŒãŸãªããšã©ãã«äœãå®çŸ©ã§ããã®ãææ¡ã§ããŸããã§ããã ãŸããWorkflows ã®çµã¿ç«ãŠãªã© å
¬åŒã«è¯ããµã³ãã« ã¯æ²¢å±±ããã®ã§ãããäŸåé¢ä¿ã®å®çŸ©ãè²ã
詊ãã®ã«èŠåŽããæ°ãããŸãã â»çŽ çŽã«å°èŠæš¡ãªã¢ããªãçšæããŠã ããŒã«ã«ã§ circleci ãå®è¡ ããŠã¿ãæ¹ãå¹çè¯ãé²ãããããããããŸããã â»ãã ã å
¬åŒã®ããã¥ã¡ã³ã ã CommunityForum ããã£ããèªãã°äœãããšãªãæ
å ±ã¯åã£ãã®ã§éåžžã«å©ãããŸããã CircleCI2.0 ã§ã©ã®ãããªäºãåºæ¥ãã®ããããã¯ã©ã®ããã«è¡ããã®ãã ãã®èšäºããã®æŠèгãã€ããå©ãã«ãªãã°è¯ããªãšæã£ãŠããŸãã åèãªã³ã¯ CircleCI2.0 ãžç§»è¡ããã«ãããã以äžã®èšäºãåèã«ãããŠããã ããŸãããããããšãããããŸãã circleci/ruby:2.4.1-node-browsersã£ãŠäœå
¥ã£ãŠãã®ãç¥ãããã£ã - Qiita 2018-11-19远èšhttps://github.com/CircleCI-Public/circleci-dockerfiles/blob/master/ruby/images/ãã€ã®éã«âŠ qiita.com CircleCI2.0ã®Workflowsã詊ã âCircleCI2.0ã®Workflowsã詊ãâ is published by timakin. medium.com ãç¥ãã ã¡ãã¬ãŒã§ã¯ãå»çä»è·ã®æ±äººãµã€ãã ãžã§ãã¡ãã¬ãŒ ããå»åž«ãã¡ãã€ãããªã³ã©ã€ã³å»çäºå
žã MEDLEY ããå£ã³ãã§æ¢ããä»è·æœèšã®æ€çŽ¢ãµã€ãã ä»è·ã®ã»ãã ãããªã³ã©ã€ã³èšºçã¢ããªã CLINICS ããªã©ã®ãããã¯ããæäŸããŠããŸãããããã®ãµãŒãã¹ã®æ¡å€§ãåããŠããã®æé·ãæ¯ãããšã³ãžãã¢ã»ãã¶ã€ããŒãåéããŠããŸãã ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp ã¡ãã¬ãŒã§äžç·ã«å»çäœéšãå€ãããããã¯ãäœãã«é¢ããããæ¹ã®ãé£çµ¡ãåŸ
ã¡ããŠãããŸãã
ããã«ã¡ã¯ãéçºæ¬éšã® çš²æ¬ ã§ããå»çä»è·ã®æ±äººãµã€ãã ãžã§ãã¡ãã¬ãŒ ãã®éçºãæ
åœããŠãããšã³ãžãã¢ã§ãã æè¿ãžã§ãã¡ãã¬ãŒã§ã¯ CircleCI2.0 ãžã®ç§»è¡ãè¡ããŸãããç§»è¡ã®æ¹æ³ã¯ãã¡ããããã®éã«èª¿ã¹ãããšãCircleCI ã®æ°æ©èœãå©çšããŠã©ãã ã£ãããªã©ãæžããŠãããããšæããŸãã èª²é¡æ åŒç€Ÿã§ã¯ãå
šãããã¯ã( CLINICS ã MEDLEY ã ä»è·ã®ã»ãã ã ãžã§ãã¡ãã¬ãŒ )ã§ CircleCI ãå©çšããŠããŸãã ãžã§ãã¡ãã¬ãŒã§ã¯ CI ã«ãããã¹ãå®è¡ã« 37 åååŸæãã£ãŠããŸãã(ã³ã³ããã 2 ã€å©çšããå®è¡æéã§ã)ã ããã«ãéçºã¡ã³ããŒãå¢ããŠæ¥ãããšããããCI ã®ãªãœãŒã¹ãè¶³ããªããªãéçºå¹çãèœã¡ãããªãç¶æ³ã§ããã ãŸããããã話ã§ãããã ã³ã³ãããå¢ãããšããã®ã解決çã®äžã€ãšããŠã¯ããã®ã§ãããéåºŠã®æ¹åã«æåŸ
ãåºæ¥ããšè©å€ãè¯ãã£ãã®ã§ CirclecCI2.0 ãžç§»è¡ããŸããã CircleCI2.0 ãžã®ç§»è¡ã¡ãªãã åºæ¬çã«ã¯éåºŠã®æ¹åã«æåŸ
ãåºæ¥ãããšããã®ã倧ããªã¡ãªããã§ã¯ãããŸãããå
¬åŒã§ã¯ä»¥äžã®ããã«èšèŒãããŠããŸãã æç²ã§ãã倧ããªç¹åŸŽãšããŠã¯ä»¥äžã®ç¹ã§ããããã First-class Docker Support: Docker ã®ãã€ãã£ããµããŒããš Docker ã¬ã€ã€ãŒãã£ãã·ã¥ã®å°å
¥ Workflows: ãã«ãããã¹ãããããã€ããžã§ããšããŠæè»ã«ç®¡çã§ããããã«ãªã£ã Advanced Caching: ãã£ãã·ã¥ã®ä¿åãšãªã¹ãã¢ãã€ã¡ãŒãžããœãŒã¹ã³ãŒããäŸåé¢ä¿ã«å¯ŸããŠè¡ãããšãã§ããããã«ãªã£ãã ãã®èŸºãã®æ©èœã掻çšã CI ã®é床æ¹åãžç¹ããŠã¿ãããšæããŸãã ãžã§ãã¡ãã¬ãŒã®ã¢ããªã±ãŒã·ã§ã³æ§æ ç§»è¡ã®åæãšããŠããžã§ãã¡ãã¬ãŒã®ã¢ããªã±ãŒã·ã§ã³æ§æã«ã€ããŠèšèŒããŸãã ããã³ããšã³ãã®ãã«ãã yarn+webpack ã§è¡ããçæããã¢ã»ããã public/assets ãžåãåºããmanifest ãã¡ã€ã«ã®ãã¹ã rails ã® helper çµç±ã§ååŸãèªã¿èŸŒãã§ããŸããïŒRails4.2.xïŒ ãã®ãããªæ§æã®ã¢ããªã±ãŒã·ã§ã³ã CirlceCI2.0 ã§ãã«ãããã¹ãããããã€åºæ¥ãããã«ããŠãããŸãã config.yml ã®å
šäœå ä»åãäœæãã config.yml ã¯ãã®ãããªåœ¢ã«ãªããŸããã ãã£ãã㯠build: bundle install, yarn install code_analyze: rubocop, brakeman, scss-lint rspec deploy: capistrano ãè¡ã£ãŠããããã©ã³ãã«ãã£ãŠã©ã®ãžã§ããå®è¡ããã®ãã workflows ãå©çšããŠäœ¿ãåããŠããŸãã 詳ãã解説ã¯ä»¥éãèšèŒããŠãããŸãã defaults : & defaults working_directory : ~/job-medley docker : - image : circleci/ruby:2.4.2-node-browsers environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : circleci/mysql:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : redis:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo version : 2 jobs : build : << : * defaults steps : - checkout - restore_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} - run : name : bundle install command : bundle install --jobs=4 --path=vendor/bundle - save_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} paths : - vendor/bundle - restore_cache : key : job-medley-yarn-{{ checksum "yarn.lock" }} - run : name : Yarn install command : | echo "Node $(node -v)" echo "Yarn v$(yarn --version)" yarn config set cache-folder ./yarn_cache echo "Yarn v$(yarn cache dir)" yarn install - save_cache : key : job-medley-yarn-{{ checksum "yarn.lock" }} paths : - node_modules - yarn_cache - persist_to_workspace : root : ~/job-medley paths : - ./* code_analyze : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run rubocop command : bundle exec rubocop - run : name : run brakeman command : bundle exec brakeman -qz - run : name : run scss-lint command : bundle exec scss-lint rspec : parallelism : 2 << : * defaults steps : - attach_workspace : at : ~/job-medley - restore_cache : key : job-medley-elasticsearch # rspec ã§ es ã®ã³ãã³ããäžéšå®è¡ããŠãããããprimary container åŽãž install - run : name : Elasticsearch install command : | wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-x.x.x.tar.gz && \ tar -xvf elasticsearch-x.x.x.tar.gz && \ if [ -z "`elasticsearch-x.x.x/bin/plugin -l | grep analysis-kuromoji`" ]; then \ elasticsearch-x.x.x/bin/plugin -install elasticsearch/elasticsearch-analysis-kuromoji/x.x.x; fi - save_cache : key : job-medley-elasticsearch paths : - ./elasticsearch-x.x.x - run : name : database create command : bundle exec rake db:create environment : RAILS_ENV : test - run : name : run test command : | circleci tests glob 'spec/**/*_spec.*' \ | circleci tests split --split-by=timings --timings-type=filename \ | tee -a /dev/stderr \ | xargs bundle exec rspec \ --profile 100 \ --format RspecJunitFormatter \ --out rspec/rspec.xml \ --format progress environment : RAILS_ENV : test TEST_CLUSTER_COMMAND : elasticsearch-x.x.x/bin/elasticsearch - store_artifacts : path : artifacts/ - store_test_results : path : rspec/ deploy_qa : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run deploy command : | sh scripts/init_deploy.sh BRANCH="${CIRCLE_BRANCH}" bundle exec cap develop deploy deploy:restart deploy_only : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run deploy command : | BRANCH="${CIRCLE_BRANCH}" bundle exec cap production deploy deploy:restart workflows : version : 2 workflows : jobs : - build - code_analyze : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - rspec : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - deploy_qa : requires : - code_analyze - rspec filters : branches : only : develop - deploy_only : requires : - build filters : branches : only : /^sandbox.*|^master$|^staging$/ DockerImage ã®éžå® å
ã
ãDocker ã䜿ããã« CI ãåããŠããŸããããCircleCI2.0 ãžç§»è¡ããã«èŸºã Docker ãžã®å©çšã«åãæ¿ããŸããã â» Specifying Container Images DockerImage 㯠DockerHub ãžç»é²ãããŠãã CircleCI å
¬åŒã®ã ã® ãå©çšããŸããã ã¢ããªã±ãŒã·ã§ã³ã®äžéšã§ React ã䜿çšããŠãããããã³ãã®ãã«ã㯠yarn+webpack ãå©çšããŠããŸãããã®çºã以äžã® image ãéžæããŸããã circleci/ruby:2.4.2-node-browsers node ã®ã€ã³ã¹ããŒã«ãšãE2E ã®ãã¹ãã«å¿
èŠãªãœãããŠã§ã¢ãã€ã³ã¹ããŒã«ãããŠããŸãã â»è©³çŽ°ã¯ ãã¡ãã®èšäº ãåèã«ãããŠããã ããŸããã ãã®ä»ãçŸåšå©çšããŠãã MySQL ã®ããŒãžã§ã³ãElasticCacheRedis ã®ããŒãžã§ã³ãšåããã image ãéžæããŸããã æ³šæç¹ãšããŠã¯ãè€æ°ã® DockerImage ãå©çšããå Žåãäžã€ç®ã«æå®ãã image ã primary ãšããŠæ±ãããŸãã 以äžã®äŸã§ããšãRuby ã® image ãæåã«æå®ããMySQLãRedis ã® image ãæå®ããŠããŸãããMySQL ã³ãã³ãèªäœã¯ Ruby ã® image ã«å«ãŸããŠããªããããRuby ã³ãã³ããå®è¡ã§ããŠã MySQL ã³ãã³ããå®è¡ããããšã¯åºæ¥ãŸããã â»è©³çŽ°ã¯ ãã¡ã ã«èšèŒãããŠããŸãã docker : - image : circleci/ruby:2.4.2-node-browsers environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : circleci/mysql:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : redis:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo ãŸããçšæãããŠãã image ãã«ã¹ã¿ãã€ãºããå¿
èŠãããå Žåã¯ãDocker ã§ã«ã¹ã¿ã image ãäœããpublic ã§è¯ããã° Docker Hub ãžç»é²ãprivate ãè¯ããã° Amazon EC2 Container Registry ãžç»é²ããŠããããšã§åŒã³åºãããšãå¯èœã«ãªã£ãŠããŸãã â»Using Custom-Built Docker Images https://circleci.com/docs/ja/2.0/custom-images/ â»Using Private Images https://circleci.com/docs/ja/2.0/private-images/ build ã®èšå®ãš cache CI ã§å®è¡ããã¢ããªã±ãŒã·ã§ã³ã® build ã«é¢ããŠã§ãã checkout ã§ github ããã³ãŒãã checkout ãããã®åŸã®å®çŸ©ã§ã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ã¹ããŒã«ããã£ãã·ã¥ä¿åããã£ãã·ã¥ã®å±éãè¡ã£ãŠããŸãã steps : - checkout # Rails application setup - restore_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} - run : name : bundle install command : bundle install --jobs=4 --path=vendor/bundle - save_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} paths : - vendor/bundle save_cache: key ã« Gemfile.lock ãæå®ããããšã§ãã£ãã·ã¥ããŒãšããŠæ±ããpaths ã«èšå®ãããã¹ããã£ãã·ã¥ããããã«ããŠããŸãã restore_cache: key ãšäžèŽãããã£ãã·ã¥ãããã°ãsave_cache æã«æå®ãããã¹ãå±éãçŽããŠããŸãã run: ãã¡ã㯠rails ã®ã¢ããªã±ãŒã·ã§ã³ã€ã³ã¹ããŒã«ããŠããã ãã§ãã CircleCI1.0 ããããã£ãã·ã¥ç®¡çãæè»ã«è¡ããããšãããããŸãã circleci ã³ãã³ãã«ãã Rspec ã®äžŠåå®è¡ rspec ã«ãããã¹ãã®å®è¡ã«é¢ããŠã§ãã circleci ã³ãã³ã ãå©çšããããšã§ãã¹ãã®äžŠåå®è¡ãå¹ççã«è¡ãããšãåºæ¥ããŸãã ä»å㯠--split-by=timings --timings-type=filename ã®ãªãã·ã§ã³ãæå®ãããã¡ã€ã«åããŒã¹ã§ã®åå²ã§ãã¹ããå®è¡ããŸãã - run : name : run test command : | circleci tests glob 'spec/**/*_spec.*' \ | circleci tests split --split-by=timings --timings-type=filename \ | tee -a /dev/stderr \ | xargs bundle exec rspec \ --profile 100 \ --format RspecJunitFormatter \ --out rspec/rspec.xml \ --format progress environment : RAILS_ENV : test TEST_CLUSTER_COMMAND : elasticsearch-x.x.x/bin/elasticsearch - store_artifacts : path : artifacts/ - store_test_results : path : rspec/ store_artifacts: 以åãããããæ©èœã§ããããã¹ãçµæã®ææç©ãä¿åãããã¹ã«ãªããŸãã store_test_results: ãã¡ãã¯ãã¹ãã®å®è¡çµæãä¿åããŠããããšã§ãã³ã³ããéã§ rspec ã®å®è¡æéã«ã°ãã€ããåºãªãããã察象ã®ãã¡ã€ã«ãæé©ã«æ¯ãåããŠããããããªã®ã§ãããworkflows ãå©çšãããšãµããŒããããªãããã§ãã â»åèïŒ https://circleci.com/docs/ja/2.0/configuration-reference/#store_test_results ãã®ãããªåœ¢ã§ Artifacts ãä¿åãããŠããŸãã ãŸããartifacts ã«ã¯ coverage ãš capybara ã® screenshot ãªã©ãä¿åããŠããŸã - simple_cov if ENV['CI'] SimpleCov.coverage_dir File.join(ENV['CIRCLE_WORKING_DIRECTORY'], 'artifacts', 'coverage') SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[ SimpleCov::Formatter::HTMLFormatter ] SimpleCov.start do add_filter '/vendor/' add_filter '/spec/' add_filter '/config/' add_filter '/db/' end end capybara Capybara.save_and_open_page_path = File.join(ENV['CIRCLE_WORKING_DIRECTORY'], 'artifacts', 'capybara') if ENV['CI'] â»CircleCI2.0 ãã CI ã®ç°å¢å€æ°ãå€ãã£ãŠããŸãã詳现ã¯ä»¥äžã®ãªã³ã¯ãžèšèŒãããŠããŸãã Introduction to environment variables - CircleCI Introduction to environment variables in CircleCI circleci.com Workflows ã®èšå® CircleCI2.0 ãã Workflows ã®å©çšãå¯èœã«ãªããŸããã Workflow orchestration - CircleCI Learn about using CircleCI workflows to orchestrate jobs circleci.com ã³ã³ããæ¯ã«åå²ããžã§ããå®è¡ããããšã§æŽãªã䞊åå®è¡ã®å¹çåãåã³ããžã§ãéã®äŸåé¢ä¿ãŸã§èšå®ã§ããããã§ãã ãžã§ãã¡ãã¬ãŒã§ã¯ã³ãŒãã®éçè§£æã«å°ãå®è¡æéãæãã£ãŠããããšãããå€å°ã®æ¹åãå³ãããšèã åçŽã«äœ¿ã£ãŠã¿ããã£ã ãã¡ãã®æ©èœãå©çšããŠã¿ãŸããã workflows : version : 2 workflows : jobs : - build - code_analyze : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - rspec : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - deploy_qa : requires : - code_analyze - rspec filters : branches : only : develop - deploy_only : requires : - build filters : branches : only : /^sandbox.*|^master$|^staging$/ build: åãžã§ãã§å®è¡åã«è¡ã£ãŠããåŠçãå®çŸ© code_analyze: rubocopãbrakemanãscss-lint ãªã©ã®éçè§£æåŠçãå®çŸ© rspec: ã¢ããªã±ãŒã·ã§ã³ã®ãã¹ããå®çŸ© deploy: ãããã€ã«é¢ããåŠçãå®çŸ© ãžã§ãã¡ãã¬ãŒã§ã¯ããã©ã³ã管çã« Git-flow ãæ¡çšããŠããŸããããããšã¯å¥ã« sandbox ãšãããã¹ãç°å¢ãçšæãéçšããŠããŸãã develop ãã©ã³ãã§ã³ãŒãè§£æããã¹ããã¯ãªã¢ããã³ãŒãã ããmaster ãžåæ ããmaster ã§ã¯ãã¹ããã§ãŒãºãªãã« deploy ããæ§æãåã£ãŠããŸãã æ¥µåãCI ã®ãªãœãŒã¹ãç¯çŽããããã«åãã©ã³ãããšã§å®è¡ããåŠçãåããŠããŸãã åãã©ã³ãã®éçšã¯ä»¥äžã®éãã§ãã feature: ã³ãŒãè§£æããã¹ãå®è¡ sandbox: ãããã€ã®ã¿å®è¡(äžæã¬ãã¥ãŒçšãã©ã³ã) develop: ã³ãŒãè§£æããã¹ãå®è¡ããããã€å®è¡ master: ãããã€ã®ã¿å®è¡ äžèšã®äŸã§ã¯ã code_analyze: sandboxãmasterãstaging ãã©ã³ã以å€ã¯å®è¡ requires ã§äŸåé¢ä¿ãæå®ããbuild ãæ£åžžã«çµäºããªããã°å®è¡ãããªãããã«ãªã£ãŠããŸãã rspec: sandboxãmasterãstaging ãã©ã³ã以å€ã¯å®è¡ requires ã§äŸåé¢ä¿ãæå®ããbuild ãæ£åžžã«çµäºããªããã°å®è¡ãããªãããã«ãªã£ãŠããŸãã deploy_qa: develop ãã©ã³ãã§ã®ã¿å®è¡ requires ã§äŸåé¢ä¿ãæå®ããcode_analyzeãrspec ãæ£åžžã«çµäºããªããã°å®è¡ãããªãããã«ãªã£ãŠããŸãã deploy_only: sandboxãmasterãstaging ãã©ã³ãã®ã¿å©çšãããžã§ã requires ã§äŸåé¢ä¿ãæå®ããbuild ãæ£åžžã«çµäºããªããã°å®è¡ãããªãããã«ãªã£ãŠããŸãã ã©ã®ãã㪠workflow ãåºæ¥ãããã®ãã以äžã«äŸã瀺ããŸãã feature ãã©ã³ãã®äŸ: develop ãã©ã³ãã®äŸ: masterãsandbox ãã©ã³ãã®äŸ: ä»åã®äŸã ãšãã©ã³ãæ¯ã« workflow ãå€ããŠãããããignoreãonly ã®æžãæ¹ã§æå³ããæ¯ãåããããªãããã«èæ
®ã¯å¿
èŠã§ãããæè»ã« workflow ãäœããããšãããããšæããŸãã(ããéãããšèªã¿è§£ãã®ã倧å€ã«ãªãããã§ãã) Workflows ã«é¢ããŠã¯ ãã¡ã ã«è²ã
ãªãã¿ãŒã³ã®çµã¿æ¹ãèšèŒãããŠããã®ã§ããã¡ããèªããšããçè§£ãæ·±ãŸããšæããŸãã ãžã§ãéã§ã®ããŒã¿å
±æ ãžã§ããåããŠãã«ããã=äœåãã¢ããªã±ãŒã·ã§ã³ã®åæåãå¿
èŠãªããããªããïŒ ãšåœç¶çåã«æãç¹ã§ã¯ãããŸãããããã«å¯Ÿãã解決çãçšæãããŠããŸãã build : steps : ===çç¥=== - persist_to_workspace : root : ~/job-medley paths : - ./* deploy_qa : << : * defaults steps : - attach_workspace : at : ~/job-medley persist_to_workspace: æå®ãããã¹ã«ããããŒã¿ãäžæçã«ä¿ç®¡ããŠãããŸã attach_workspace: ä¿ç®¡æžã¿ã®ããŒã¿ãå±éããŠãããŸã ãã®æ©èœã«ããããã«ãããã»ã¹ã§çæãããã®ãåãžã§ãã§å®è¡ããã³ã³ãããžæž¡ãããšãåºæ¥ãŸãã ãã ãããããããã«ãããã»ã¹ã§ãã£ãã·ã¥ãå
¥ããŠããããšããããããèªäœã®å¹æã¯æ®ã©ãããŸããã§ããã ã³ã³ãã€ã«æžã¿ã®ããŒã¿ãåãæž¡ãéã«ã¯å¹æãçºæ®ãããã§ããã( å
¬åŒã§ã ãã®ãããªå©çšãæ³å®ããŠãããã§ã) æ¹åçµæ èå¿ã®é床æ¹åçµæã§ããçµæã¯ä»¥äžã®éãã«ãªããŸããã æ¹åå: CircleCI1.0 rspec ã®å®è¡æé: 26:59 以äžã¯ãCircleCI2.0 ãžç§»è¡ããã ãã®çµæã§ãããã®ã±ãŒã¹ã§ã¯ workflows ãå©çšããŠããŸããã æ¹ååŸ: CircleCI2.0 rspec ã®å®è¡æé: 19:40 CircleCI1.0 ãã CircleCI2.0 ãžç§»è¡ããããšã«ããã çŽ 12 åçš ãã¹ãã®å®è¡æéãççž®ããããšãåºæ¥ãŸããã Workflows ãªã©ç¹ã«å©çšããŠããªãããã€ããã«ããã§ãŒãºã®å®è¡æéãé¢ä¿ããªããããCircleCI2.0 ãå©çšããã ãã§åçŽã«ãã¹ãå®è¡é床ã®åäžãèŠèŸŒããããšãããããšæããŸãã ç¶ã㊠Workflows ãå©çšããçµæã§ãã æ¹ååŸ: CircleCI2.0 with Workflows rspec ã®å®è¡æé: 21:14 çµæã¯ãWorkflows ãå©çšããªãã±ãŒã¹ãšãå©çšããã±ãŒã¹ã§ã¯ãWorkflows ãå©çšããã»ãã rspec ã®å®è¡æéã¯é·ããªã£ãŠããŸããŸããããbuild-code-analyze-rspec ã®å®è¡ã«æãã£ãããŒã¿ã«ã®æéã«å·®ã¯èŠãããŸããã§ããã ããã¯ããcircleci ã³ãã³ãã«ãã Rspec ã®äžŠåå®è¡ãã®ã»ã¯ã·ã§ã³ãžãèšèŒããéããstore_test_results ããµããŒããšãããªãããšã«ãããã³ã³ããéã§ã®åæ£ãæé©åãããŠããªãçºã§ãã ã³ã³ããéã§ rspec ã®å®è¡æéã«ã°ãã€ããåºãªãããã察象ã®ãã¡ã€ã«ãæé©ã«æ¯ãåããŠããããããªã®ã§ãããWorkflows ãå©çšãããšãµããŒããããªãããã§ãã å®è¡æéã«ã°ãã€ããåºãŠããŸããcode_analyze ã®ãžã§ãã忣ããããšã§èŠèŸŒãã§ããæ¹åæé(çŽ 3 å)ãšã°ãã€ãã«ããçºçãããã¹ãå®è¡æéã®ãã¹( (20:01 - 14:57) / 2 = 2:32 )ã倧äœåãã§ãããããããŒã¿ã«ã§ã®å®è¡æéã«å·®ãåºãªãçµæãšãªããŸããã ã°ãã€ããåºããªãæ¹æ³ãããžã§ãã®åãæ¹ã«ã€ããŠã¯ä»åŸã工倫ããŠã¿ãããšæããŸãã ãŸããããã³ããšã³ãã®ãã¹ããããå°ãåãããŠãããããšèããŠããã®ã§ãããã³ããšã³ãã®ãã¹ãããµãŒããµã€ãã®ãã¹ãã Workflows ãäžæã䜿ããªãã忣ããŠãããã°è¯ãã®ããªãšãæã£ãŠããŸãã ãããã« ç§»è¡ã«éããŠã CircleCI2.0 ã®ç§»è¡ã¬ã€ã ãèªã¿ãªããé²ããŠããŸããããåºæ¬çãªèšæ³ã®å€æŽãtimezoneãenvironment ã®å®çŸ©æ¹æ³ã®å€æŽãvariable ã®å€æŽãªã©ãå€ã
æããããã¥ã¡ã³ããçµæ§èªã¿èŸŒãŸãªããšã©ãã«äœãå®çŸ©ã§ããã®ãææ¡ã§ããŸããã§ããã ãŸããWorkflows ã®çµã¿ç«ãŠãªã© å
¬åŒã«è¯ããµã³ãã« ã¯æ²¢å±±ããã®ã§ãããäŸåé¢ä¿ã®å®çŸ©ãè²ã
詊ãã®ã«èŠåŽããæ°ãããŸãã â»çŽ çŽã«å°èŠæš¡ãªã¢ããªãçšæããŠã ããŒã«ã«ã§ circleci ãå®è¡ ããŠã¿ãæ¹ãå¹çè¯ãé²ãããããããããŸããã â»ãã ã å
¬åŒã®ããã¥ã¡ã³ã ã CommunityForum ããã£ããèªãã°äœãããšãªãæ
å ±ã¯åã£ãã®ã§éåžžã«å©ãããŸããã CircleCI2.0 ã§ã©ã®ãããªäºãåºæ¥ãã®ããããã¯ã©ã®ããã«è¡ããã®ãã ãã®èšäºããã®æŠèгãã€ããå©ãã«ãªãã°è¯ããªãšæã£ãŠããŸãã åèãªã³ã¯ CircleCI2.0 ãžç§»è¡ããã«ãããã以äžã®èšäºãåèã«ãããŠããã ããŸãããããããšãããããŸãã circleci/ruby:2.4.1-node-browsersã£ãŠäœå
¥ã£ãŠãã®ãç¥ãããã£ã - Qiita 2018-11-19è¿œèš https://github.com/CircleCI-Public/circleci-dockerfiles/blob/master/ruby/images/ ãã€ã®éã«ãå
¬éãããŠãŸãã åæ© circleciãæäŸããŠããdockerãã¡... qiita.com CircleCI2.0ã®Workflowsã詊ã âCircleCI2.0ã®Workflowsã詊ãâ is published by timakin. medium.com ãç¥ãã ã¡ãã¬ãŒã§ã¯ãå»çä»è·ã®æ±äººãµã€ãã ãžã§ãã¡ãã¬ãŒ ããå»åž«ãã¡ãã€ãããªã³ã©ã€ã³å»çäºå
žã MEDLEY ããå£ã³ãã§æ¢ããä»è·æœèšã®æ€çŽ¢ãµã€ãã ä»è·ã®ã»ãã ãããªã³ã©ã€ã³èšºçã¢ããªã CLINICS ããªã©ã®ãããã¯ããæäŸããŠããŸãããããã®ãµãŒãã¹ã®æ¡å€§ãåããŠããã®æé·ãæ¯ãããšã³ãžãã¢ã»ãã¶ã€ããŒãåéããŠããŸãã ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp ã¡ãã¬ãŒã§äžç·ã«å»çäœéšãå€ãããããã¯ãäœãã«é¢ããããæ¹ã®ãé£çµ¡ãåŸ
ã¡ããŠãããŸãã