id:radiocat ã§ãã6/26ã27ã«éå¬ãããScrum Fest Osaka 2020ã«åå ããç»å£ãããŠé ããŸãããã€ãã³ããã¬ããŒãããŸãã Scrum Fest Osaka 2020ãšã¯ïŒ ã©ããªã€ãã³ãïŒ äŒå Žã¯Discord ã»ã·ã§ã³ã¯Zoom æ°ã
ã®äŒæ¥ã»å£äœã¹ãã³ãµãŒãæ¯æŽ åºèª¿è¬æŒ ã¡ãã£ãšããããã£ãã¯æé·ã®ãã£ã³ã¹ ç»å£ã¬ããŒã ã¹ã¯ã©ã ã¡ããããªãšèšãããŠããã£ãŠã¿ãã²ãïŒ ãµãããããéèŠã§ã¯ãªãïŒïŒãµããããã®æŽ»çšæ¹æ³ã«ã€ã㊠éç§©åºãä¹ãããªãã¢ãžã£ã€ã«ãªã€ãã³ãã§ãã Scrum Fest Osaka 2020ãšã¯ïŒ www.scrumosaka.org å
¬åŒãµã€ãã«ã¯æ¬¡ã®ããã«æžãããŠããŸãã Scrum Fest Osaka㯠ã¹ã¯ã©ã ã®åå¿è
ãããšãã¹ããŒãããŠãŒã¶ãŒäŒæ¥ããéçºäŒæ¥ãç«å Žã®ç°ãªãæ§ã
ãªäººã
ãéãŸãåŠã³ã®å Žã§ãã æšå¹Žãåéå¬ã§ãä»åã2åç®ãšãªãã€ãã³ãã§ããååã¯2ãã©ãã¯ã§20以äžã®ã»ãã·ã§ã³ãè¡ãããé¢è¥¿ãšããŠã¯ ã¹ã¯ã©ã ã«éãããšã³ãžãã¢åãã€ãã³ããšããŠæå€§çŽã®ã€ãã³ãã§ããå
šåœããæ§ã
ãªå¢éãç«å Žã®äººãéãŸã£ãŠãããããã®åãçµã¿ãç¥èŠãå
±æããããåå è
å
šå¡ã®åŠã³ã®å Žã§ãã ã¡ãªã¿ã«ãæšå¹Žãšä»åãªã³ã©ã€ã³éå¬ã«å€æŽãããåãŸã§äŒå Žãšãªãäºå®ã ã£ã é¢è¥¿å€§åŠ æ¢
ç°ãã£ã³ãã¹ KANDAI MeRISE ã¯åŒç€Ÿã®å€§éªãªãã£ã¹ã®ããé£ã§ãã ã©ããªã€ãã³ãïŒ ç»å£è
ã¯æšå¹Žããå
¬åãããæ¢ã«æ±ºãŸã£ãŠããŸããããã³ããã®åœ±é¿ã§ãªã³ã©ã€ã³éå¬ã«å€æŽãšãªããå
šåœ19ã³ãã¥ã ãã£ãŒ ãéããŠåãã©ãã¯äžŠè¡ã§éå¬ããããšããç°äŸã®å
容ã»èŠæš¡ãšãªããŸããã19ãã©ãã¯ãšããªããšãã芧ã®ãšããäžèЧã§èŠãããšãã§ããªãèŠæš¡ã§ãã 19ãã©ãã¯ã®ã€ãã³ãäžèЧ ãªã³ã©ã€ã³éå¬ãšããããšã§ãåå è
㯠Discord ãš Zoom ã®å©çšãå¿
é ãšãªããŸããã äŒå Žã¯Discord åå ã®ç³èŸŒã¿ãè¡ã£ãŠéå¶åŽãžDiscordã®ã¢ã«ãŠã³ããé£çµ¡ãããšã€ãã³ãå°çšã®DiscordãµãŒããžæåŸ
ãããŸããDiscordã«ã¯ã€ãã³ãã®ãç¥ããããåçš®é£çµ¡ãåœæ¥ã®ãªãŒããã³ã°ãåºèª¿è¬æŒã§äœ¿ãããã¡ã€ã³ãã£ã³ãã«ãåã³ãã¥ã ãã£ãŒ ã®ãã£ã³ãã«ã«å ããéè«ããã€ã¬ïŒã2次äŒãªã©ãåå è
ãæãæãã«åå ã§ããç¡æ°ã®ãã£ã³ãã«ããããŸãã Discordã®ç»é¢ ã€ãã³ãã®ç³ã蟌ã¿ãçµãããšã€ãã³ãéå¬ã®æ°æ¥åããDiscordã«æåŸ
ãããåœæ¥ã ãã§ãªãæºåäžã®ç¶æ³ãªã©ã確èªã§ããããã«ãªã£ãŠããŸããããã¡ãããéå¬åããåå è
å士ã§äº€æµããããšãã§ããŸãããããŠãéå¬åŸã®çŸåšãç¶ç¶ããŠäº€æµå¯èœã§ããéå¬åœæ¥ã軞ãšãã€ã€ãããã®ååŸã®æéã䜿ã£ãŠåå è
å
šå¡ã§ã€ãã³ããäœãäžããŠãã圢ããã€ãã³ãã®æ°ããã¹ã¿ã€ã«ãšããŠããªã³ã©ã€ã³ã€ãã³ãã®å¯èœæ§ãæããããšãã§ããŸãã ã»ã·ã§ã³ã¯Zoom éå¬åœæ¥ã¯ãã»ãã·ã§ã³éå¬ã®æéã«ãªããšDiscordã®ãã£ã³ãã«ã«Zoomã®URLãæµããŠããŸããããããZoomäžã§ç»å£è
ã®çºè¡šãèããšããæµãã§ãã ã»ãã·ã§ã³ã®æ§å ç»å£è
ããèŽè¬è
ãžã®äžæ¹åã®ã»ãã·ã§ã³ã ãã§ãªãããªã³ã©ã€ã³ã®èŠèŽè
ãå·»ã蟌ãã ããã£ããããŒã«ã䜿ã£ãŠãã£ã¹ã«ãã·ã§ã³ãããªã©ããªã³ã©ã€ã³ã§ã®æ°ããªè©Šã¿ãè¡ã£ãŠããã»ãã·ã§ã³ããããŸããã æ°ã
ã®äŒæ¥ã»å£äœã¹ãã³ãµãŒãæ¯æŽ ã¢ãžã£ã€ã« ãå®è·µäžã®æ§ã
ãªäŒæ¥ã»å£äœãã¹ãã³ãµãŒãšããŠã€ãã³ããæ¯æŽããŠããŸããåŒç€Ÿãã·ã«ããŒã¹ãã³ãµãŒãšããŠåå ãããŠé ããŸããã ã¹ãã³ãµãŒã®çŽ¹ä» ãªãŒããã³ã°ã€ãã³ãã§ãã£ãã玹ä»ããŠé ããŠããŸãããåå ããã€ãã³ãã®ã¹ãã³ãµãŒã«èªç€Ÿãåãé£ããŠããã®ã¯ãã€èŠãŠãå¬ãããã®ã§ãã åºèª¿è¬æŒ åºèª¿è¬æŒã¯ ã¢ãžã£ã€ã« ã³ãŒãã§ããããSCRUM BOOT CAMP THE BOOKãã®å
±èè
ãšããŠãããªãã¿ã®æ ªåŒäŒç€Ÿã¢ã ã©ã¯ ã¿ã®æ°žç¬ããã«ãããä»ãããŠã® ã¹ã¯ã©ã ãã§ããã çãäžã空ããã瞊æžãã®ãå€ãã£ãã¹ã©ã€ãã«ãªã£ãŠããã®ã¯çç±ããããŸãããªããšãç»é¢å
±æã§ã¹ã©ã€ããæåœ±ããã®ã§ã¯ãªãããæ¬äººãçãäžã«æ ããªããããŒãã£ã«èæ¯ã«ã¹ã©ã€ããæåœ±ãããšããã¹ã¿ã€ã«ã§çºè¡šãããã®ã§ãïŒ ãã®æ§åã¯åå è
ã ãã®ã楜ãã¿ãªã®ã§ã玹ä»ã§ããªããŠæ®å¿µã§ãããèæ¯ã«äœ¿ãããã¹ã©ã€ããèŠãªãããªããšãªãæ³åããŠããã ããã°ãšæããŸãã ã¡ãã£ãšããããã£ãã¯æé·ã®ãã£ã³ã¹ ä»åã®ç»å£ã«ããããã€ãã³ãããªã³ã©ã€ã³éå¬ã«å€æŽãããããšã§æåã¯ããã£ããšæããããšã®ããšã§ããããã¯ç§ãç»å£ãããŠé ããã®ã§ããããŸãããªã³ã©ã€ã³ãšãã圢ã§åæãå€ãã£ãŠãã©ã®ãããªã»ãã·ã§ã³ãè¡ããããšæžæããŸããããããããã®ãããªç¶æ³ã«ãã£ã¬ã³ãžããããšã¯æé·ã®ãã£ã³ã¹ã§ããããšããããšã§ãã ã¹ã¯ã©ã ã¯éç§©åºãªç¶æ³ãä¹ãããªãããšã«é©ãã ãã¬ãŒã ã¯ãŒã¯ ã§ãã æã¿ä»ããè¡åã®çã§ãäºèŠã§ããç¯å²ã§ã¹ããªã³ããåããŠããªããïŒ ãµããããã§ãããã¬ã ã«å¯Ÿãããã©ã€ã°ããããŠããªããïŒ è¡åããåã«æ¢åã®äŸ¡å€èгã§å€æããŠããŸã£ãŠããªããïŒ å€åã®æä»£ã ãããããã£ã¬ã³ãžããŠã¿ããããã£ãŠã¿ãŠã倱æããŠãåŠç¿ããããããããå
容ã®ã»ãã·ã§ã³ã§ããããããŠãåè¿°ã®ããã«èæ¯ã«ã¹ã©ã€ããæåœ±ãããšããçºè¡šã«ãã£ã¬ã³ãžããããšã§ããããäŒããŠããã ããå
容ã ã£ããšæããŸãããã®çºè¡šãèãã ãã§ãã€ãã³ãã«åå ãã䟡å€ã®ããå
容ã§ããã ç»å£ã¬ããŒã 2æ¥ç®ã¯19ãã©ãã¯ã«åãããŠåã»ãã·ã§ã³ãè¡ãããŸãããã»ãã·ã§ã³ã ãã§ãªããåã³ãã¥ã ãã£ãŒ ã®Discordãã£ã³ãã«ã§ã¯æ§ã
ãªæ
å ±äº€æããããŠããŠãšãŠãè³ãã£ãŠããŸããã ã¡ãªã¿ã«ãã»ãã·ã§ã³ã¯é²ç»ããïŒç»å£è
ãæ¿è«Ÿããå ŽåïŒãåœæ¥ã®åå è
ã«ã¯çŽ1ã¶æéå
¬éãããŠããã®ã§ã19ãã©ãã¯ã®çºè¡šãåŸæ¥ãã£ããèŠãããšãã§ããŸããã¢ãã¿ãŒã€ãã³ããšããŠãé²ç»è©ŠèŽäŒãªã©ãéå¬ãããŠããŸããããããªã³ã©ã€ã³ã€ãã³ãã®æ°ããªã¹ã¿ã€ã«ã§ãã æåŸã«ãåŒç€Ÿããç»å£ãããŠé ããå
容ã«ã€ããŠã¬ããŒããããŠãã ããã ã¹ã¯ã©ã ã¡ããããªãšèšãããŠããã£ãŠã¿ãã²ãïŒ ã¹ã¯ã©ã ã¯çè§£ã¯å®¹æã§ãããç¿åŸã¯å°é£ã ãšèšãããŠããŸããå®éã«ããããšãããšãæã£ããšããã§ããªããšæããããšãå€ã
ãããŸããç¹ã«æã
ã®ãããªäžå°äŒæ¥ã®éçºã®çŸå Žã§ã¯å¶çŽãå€ããé·å¹Žãã£ãŠããåŸæ¥åã® éçºããã»ã¹ ãå
šãŠå·æ°ããŠå
åç°å¢ãæŽããŠãã ã¹ã¯ã©ã ãå°å
¥ã§ããã±ãŒã¹ã¯çšã§ãïŒãã¡ããäžå°äŒæ¥ã§ã¯ãªããŠãæ§ã
ãªå¶çŽã¯ãããšæããŸãããä»åã®çºè¡šã¯æã
ã®å¢éã«èŠç¹ãããŠãå
容ã«ãªã£ãŠããŸãïŒãåãå¢éã®æ¹ã
ã«æã
ã®åãçµã¿ãåèã«ãªãã°ãšã®æãã§çºè¡šãããŠããã ããŸããã ã¹ã¯ã©ã ã¡ããããªåé¡ å°ãã〠ã«ã€ãŒã³ ãã ã«ã€ãŒã³ æåãã€ããã«ã¯ããŸã ã¹ã¯ã©ã ã®ããŒã¹ãšãèšãã PDCA ãåãç¶æ
ãã€ããããšã§ãã課é¡ãå±±ç©ããŠããŠããããšã¯èªèããŠããŠããèšç»ãç«ãŠãŠãå®è¡åŸã«æ¯ãè¿ãæµããç¿æ
£åããŠããªããã° ã«ã€ãŒã³ ã¯é²ã¿ãŸããã ãããã§ãããããŒã ã§éçºããŠããç¶æ
ãã€ããããšã«çæããŸããåŸæ¥åã® éçºããã»ã¹ ã§ãããã課é¡ãã瞊å²ãã§æ
åœè
ã«æ¥åã ã¢ãµã€ ã³ãããé£ã®äººãäœããã£ãŠããããããããªãç¶æ
ã§ä»äºãããŠããç¶æ
ã§ããã¹ã±ãžã¥ãŒã«ãããžã¡ã³ãããã£ããè¡ããããŒã ãšããŠææãåºããç¶æ
ãã€ããããšã§ãåã®æŽ»åããããŒã ã®æŽ»åã«ãªãã ã«ã€ãŒã³ ãããŒã ã®æåã«ããåå°ãã§ããŸãã å°ãã〠ã«ã€ãŒã³ ããïŒç§ãã¡ã®å ŽåïŒ ããããå§¿ãæ¢ã ã«ã€ãŒã³ ã¯é²ã¿ãŸããããã〠ã¹ã¯ã©ã ã«ãªããã®ãŽãŒã«ãèŠããŸããã§ãããããã§ããŒã ãšããŠãäžå°äŒæ¥ã®ãšã³ãžãã¢ããŒã ãæ¥œã«ããã¢ãã«ãã€ããããšããããžã§ã³ãèšå®ããããã«å°éãããŸã§ã®ããŒãããããã€ãããŸãããããŒããããã®æ®µéãèžãã§ããããšã§ ã¹ã¯ã©ã ã«è¿ã¥ããããŒã ã®ããã¹ãå§¿ã«å°éãããã®ã§ãã ããŒã ã®ããŒãããã ååãåå°ã«ãã ããŒã ã®ããŒãããããã€ãã£ãŠé²ããŠãããã®ã®ãèªåãã¡ã®èŠç¹ã«åã£ãŠããŠé¡§å®¢èŠç¹ãæãŠãŠããªãããšã«æ°ã¥ããŸãããèªåãã¡ã® ã«ã€ãŒã³ ãé²ããŠããŒã ãã¢ããããŒãããŠã顧客ã«äŸ¡å€ãå±ããããªããã°æå³ããããŸããã ã¢ãžã£ã€ã« ã®ååã«ç«ã¡è¿ãã°åœããåã®ããšãã§ããŠããªããšæ°ã¥ããã®ã§ãã ååã«ãããªãã çµéšããåŠã¶ ãããã®åãçµã¿ããã ã«ã€ãŒã³ ãšããããå§¿ãååã®åå°ã3ã€ã®æ±ãšããŠçµéšããªããåŠã¶ããšã§ ã¹ã¯ã©ã ã«è¿ã¥ããšèããŸãããããã¯çµéšåŠç¿ãšããã¢ãã«ãããŒã¹ã«ããŠããŸãã çµéšããåŠã¶ããŒã ã§ ã¹ã¯ã©ã ã«è¿ã¥ã ã ã¹ã¯ã©ã ã¡ããããªãããå§ãŸã çµéšããåŠã¶ã¢ãã«ã®äžå¿ã«ã¯ãææ¬²ãšä¿¡é ŒãããããŸããç§ãã¡ã¯ã ã¹ã¯ã©ã ã¡ããããªããšæããŠæ©ãã ãšããäœããå€ããããšããææ¬²ãæã£ãŠããŸããã€ãŸãã ã¹ã¯ã©ã ã¡ããããªããšæããããšã¯çµéšããåŠãã§ ã¹ã¯ã©ã ã«è¿ã¥ãã¹ã¿ãŒãå°ç¹ãªã®ã§ãã ã¹ã¯ã©ã ã¡ããããªããå§ãŸã ãªã³ã©ã€ã³ãªãã§ã¯ã®ãã£ã¬ã³ãž ã¹ã©ã€ãã§ã¯ããããŸããããã€ãã³ãåœæ¥ã¯éäžã§ãã³ãåãã®æãããã³ããå
¥ããéšåãããããããé²é³ããŠãããåæé³å£°ãæµãããšã§èªåèªçããé°å²æ°ãæŒåºããŠã¿ãŸããããããç§ãªãã®ãªã³ã©ã€ã³ãªãã§ã¯ã®ãã£ã¬ã³ãžã§ãã ãã³ã«ããããã³ã ãµãããããéèŠã§ã¯ãªãïŒïŒãµããããã®æŽ»çšæ¹æ³ã«ã€ã㊠åŒç€Ÿãããã1åããµããããã«ã€ããŠçºè¡šãããŠé ããŸãããçºè¡šã¯åå è
ãšäžç·ã«ãµããããã«ã€ããŠèããã¹ã¿ã€ã«ã«ãªã£ãŠãããDiscordã®ãã£ã³ãã«ã§æ§ã
ãªæèŠãå
±æãããŠããŸãããããããŸããªã³ã©ã€ã³ãªãã§ã¯ã®ã¹ã¿ã€ã«ã§ãã retrospective.connpass.com ãã®çºè¡šã¯ãåæŒã€ãã³ããäŒç»ãããŠããŸãã®ã§å
容ã®ç޹ä»ã¯å²æãããŠé ããŸããèå³ã®ããããã¯ãã²ã€ãã³ãã«ãåå ãã ããã éç§©åºãä¹ãããªã ã¢ãžã£ã€ã« ãªã€ãã³ãã§ãã ã€ãã³ãå
šäœãéããŠãåå è
å
šå¡ã§å€åã«åãåã£ãŠé©å¿ããããšåãçµã¿ãã¿ããªã§ã€ãã³ãã®æ°ãã圢ãã€ãããããŠãã空æ°ã«æº¢ããŠããŸãããã€ãã³ãèªäœã ã¢ãžã£ã€ã« ãªäœéšã ã£ããšèšããŸãã ãªã³ã©ã€ã³ã§ã®ãã®ãããªã€ãã³ãã¯äžçã¬ãã«ã§ã¿ãŠããŸã äºäŸãå°ãªãã®ã§ã¯ãªãããšæããŸãããããªäžã§æçµçã«500人以äžãDiscordã«éãŸãå€§çæ³ã®ã€ãã³ããšãªã£ãããã§ãããããªã€ãã³ããäœãäžããå®è¡å§å¡ã®ã¿ãªããã®ã³ã¡ã³ããè£è©±ã Youtube ã§å
¬éãããŠããŸãã®ã§åãããŠã芧ãã ããã ã¹ã¯ã©ã ãã§ã¹å€§éª éå¬äžã«å®è¡å§å¡ãææ
šãèªã Discordã®ãã£ã³ãã«ã§ã¯çŸåšãæ§ã
ãªæ
å ±äº€æãè¡ãããŠããããã®åºæ¿ãåããŠåå è
ãããããã®çŸå Žã§æ¬¡ã®Scrum Festã«åããåãçµã¿ãã¹ã¿ãŒããããŠããŸããç§ãã¡ããŸã次åã®ã€ãã³ãã§æ¡æãããããã«ãã£ã¬ã³ãžãç¶ããããšæã£ãŠããŸãã åŒç€Ÿã§ãæ§ã
ãªãªã³ã©ã€ã³ã€ãã³ããäŒç»ãããŠãããåãçµã¿å
容ãå
±æããŠããŸãã7ææ«ã«ã¯æ¥œæ¥œæçްéçºããŒã ã® ã¹ã¯ã©ã äºäŸã®çºè¡šãäºå®ãããŠããŸãããããããã°ãã²ãåå ãã ããã rakus.connpass.com
ã¯ããã« ãããã«ã¡ã¯ãtuq376sã§ããä»åã¯æè¿è§Šãå§ããE2Eãã¹ãã® ãã¬ãŒã ã¯ãŒã¯ ã TestCafe ã§ã®åæ©çãªç»é¢æäœã«ã€ããŠãŸãšããããšæããŸãã ããšããã®ããTestCafeã¯TypeScriptãçšããŠèšè¿°ããã®ã§ããã ããããèªåãTypeScriptãåããŠãã€ã JavaScript ãèªä¿¡ãæã£ãŠããããæžããïŒããšã¯èšããªãã¬ãã«ãªã®ã§ã ãŸãã¯ãããæžãã°ãšããããåäœãããããèŠããŠããããšããæ¬¡ç¬¬ã§ãã ã ã¯ããã« ã¢ã¯ã»ã¹å
ãšãã¹ãã±ãŒã¹ èŠçŽ ãååŸ ã¯ãªã㯠ããã¹ããã£ãŒã«ããžã®å
¥å ãã¡ã€ã«ã¢ããããŒã ãããã« ã¢ã¯ã»ã¹å
ãšãã¹ãã±ãŒã¹ ããŸãã¯ã¢ã¯ã»ã¹å
ã®æå®ãšãã¹ãã±ãŒã¹ã®æžãæ¹ããã fixture("ãµã³ãã«").page("https://hogehoge/"); test("ãã¹ãã±ãŒã¹1" , async (t) => { //ãã¹ãå
容 }); test("ãã¹ãã±ãŒã¹2" , async (t) => { //ãã¹ãå
容 }); ã fixture ã¯è€æ°ã®ãã¹ãã±ãŒã¹ããŸãšããã«ããŽãªã®åœ¹å²ãæãããŸãã ãããŠç¶ã .page ã¯å§ãã«ã¢ã¯ã»ã¹ããURLãæå®ããŠããŸãã .beforeEach ã .afterEach ã§äºåã»äºåŸåŠçãèšè¿°ããããšãã§ããããã§ãã ãå®éã®ãã¹ãã±ãŒã¹ã¯ test ã§å®£èšããŸããå®è¡çµæã§ã¯ãã®ãã¹ãã±ãŒã¹ããšã«æåãšå€±æãè¿ããã圢ã«ãªããŸãã èŠçŽ ãååŸ ãããããã®å
容ã¯ã test ã®äžã§æžããŠãããŸãã ãŸãã¯ç»é¢ãæäœããŠããããã«ãããŒãžäžã®èŠçŽ ã倿°ã«ååŸããŠãããŸãã const button = Selector('input').withAttribute("value","ãã¿ã³").nth(0); ã Selector ã¯æå®ããèŠçŽ ãååŸããŸããããã«ã¯ã¿ã°åã ãã§ã¯ãªããclass ã id ãæå®ããããšãã§ããŸãã ã WithAttribute ã¯ã屿§ã®ååãšå€ã§èŠçŽ ãçµã蟌ã¿ãŸãããªã³ã¯ããã¿ã³ãªã©ã§ããã°ãã ãããããã§äžæã«çµããã®ã§ã¯ãªãããšæããŸãã ãããã§ãäžæã«ãªããªãæïŒèªåã¯åã屿§ãæã£ãèŠçŽ ã䞊ã¶äžèЧç»é¢ã§ã€ãŸã¥ããŸããïŒã䟿å©ãªã®ã nth ã§ããããã¯æ¡ä»¶ã«äžèŽããèŠçŽ ã®ãã¡ãäžããäœçªç®ã®èŠçŽ ãååŸããããæå®ã§ããŸãããããçŽ æµãªã®ã¯ãHTMLäžã§äœçªç®ã«ãªãããåãã§ããã°ããã屿§ã®å€ã倿ŽããããšããŠããã¹ãã³ãŒããæžãçŽããã«æžããšããã§ãã ã¯ãªã㯠ãããŠãããããç»é¢èªäœã®æäœã§ãã await t.click('#nextLink'); ãã¯ãªãã¯æäœã¯ click ã§è¡ããŸããèŠçŽ ã®æå®ã¯äžèšã®ããã«idãçŽæ¥æžããããå
ã»ã©ã®Selectorã§ååŸãããã®ãæž¡ãããããŸãã ãããã§æå®ãããã®ãè€æ°ã«è©²åœããŠããŸã£ãŠãããšããšã©ãŒã«ãªã£ãŠããŸããŸãã®ã§æ³šæã§ããïŒäŸãã°äžã€ãããã¿ã³ããªããšæã£ãŠããããå®ã¯hiddenç¶æ
ã®åããã¿ã³ãããäžã€ååšããŠãããšãâŠâŠãããŸããïŒ ããã¹ããã£ãŒã«ããžã®å
¥å ãç¶ããŠãããã¹ããã£ãŒã«ããžã®å
¥åæäœã«ã€ããŠã§ãã const textArea = Selector('input').withAttribute("name","å
¥åå Žæ"); await t.typeText(textArea, "å
¥åãããå€"); ã typeText ãçšããŸããSelectorã§ååŸããããã¹ããšãªã¢èŠçŽ ãšãå
¥åããå€ãæå®ããŸãã ãã©ãããæå®ããèŠçŽ ãã¯ãªãã¯ããŠãã©ãŒã«ã¹ããŠããå
¥åãè¡ã£ãŠããããã§ãã¯ãªãã¯ããæ®µéã§æ£ãããã©ãŒã«ã¹ã§ããªãã£ãå Žåãæžã蟌ã¿ã¯è¡ãããªãããã§ãã ãã¡ã€ã«ã¢ããããŒã ãæåŸã«ããã¡ã€ã«ãã¢ããããŒãããæäœã§ãã await t.setFilesToUpload(linkInputFile, "ãã¡ã€ã«ãã¹"); ã setFilesToUpload ã䜿ã£ãŠããã¡ã€ã«ãèšå®ããèŠçŽ ãšãã¡ã€ã«ãã¹ãèšè¿°ããŸãããã¡ã€ã«ãã¹ã¯ [ 'ãã¡ã€ã«1', 'ãã¡ã€ã«2', 'ãã¡ã€ã«3' ] ãšãã£ãããã«è€æ°ãæå®ããããšãå¯èœã§ãã ãããã« ããšããããã§ããããããããã°æäœéãã¹ãã±ãŒã¹ãäœã£ãŠç»é¢æäœããŠã¿ãããšããããšã¯ã§ããã¯ãã§ãã ããã¹ããšèšãã€ã€ ã¢ãµãŒã·ã§ã³ ã«ã¯è§ŠããããŠããŸãããããã¡ãã¯ãŸãããå°ãçè§£ã§ãããããããèšäºã«ããŠã¿ãããªãšæããŸãã
ã¯ããã« æè¡åºå ±ã®itoken1013ã§ããããã«ã¡ã¯ã å
æ¥6/17(æ°Ž) ãåœç€Ÿäž»å¬ã®Meetup ãSaaSãæ¯ããå質æ
ä¿è¡/ã¬ã¬ã·ãŒã³ãŒããã¢ãŒããã¯ãã£ãEOLã ãéå¬ããããŸããã ä»ã ã©ã¯ ã¹ã®æäŸè¡äºãšãªããŸããMeetupã§ãããä»åã¯åã®ãªã³ã©ã€ã³éå¬ãšãªãã 40åè¶
ã®ã客æ§ã«ãåå ããã ããŸããã ä»åã¯åœæ¥ã®çºè¡šå
容ã«ã€ããŠãç°¡åã«ã玹ä»ããããŠããã ããã°ãšæããŸãã ã€ãã³ãããŒãæŠèŠ ã©ã¯ ã¹ã§ã¯æ°å€ãã® to B åã SaaS ã®éçºãè¡ã£ãŠããŸãã ãµãŒãã¹ã«ã¯ããããæ°ãã«ãªãªãŒã¹äºå®ã®ãã®ãããã°ã ã¯ã©ãŠã ãµãŒãã¹ã®é»ææããååšããæŽå²ã®æ·±ããµãŒãã¹ãŸã§ãå€ãã®ã客æ§ã®ãæ¯æã«ãã£ãŠå¹
åºãå±éãããŠããã ããŠããŸãã ä»åã¯ãããªãµãŒãã¹ã®äžãã代衚ãã以äžã®3ã€ã®ãµãŒãã¹ãã©ã®ãããªå質æ
ä¿ãè¡ã£ãŠãããããšã³ãžãã¢ãã玹ä»ãããŠããã ããŸããã ã¡ãŒã«ãã£ãŒã©ãŒ ãã£ãããã£ãŒã©ãŒ 楜楜åŽå çºè¡šã®çŽ¹ä» ç€Ÿå
æé·èã®ã·ã¹ãã ã« PHPUnit ã§ç«ã¡åããæ¹æ³ ãªãªãŒã¹ãã18幎ã»ã©çšŒåããŠããã¡ãŒã«ãã£ãŒã©ãŒãæ
åœäžã®æ³ç¬ããã EOLãè¿ãã PHP ãããŒãžã§ã³ã¢ããããéã®çµéšã玹ä»ãããŠããã ããŸããã åœæ PHP æŽ3ã«æã ã£ãæ³ç¬ãçŽé¢ããçªç¶ã®å
šæ©èœãã¹ããä¹ãè¶ããäºäŸã«ã€ããŠãèªãããŠããŸãã speakerdeck.com æ£æ»æ³ã¯ããã®ã !? æ³¥èãæŠã£ã Node.js ããŒãžã§ã³ã¢ããäžéšå§çµ 次ã¯åããEOLãè¿ããNode.jsã 6ç³» â 10ç³»ã«ããŒãžã§ã³ã¢ããããããšãšãªã£ããã£ãããã£ãŒã©ãŒã§ã®æ¿å¯ãªæŠããã西åãçºè¡šãããŠããã ããŸããã 調æ»ã»ãã¹ãïŒÃ 3åïŒã»ãªãªãŒã¹åŸã®ãã©ãã«å¯Ÿå¿ãããããåŸãåŠã³ã瀺ãããŠããŸãã ã¿ã€ãã«ã®éããæ³¥èãããŒãžã§ã³ã¢ãããã«ãã³ãšæ¥ãæ¹ã«ã¯ãå
±æãããã ããã¯ãã§ãã Rakus MeetUp æ£æ»æ³ã¯ããã®ã!?æ³¥èãæŠã£ãNode.jsããŒãžã§ã³ã¢ããäžéšå§çµ from masatonishihara www.slideshare.net ArchUnit ã§ Java / Kotlin ã¢ããªã±ãŒã·ã§ã³ã® ã¢ãŒããã¯ã㣠ã CI ãã æåŸã¯åœç€Ÿã®ãªãŒããšã³ãžãã¢ã§ããå·äžŠã§ãã éçºããã»ã¹ ã®äžã§ã³ãŒãã¬ãã¥ãŒã¯åãå
¥ããããŠããŠãã ã¢ãŒããã¯ã㣠芳ç¹ã§ã®ã¬ãã¥ãŒãå
šå¡ãåãèšèšã¬ãã«ã§éçºãè¡ãã®ã¯ãé£æåºŠãé«ãããšããšæããŸãã å·äžŠãæ
åœããæ¥œæ¥œ åŽå ã§ã¯ãããªåé¡ã«å¯Ÿãã ArchUnit ã䜿ã£ã ã¢ãŒããã¯ã㣠芳ç¹ã§ã®å質æ
ä¿ã«åãçµãã§ããŸãã speakerdeck.com çµããã« åã®ãªã³ã©ã€ã³éå¬ãšãªããŸããMeetupã§ããããåå ããã ããŸããçæ§ã®ãããã§ã é«ãæºè¶³åºŠãããã ãããšãã§ããŸããã Meetupã¯æ¥æã»åæ¥æãéå¬ãäºå®ããŠãããŸãã®ã§ããèå³ã®ããæ¹ã¯ãç³èŸŒã¿ããã ããŸããšå¹žãã§ãã 詳ããã€ãã³ãæ
å ±ã«ã€ããŠã¯ãConnpassãã確èªãã ããã ããããšãããããŸããïŒ rakus.connpass.com
ä»åŸã®æ°ãµãŒãã¹ã®ç«ã¡äžãã«åããŠæè¡æ€èšŒãè¡ãæè¡æšé²èª²ã«æå±ããŠããéŽæšïŒ @moomooya ïŒã§ããä»å¹ŽåºŠããæ°èšã®éšçœ²ã«ïŒèª²é·ãšãµãããŒã£ã¡ã§ïŒç°åãšãªããŸããã æè¿ãã€ã¯ããµãŒãã¹ãšé¢é£ã㊠ãªããžã§ã¯ãæå ã«ã€ããŠåãçµãã§ããã®ã§ã ãã¡ãã« ã®æ³åã«é¢ããèšäºãæžããŠã¿ãããšæããŸããã¿ã€ãã«ã¯1床ãããç
œãã¿ã€ãã«ãã€ããŠã¿ããã£ãã®ã§åºæ¥å¿ã§ãã ãã¡ãã« ã®æ³åã£ãŠïŒ ãã¡ãã« ã®æ³å(LoD: Law of Demeter)㯠ããŒã¹ã€ãŒã¹ã¿ã³å€§åŠã§äœæãããã¬ã€ãã©ã€ã³ ãåå
žãšãªãã é人ããã°ã©ã㌠ã§ãïŒããŸã詳ããã¯æžãããŠããŸãããïŒç޹ä»ãããŠããŸãã ã¡ãªã¿ã«ã¿ããªå€§å¥œã Wikipedia ã§ã¯ãã®ããã«èª¬æãããŠããŸãã ç°¡æœã«èšããšãçŽæ¥ã®åéãšã ã話ãããšããšèŠçŽã§ãããåºæ¬çãªèãæ¹ã¯ãä»»æã®ãªããžã§ã¯ããèªå以å€ïŒãµã ã³ã³ããŒãã³ã å«ãïŒã®æ§é ãããããã£ã«å¯ŸããŠæã£ãŠããä»®å®ãæå°éã«ãã¹ãã§ãããšããç¹ã«ããã ââ Wikipedia - ãã¡ãã«ã®æ³å ããæç² ãªããšãªãããããŸãããå®è£
ã¬ãã«ã§ã©ãããã°ããã®ãçè§£ããã«ã¯ããå°ã説æãã»ãããšããã§ããå
·äœçãªå¯Ÿå¿æ¹æ³ãšããŠã¯ ãã¡ã³ããçŽæ¥åç
§ããã«ã¢ã¯ã»ããµïŒgetter/setterïŒçµç±ã§åç
§ããã°ããã ãšã ããªããžã§ã¯ãã®ã¡ã³ããçŽæ¥åç
§ããªãã ããªããžã§ã¯ãã®ã¡ã³ãã®ã¡ã³ããçŽæ¥åç
§ããªãã ãšããèšãããŠããŸãã Java ã®ãµã³ãã«ã³ãŒãã§èŠãŠã¿ãŸãããããé¡ã¯ä¹ãç©ã§ãã // Demeter1.java class Engine { // ãšã³ãžã³ã¯ã©ã¹ String status; } class Vehicle { // ä¹ãç©ã¯ã©ã¹ Engine engine; Vehicle() { engine = new Engine(); } } public class Demeter { public static void main(String[] args) { Vehicle vehicle = new Vehicle(); vehicle.engine.status = "çºé²" ; // ÃÃÃãªããžã§ã¯ãã®å
éšãçŽæ¥æäœããªãÃÃà System.out.println(vehicle.engine.status); } } ãã㯠vehicle.engine.status ã§çŽæ¥åç
§ããŠãããã ãã¡ãã« ã®æ³åã«éåããŠããäŸã§ãã ãã¡ã³ããçŽæ¥åç
§ããã«ã¢ã¯ã»ããµïŒgetter/setterïŒçµç±ã§åç
§ããã°ããããã§ããïŒ // Demeter2.java class Engine { protected String status; // â
getter/setteräœã£ã String getStatus() { return status; } void setStatus(String status) { this .status = status; } } class Vehicle { protected Engine engine; Vehicle() { engine = new Engine(); } // â
getteräœã£ã Engine getEngine() { return engine; } } public class Demeter { public static void main(String[] args) { Vehicle vehicle = new Vehicle(); vehicle.getEngine().setStatus( "çºé²" ); // â
getter/setter䜿ã£ãп޿° System.out.println(vehicle.getEngine().getStatus()); } } ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã坿ãããšâŠâŠ ã¡ã³ã倿°åã«ãã®ãŸãŸget/setãã€ããã¡ãœãããçšæãããšããã§æ¬è³ªçã«ã¯äœãå€ãã£ãŠããŸããã ãã ã®çŽ çŽãïŒ ã¡ã³ãã protected (ãŸã㯠private ã§ã)ã«ããŠããã®ã§ãªãŒããªã³ãªãŒïŒã©ã€ããªã³ãªãŒãªã©ã®å¶åŸ¡ã¯å¯èœã§ãã ççµå ã«ã¯ãªããŸããã ãã®ãžã㯠IDE ã®å眪 ãšãããgetter/setterã®èªåçæã«ãã£ãŠæŽè³ãããŠããŸã£ãŠãã人ãçµæ§ããæ°ãããŸãã ããã«èšãã° vehicle.getEngine().setStatus("çºé²"); ã®éšåããªããžã§ã¯ãã®å
éšæ§é (Vehicleå
ã®Engineã®æ§é )ãæèããŠããŸã£ãŠããŸãã ããªããžã§ã¯ãã®ã¡ã³ãã®ã¡ã³ããçŽæ¥åç
§ããªããããã«ããã°ããã®ïŒ // Demeter3.java class Engine { protected String status; String getStatus() { return status; } void setStatus(String status) { this .status = status; } } class Vehicle { protected Engine engine; Vehicle() { engine = new Engine(); } Engine getEngine() { return engine; } // â
engineçšã®getter/setteräœã£ã String getEngineStatus() { return engine.getStatus(); } void setEngineStatus(String status) { engine.setStatus(status); } } public class Demeter { public static void main(String[] args) { Vehicle vehicle = new Vehicle(); vehicle.setEngineStatus( "çºé²" ); // â
Engineã®ã¡ãœãããå©çš System.out.println(vehicle.getEngineStatus()); } } ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ` ïŸ|㥠_äº,ãããã''''ïŒã _äº,ã | ãœãœ_ã_ã_ã_|ã:/ãïŸ å
¥å ã _ã ããï¿£ïŒï¿£ã _ãã |__äž¿ã} .-'ãïŸ ãã{_,,ã.| ãïœï¿£ãããããããã ïœ ããã,,...-=ããããïŸãœïœ€ ãã/ã////////////ïŸ ã./ã;;;;;:////////////} ã{:::ïŸããïœãŸ/////////ïŸ ã.{;;;;:ããã: :.////////ïŸ ãrïŸ_,,,,,;;;::://////â, ã{iïŸãi77777ïŸ77777!ã:/ ããœ.ã___ãã::ã_;;;;//ïŸ ã ã ',ãã::i ,//////{ãããããããã, ãã ã',ã ,圡//////ïŒïœ€ïŒ¿ïŒ¿ïŒ¿__//ã ãããããœÂŽï¿£;///////////////////-=ïœ â''"{: : :._;;;/////////////////////// : : : |: : : :. /ã//: : /ã..:::".:://///////ïŸ : ïŸ: :.|: : : : :{'ãã ïœ/: :ïŒ...:....::////////////ïŸ ïœ€: :ãœ:{: : : : :.}ãã /ïŒ: ::://////////////ïŸ : : :{: : : : :.}ã ïŒ:::: : : : ://///////////ïŸ : : : ãœïŸ: : : :.!ïŒ: :::::::::..: : : : :.ãœ////////////} : : : : : ,'": : :.::::::::::::::.: : : ïŒ////////////ïŸ : : : :ïŒ'i: :::.:.:.: :::::::::::::::::: :///////////////// : ://:./:âª:::::::: ::::::::::::::::://///////////////// :ïŒ;': /::: : ::::::::: ::::::::::::://///////////â ////// : ïŒ:::: : : :::::: ::::::://///////////'''`ãã:ãœ://// .: : : : : :::: :::ïŒ///////////ã: : :::::.: :::::///// ã /ãœ; : : : ïŒ////////-'''":{::::.: : : :::::::::::///// . /: r.äºïœ€:{: : : ïŒ':::::: : : ::: : :ã: ::.:.::::::::////ïŒ /: : ã-ãïœãœ-{: : : : : : : :::::.:.:.:.:::::://////ïŒ {: : :._ïŒããããâš: : : ::::: : : : :.///////ïŒ Vehicle ãš Engine ã®é¢é£ã Vehicle å
ã«ç§»è²ããŠããã®ã§ã ãã¶è¯ããªã£ãŠã¯ããŸããããã ãš Engine ïŒååæ©ïŒã Human ïŒäººåïŒã«å€ãã£ããšããŠã Vehicle ã®ä¿®æ£ã ãã§æžã¿ãmainã¡ãœããã¯å
éšæ§é ïŒååïŒãæèããªããŠãããªããŸããã ããã Engine ã®ã¹ããŒã¿ã¹ã "çºé²" ãªã®ã 1 ãªã®ãã¯mainã¡ãœããåŽã§ã¯æèããå¿
èŠããªããã®ã§ãã ããã«çŸå®çãªå®è£
ãšããŠæäœå
ã®ãªããžã§ã¯ããæºåå®äºãã©ãããå€å®ããŠããã¹ããŒã¿ã¹æŽæ°ãè¡ããšæããŸãã // Demeter4.java class Engine { // ...ç¥... } class Vehicle { // ...ç¥... // â
ååããããè¿ã boolean isReady() { return engine != null ; } } public class Demeter { public static void main(String[] args) { Vehicle vehicle = new Vehicle(); if (vehicle.isReady()) { // â
ååãããããã§ã㯠vehicle.setEngineStatus( "çºé²" ); } System.out.println(vehicle.getEngineStatus()); } } ãããªæãã å°ãããªãåœãã (Tell, Don't Ask) ã§ãçµå±ã©ããããã ããšãã話ã§ãããããããã®ãè¯ããšãããŠããŸãã // Demeter.java class Engine { // ...ç¥... } class Vehicle { protected Engine engine; Vehicle() { engine = new Engine(); } // â
é²ãããã®åŠç // engineãžã®æäœã¯ããã§è¡ã void start() throws Exception { if (engine != null ) { engine.setStatus( "çºé²" ); } else { throw new Exception( "ãšã³ãžã³çãŸãã" ); } } // â
Vehicleã®ç¶æ
ãšããŠè¿ã String getStatus() { // å¿
èŠã«å¿ããŠæŽåœ¢ïŒããã§ã¯ãã®ãŸãŸè¿ãïŒ return engine.getStatus(); } } public class Demeter { public static void main(String[] args) { Vehicle vehicle = new Vehicle(); try { vehicle.start(); // â
ãã ãé²ãããšåœãã System.out.println(vehicle.getStatus()); // â
vehicleã®ç¶æ
ãšããŠååŸ } catch (Exception e) { System.out.println(e); // â
ãã¡ãªãäŸå€åŠçïŒå Žåã«ãã£ãŠãšã©ãŒã³ãŒãåŠçã§ãïŒ } } } ããããããšã§mainã¡ãœãããã㯠Vehicle ã®ã¿ãæèããã°ããã Engine ãšã®ããšã¯ãã¹ãŠ Vehicle å
ã«éããããšã«ãªããŸãã ãããã°ãªã ããã¶ãæã«æå±ããŠããããŒã ã§ãgetter/setterãçµç±ããªããã°ãªããªããDA!!ããšããã坿ãã³ãŒãã䞻匵ããæ¹ãããã®ã§ãã int getA() { if (A == null ) { return B; } return A; } ãšãã£ãã³ãŒãæžããŠãã®ãçºèŠãããšãã«ãã[æ€é²åé€]ãã[æ€é²åé€]ãã[æ€é²åé€]ããšãã£ãããšãå¿ã®äžã§å«ãã èšæ¶ãèããŸããã ãŸãšã ã€ã±ãŠãã€ã³ã¿ãã§ãŒã¹èšèšãå¿ãããŸãããã ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã rakus.hubspotpagebuilder.com ã©ã¯ ã¹Developersç»é²ãã©ãŒã https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ âTECH PLAY techplay.jp âconnpass rakus.connpass.com
ã¯ããã« ããã«ã¡ã¯ã id:FM_Harmony ã§ãã Rakus Developers Blogã§ã¯çŽäžå¹Žæ¯ãã®æçš¿ã«ãªããŸãã ããŠãä»å¹Žããæ¥œæ¥œç²Ÿç®ã® ã¹ããŒããã©ã³ ã¢ããªéçº ã«æºããããšãšãªããæ¥åç¥èãšããŠSwiftãåŠç¿ããŠããŸãã ããã§ãä»åã¯Swiftã®ãããªãšæã£ãç®æã«ã€ããŠãç°¡åã«ãŸãšããŠã¿ãŸããã ããããSwiftã®åŠç¿ãå§ããæ¹ã«ãSwiftã®è¯ããäŒããããã°å¹žãã§ãã ã¯ããã« ãããšããâ ïŒåæšè« ãããšããâ¡ïŒnullã®åãæ±ã ãããšããâ¢ïŒæååè£å® ãããã« åèæç® ãããšããâ ïŒ åæšè« Swiftã¯éçåä»ãèšèªã§ããã åæšè« ãæã£ãŠããŸãã ãã®ããã倿°å®£èšæã¯å®æ°ãã©ããã®ã¿ãæèããã°ãããç°¡æœãªã³ãŒããæžãããšãã§ããŸãã var n = 1 print(type(of : n )) // â Int ãããšããâ¡ïŒnullã®åãæ±ã Swiftã§ã¯ã倿°ã«nullïŒ nil ïŒã代å
¥ããããã«ã¯ãOptionalåãšããŠå®£èšããå¿
èŠããããŸãã // var m = nil â ã³ã³ãã€ã«ãšã©ãŒ var n : Int ? = nil print(type(of : n )) // Optional<Int> Optionalåã¯ã¢ã³ã©ããããªããã°å©çšã§ããªããããnullãããããªãå€ãå®å
šã«å©çšããããšãã§ããŸãã ã¢ã³ã©ããããæ¹æ³ã®äžã€ã«ã if - let æ§æããããŸãã var n : Int ? = 1 print(n) // Optional(1) // n += 1 â ã³ã³ãã€ã«ãšã©ãŒ if let m = n { print(m) // 1 m += 1 } ãŸãã guard - else æ§æã«ãããOptionalã®å€ãnullã ã£ãå Žåã¯ãªã¿ãŒã³ããããã§ãªãå Žåã¯ã¢ã³ã©ããããå€ã倿°ã«ä»£å
¥ããããšãã£ãããšãã§ããŸãã guard let n = hoge() else { return } print(n) // â hoge()ã®æ»ãå€ãnilã§ãªããã°ããã®æ»ãå€ã衚瀺ãã guard - else æ§æã§ã¯ãè€æ°ã®å€æ°ã«ä»£å
¥ããããšãã§ããŸãã guard let m = hoge(), let n = fuga() else { return } print(m) print(n) // â hoge()ãfuga()ã®æ»ãå€ãnilã§ãªããã°ããã®æ»ãå€ã衚瀺ãã ãããšããâ¢ïŒæååè£å® æåå ãªãã©ã« ã«ã \(倿°) ãšãã圢ã§å€æ°ã®å€ãåã蟌ãããšãã§ããŸãã 倿°ã®å€ãšæåå ãªãã©ã« ã®çµåãã§ããã®ã§ãããæååè£å®ãå©çšããæ¹ãç°¡æœãªã³ãŒããæžãããšãã§ããŸãã let year = 2020 let month = 6 let day = 24 print( " \(year) 幎 \(month) æ \(day) æ¥" ) // 2020幎6æ24æ¥ ãããã« ãããã§ããã§ããããã Swiftã䜿ãããšã§ãç°¡æœãã€å®å
šãªã³ãŒããæžãããšããããšãäŒããããŠããã°å¹žãã§ãã ä»ã«ããextensionãprotocolã ã¯ããŒãžã£ ãšããããã«ãéå»ã®èšäºã§ç޹ä»ãããŠããææ³ããããŸãã tech-blog.rakus.co.jp tech-blog.rakus.co.jp ãããã£ããã®ã«ã€ããŠãä»åŸçè§£ãæ·±ããŠããã ã¹ããŒããã©ã³ ã¢ããªã®æ©èœéçºã«æŽ»ãããã°ãšæããŸãã åèæç® 詳现ïŒSwift 4 iPhoneã¢ããªéçº å
¥éããŒã Swift 4+Xcode 9å¯Ÿå¿ äœè
: 倧é çŸå¹ž ã¡ãã£ã¢: Kindle ç
ã¯ããã« ããã«ã¡ã¯ãitoken1013ã§ãã ä»å㯠Markdown ïŒããŒã¯ããŠã³ïŒ ã®è¶
å
¥éãšããŠãå©çšåºŠãé«ãèšæ³10éžã玹ä»ããŸãã å
¥ç€Ÿç ä¿®ãçµãã£ãŠé
å±å
ã®äžåžãå
茩ãšã³ãã¥ãã±ãŒã·ã§ã³ããšãããŠããæ°å
¥ç€Ÿå¡ã®æ¹ããåšå®
å€åã§ä»¥åããããªã³ã©ã€ã³ã³ãã¥ãã±ãŒã·ã§ã³ã®æ©äŒãå¢ããæ¹ã«ã¯æ¯éãšãèŠããŠããã ãããèšæ³ã°ããã§ãã çæ§ã®æ¥ã
ã®ã³ãã¥ãã±ãŒã·ã§ã³ã«ã圹ç«ãŠãã ããïŒ ã¯ããã« ããããMarkdownïŒããŒã¯ããŠã³ïŒãšã¯äœã Markdownã䜿ãããšäœã䟿å©ã ã³ãã¥ãã±ãŒã·ã§ã³ãã¹ã ãŒãº ã«ãªã ããŒã«ãå€ãã£ãŠã䜿ãã ããã ãèŠããã°å®å¿ãªèšæ³10éž 1. èŠåºã ãªãŒããã³ã° Meetupã®çºè¡šå
容 â Twelve-Factor Appã§èªã¿è§£ããã¢ãã³ãªã¢ããªã®çæ³ãšã¬ã¬ã·ãŒãªã¢ããªã®çŸå® â¡éçºã°ã«ãŒããéçºããŒã ã«ãªããŸã§ã®æ©ã¿ â¢çµææŽåæ§ãã§ããªãéçºè
ã®ãã¡ã€ã³ã€ãã³ã掻çšäŸ 2. æ¹è¡ 3. ãªã¹ãïŒç®æ¡æžãïŒ 4. çªå·ä»ããªã¹ã 5. 衚ïŒããŒãã«ïŒ 6. 匷調ã倪æå 7. åãæ¶ãç· 8. ãªã³ã¯ 9. åŒçš 10. æ°Žå¹³ç· çµããã« ãããã Markdown ïŒããŒã¯ããŠã³ïŒãšã¯äœã æç« ã«èŠåºããç®æ¡æžããªã©ãæç« ã«ç°¡åã«è£
é£Ÿãæœãããã®èšè¿°æ³ã Markdown ïŒããŒã¯ããŠã³ïŒã§ãã ç°¡åãªèšè¿°ã«ãŒã«ã«åŸã£ãŠæç« ãäœæãããšHTMLãžå€æãããè£
é£Ÿãæœãããæç« ãåºæ¥äžãããŸãã äŸãšããŠä»¥äžã¯ ã©ã¯ã¹ã®ConnpassããŒãž ã§ã®ã€ãã³ãã®ç޹仿ã§ããããã ã®æåã®çŸ
åã§ããäžå³ãããã Markdown ã«ãã£ãŠè£
食ãããäžå³ã®æ¹ãå§åçã«èªã¿ãããããšããåããããã ããããšæããŸãã Markdown ãªã Markdown ãã ã¡ãªã¿ã« ã©ã¯ ã¹ã§ã¯ç€Ÿå
ã®ãã£ããããŒã«ã«Mattermostãæ¡çšããŠããããšãããã è¥æããéšé·ãŸã§ Markdown ã䜿ã£ãã³ãã¥ãã±ãŒã·ã§ã³ãæ¯æ¥è¡ãããŠããŸãã ãšã³ãžãã¢ä»¥å€ã§ãå©çšã§ããæ¹ã¯å€ãã§ãã Markdown ã䜿ãããšäœã䟿å©ã ã³ãã¥ãã±ãŒã·ã§ã³ãã¹ã ãŒãº ã«ãªã äžè¿°ã®ããã«æç« ã«æè»œã«è£
食ãå ããããšãã§ããå§åçã«æèŠãäŒãããããªããŸãã æ¥åžžã®ã³ãã¥ãã±ãŒã·ã§ã³ã®ä»ãè°äºé²ãIssueã§ãèªã¿ãããæç« ãäœæããããšãã§ããããã«ãªãã§ãããã ããŒã«ãå€ãã£ãŠã䜿ãã Markdown ãæ¡çšããŠããããŒã«ããµãŒãã¹ã¯æ°å€ãïŒä»¥äžïŒãäžåºŠèšæ³ãèŠããŠããããŸãã°ãå©çšããããŒã«ãå€ãã£ãŠãåæ§ã®èšæ³ã§æç« ãäœæããããšãå¯èœã§ãã ã¡ãªã¿ã«ãã®ããã°ã Markdown ã§æžããŠããŸãã GitHub Qiita åçš®ãšãã£ã¿ Mattermost Backlog ...etc ããã ãèŠããã°å®å¿ãªèšæ³10éž ããã§ã¯ä»£è¡šçãªèšæ³ã玹ä»ããŠãããŸãã ããã§ç޹ä»ãã10åã®èšæ³ã身ã«ã€ããã°ãæ®æ®µã®ã³ãã¥ãã±ãŒã·ã§ã³ã«å°ãããšã¯ç¡ããªãã¯ãã§ãã 1. èŠåºã ãŸãã¯èŠåºãïŒäŸ. 1ç« ã第5ç¯ãªã©ïŒã§ãã èŠåºãã衚çŸããã«ã¯ ã # + åè§ã¹ããŒã¹ ã ã®åŸãèŠåºãåãã€ããããšã§è¡šçŸã§ããŸãã ãŸã # ãéããããšã§ãèŠåºãã®éå±€ã衚çŸããããšãã§ããŸãã è°äºé²ã ã¢ãžã§ã³ã ã瀺ãéã«ã¯ã以äžã®ãããªèŠåºãããããšèªã¿ãããã§ãããã äŸãšããŠã以äžã§ã¯èŠåºã4ãš5ãçµã¿åãããŠããŸãã æžãæ¹äŸ #### ãªãŒããã³ã° #### Meetupã®çºè¡šå
容 ##### â Twelve-Factor Appã§èªã¿è§£ããã¢ãã³ãªã¢ããªã®çæ³ãšã¬ã¬ã·ãŒãªã¢ããªã®çŸå® ##### â¡éçºã°ã«ãŒããéçºããŒã ã«ãªããŸã§ã®æ©ã¿ ##### â¢çµææŽåæ§ãã§ããªãéçºè
ã®ãã¡ã€ã³ã€ãã³ã掻çšäŸ è¡šç€ºäŸ ãªãŒããã³ã° Meetupã®çºè¡šå
容 â Twelve-Factor Appã§èªã¿è§£ããã¢ãã³ãªã¢ããªã®çæ³ãšã¬ã¬ã·ãŒãªã¢ããªã®çŸå® â¡éçºã°ã«ãŒããéçºããŒã ã«ãªããŸã§ã®æ©ã¿ â¢çµææŽåæ§ãã§ããªãéçºè
ã® ãã¡ã€ã³ ã€ãã³ã掻çšäŸ 2. æ¹è¡ 次ã¯ã·ã³ãã«ã§ãããæ¹è¡ã§ãã æ¹è¡ã¯ææ«ã« åè§ã¹ããŒã¹2〠ãã€ããããšã§å®çŸã§ããŸãã æžãæ¹äŸ ææ«ã«åè§ã¹ããŒã¹ã2ã€ä»ãããšãæ¹è¡ã§ããŸããâ æ¹è¡ã§ããŸããã è¡šç€ºäŸ ææ«ã«åè§ã¹ããŒã¹ã2ã€ä»ãããšãæ¹è¡ã§ããŸããâ æ¹è¡ã§ããŸããã 3. ãªã¹ãïŒç®æ¡æžãïŒ å
é ã«ãã€ãã³ ãã€ããããšã§ãç®æ¡æžãã衚çŸããããšãã§ããŸãã ãŸã åè§ã¹ããŒã¹2ã€ã§ã€ã³ãã³ã ãã€ããããšã§ãéå±€æ§é ã瀺ãããšã§ããŸãã ããžã«ã«ã«èããäŒãããå Žåãªã©ãå€çšããã·ãŒã³ãéåžžã«å€ãèšæ³ã§ãã æžãæ¹äŸ - 奜ããªèšèª - Java - PHP - 奜ããªãšãã£ã¿ - VSCode - Vim - Typora - 奜ããªã¡ãã£ã¢ - ã¯ãŠãªããã¯ããŒã¯ - Qiita è¡šç€ºäŸ å¥œããªèšèª Java PHP 奜ããªãšãã£ã¿ VSCode Vim Typora 奜ããªã¡ãã£ã¢ ã¯ãŠãªããã¯ããŒã¯ Qiita 4. çªå·ä»ããªã¹ã å
é ã«çªå·ãã€ãããªã¹ãã衚瀺ãããå Žåã«ã¯ã å
é ã«çªå· ãä»ããŠè¡šçŸããŸãã ãŸãç®æ¡æžããšåæ§ãã€ã³ãã³ãã«ãã£ãŠéå±€æ§é ã瀺ãããšãå¯èœã§ãã æžãæ¹äŸ 1. äœã¿ããçº 1. éå 1. ç¥æ¥œå 1. è»çªª 1. éšå±ã®æ¡ä»¶ 1. éšé³ 1. ãããå¯ 1. é§
ããåŸæ©3å è¡šç€ºäŸ äœã¿ããçº éå ç¥æ¥œå è»çªª éšå±ã®æ¡ä»¶ éšé³ ãããå¯ é§
ããåŸæ©3å 5. 衚ïŒããŒãã«ïŒ 衚ã¯å°ãè€éã§ããã ãã€ã ãš ãã€ãã³ ã§äœæã§ããŸãã ãŸãããããŒãšåè¡ã®éã®1è¡ã«ã¯ãã€ãã³ãæå®ããå¿
èŠããããŸããã ãã€ãã³ã®å·Šå³ã« ã³ãã³ ãæå®ããããšã§ å³å¯ããå·Šå¯ããäžå€®æã ãæå®ããããšãã§ããŸãã æžãæ¹äŸ |æ¥ä» | ã«ããŽãªãŒ | ã€ãã³ãããŒã | |---:| :---: | :--- | |2020/6/17 | Meetup | SaaSãæ¯ããå質æ
ä¿è¡| |2020/6/19 | PHP | TechCafe| |2020/6/24 | Meetup | SaaSãæ¯ããéçºåå| |2020/6/26 | ãªããžã§ã¯ãæå | ãªããžã§ã¯ãæåLTäŒ| |å³å¯ã| äžå€®æã | å·Šå¯ã | è¡šç€ºäŸ æ¥ä» ã«ããŽãªãŒ ã€ãã³ãããŒã 2020/6/17 Meetup SaaS ãæ¯ããå質æ
ä¿è¡ 2020/6/19 PHP TechCafe 2020/6/24 Meetup SaaS ãæ¯ããéçºåå 2020/6/26 ãªããžã§ã¯ãæå ãªããžã§ã¯ãæå LTäŒ å³å¯ã äžå€®æã å·Šå¯ã 6. 匷調ã倪æå æç« ã®äžã§åŒ·èª¿ãããæèšãããå Žåã æèšã®ååŸã ã¢ã¹ã¿ãªã¹ã¯ ã§å²ã ããšã§è¡šçŸã§ããŸãã äžèŠããŠæ³šç®ãã€ã³ããã¢ããŒã«ã§ãããããå©çšé »åºŠãé«ãèšæ³ã®äžã€ã§ãã â»ããŒã«ã«ãã£ãŠ ã¢ã¹ã¿ãªã¹ã¯ ã®åæ°ãç°ãªãå ŽåããããããåããŒã«ã®ã¬ã€ãçã確èªãã ããã æžãæ¹äŸ 7æãã©ã¯ã¹ã®** Meetup **ãš** ååŒ·äŒ **ãç®çœæŒãã ãïŒïŒ è¡šç€ºäŸ 7æã ã©ã¯ ã¹ã® Meetup ãš ååŒ·äŒ ãç®çœæŒãã ãïŒïŒ 7. åãæ¶ãç· åãæ¶ãç·ã¯ æèšã®ååŸã ãã«ã ïŒ~~ïŒã§å²ã¿ãŸãã äžåºŠæžããæé¢ã«èª€ãã倿Žããã£ãå Žåãç§ã¯ãããã®åãæ¶ãç·ã䜿ããŸãã æžãæ¹äŸ ã¢ã³ã±ãŒãã®çµæãå
æã¯å®ã«~~80%~~ 90% ã®æ¹ããé«ãæºè¶³åºŠãåŸãããŸããïŒ è¡šç€ºäŸ ã¢ã³ã±ãŒãã®çµæãå
æã¯å®ã« 80% 90% ã®æ¹ããé«ãæºè¶³åºŠãåŸãããŸããïŒ 8. ãªã³ã¯ æ¥ã
ã®ã³ãã¥ãã±ãŒã·ã§ã³ã§ãåç
§å
ã®URLã玹ä»ããããšã¯å€ãããšæããŸãã URLã貌ãä»ããŠç€ºããŠãããã§ãããåéãå€ããªã£ãŠããŸãå Žåããã¡ãã®ãªã³ã¯èšæ³ã䟿å©ã§ãã ãªã³ã¯ã¯ è§ã«ãã³ãšäžžã«ãã³ ãçµã¿åãããŠèšè¿°ããŸãã æžãæ¹äŸ ã©ã¯ã¹ã®ã€ãã³ãæ
å ±ã¯ã[Connpass](https://rakus.connpass.com/)ããã§ãã¯ããŠãïŒ è¡šç€ºäŸ ã©ã¯ ã¹ã®ã€ãã³ãæ
å ±ã¯ã Connpass ããã§ãã¯ããŠãïŒ 9. åŒçš ã¡ãŒã«ã®è¿ä¿¡ã§ãè€æ°ã®è©±é¡ã«è§Šããéã«ã¯åŒçšã䜿ãããšãããããšæããŸãã Markdown ã§ãåŒçšãããéã«ã¯ã > ã䜿ãããšã§è¡šçŸãããŸãã æžãæ¹äŸ > 次åã®å匷äŒã®ããŒãã«ã€ã㊠ãªããžã§ã¯ãæåã§ãã > ã€ãã³ãé嬿¥ 6/26(é)ã§ãã > å Žæ ãªã³ã©ã€ã³ã§ãã https://rakus.connpass.com/event/178556/ è¡šç€ºäŸ æ¬¡åã®å匷äŒã®ããŒãã«ã€ã㊠ãªããžã§ã¯ãæå ã§ãã ã€ãã³ãé嬿¥ 6/26(é)ã§ãã å Žæ ãªã³ã©ã€ã³ã§ãã https://rakus.connpass.com/event/178556/ 10. æ°Žå¹³ç· ãŸãšãŸã£ãæ
å ±ã瀺ããã æé¢ã«ã¡ãªããªãå ããããšãã§ããŸãã æ°Žå¹³ç·ã¯ ãã€ãã³3〠ãæãããšã§ãç°¡åã«èšè¿°ã§ããŸãã æžãæ¹äŸ ã©ã¯ã¹ã®ã€ãã³ãæ
å ±ã玹ä»ããããšæããŸãã äžèšã®å
容ãã確èªãã ããã --- - [ããªã³ã©ã€ã³ãSaaSãæ¯ããéçºåå/DDDãå¿ççå®å
šæ§ãTwelve-Factor](https://rakus.connpass.com/event/178046/) - [ããªã³ã©ã€ã³ãPHP::LTäŒ ãLTæ @2ïŒéäžåå OKã](https://rakus.connpass.com/event/178724/) - [ããªã³ã©ã€ã³ããªããžã§ã¯ãæåLTäŒ vol.2ïŒéäžåå OKïŒ](https://rakus.connpass.com/event/178556/) --- ããããã®çæ§ã®ãåå ããåŸ
ã¡ããŠããŸãïŒ è¡šç€ºäŸ ã©ã¯ ã¹ã®ã€ãã³ãæ
å ±ã玹ä»ããããšæããŸãã äžèšã®å
容ãã確èªãã ããã ããªã³ã©ã€ã³ãSaaSãæ¯ããéçºåå/DDDãå¿ççå®å
šæ§ãTwelve-Factor ããªã³ã©ã€ã³ãPHP::LTäŒ ãLTæ @2ïŒéäžåå OKã ããªã³ã©ã€ã³ããªããžã§ã¯ãæåLTäŒ vol.2ïŒéäžåå OKïŒ ããããã®çæ§ã®ãåå ããåŸ
ã¡ããŠããŸãïŒ çµããã« å©çšåºŠãé«ã Markdown ã®èšæ³ã玹ä»ããŠããŸããã ãŸã ãŸã 䟿å©ãªèšæ³ã¯ãããŸããããã®10èšæ³ãèŠããŠããã°ã ååã«ãèªèº«ãäŒãããããšãèªã¿ãããæç« ãèµ·ããããšãã§ããã¯ãã§ãã Markdown ã䜿ããããŒã«ããµãŒãã¹ã¯æ¥ã
å¢ããŠããŸãã®ã§ããã®ããã°ããæŽ»çšããã ããŸãããå¬ããã§ãã ã§ã¯ã§ã¯ã ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã rakus.hubspotpagebuilder.com ã©ã¯ ã¹Developersç»é²ãã©ãŒã https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ âTECH PLAY techplay.jp âconnpass rakus.connpass.com
ããã«ã¡ã¯ãæè¡åºå ±ã® syoeshin ã§ãã åœç€Ÿ ã©ã¯ ã¹ã®éçºã§ã¯æ§ã
ããŒã«ã䜿ã£ãŠãŸãã ããã¹ããšãã£ã¿ ã䜿çšããã±ãŒã¹ãå€ã è¥æãããã©ã³ãèªåã«åã ããã¹ããšãã£ã¿ âãã€ã»ãšãã£ã¿â ãæçšããŠãŸãã ããã¹ããšãã£ã¿ ã£ãŠçš®é¡ãå€ã㊠ã»çµå±ã©ããéžã¶ãïŒ ã»ãšãªãã®ãã®äººã¯äœã䜿ã£ãŠãããïŒ æ°ã«ãªããŸãããã ããã§ãä»åã¯åœç€Ÿã®è¥æããããã©ã³ã«ãŸã§ æ®æ®µæçšããŠãã ããã¹ããšãã£ã¿ ãŒãš ãããããã€ã³ããèããŸããã 質åïŒãæçšã®ãšãã£ã¿ã¯äœã§ããïŒã åœç€Ÿèª¿æ»çµæã®ã°ã©ãã¯ä»¥äž âæçšãšãã£ã¿ã®èª¿æ»çµæ ãã¯ããšèšããŸãã åœç€Ÿ ã©ã¯ ã¹ã§1äœã®ãããããšãã£ã¿ã¯ âVisualStudioCode ã€ã³ã°ããããã©ã³ãŸã§å¹
åºãå±€ã§æ¯æ 以äžãæçšè
éããã®ããããã³ã¡ã³ã ä»ãæäž»æµãªã®ã§äŸ¿å© ãã©ã°ã€ã³ ãèšäºãªã©ã VSCode åæã®ãã®ãå€ãã Atom ãBracketãšæ¯ã¹ãŠè»œãã£ãïŒä»ã¯ããããªãïŒ GIT MarkDown Python PHP Docker AWS ãªãã§ããã 軜ãã倿©èœïŒ çºè¡šè³æã Markdown ã§æžããŠãã¬ãã¥ãŒãããã®PDFåºåãŸã§ VSCode ã§ã§ãã¡ããïŒmarpïŒ æ°ãããã®ã«æ¹ãã㊠Atom ããä¹ãæããŸãã 軜ããRemote Containerã䟿å©ãæè¿æ ¡æ£ãã察å¿ããã®ã§æç« æžããšãã«ã䜿ãã èŠæããç·šéãæãã ããã©ã«ãã®HTML ã¹ãããã ãçŽ æŽããããããããHTMLã³ãŒãã£ã³ã°ãã€ã€ãLive Serverã§ä¿åâ峿ãµãŒãåæ ã§è¯ãæã WSL ãšç¹ããŠäœ¿ãã®ãã§ãããnpm ã¹ã¯ãªãã ã®å®è¡ãã¯ãªãã¯æäœã§å¯èœãªã®ã§ãNode.js䜿ãç³»ã®äœæ¥ã«ç¹ã«éå®ããŠãã ããŒã¯ããŠã³ã§ã®åçš¿äœæãã§ãã¯ãç®ã«åªããã®ã§å¥œãã§ãã ãã¡ã€ã«ãµãŒãäžã®ããã¹ããã¡ã€ã«ãåæç·šéå¯èœ â ä»è
ã«ããäžæžã鲿¢ äŒè°äžã®è°äºäœæã倿 ç¹éã§ã®åæäœæ¥æãªã©ããªã¢ã«ã¿ã€ã ã§ããã¹ãã®å
±æãè¡ãæã«äŸ¿å© æç€ºçã«ä¿åããŠããªããŠãåèµ·åæã«ç·šéäžã®å
容ãå衚瀺ããã åçŽãª ããã¹ããšãã£ã¿ ã«ããéçºã«ã䜿ããã ãã©ã°ã€ã³ ããšã«ããè±å¯ããã®æ°ã«ãªãã°èªåã§ã ãã©ã°ã€ã³ ãäœããã æ¯åã䜿ã£ãŠããŠå¹
åºãçšéã幎霢局ã§äœ¿ãããŠãããšãããè¯ãã etc... äžéçã«ãå
šäžä»£ã§å¹
åºãæ¯æãã åœç€Ÿã§ã¯ã€ãã«èŠªåã§äœ¿ã£ãŠããäŸãç»å ŽïŒ 次ãã§ãåœç€Ÿã§2äœã®ãããããšãã£ã¿ã¯ â ãµã¯ã©ãšãã£ã¿ â»æå€ã«ã ãã¡ããã€ã³ã°ããããã©ã³ãŸã§ã®å¹
åºãå±€ã§æ¯æ (çè
ã markdown ãã§ãã¯ã§å©çš) 以äžãæçšè
éããã®ããããã³ã¡ã³ã ã¡ãã䜿ãã«ã¯æ¥œã巚倧ãªããã¹ããã¡ã€ã«ã§ãå²ãšè»œããããã¹ã ãšã³ã³ãŒãã£ã³ã° ã®æäœã§æ
£ããŠããã ããã¹ãæŽåœ¢ãšãããæãã·ã§ãŒãã«ããããŒããªããã§ããã®ããã£ã¡ãªã®ã§ãã£ã¡äœ¿ã£ã¡ãã ç®ã«åªãã æ°äººã®é ãå
茩㫠ãµã¯ã©ãšãã£ã¿ ã®è¶
çµ¶æå·§ãèŠããŠããã ãæåãããã ããã¹ãæäœãããããã èªåãªãã®æé©åã ãµã¯ã©ãšãã£ã¿ ã§åºæ¥äžãã£ãŠããŸã£ããããã€ãã®ã·ã§ãŒãã«ããããŒãå€çšããŠããŸããïŒãœãŒãïŒAltïŒAãããŒãžAltïŒMïŒ äœ¿çšãœããã«å³ãã客å
ã§ããªãã䜿ãããšãèš±ãããŠãã Sier 埡çšéãšãã£ã¿ å²ãšèµ·åã軜ãã®ã§å€§ããªãã°ãã¡ã€ã«ãªã©ã¯ãµã¯ã©ã§éããŸãã grep ããã®ãžã£ã³ãããã¯ãã䟿å©ã 軜ããããã»ã¹ãèœã¡ãããšããããªãã®ã§ãã€ãéå®ããŠãŸã èµ·åãæ©ããã¡ã¢çšã æåã³ãŒã å€æçš ã¡ã¢ã SQL ããµããšæžãæã«ã¯äŸ¿å© 眮æã¯ããã«éãã æåã³ãŒã 倿ã䟿å©ãã¯ããæã« jar ãã¡ã€ã«ã base64 ãšã³ã³ãŒãã£ã³ã° ããŠã³ãã => base64 ãã³ãŒãããŠä¿å ã§æãå
¥ããŠããã®ãæãããã ã¡ã¢æžããããã¡ãã£ãšããç·šéãŸã§å€§æµããã䜿ã£ãŠããŸã 眮æãããŒãžïŒãœãŒããç©åœ¢éžæèŸºããå€çšããŠããŸã æ£èŠè¡šçŸ ã§ã®çœ®æã æåã³ãŒã ãæ¹è¡ã³ãŒãã®å€æã«å©çšããŠããŸã Java ã SQL ã® ã·ã³ã¿ãã¯ã¹ ãã€ã©ã€ãã䜿ããã®ãå¬ããã§ã etc... Grep æ©èœãã¢ãŠãã©ã€ã³è§£æã¯ãšãŠã䟿å©ïŒ åœç€Ÿã§åç3äœã®ãããããšãã£ã¿ã¯âTyporaâãšâ Vim â âTypora ç¡æã§ãWin/ Mac / Linux ã«å°å
¥å¯èœ ã·ã³ãã«ãªHTMLã«ãšã¯ã¹ããŒãã§ãã 匷å㪠Markdown ãšãã£ã¿ 以äžãæçšè
éããã®ããããã³ã¡ã³ã Markdown ãšãã£ã¿ãæžããç¬é倿ãããã®ã§æžããŠããŠæ°æã¡ãã ãªã¢ã«ã¿ã€ã ã«ããŒã¯ããŠã³ãåæ ããŠãããŠãæè»œã«ç¶ºéºã«æžãããã ããŒã¯ããŠã³ããªã¢ã«ã¿ã€ã ã§åæ ããæç« äœæããããããã Markdown ã®ãšãã£ã¿ãã¹ã¿ã€ã«ãããç¶æ
ã§ç·šéã§ããã®ããã "ããŒã¯ããŠã³èŠããšãã¯ããããšã«ããèŠããããšæããŠããŸãã" etc... ãªã¢ã«ã¿ã€ã ãã¬ãã¥ãŒã®UI ã·ã³ãã«ãã¶ã€ã³ãçŽæçæäœã奜ã人ã«ãã¹ã¹ã¡ïŒ â Vim äºå€§ãšãã£ã¿ã®äžã€ 誰ããèšãããŠãŸãã ããã¹ããšãã£ã¿ ã«ã¯äžçš®é¡ããååšããªãã " Vim " ã " Emacs " ã "ãã以å€ã" ã ã â» åŒçšå
以äžã¯åœç€Ÿã®æçšè
éããã®ããããã³ã¡ã³ã èŠããŠããŸããšãã¡ãã¡ã«æã䌞ã°ããªããŠè¯ããŠæ¥œã ãªãšæããŸãã䜿ãããªããããã«ãªãããã ã¿ãŒããã«æäœããŠãæµãã§ã¯ Vim ã䜿çšãäžæã¯ ãã©ã°ã€ã³ å
¥ãããã«ã¹ã¿ãã€ãºã«åã£ãŠããããä»ã¯ããã©ã«ãã§äœ¿çšã Viã§ãå¯ãèšå®ãå€ãããã©ãã©ãã«èšå®ãããå¿ããã®ã§ãæ€èšŒæ©ç§»è¡æã«ããã vi ããã vim ãããæŽŸããµãŒããŒäžã§ã¡ãã£ãšããç·šéãããããšãã«ãããšå¬ãã Webç³»ãšã³ãžãã¢ã§viã䜿ããªã人ã¯ããªãã¯ãããã®å»¶é·ã§ Vim ãæ¥åžžçã«äœ¿ãã®ã¯å¿
ç¶ã etc... Vim ã¯ãå€ãããå€ãã®ãšã³ãžãã¢ã«æãããŠãããšãã£ã¿ã§ãã æ
ã«ã"æ"ã"å§"ã匷ãïŒ æ¬¡ãã§ãåœç€Ÿã§5äœã®ãããããšãã£ã¿ã¯ â emacs 以äžãæçšè
éããã®ããããã³ã¡ã³ã ãµãŒãäžã§ CLI ã§ã¡ããã£ãšç·šéããã®ã«âã Lisp ã§æ¡åŒµã§ããã®ã§çްãããšãããèªå奜ã¿ã«ã§ãã æå
ã¡ã¢çšãšã¿ãŒããã«äžã§ã®äœæ¥çšãä»ã®ãšãã£ã¿ã emacs 颚 ããŒãã€ã³ã ã«ããã®ã¯å«ãã çŸåšããã¯ãã¡ã¢åž³ãšããŠãã䜿ã£ãŠããªãããããã etc... æ¡åŒµæ§ãé«ããèªç±ã«ã«ã¹ã¿ãã€ãºãã§ããïŒ ããã«ã€ããã®ã§ã¯ïŒ 次ãã§ãåœç€Ÿã§6äœã®ãããããšãã£ã¿ã¯ âcotEditor 以äžãæçšè
éããã®ããããã³ã¡ã³ã ã¡ãã䜿ãã«æ¥œãããã¹ã ãšã³ã³ãŒãã£ã³ã° ã®å€æãããããã æè»œã«äœ¿ãããã¡ã¢ã«ãã䜿ã£ãŠã etc... 以äžãšãã£ã¿çŸ€ã¯å©çšè
ãåçã§ããã â Atom 以äžãæçšè
éããã®ããããã³ã¡ã³ã æ¡åŒµæ§ãšæäœæ§ã§éžãã§ãŸã 軜快ã«åäœããŠãããããã£ãšå¬ãã etc... â Eclipse ( IDE ) 以äžãæçšè
éããã®ããããã³ã¡ã³ã åŠçã®é ãããã©ã€ããŒãã§ã¯äžçªäœ¿ã£ãŠããŸã éããšãã人ãããŸãããéããªããããªPC䜿ã£ãŠãã®ããããªãã®ã§ãïœ etc... âJetBrains ( IDE ) 以äžãæçšè
éããã®ããããã³ã¡ã³ã ã¹ ã¯ã©ãã ãã¡ã€ã«ãè»œãæ°æã¡ã§äœ¿ã£ãŠãã ãããžã§ã¯ãã«å±ããã«ã³ãŒãã£ã³ã°ãã§ãã IDE ã®æ¯æŽãåãããã etc... â Sublime Text 以äžãæçšè
éããã®ããããã³ã¡ã³ã ã¡ãã£ãšãã ã¹ã¯ãªãã ãèŠããšãã«äœ¿ããŸã ç¹ã«çç±ããããšããããæãã䜿ã£ãŠããç¡åçãä»ã䜿ã£ãŠããŸã etc... ânano 以äžãæçšè
éããã®ããããã³ã¡ã³ã æäœãçŽæçãªã®ã§viã䜿ãããªããªãæ¹ã«ã¯ããããã§ã etc... â TeraPad 以äžãæçšè
éããã®ããããã³ã¡ã³ã å人çã« ãµã¯ã©ãšãã£ã¿ ãããã¢ã€ã³ã³ã奜ãã§ã etc... âTextastic 以äžãæçšè
éããã®ããããã³ã¡ã³ã WorkingCopy(gitã¯ã©ã€ã¢ã³ã)ãšäœµã㊠iOS ããããã°æŽæ°çšã« etc... æåŸã« ãæçšã®ãšãã£ã¿ã¯äœã§ããïŒããš åœç€Ÿã¡ã³ããŒã« ãã¢ãª ã³ã°ããŠããé ã» sublime 掟ã¯ä»ïŒ ã» emacs 掟ã¯ïŒ vim 掟ã¯ïŒãªãïŒ ãªã© äžã«ãã"ãšãã£ã¿æŠäº"ã®å°ãæåãŸã§ çãäžãããåã¡ã³ããŒãåçããŠãããŸããã æŠäºæåã§è«äºãçµããäºãã§ããã®ã¯ ãã£ãšãæããšããèšèã®ãããã ãš åæã«è§£éããŠãããŸãã 2020幎ãçããã®æçšã®ãšãã£ã¿ã¯äœã§ããïŒ ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã forms.gle ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ rakus.connpass.com
ã¯ããã« ããã«ã¡ã¯ãmrym_618ã§ãã ä»åã¯ãæ®æ®µæ¥åã§äœ¿çšããŠããPhpStormã® ãã©ã°ã€ã³ ã®ãã¡ãå人çã«ããããã®3ã€ã玹ä»ããããšæããŸãã ã¯ããã« Rainbow Brackets deep-assoc-completion String Manipulation ãããã« Rainbow Brackets Rainbow Brackets ãšã¯ã察å¿ããæ¬åŒ§ã®è²ãå€ããŠèŠããããã ãã©ã°ã€ã³ ã§ãã è€æ°ã®ifæãªã©ã«ãããã¹ããéãªã£ãŠãããšãã©ã®æ¬åŒ§ãšã©ã®æ¬åŒ§ã察å¿ãããåããã«ãããªããã³ãŒããèªã¿ã«ãããªã£ãŠããŸããŸãã ããã§ããã® ãã©ã°ã€ã³ ãå°å
¥ããããšã§å¯Ÿå¿ããæ¬åŒ§ãåããããããªããŸãã®ã§ãã³ãŒããèªã¿ããããªããŸãã å°å
¥æ¹æ³ã¯ã Setting > Plugins ã§ ãRainbow Brackets ããæ€çŽ¢ããã€ã³ã¹ããŒã«ããŠPhpStormãåèµ·åããã ãã§ãã ãŸãã Editor > Color Scheme > Rainbow Bracket ããæ¬åŒ§ã®è²ãã«ã¹ã¿ãã€ãºã§ããŸãã®ã§ãèªåã®èŠãããããã«ã«ã¹ã¿ãã€ãºããŠäœ¿çšããŠããããã°ãšæããŸãã deep-assoc-completion deep-assoc-complatetionãšã¯ãé
åã®è£å®ãããŠããã ãã©ã°ã€ã³ ã§ãã 飿³é
å ã®äºæž¬è£å®ãDocCommentã«é
åã®æ§é ãå®çŸ©ãããšãããè§£éããŠããããªã©ãé
åã®æäœã楜ã«ãªã ãã©ã°ã€ã³ ã§ãã å°å
¥æ¹æ³ã¯ãäžèšãšåæ§ã§ Setting > Plugins ã§ ãdeep-assoc-completionããæ€çŽ¢ããã€ã³ã¹ããŒã«ããŠPhpStormãåèµ·åããã ãã§ãã String Manipulation String Manipulationãšã¯ãæååæäœãã§ãã ãã©ã°ã€ã³ ã§ãã æååããã£ã¡ã«ã±ãŒã¹ãã¹ããŒã¯ã±ãŒã¹ã«å€æãããã ãšã¹ ã±ãŒãã ãšã³ã³ãŒã ãªã©ãã§ããŸãã äœ¿çšæ¹æ³ã¯ã String Manipulation ãå°å
¥åŸã«ãæäœãããæååãéžæãã Alt + m ãæŒãããšã§è¡šç€ºãããããããããŠã³ããæäœãããåŠçãéžæããã ãã§ãã å°å
¥æ¹æ³ã¯ãäžèšãšåæ§ã§ Setting > Plugins ã§ ãString Manipulationããæ€çŽ¢ããã€ã³ã¹ããŒã«ããŠPhpStormãåèµ·åããã ãã§ãã ãããã« ä»åã¯PhpStormã®å人çã«ããããã® ãã©ã°ã€ã³ ã3ã€ç޹ä»ããŸãããPhpStormã«ã¯ãä»å玹ä»ãã ãã©ã°ã€ã³ 以å€ã«ãå€ãã® ãã©ã°ã€ã³ ããããŸãã®ã§ããããã詊ããŠæ¥åå¹çãäžããŠãããããšæããŸãã ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã forms.gle ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ rakus.connpass.com
ã¯ããã« ããã«ã¡ã¯ãæ°å3幎ç®ã®choreii ã§ãã ä»å㯠PostgreSQL ã®å®è¡èšç»ã«ã€ããŠèšäºãæžãããšæããŸãã ç§ãåããŠå®è¡èšç»ã«ã€ããŠç¥ã£ãæã¯é£ããããªã€ã¡ãŒãžãå
è¡ããŠãããå®éã«èª¿ã¹ãŠã¿ãŠãæ
å ±éãå€ãããŒãã«ãé«ãã£ãã§ããã§ãã調ã¹ãŠãããã¡ã«èªåãé£ããæããŠããçç±ãããããŸããã ããã¯ã å€ãã®èšäºããå®è¡èšç»ã®åºç€ç¥èããšãå®è¡èšç»ãã©ã®ããã«ããã©ãŒãã³ã¹æ¹åã«æŽ»ãããããšãã2çš®é¡ã®æ
å ±ãç¹ã亀ããŠèšèŒãããŠãããã ã§ãã ä»åã¯ã§ããã ãæ
å ±éãåæžãã ãå®è¡èšç»ã®åºç€ç¥èã ã«ãã©ãŒã«ã¹ããèšäºãäœæããŸãããããããå®è¡èšç»ãåŠã¶äººã®æåã®äžæ©ãšãªãã°å¹žãã§ãã å®éã®ããã©ãŒãã³ã¹ã®ãã¥ãŒãã³ã°æ¹æ³ããæ€èšŒããããã®å€§éããŒã¿ã®ç»é²ã«èå³ãããæ¹ã¯äžèšã®ããã°ãã芧ãã ããã tech-blog.rakus.co.jp tech-blog.rakus.co.jp ç®æ¬¡ ã¯ããã« ç®æ¬¡ 1. å®è¡èšç»ãšã¯ 2. å®è¡èšç»ã®åºãæ¹ 3. å®è¡èšç»ã®èªã¿æ¹ 3-1. å®è¡èšç»ãèªãé çª 3-2. ã¹ãã£ã³æŒç®å 3-3. çµåæŒç®å 3-4. ãã®ä»ã®æŒç®åïŒæ€çŽ¢çµæã®æŽåœ¢ãªã©ïŒ 4. ããŸãïŒã³ã¹ããšANALYZEïŒ ãããã« åèæç® 1. å®è¡èšç»ãšã¯ å®è¡èšç»ãšã¯ãŠãŒã¶ãåãåãããã¯ãšãªïŒ SQL æïŒãå®è¡ããæé æžã«ãªããŸãããã©ã®é çªã«ããŒãã«ãçµåããããããœãŒãæ¹æ³ããæ€çŽ¢æ¹æ³ããªã©ã®äœæ¥å
容ããæ³å®ãããå®è¡ã³ã¹ããèšè¿°ãããŠããŸãã 2. å®è¡èšç»ã®åºãæ¹ å®è¡èšç»ã®åºãæ¹ã§ãããå®è¡èšç»ã確èªããã SQL æã®å
é ã« EXPLAIN ãšä»ãè¶³ãã ãã§ãã äŸãšããŠãitemããŒãã«ããå
šä»¶ååŸãã SQL 㯠SELECT * FROM item; ãšãªããŸããããã® SQL ã®å®è¡èšç»ãç¥ãããå Žå㯠EXPLAIN SELECT * FROM item; ãšããã ãã§å®è¡èšç»ãååŸã§ããŸãã â» ãªãã·ã§ã³ã§åºåå
å®¹ãæ¹æ³ãèšå®ã§ããŸããããã§ã¯å²æããŸãã EXPLAIN SELECT * FROM item; QUERY PLAN --------------------------------------------------------- Seq Scan on item (cost=0.00..12.20 rows=220 width=328) 3. å®è¡èšç»ã®èªã¿æ¹ åé
ã®éãå®è¡èšç»ã衚瀺ããããšã¯ã§ããŸãããæ¬¡ã¯ããå°ãè€é㪠SQL ã®å®è¡èšç»ã䜿ã£ãŠå®è¡èšç»ã®èªãé çªããããããã®è¡ãäœãæå³ããŠãããã解説ããŠãããŸãã以äžã解説ã«äœ¿çšãã SQL æãšãã®å®è¡èšç»ã§ãã EXPLAIN SELECT * FROM item INNER JOIN customer ON item.customer_id = customer.id WHERE customer.name = 'äœè€' ORDER BY item.id; QUERY PLAN --------------------------------------------------------- Sort (cost=27.07..27.08 rows=1 width=574) Sort Key: item.id -> Hash Join (cost=14.03..27.06 rows=1 width=574) Hash Cond: (item.customer_id = customer.id) -> Seq Scan on item (cost=0.00..12.20 rows=220 width=332) -> Hash (cost=14.00..14.00 rows=2 width=222) -> Seq Scan on customer (cost=0.00..14.00 rows=2 width=222) Filter: ((name)::text = 'äœè€'::text) 3-1. å®è¡èšç»ãèªãé çª å®è¡èšç»ã¯ããèŠããšããªãŒæ§é ã«ãªã£ãŠãããã€ã³ãã³ãäžããã->ããªã©ã§è¡šãããŸããïŒåºåæ¹æ³ã«ãã£ãŠç°ãªããŸããïŒä»¥äžã«å
ã®å®è¡èšç»ã®ããªãŒæ§é ãç°¡åã«å³ã«ãããã®ããããŸãã å³1: å®è¡èšç»ã®ããªãŒæ§é èªãé çªã®ã«ãŒã«ã¯2ã€ã ãã§ãã é çªã«åèŠçŽ ããã©ãäžçªåå«ã®èŠçŽ ããå®è¡ãã芪èŠçŽ ã«é¡ã£ãŠãã å
åŒèŠçŽ ãããå Žåã¯å
ã«èšè¿°ãããŠããè¡ããé ã«åèŠçŽ ããã©ã ä»åã®å Žåãäžçªæ·±ãåèŠçŽ ã¯7,8è¡ç®ã«ãªããŸããã5è¡ç®ãš6è¡ç®ãå
åŒèŠçŽ ã«ããããŸãããã®ããæåã«5è¡ç®ãå®è¡ããŠãã6è¡ç®ã®åèŠçŽ ããã©ã£ãŠããããšã«ãªããŸããå³ã«èªãé çªã远èšãããšä»¥äžã®ããã«ãªããŸãã å³2ïŒå®è¡èšç»ã®ããªãŒæ§é ïŒèªãé çªïŒ èªãé çªã«è¿·ã£ãéã¯ããªãŒæ§é ãã©ããªã£ãŠããããäžåºŠå³ã«ããŠã¿ããšãããããããšæããŸãã 3-2. ã¹ãã£ã³ æŒç®å 次ã«åå¥ã®è¡ã®è§£èª¬ãããŸããæåã«å®è¡ããã以äžã®è¡ã®å
é ã« Seq Scan ãšæžãããŠããŸãã -> Seq Scan on item (cost=0.00..12.20 rows=220 width=332) ããã¯ãåèªã®æå³éãitemããŒãã«ã®äžããå¿
èŠãªè¡ãé çªã«æ€çŽ¢ããããšãæå³ããè¡ã§ããã£ãšãåºæ¬çãªæ€çŽ¢ïŒã¹ãã£ã³ïŒæ¹æ³ã«ãªããŸããã¹ãã£ã³ æŒç®å 㯠Seq Scan 以å€ã«ãã€ã³ããã¯ã¹ãå©çšã§ããå Žåã«éžæããã Index Scan ãªã©ããããŸãã 3-3. çµå æŒç®å 3,4è¡ç®ã§ã¯ããŒãã«ã®çµåãè¡ã£ãŠããŸããããã·ã¥ãšã€ããŠããã®ã¯äžæ¹ã®ããŒãã«ããäœãããããã·ã¥è¡šãå
ã«çµåããŠããããã§ãæåã®ããã·ã¥è¡šã®äœæã¯6è¡ç®ã§ãããªãããŠããŸããã¡ã¢ãªäžã«ããã·ã¥è¡šãäœæããããããã¡ã¢ãªã«äœè£ãããå Žåã¯é«éã«åããŸããçµå æŒç®å ã¯ä»ã« Nested Loop ã Merge Join ãååšããŸãã -> Hash Join (cost=14.03..27.06 rows=1 width=574) Hash Cond: (item.customer_id = customer.id) 3-4. ãã®ä»ã® æŒç®å ïŒæ€çŽ¢çµæã®æŽåœ¢ãªã©ïŒ 1,2è¡ç®ã§ã¯ãœãŒããè¡ã£ãŠããŸããã¹ãã£ã³ãçµåãããçŽæçã«äœãããŠããããåããããããšæããŸããïŒããã§ã¯ SQL ã®ORDER BYå¥ã§æå®ããããã«itemããŒãã«ã®âªâªidåã§ãœãŒããããã£ãŠããŸããïŒ Sort (cost=27.07..27.08 rows=1 width=574) Sort Key: item.id ä»ã«ã Group ã Limit ãªã©ãç¹å®ã® SQL ãèšè¿°ããéã«æ€çŽ¢çµæãæŽåœ¢ããããã® æŒç®å ãååšããŸãã 4. ããŸãïŒã³ã¹ããšANALYZEïŒ æŒç®å ã®æå³ã«ã€ããŠè§£èª¬ããŸãããã æŒç®å ã®åŸãã«ã«ãã³æžãã§æ°å€ãªã©ãèšèŒãããŠããŸãã -> Seq Scan on item (cost=0.00..12.20 rows=220 width=332) ããã¯ãå®è¡èšç»éãã« SQL ãå®è¡ããå Žåã®æšæž¬å€ã§ãå·Šããé ã«ä»¥äžã®æ°å€ã«ãªã£ãŠããŸãã åæã³ã¹ãïŒæ€çŽ¢çµæã®1è¡ç®ãè¿ããŸã§ã«ãããæºåã®ã³ã¹ãïŒç§æ°ã§ã¯ãªãïŒ ç·ã³ã¹ãïŒåæã³ã¹ããå«ããåŠçå®äºãŸã§ã«ãããã³ã¹ãïŒç§æ°ã§ã¯ãªãïŒ è¡æ°ïŒè¿åŽãããæ€çŽ¢çµæã®è¡æ° è¡ã®é·ãïŒè¿åŽããã1è¡ãããã®é·ãïŒæšªå¹
ïŒ ããã©ãŒãã³ã¹ã確èªããéã¯ç·ã³ã¹ãã確èªããŠã SQL ã®çµã¿æ¹ã倿Žããããšã«ãã£ãŠã³ã¹ããæããããšãã§ããªããã調ç¯ããããšãå€ãã§ãã ããããåºãŠããçµæã¯ãããŸã§æšæž¬å€ãªã®ã§å®éã« SQL ãå®è¡ããŠã¿ãçµæãšé£ãéãããšããããŸãããã®å Žå㯠ANALYZE ãªãã·ã§ã³ã䜿çšãå®éã« SQL ãå®è¡ããŠã¿ãçµæãå®è¡èšç»ã®ã©ã®éšåã«ã©ãã ãã®æéãã³ã¹ããããã£ããã確èªããå¿
èŠããããŸããïŒä»¥äžã®ãããªåºåã«ãªããŸãïŒ â» ãEXPLAINãã®çŽåŸã«ãANALYZEããšä»ãè¶³ã EXPLAIN ANALYZE SELECT * FROM item INNER JOIN customer ON item.customer_id = customer.id WHERE customer.name = 'äœè€' ORDER BY item.id; QUERY PLAN --------------------------------------------------------- Sort (cost=27.07..27.08 rows=1 width=574) (actual time=0.037..0.037 rows=4 loops=1) Sort Key: item.id Sort Method: quicksort Memory: 25kB -> Hash Join (cost=14.03..27.06 rows=1 width=574) (actual time=0.025..0.027 rows=4 loops=1) Hash Cond: (item.customer_id = customer.id) -> Seq Scan on item (cost=0.00..12.20 rows=220 width=332) (actual time=0.006..0.006 rows=8 loops=1) -> Hash (cost=14.00..14.00 rows=2 width=222) (actual time=0.008..0.008 rows=1 loops=1) Buckets: 1024 Batches: 1 Memory Usage: 9kB -> Seq Scan on customer (cost=0.00..14.00 rows=2 width=222) (actual time=0.005..0.005 rows=1 loops=1) Filter: ((name)::text = 'äœè€'::text) Rows Removed by Filter: 1 Planning time: 0.159 ms Execution time: 0.062 ms (actual time=0.008..0.008 rows=1 loops=1) ãè¡æ«ã«è¿œå ãããããQUERY PLANã®æåŸã«å®éã®å®è¡æéãªã©ãåºåãããããã«ãªã£ãŠããŸãããã®èšäºã§ã¯è©³çްã¯å²æããŸããããã®ããã«å®éã«å®è¡ããŠã¿ãçµæãååŸããããšãå¯èœã§ãã ãããã« ä»åã¯å®è¡èšç»ã®æäœéã®ç¥èã«çµã£ãŠè§£èª¬ããŠã¿ãŸãããã§ããã ãåå¿è
ã®äººãæåã«çåã«æãããšãããã¯ã¢ããããã€ãããªã®ã§ããã®èšäºãèªãã§ããããã«è©³ãã解説èšäºãèŠãŠããã ããã°åŠç¿ãã¯ãã©ããšæããŸããç§èªèº«ãŸã æµ
ãåºç€ç¥èããå®çããŠããããæ¥åã§å®è¡èšç»ã䜿ãããªããŠãããšã¯èšãé£ãã§ããä»åãåºæ¬çãªæ
å ±ãæŽçããäžã§ã®æ°ã¥ãããããŸããã®ã§ãããã«åŠç¿ãæ·±ã身ã«ã€ããŠãããããšæããŸãã åèæç® EXPLAIN PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~ PostgreSQLの実行計画について調べてみた | キャスレーコンサルティング株式会社 ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã rakus.hubspotpagebuilder.com ã©ã¯ ã¹Developersç»é²ãã©ãŒã https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ âTECH PLAY techplay.jp âconnpass rakus.connpass.com
ã¯ããã« ããã«ã¡ã¯ãæ°åïŒå¹Žç®ã«ãªããŸããtaku_76ã§ãã ä»å㯠SQL ã«ã€ããŠã®èšäºãæžãããšæããŸãããã®çµç·¯ãšããŠã¯ãæ¥åã§ SQL ãå°ãæžãããšã¯ãã£ãã®ã§ããã å¿
èŠãªæ
å ±ãåãåºããããããããããã®æèãããªããããŸãããã©ãŒãã³ã¹é¢ãæèãããšããããšã¯ãããŸããã§ããã ããããä»åŸã®æ°èŠéçºã§ SQL ã®æ¹ä¿®ããã£ãéãããã©ãŒãã³ã¹ã®èæ
®ã¯å¿
ãå¿
èŠã«ãªã£ãŠããŸãã®ã§åŠç¿ããããšã«ããŸããã åŠç¿ã«ããã£ãŠã¯ä»¥äžã®æžç±ãçšããŠåŠç¿ããŸããã1éšãš2éšã«åãããŠããã®ã§ãããä»åã®èšäºã§ã¯1éšã«ã€ããŠãããã©ãŒãã³ã¹é¢ã«æ³šèŠããŠå°è±¡ã«æ®ã£ãããšãå
·äœäŸãšãšãã«åãäžããŠããŸãããããŸã§èãæ¹ãåãäžãããã£ããããææ³ã®èª¬æãªã©ã¯å²æããŠããŸãã www.shoeisha.co.jp ã¯ããã« ããã©ãŒãã³ã¹ã®åäžã®ããã«èŠããã¹ãããš CASEåŒ CASEåŒã®äžã§éçŽé¢æ°ã䜿ã EXISTSè¿°èª è¿°èªãšã¯ å
šç§°éåãšååšéå ããŒãã«ã«ååšãããªããããŒã¿ãæ¢ã ãŠã£ã³ããŠé¢æ° ãŠã£ã³ããŠé¢æ° vs çžé¢ãµãã¯ãšãª ãããã« ããã©ãŒãã³ã¹ã®åäžã®ããã«èŠããã¹ãããš CASEåŒ CASEåŒã䜿ãããšã§è€æ°ã® SQL æã1ã€ã«ãŸãšããå¯èªæ§ãããã©ãŒãã³ã¹ãåäžããããšãã§ããŸããããã以äžã«ç€ºããŸãã CASEåŒã®äžã§éçŽé¢æ°ã䜿ã 以äžã®ãããªç€Ÿå¡ãšæå±ãµãŒã¯ã«ãäžèЧåããããŒãã«ãèããŸããäž»ããŒã¯ã瀟å¡çªå·ãšãµãŒã¯ã«IDãšããŸãã shain_cricleããŒãã« shain_id circle_id circle_name main_circle_flag 1000 1 éç YES 1000 2 ãµãã«ãŒ NO 2000 2 ãµãã«ãŒ NO 2000 3 ãã¹ã±ããããŒã« YES 2000 4 ãã¬ãŒããŒã« NO 3000 4 ãã¬ãŒããŒã« NO 4000 5 å¹å¥æ¥œ NO 5000 6 æ°Žæ³³ NO 瀟å¡ã¯è€æ°ã®ã¯ã©ãã«æå±ããŠããå Žåãšã1ã€ã«ããæå±ããŠããªãå ŽåããããŸãã è€æ°ã®ã¯ã©ããæãæã¡ããŠãã瀟å¡ã¯ãã¡ã€ã³ã®ãµãŒã¯ã«ã瀺ããã©ã°åã«YESãŸãã¯NOã®å€ãå
¥ããŸããããã§ãªã瀟å¡ã¯NOãå
¥ããŸãã ãã®ããŒãã«ããæ¬¡ã®ãããªæ¡ä»¶ã§ã¯ãšãªãçºè¡ãããšããŸãã 1ã€ã ãã®ã¯ã©ãã«æå±ããŠãã瀟å¡ã«ã€ããŠã¯ããã®ãµãŒã¯ã«IDãååŸãã è€æ°ã®ã¯ã©ããæãæã¡ããŠãã瀟å¡ã«ã€ããŠã¯ãã¡ã€ã³ã®ãµãŒã¯ã«IDãååŸãã 1.2.ã«ã€ããŠãããã以äžã®ãããªã¯ãšãªãçºè¡ããã°æœåºãå¯èœã§ãã -- 1ã€ã®ãµãŒã¯ã«ã«æå±ããŠãã瀟å¡ãæœåº SELECT shain_id, MAX(circle_id) AS main_circle FROM shain_circle GROUP BY shain_id HAVING COUNT(*) = 1 ORDER BY shain_id; -- çµæ shain_id | main_circle ----------+------------- 3000 | 4 4000 | 5 5000 | 6 (3 è¡) -- ãµãŒã¯ã«ãæãæã¡ããŠãã瀟å¡ãéžæ SELECT shain_id, circle_id AS main_circle FROM shain_circle WHERE main_circle_flag = 'YES' ORDER BY shain_id; -- çµæ shain_id | main_circle ----------+------------- 1000 | 1 2000 | 3 (2 è¡) äžèšã§ãæ¡ä»¶ãæºãããæœåºãã§ããã®ã§ãããå Žåã«ãã£ãŠè€æ°ã® SQL ãå¿
èŠã«ãªãããã©ãŒãã³ã¹ã®åé¡ãçºçããŸãã ããããŸãšãããã®ããCASEåŒã䜿ãã°1ã€ã® SQL ã§æžãããšãã§ããŸãã(UNIONã§ã¯çµå±ã¯ãšãªã®çºè¡åæ°ã¯å€ãããªãããããã©ãŒãã³ã¹ã¯åã) SELECT shain_id, CASE WHEN COUNT(*) = 1 THEN MAX(circle_id) ELSE MAX(CASE WHEN main_circle_flag = 'YES' THEN circle_id ELSE NULL END) END AS main_circle FROM shain_circle GROUP BY shain_id ORDER BY shain_id; -- çµæ shain_id | main_circle ----------+------------- 1000 | 1 2000 | 3 3000 | 4 4000 | 5 5000 | 6 (5 è¡) ãã€ã³ããšããŠã¯ããïŒã€ã ãã®ãµãŒã¯ã«ã«æå±ããŠããã®ããè€æ°ã®ãµãŒã¯ã«ã«æå±ããŠããã®ãããšããæ¡ä»¶åå²ãCASEåŒã§è¡šçŸããããšã§ãã å
ã
ãéèšçµæã«å¯Ÿããæ¡ä»¶ã¯HAVINGå¥ã䜿ããšåŠãã§ããŸããããCASEåŒã䜿ãããšã§SELECTå¥ã§ãåããããªæ¡ä»¶åå²ãå®çŸããããšãã§ããŸããã CASEåŒã¯SELECTå¥ã§éçŽé¢æ°ã®äžã«ãå€ã«ãæžããããšèªç±åºŠãé«ãã®ã§ããŸãæ±ããããã«ãªããããšæããŸãã EXISTSè¿°èª EXISTSã¯è€æ°è¡ãäžåäœãšèŠãªããæ¡ä»¶ãèšè¿°ããããšãã§ããçžé¢ãµãã¯ãšãªãå©çšããã«ããããããããã©ãŒãã³ã¹ãåªããŠãããšããç¹åŸŽããããŸãã çµè«ããèšããšãEXISTSã¯ãéåããšããè¿°èªè«çã®æ©èœãå®çŸããããã« SQL ã«åã蟌ãŸããŸããã è¿°èªãšã¯ äžèšã§ãããšé¢æ°ã®ããšã§ãããEXISTSã¯SUMãªã©ã®æ®éã®é¢æ°ãšã¯ç°ãªããæ»ãå€ãççå€ã«ãªã颿°ã®äºãæããŸãã äŸãšããŠã=,<,>,ãªã©ã®æ¯èŒè¿°èªããBETWEEN,LIKE,IN,IS NULLãªã©ããããŸãã ããã§ã=ãBETWEENãªã©ãšãEXISTSãæ¯èŒãããšãåŒæ°ã«äœãåããããšããé¢ã§å€§ããªéãããããŸãã =ãBETWEEN ãx = yãããx BETWEEN y AND zããªã©ã®è¿°èªã®åŒæ°ã¯ãæ°åãååãšãã£ãåäžã®å€ãã¹ã«ã©å€ã EXISTS è¡ã®éå(äŸ. SELECT * FROM ââããŒãã« WHERE ââ=ââ) äžèšããåããããã«ãEXISTSã¯å
¥åã®ã¬ãã«ã«ç¹åŸŽããããŸããè¿°èªè«çã§ã¯ãå
¥åã®ã¬ãã«ãã«å¿ããŠè¿°èªãåé¡ãããŠããŸãã ãããŠã=ãBETWEENãªã©1è¡ãå
¥åãšããè¿°èªããäžéã®è¿°èªããEXISTSã®ããã«è¡ã®éåãå
¥åããè¿°èªããäºéã®è¿°èªããšãããŸãã å
šç§°éåãš ååšéå è¿°èªè«çã«ã¯ãéååãšããç¹å¥ãªè¿°èªãååšããŸããéååãšã¯ä»¥äžã®2ã€ã®æãæžãããã®éå
·ã§ãã å
šç§°éåå ãã¹ãŠã®xãæ¡ä»¶Pãæºãã ååšéå å æ¡ä»¶Pãæºããxã(å°ãªããšã1ã€)ååšãã EXISTSè¿°èªã¯ãè¿°èªè«çã® ååšéå åãå®è£
ãããã®ã§ããããã§éèŠãªããšãããã®ã§ããã SQL ã«ã¯ããäžæ¹ã®å
šç§°éååã«å¯Ÿå¿ããè¿°èªã¯å°å
¥ãããŸããã§ããã ããããå
šç§°éååãš ååšéå åã¯çæ¹ãå®çŸ©ãããŠããã°åå€å€åœ¢ã®èŠåããããŸãã®ã§ãããã¹ãŠã®è¡ãæ¡ä»¶Pãæºããããšããæããæ¡ä»¶Pãæºãããªãè¡ãååšããªãããšå€æããããšã§è¡šçŸã§ããŸããããã«ã€ããŠEXISTè¿°èªã䜿ã£ãŠæžããŠãããŸãã ããŒãã«ã«ååšãããªããããŒã¿ãæ¢ã ããŒã¿ããŒã¹ããããŒã¿ãæ€çŽ¢ããå Žåãäžè¬çã«ã¯ããæ¡ä»¶ãæºãããã®ãæœåºããŸããããããæã«ã¯ããŒãã«ã«ååšãããªããããŒã¿ãæœåºããå ŽåããããŸãã äŸãã°ãè€æ°åè¡ãããããŒãã£ã³ã°ãšåºåžè
ãèšé²ããŠããããŒãã«ããããšããŸãã meetingsããŒãã« meeting shain 1åç® A 1åç® B 1åç® C 2åç® A 2åç® D 2åç® C 3åç® B 3åç® D ä»åã¯ãã®ããŒãã«ãããåºåžããªãã£ã瀟å¡ããæ±ããŸãã ååšããããŒã¿ã«å¯ŸããŠãââãšããæ§è³ªãæºããããšããæ¡ä»¶ãèšå®ããã®ã§ã¯ãªãããããããããŒã¿ãååšãããã©ããããšãããæ¬¡æ°ã®1ã€é«ãåé¡èšå®ãè¡ããŸãã ããããäºéã®åãåãããã§ãããEXISTSè¿°èªãäœ¿ãæ©äŒã§ãã èãæ¹ãšããŠã¯ãå
šå¡ãåºåžãããšä»®å®ããå Žåã®éåãããçŸå®ã«åºåžãã人ãåŒãç®ããããšã§æ±ããŸãã 1.å
šå¡ãåºåžããå Žåã®éåãæ±ãã SELECT DISTINCT m1.meeting,m2.shain FROM meetings m1 CROSS JOIN meetings m2 ORDER BY meeting, shain; -- çµæ meeting | shain ---------+------- 1åç® | A 1åç® | B 1åç® | C 1åç® | D 2åç® | A 2åç® | B 2åç® | C 2åç® | D 3åç® | A 3åç® | B 3åç® | C 3åç® | D (12 è¡) 2.meetingsããŒãã«ã«ååšããªãçµã¿åããã«çµã蟌ã SELECT DISTINCT m1.meeting,m2.shain FROM meetings m1 CROSS JOIN meetings m2 WHERE NOT EXISTS (SELECT * FROM meetings m3 WHERE m1.meeting = m3.meeting AND m2.shain = m3.shain) ORDER BY meeting, shain; -- çµæ meeting | shain ---------+------- 1åç® | D 2åç® | B 3åç® | A 3åç® | C (4 è¡) ããã§ããŸãæœåºããããšãã§ããŸããããã®ããã«EXISTSè¿°èªã䜿ãããšã§ååšãããªããããŒã¿ãæœåºããããšãã§ããŸãã SQL ãæžããšãã«è¿°èªè«çãæèçã«èããããšã¯ãªãã£ãã®ã§ãä»åŸããããèŠç¹ãããèããŠã¿ãããšæããŸãã ãŠã£ã³ããŠé¢æ° ä»åããŠã£ã³ããŠé¢æ°ã«ã€ããŠåºæ¬çãªããšã¯å²æããŸããå¿ç𿹿³ãšããŠã¯ãç¹ã«ããããŸã§è¡éæ¯èŒã«ãããŠçžé¢ãµãã¯ãšãªã䜿ããªããã°ãªããªãã£ãã±ãŒã¹ã«ãããŠã ãŠã£ã³ããŠé¢æ°ã䜿ãããšã§ã¹ãããªãšãã SQL æãèšè¿°ããããšãã§ããŸãã ãŠã£ã³ããŠé¢æ° vs çžé¢ãµãã¯ãšãª çžé¢ãµãã¯ãšãªãšãŠã£ã³ããŠé¢æ°ãæ¯èŒãããšä»¥äžã®ãããªéãããããŸãã ãŠã£ã³ããŠé¢æ°ã¯ããµãã¯ãšãªã䜿ã£ãŠãããããçžé¢ããµãã¯ãšãªã§ã¯ãªããããµãã¯ãšãªåäœã§å®è¡ããããšãã§ããã ãã®ãããå¯èªæ§ãé«ãåäœãçè§£ãããã ããŒãã«ã«å¯Ÿããã¹ãã£ã³ã1床ã ãã§æžãã®ã§ãããã©ãŒãã³ã¹ãè¯ãã æ€èšŒã¯å²æããŸãããçžé¢ãµãã¯ãšãªããŠã£ã³ããŠé¢æ°ããéåã®ã«ãããšã¬ã³ãŒãåäœã®ã«ãŒããšããåãæ©èœãå®çŸããŠãããšèšããã®ã§çœ®ãæããããšãã§ããŸãã æ¬¡ã®ãããªååã®ååãäŸ¡æ Œãæ ŒçŽããããŒãã«ãèŠãŠã¿ãŸãã shohinããŒãã« shohin_id shohin_name shohin_bunrui tanka 1 ããŠã¹ PC 3500 2 æé¢šæ© å®¶é» 7000 3 ããŒããŒã PC 1500 4 ææ¿å
· ã·ã£ãŒãã³ 600 5 ãã©ã€ã€ãŒ å®¶é» 3000 6 é»ç å®¶é» 600 7 é»åæ¯ãã©ã· å®¶é» 800 8 ããŒã«ãã³ ææ¿å
· 150 ãã®shohinããŒãã«ãããååååé¡ã«ã€ããŠå¹³åå䟡ããé«ãååãæœåºããŠã¿ãŸãã(çžé¢ãµãã¯ãšãªã§è§£ãå
žåçãªåé¡) ãŸãã¯ãçžé¢ãµãã¯ãšãªã§ãã SELECT shohin_bunrui, shohin_name, tanka FROM shohin s1 WHERE tanka > (SELECT AVG(tanka) FROM shohin s2 WHERE s1.shohin_bunrui = s2.shohin_bunrui GROUP BY shohin_bunrui) ORDER BY shohin_bunrui; -- çµæ shohin_bunrui | shohin_name | tanka ---------------+-------------+------- PC | ããŠã¹ | 3500 å®¶é» | æé¢šæ© | 7000 å®¶é» | ãã©ã€ã€ãŒ | 3000 ææ¿å
· | ã·ã£ãŒãã³ | 600 (4 è¡) ãã€ã³ããšããŠã¯ããs1.shohin_bunrui = s2.shohin_bunruiããšããs1éåãšs2éåã«å¯Ÿãããã€ã³ãæ¡ä»¶ã§ããããã«ããã2ã€ã®ããŒãã«ã®åååé¡ãåãã¬ã³ãŒãéåã«éå®ããŠããã®éåã®å¹³åå䟡ãšåã¬ã³ãŒãã®å䟡ã1è¡ãã€æ¯èŒããŠããŸãã äžèšã³ãŒããšåãçµæãæœåºãããŠã£ã³ããŠé¢æ°ã¯æ¬¡ã®ããã«ãªããŸãã SELECT shohin_name, shohin_bunrui, tanka FROM (SELECT shohin_name, shohin_bunrui, tanka, AVG(tanka) OVER(PARTITION BY shohin_bunrui) AS avg_tanka FROM shohin) tmp WHERE tanka > avg_tanka; -- çµæ shohin_name | shohin_bunrui | tanka -------------+---------------+------- ããŠã¹ | PC | 3500 ãã©ã€ã€ãŒ | å®¶é» | 3000 æé¢šæ© | å®¶é» | 7000 ã·ã£ãŒãã³ | ææ¿å
· | 600 (4 è¡) ãã¡ãã®æåãšããŠã¯ããŸããµãã¯ãšãªã®ãŠã£ã³ããŠé¢æ°ã§åååé¡ããšã®å¹³åå䟡( avg _tanka)ãèšç®ããŠããŸãã SELECT shohin_name, shohin_bunrui, tanka, AVG(tanka) OVER(PARTITION BY shohin_bunrui) AS avg_tanka FROM shohin; -- çµæ shohin_name | shohin_bunrui | tanka | avg_tanka --------------+---------------+-------+----------------------- ããŒããŒã | PC | 1500 | 2500 ããŠã¹ | PC | 3500 | 2500 ãã©ã€ã€ãŒ | å®¶é» | 3000 | 2850 æé¢šæ© | å®¶é» | 7000 | 2850 é»ç | å®¶é» | 600 | 2850 é»åæ¯ãã©ã· | å®¶é» | 800 | 2850 ã·ã£ãŒãã³ | ææ¿å
· | 600 | 375 ããŒã«ãã³ | ææ¿å
· | 150 | 375 (8 è¡) ããšã¯åè¡ã§ãtanka > avg _tankaããšããæ¡ä»¶ã§ç°¡åã«å¹³åå䟡ãšåäŸ¡ã®æ¯èŒãè¡ããŸãã ãã®ãŠã£ã³ããŠé¢æ°ã®çµæã®ãããšããã¯ãåååé¡ããšã®å¹³åå䟡ãèšç®ããŸããããã®éãã¬ã³ãŒããéçŽããã«å
ã®ããŒãã«ã«åãšããŠçµæã远å ããã ãããšããæ
å ± ä¿å
š æ§ãåããšããã§ãã å人çã«çžé¢ãµãã¯ãšãªã¯åäœã®çè§£ãé£ããããŸã奜ãã§ã¯ããªãã£ãã®ã§ããããŠã£ã³ããŠé¢æ°ã§åãããšã衚çŸããããšãã§ãã ããã©ãŒãã³ã¹ãå¯èªæ§ãããããšãåãã£ãã®ã§åŠç¿ãé²ããŠã¿ãããšæããŸããã ãããã« ãããã ã£ãã§ãããããããç§ãšåãããã«ã SQL ã®ããã©ãŒãã³ã¹ãåäžããã«ã¯ã©ãããã°ããããäœã䜿ãã°åãããªããšããæ¹ã®åŠç¿ã®ãã£ããã«ãªãã°å¹žãã§ãã ä»å玹ä»ããŠããã®ã¯ã»ãã®äžéšã§ãã®ã§ãä»ã«ãç¥ããããæ·±æããããããšæã£ãæ¹ã«ã¯ãã²ããããã®æžç±ã§ãã SQL ãæžããšãã®èãæ¹ãå€ããããšæããŸãã ç§ãä»ååŠç¿ããŠã¿ãŠæ°ããæ°ä»ãããããããããŸããã®ã§ãäœåºŠãèªã¿çŽããŠã¿ãŠå®çãããããšæããŸãã ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã rakus.hubspotpagebuilder.com ã©ã¯ ã¹Developersç»é²ãã©ãŒã https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ âTECH PLAY techplay.jp âconnpass rakus.connpass.com
åãã« ããã«ã¡ã¯ã mako _makokã§ãã ããã³ãã Vue + Vuex + TypeScript ã§æ°èŠéçºäžã® SaaS ãããã¯ãã«æºããããšã«ãªããæ¥ãããã§VueãåŠç¿ããŠããŸãã ä»åã¯Vuexã«ã€ããŠåŠç¿ããã®ã§ããã®çµæããŸãšããŸããã Vuexã¯äžèšã§è¡šããšãåäžæ¹åã®ããŒã¿ãããŒãæã£ãç¶æ
管çãã¿ãŒã³ã®ã©ã€ãã©ãªã§ãã èšäºå
ã§ãµã³ãã«ãç»å ŽããŸãããVueã®ããŒãžã§ã³ã¯2ç³»ã§æžããŠããŸãã åãã« Vuexããªã䜿ãã®ãïŒ Fluxã«ã€ã㊠Vuexã®ã¢ãŒããã¯ã㣠Store State Getter Mutation Mutationãæžããšãã®ã³ã Action ãŸãšã ãããã« Vuexããªã䜿ãã®ãïŒ Vueã¢ããªã±ãŒã·ã§ã³ãéçºããŠãããšã¢ããªã±ãŒã·ã§ã³ã®ç¶æ
ãåç
§ãã ã³ã³ããŒãã³ã ã®åäœãå€ããããªãããšããããŸãã äŸãã°ãã«ã¬ã³ããŒã¢ããªãªã©ã§ã¯"çŸåšè¡šç€ºããæ"ãç¶æ
ãšããŠæã¡ã"çŸåšè¡šç€ºããæ"ãåç
§ããŠè¡šç€ºããæ¥ä»ã»æ¥æ°ã»äºå®ãå€ããããªããšæããŸãã ãã®ãããªåäœãããåŠçãæçŽã«å®è£
ãããšãç¶æ
èªäœãè€æ°ã® ã³ã³ããŒãã³ã ã«åæ£ããŠããŸã£ãããç¶æ
ã倿Žããããžãã¯ã忣ãéè€ããŠããŸãã±ãŒã¹ãèããããŸãã ã§ã¯ç¶æ
ãæœåºããã°ããŒãã«ãªãªããžã§ã¯ãã§æãŠã°è§£æ±ºããã®ã§ã¯ïŒãšèãããããããŸããã ã§ããããã㯠ã³ã³ããŒãã³ã åå²ããŠããæå³ããããŸããã ã³ã³ããŒãã³ã ããªãŒã®ã©ãããã§ãã¢ã¯ã·ã§ã³ãå®è¡ããããšããç¶æ
ãå€åãããããšãã§ããŠããŸããŸããããã¯ãã¯ã巚倧㪠ã³ã³ããŒãã³ã ãåºæ¥äžããã®ãšå矩ã§ãã ããã§ãç¶æ
管çã«é¢ããéšåã å®çŸ©ïœ¥åé¢ïœ¥ã«ãŒã«å ããŠã³ãŒãã®æ§é ãšä¿å®æ§ã®åäžãç®çãšããã©ã€ãã©ãªãVuexã§ãã Fluxã«ã€ã㊠Vuexã®è©±ãç¶ããŠãããããšããã§ãããVuexã® å
¬åŒ ã«ã¯ä»¥äžã®ããã«ãããŸãã Fluxã Redux ãã㊠The Elm Architectureãã圱é¿ãåããŠããŸãã æåã«æžããã åäžæ¹åã®ããŒã¿ãããŒãæã£ãç¶æ
管çãã¿ãŒã³ ãšããã®ã¯Fluxã«ç¹ã«åœ±é¿ãåããŠããŸãã ãŸãæåã«Fluxãç¥ãããšã«ãã£ãŠãVuexãããçè§£ãããããªãã®ã§ã¯ãšæããŸãã Fluxãšã¯ã Facebook ãæå±ããŠãã ã¢ãŒããã¯ãã£ãã¿ãŒã³ ã§ãã 以äžã¯ Facebook ãå®éã«Fluxã®å®è£
ãè¡ã£ããµã³ãã« ãªããžã㪠ã§ãã https://github.com/facebook/flux Fluxã§ã¯ MVC ãMVVMãšç°ãªããåäžæ¹åã®ããŒã¿ãããŒãæããŠããããšãç¹åŸŽã§ãã å
·äœçã«ã¯ä»¥äžã®å³ã®ããã«ãªããŸãã Fluxã® ã¢ãŒããã¯ã㣠Store ã¢ããªã±ãŒã·ã§ã³ã®ããŒã¿(ç¶æ
)ãä¿æãã DispatcherããæŽæ°ããã publicãªsetter ãæã£ãŠã¯ãªããªã publicãªsetterããããšãç¡ç§©åºã«Storeãæžãæããããšãã§ããŠããŸã Dispatcher Actionãåãåã£ãŠ StoreãæŽæ° ãã ãã¹ãŠã®ã¢ã¯ã·ã§ã³ãåãåã Action Storeãã©ã®ãããªããžãã¯ã§æŽæ°ãããèšèŒããåœä»€ *1 View VueãReactã§èšããšããã® ã³ã³ããŒãã³ã æ£çŽããã¯ã ãã§ã¯ãã£ãšããªããšæãã®ã§ToDoã¢ããªã§ToDoã远å ããåäœãäŸã«ãšã£ãŠã¿ãŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ToDoãä¿æããŠããStoreãæã£ãŠãã ToDoãå
¥åãã远å ãã¿ã³ãæŒããšToDoã远å ãã ActionãDispatcherã«åœä»€ åœä»€ãåãåã£ã DispatcherãActionãå®è¡ ããStoreã«ToDoã远å ãã Storeã«ToDoã远å ãããã®ã§ãæŽæ°ãæ€ç¥ããViewã¯å ã¬ã³ããªã³ã° ãè¡ãã远å ãããToDoã衚瀺ãã Actionã¯ToDoãçŽæ¥æŽæ°ãããDispatcherã«åœä»€ãæž¡ããŠãããšãããããœãšãªããŸãã 以äžãFluxã®æŠèŠã«ãªããŸããããã§ãã€ã³ããšãªãã®ã¯ä»¥äžã®2ç¹ã§ãã Flux㯠åäžæ¹åã®ããŒã¿ãã㌠ããã£ã ã¢ãŒããã¯ã㣠ã§ãã Storeã¯Actionãåãåã£ãDispatcherããã§ããæŽæ°ã§ããªã Vuexã® ã¢ãŒããã¯ã㣠ããããVuexã® ã¢ãŒããã¯ã㣠ã«ã€ããŠèª¬æããŸãã以äžå³ã¯Vuexã® ã¢ãŒããã¯ã㣠ã§ãã Vuexã® ã¢ãŒããã¯ã㣠FluxããState, Getter, Mutationãå¢ããŠããŸãããŸãåäžæ¹åã®ããŒã¿ãããŒãæã£ãŠããããšãããããšæããŸãã Vuexã§ã¯Fluxã§ç»å ŽããStoreãDispatcherãšã³ã³ããã¹ãã埮åŠã«å€ãã£ãŠããç®æããããŸãã Store â Vuexã® ã€ã³ã¹ã¿ã³ã¹ State â Fluxã§ãããšããã®Store Getter â Stateããå€ãååŸãã Mutation â StateãæŽæ°ãã ãFluxã®Dispatcherã®æŽæ°éšåã ããåãé¢ãããããªã€ã¡ãŒãž Dispatch â Actionãå®è¡ãã圹å²ã«ç¹å Action â State ãã©ã®ãããªããžãã¯ã§æŽæ°ãããèšèŒããåœä»€ 以äžãç°¡å㪠ã¢ãŒããã¯ã㣠ã®èª¬æã§ãããªããšãªãFluxããèšèãå€ãã£ãããDispatcherã®åœ¹å²ãåããããã ãªãŒãããã®æèŠãæã£ãŠããã ããã°å€§äžå€«ã§ãã ä»åã¯ToDoã¢ããªã±ãŒã·ã§ã³ãäœããªãããããã説æããŠãããŸãã Store Storeã¯Vuexã® ã€ã³ã¹ã¿ã³ã¹ ã§ããäž»ã«state, getters, mutations, actionsããæ§æãããŸãã 詳ããç¥ãããæ¹ã¯ Vuex.Storeã®APIãªãã¡ã¬ã³ã¹ ã埡芧ãã ããã const store = new Vuex.Store( { state: {} , getters: {} , mutations: {} , actions: {} } éèŠãªã®ã¯Storeã¯ã¢ããªã±ãŒã·ã§ã³å
ã§ åžžã«1ã€ã§ããããã«èšèš ãããšããããšã§ãã çç±ã¯åŸè¿°ããŸãã State ã¢ããªã±ãŒã·ã§ã³ã®ç¶æ
ãä¿æããŸããStateã¯ ä¿¡é Œã§ããå¯äžã®æ
å ±æº ã§ãªããŠã¯ãªããŸããã Storeã®é
ã§ãStoreã¯ã¢ããªã±ãŒã·ã§ã³å
ã§åžžã«1ã€ã§ããããã«èšèšãããšè¿°ã¹ãŸããã Storeãäžã€ãšããããšã¯Stateãäžã€ãããªãããšãæ
ä¿ãããŸãã®ã§ãState㯠"ä¿¡é Œã§ããå¯äžã®æ
å ±æº" ãå®çŸããŸãã Stateã¯ä»¥äžã®ããã«ãªããžã§ã¯ããèšè¿°ããŠãããŸãã state: { todos: [] } , Getter Getterã¯Stateã®äžéšããStateã§èšç®ãããå€ãè¿ããŸãã Getterã®ç¹åŸŽãšããŠãGetterå
ã§ã® èšç®çµæã¯ãã£ãã·ã¥ãããŸãã ãã£ãã·ã¥ãããGetterã®çµæã¯ãStateãæŽæ°ããããšã¯ãªã¢ãããŸãã ä»åã¯Stateããå®äºæžã¿ã®ToDoãè¿ãGetterãäœæããŸããã getters: { doneTodos: state => { return state.todos.filter(todo => todo.done) } } Mutation Mutationã¯StateãæŽæ°ããå¯äžã®ææ®µã§ãã Mutationã«ã¯ããã€ãã®ã«ãŒã«ããããŸãã Mutation以å€ãStateãæŽæ°ããããš ã¯çŠæ¢ Mutationã¯çŽæ¥åç
§ããªãã Store.commit() ããåŒã³åºã Mutationã«ã¯éåæåŠçãæžããŠã¯ãªããªã devtoolã§mutationã®æŽæ°å±¥æŽã远ãããã¥ãããªã æå³ããªãã¿ã€ãã³ã°ã§æŽæ°åŠçãå
¥ã Vueã®devtoolã§ã¯Stateã®æŽæ°å±¥æŽã远ãããšãã§ããã®ã§ãããMutationã§éåæåŠçãæžããŠããŸããš æå³ããªãã¿ã€ãã³ã°ã§æŽæ°ãããã©ã®ããã«Stateãæžãæãã£ãããããã¥ãããªã£ãŠããŸãã®ã§èŠçŽã¬ãã«ã§çŠæ¢ãããŠããŸãã 以äžã®ããšãèžãŸããMutationãæžããŠãããŸãã Mutationã«ã¯Stateã第äžåŒæ°ã«æž¡ããŸãããŸããMutationã«ã¯è¿œå ã®åŒæ°ãæž¡ãããšãã§ããŸãã 远å ã®åŒæ°ã®ããšã ãã€ããŒã ãšåŒã³ãŸãã storeã®ãªããžã§ã¯ããçŽæ¥åŒãããã«æžããŸãã mutations: { HOGE (state) { state.hoge = "hoge" } , FUGA (state, payload) { state.fuga = payload.content } } 2ã®ã«ãŒã«ã«åããMutationã¯store.FUGAãªã©ãšåŒã³åºãããšã¯çŠæ¢ãããŠããŸãã MutationãåŒã³åºãããã«ã以äžã®ããã« store.commit ã䜿çšããŸãã store.commit( 'FUGA' , { content: 'fuga' } ) ToDoãªã¹ãã«ToDoãpushããåŠçãæžããŠãããŸãã mutations: { PUSH_TODO(state, { content, done } ) { state.todos.push( { content: content, done: done } ) } } Mutationãæžããšãã®ã³ã äœè«ã§ãããMutationã§ã¯StateãæŽæ°ããåŠçãæžãã¹ãã§ãå
·äœçãªæŽæ°å
å®¹ãæžãã¹ãã§ã¯ãããŸããã å
·äœçãªåäœã¯åŸè¿°ããActionã«èšè¿°ããŸãã ã«ãŠã³ã¿ãŒã¢ããªã§ããã°ãäŸãã°Stateã®counterã1è¶³ãããæ increment ãšãã颿°ã¯Mutationã«èšè¿°ããã Mutationã«ã¯æ°å€ãåãåã£ãŠcounterã倿Žãã changeCounter() ãäœæããŸãã Actionã« increment ãšãã颿°ãå®çŸ©ãã increment å
ã§ changeCounter ãåŒã³åºãã1ãæž¡ããŠãããŸãããã ãã®ããã«èšè¿°ããããšã§ã decrement ãäœæããããªã£ããšããå¹ççã«æžãããšãã§ãããšæããŸãã Action Actionã¯æçµçã«MutationãcommitããŸãã Mutationã§ã¯éåæåŠçãæžãããšã¯çŠæ¢ãããŠããŸããããActionã«ã¯ éåæåŠçãæžãããšãã§ããŸã ã 第äžåŒæ°ã«ã¯ ã³ã³ããã¹ã ã第äºåŒæ°ã«ã¯Mutationãšåæ§ ãã€ããŒã ãæž¡ãããšãã§ããŸãã ã³ã³ããã¹ãã¯ãªããžã§ã¯ããªã®ã§ã åå²ä»£å
¥ ã§äœ¿çšãããã®ã ãæž¡ããšã¹ãããªããŸãã actions: { doHoge (context) { context.commit( 'HOGE' ) } , doFuga ( { commit } , payload) { commit( 'FUGA' , payload) } } Actionã¯çŽæ¥åŒã³åºããŸããã store.dispatch ããåŒã³åºããŸãã store.dispatch( 'doFuga' , payload) ToDoã¢ããªã®actionã¯ä»¥äžã®ããã«æžããŠãããŸãã å³ãããåããéãã API ã§éä¿¡åŠçãªã©ã¯ããã«æžããŸãã ToDoã¢ããªã§ããéåæåŠçãæãã€ããªãã£ãã®ã§ãšãããã1ç§ããããŠToDoã远å ããŸã actions: { addTodo( { commit } , { content } ) { commit( 'PUSH_TODO' , { content: content, done: false } ) } , addTodoAsync( { commit } , { content } ) { setTimeout(() => { commit( 'PUSH_TODO' , { content: content, done: false } ) } , 1000) } } ããã§ToDoã¢ããªã®Storeã宿ããŸããã æåŸã«Vue ã³ã³ããŒãã³ã ã«storeãªããžã§ã¯ããæž¡ããŠå®æã§ãã new Vue( { el: "#app" , store, Vue ã³ã³ããŒãã³ã ã«storeãæž¡ããŠããã ããªã®ã§ this.$store ããã¢ã¯ã»ã¹ã§ããŸãã ä»åã¯çŽæ¥storeã代å
¥ããŠããŸãããwebpackã䜿çšããŠããå Žåã¯VuexãimportããŠã㊠Vue.use(Vuex) ã§ãåãããšãã§ããŸãã å®æåœ¢ã以äžã«ãããŠãããŸãã jsfiddle.net ãŸãšã ãããŸã§Vuexã«ã€ããŠæžããŠããŸããã 以äžã«ãã€ã³ãããŸãšããŸãã Storeã¯ã¢ããªã±ãŒã·ã§ã³ã«1ã€ã ãååšããããã«èšèšãã Stateã¯çŽæ¥æŽæ°ããªããå¿
ãMutationããæŽæ°ããããš Mutationã¯çŽæ¥åŒã³åºããªãããšã store.commit ã§åŒã³åºã Mutationã«ã¯éåæåŠçãæžããªã Actionã¯çŽæ¥åŒã³åºããªãããšã store.dispatch ã§åŒã³åºã ãããã« åºæ¬çã«èŠçŽãå®ã£ãŠæžãã°Vuexã®ã³ãŒããæžãã®ã«ãããŸã§èŠåŽã¯ããªãããšæããŸãã Vuexã¯é£ãããšèããŠããŸãããã API ãå€ããªãåºæ¬çãªæžãæ¹èªäœã¯ã¹ããšå
¥ã£ãŠããæ°ãããŸãã ããããæ¬åœã«é£ãããšæããã®ã¯ãããããããžã§ã¯ãã«Vuexãå
¥ããã¹ãã *2 ãã©ããŸã§Storeã«æããããããšããããšã§ãã ãŸããVuex + TypeScriptã®ãã©ããVue3 + Vuexãªã©è²ã
ãã¿ãããã®ã§ãã®èŸºãèšäºã«ããŠãããããšæããŸãã ç§ãã¡ã¯äžç·ã«åãã¡ã³ããŒãåéããŠããŸãã ãèå³ãæãããŸããã以äžã®ãµã€ããããåãåãããã ããã career-recruit.rakus.co.jp *1 : ã¢ã¯ã·ã§ã³ã¯Viewããçºç«ãããããšãå€ãã§ãããViewããçºç«ãããªãã±ãŒã¹ããããŸã *2 : Storeãã¿ãŒã³ã®ç¬èªå®è£
ãè¡ã, Firebaseãªã©ã䜿çšãããªã©Vuexã«é ŒããªããŠãStateã管çã§ãã
ããã«ã¡ã¯ãtarakamã§ãã æ®æ®µããã°ã©ãã³ã°ãããéã䜿ãæ
£ãã IDE ã ããã¹ããšãã£ã¿ ããããšããæ¹ã¯å€ãããšæããŸããã§ã¯ãããã§äœ¿ã ãã©ã³ã ã«ã¯ãã ãã£ãŠããã§ããããïŒä»åã¯ããã°ã©ãã³ã°ã®ããã®ãã©ã³ãéžã³ã«ã€ããŠèšããŸãã Why ããã°ã©ãã³ã°ãã©ã³ãïŒ ã©ããªãã©ã³ããããã®ïŒ ãããããã©ã³ã Ricty Diminished Source Han Code JP Cica ãããã« Why ããã°ã©ãã³ã°ãã©ã³ãïŒ äžè¬çãªãã©ã³ãã®å Žåãã¢ã«ãã¡ãããã®IïŒå€§æåïŒãšlïŒå°æåïŒã0ïŒæ°åïŒãšOïŒå€§æåïŒãªã©ãèŠåãã¥ããããšããããŸããæ®éã®æç« ã§ããã°æèã§ãããã§ãããããããã°ã©ãã³ã°ã®å Žåã¯ããã§ãªãããšããããŸã *1 ãèŠééããªããã©ã³ãã«ãªã£ãŠããã°ãã³ãŒããæžãã®ãèªãã®ã楜ã«ãªããŸãã ãŸãçŸãããã©ã³ãã䜿ãããšã§ãã¢ãããŒã·ã§ã³ã¢ããã«ãç¹ãããããããŸããã ã©ããªãã©ã³ããããã®ïŒ 奜ã¿ã«ãããããšæããŸããã以äžã®ãããªæ¡ä»¶ãæºãããã®ã ãšããã§ãããã çå¹
ãã©ã³ã IïŒå€§æåã®ã¢ã€ïŒ, lïŒå°æåã®ãšã«ïŒ, 1ïŒæ°åã®ïŒïŒ, |ïŒ ããŒãã£ã«ã«ã㌠ïŒãåºå¥ã§ãã OïŒå€§æåã®ãªãŒïŒ, 0ïŒæ°åã®ãŒãïŒãåºå¥ã§ãã æ¥æ¬èªã«å¯Ÿå¿ããŠãã æ¥æ¬èªé察å¿ã ãšè±èªã𿥿¬èªãéããã©ã³ãã§è¡šç€ºãããåã®å€§ãããç·ã®å€ªããç°ãªããªã©éåæããããŸã 倪åã»æäœã«å¯Ÿå¿ããŠãã ãšãã£ã¿ã«ãã£ãŠã¯ ã·ã³ã¿ãã¯ã¹ ãã€ã©ã€ãã§å€ªåãæäœã䜿ãããšããããã ããããèžãŸããŠã以äžã§çè
ã®ããããã®ãã©ã³ããããã€ãã玹ä»ããŸãã ãããããã©ã³ã Ricty Diminished Ricty Diminished Ricty Diminished ã¯ãè±åãã©ã³ãInconsolataãšæ¥æ¬èªãã©ã³ãCircle M+ 1mãå
ã«äœæããããã©ã³ãã§ãããã°ã®åå ã«ãªããããå
šè§ã¹ããŒã¹ãåºå¥ã§ããã®ãç¹åŸŽã®äžã€ã§ãïŒäžèšç»åã®ãèšç®ãããã®å³ã«å
šè§ã¹ããŒã¹ãå
¥ã£ãŠããŸãïŒããã®ä»ãåæ¿ç¹ã倧ãããã°ããšãã±ããªã©ãåºå¥ããããããšãç¹åŸŽã§ãã å§åйãã©ã³ãã® Ricty ããããŸãããã©ã€ã»ã³ã¹ã®é¢ä¿ã§æå
ã§ ã¹ã¯ãªãã ãå®è¡ããŠãã©ã³ããçæããå¿
èŠããããŸããDinimishedã®æ¹ã挢åã®å鲿°ãå°ãªãã®ã§ãããäžè¬çã«äœ¿ã挢åã¯å€§äœã«ããŒãããŠããã®ã§ãæè»œãª Ricty Diminishedã§ãååã§ãããã Source Han Code JP Source Han Code JP Source Han Code JP ïŒå¥å æºãè§ãŽã·ã㯠CodeïŒã¯ Adobe ã«ãã£ãŠäœæããããã©ã³ãã§ãSource Code Proãšæºãè§ãŽã·ãã¯ãå
ã«ãªã£ãŠããŸããäžè¬çãªãã©ã³ãã¯åè§ãšå
šè§ã®æšªå¹
ã1:2ã«ãªã£ãŠããŸããããã®ãã©ã³ãã¯2:3ã«ãªã£ãŠããã®ãç¹åŸŽã§ããåè§æåã®å¹
ãåºãããããã£ãããšããå°è±¡ããããŸãã Cica Cica Cica ã¯è±åãã©ã³ãã®HackãšDejaVu Sans Monoãæ¥æ¬èªãã©ã³ãã®Rounded Mgen+ãªã©è€æ°ã®ãã©ã³ããå
ãšãªã£ãŠãããã©ã³ãã§ãã Ricty ãåèã«äœãããŠããŠãå
šè§ã¹ããŒã¹ã Ricty Diminishedãšåæ§ã«å¯èŠåãããŠããŸãã ãããã« ä»åã¯3ã€ã®ãã©ã³ãã®ç޹ä»ã«çããŸãããããã以å€ã«ãããã°ã©ãã³ã°ãã©ã³ãã¯ããããååšããŸãããã²èªåã®ãæ°ã«å
¥ãã®ãã©ã³ããèŠã€ããŠã¿ãŠãã ããïŒ *1 : ã«ãŒãã«ãŠã³ã¿ã§lïŒå°æåïŒäžæåã®å€æ°ãªã©ãããããŸãã
ã¯ããã« ããã«ã¡ã¯ãitoken1013ã§ãã ä»å¹Žã ã©ã¯ ã¹ã«ããããã®æ°å
¥ç€Ÿå¡ãå
¥ç€ŸããŸããã æ¥æ¬äžã®æ°ãšã³ãžãã¢ãç ä¿®ã«åãçµãã§ããã§ããããã®é ãä»åã¯Gitãš GitHub ã®è¶
åºæ¬çãªäœ¿ãæ¹ããŸãšããŠã¿ãããšæããŸãã ä»ããšã³ãžãã¢ã«ãšã£ãŠå¿
é ã§ããGitã§ãããããŒã éçºãè¡ãããã«ã¯ GitHub ã䜿ãããªãããšã ããã¹ã ãŒãºã«éçºãé²ããããšãã§ããã§ãããã ãŸãã¯ä»åã®èšäºã§åºæ¬çãªäœ¿ãæ¹ãæŒãããŠããã ããã°ãšæããŸãã åŒç€Ÿããã°ã®Gitã«é¢ããé¢é£èšäºããã²ãäžèªãã ããïŒ ã» ãGitå
¥éãgit cloneã§æ¢åãªããžããªãã¯ããŒã³ãããïŒ ã» ãGitå
¥éãgit stashã§äœæ¥ã䟿å©ã«éé¿ãã ã» ãGitå
¥éãgit commitãåãæ¶ããããå
ã«æ»ãæ¹æ³ãŸãšã ã¯ããã« åºæ¬ç¥è ãŸããããŒãžã§ã³ç®¡çãšã¯ Gitãšã¯ ãªããžããªãšã¯ GitHubãšã¯ 1. GitãšGitHubã®è¶
åºæ¬çãªäœ¿ãæ¹ 1-1. Gitã®ã€ã³ã¹ããŒã« 1-2. Gitã®åæèšå® 1-3. GitHubã®ã¢ã«ãŠã³ãäœæ 1-4. ãªã¢ãŒããªããžããªãäœæãã 1-5. ããŒã«ã«ãªããžããªãäœæãã 1-6. ããŒã«ã«ãªããžããªã«ã³ããããã 1-7. ãªã¢ãŒããªããžããªã«ããã·ã¥ãã 2. GitãšGitHubã䜿ã£ãããŒã éçºã®è¶
å
¥é 2-1. ãªããžããªãã¯ããŒã³ãã 2-2. ãã©ã³ããäœæãã 2-3. ãã©ã³ãã§ã³ããããã 2-4. ãªã¢ãŒããªããžããªã«ããã·ã¥ãã 2-5. ã³ãŒãã¬ãã¥ãŒã»ããŒãž 2-6. ãªã¢ãŒããªããžããªãããã«ãã ãŸãšã ã åºæ¬ç¥è ãŸããããŒãžã§ã³ç®¡çãšã¯ ãœãŒã¹ã³ãŒã ãã¯ãããšãããã¡ã€ã«ã®å€æŽå±¥æŽïŒããŒãžã§ã³ïŒã管çããããšããããŒãžã§ã³ç®¡çããšåŒã³ãŸãã ãã¡ã€ã«ã®è¿œå ã倿Žã®å±¥æŽæ
å ±ã管çããããšã§ãéå»ã®å€æŽç®æã確èªãããç¹å®æç¹ã®å
å®¹ã«æ»ãããªã©ã®ãããŒãžã§ã³ç®¡çããšããäœæ¥ãå¯èœãšãªããŸãã ãã®ããŒãžã§ã³ç®¡çãšããæŠå¿µãååšããªãç¶æ³äžã§ã®éçºäœæ¥ãèããå Žåã ãã°çºçæã«ã¯æ··å
¥ææãåããããä¿®æ£ãé
ãããçºçãããã°ã«ãã圱é¿åºŠãäžæç¢ºã«ãªãã çµæãšããŠãŠãŒã¶ãŒã®æºè¶³åºŠäœäžã«ã€ãªãããªã©ã®ãªã¹ã¯ãé«ãŸããŸãã ãŸãåŸè¿°ããããŒã ã§ã®éçºã«ãããŠããã¡ã³ããŒéã§ã®éçºå
容ã飿ºããããšãé£ãããªãã éçºã®çç£æ§ã倧ããæãªãããšã«ã€ãªãããŸãã 以äžã®ããšããããœãããã§ã¢ã®éçºã«ãããŠãããŒãžã§ã³ç®¡çãžã®çè§£ã¯å¿
é ãšãªããŸãã Gitãšã¯ äžèšã§èª¬æããŸããããŒãžã§ã³ç®¡çãè¡ãããã®ã·ã¹ãã ãGitã§ãã ä»ã® ããŒãžã§ã³ç®¡çã·ã¹ãã ãšæ¯èŒããGitã®ç¹åŸŽãšããŠãã忣åãã® ããŒãžã§ã³ç®¡çã·ã¹ãã ã§ããç¹ãæããããŸãã ããŒãžã§ã³ç®¡çã·ã¹ãã ã¯å€§ãããéäžåããšã忣åãã«åããããŸãã ãéäžåãã® ããŒãžã§ã³ç®¡çã·ã¹ãã ã§ã¯ãç¹å®ã®å Žæã«ãã ãªããžã㪠ãžã®æ¥ç¶ãå¿
é ãšãªããŸããã ã忣åãã® ããŒãžã§ã³ç®¡çã·ã¹ãã ã§ã¯åã
人ã®ãã·ã³äžã« ãªããžã㪠ãäœæããŠéçºãè¡ãããšãã§ããçŸåšã®ããŒã éçºã«ãããäž»æµãšãªã£ãŠããŸãã Gitã®å
·äœçãªäœ¿ãæ¹ã¯ãåŸã»ã©ç޹ä»ããŠãããŸãã ãªããžã㪠ãšã¯ ããŒãžã§ã³ç®¡çã«ãã£ãŠç®¡çããããã¡ã€ã«ãšå±¥æŽæ
å ±ãä¿ç®¡ããé åãã ãªããžã㪠ãšåŒã³ãŸãã ãªããžã㪠ã®é
äžã§ãã¡ã€ã«ã ãã£ã¬ã¯ã ãªãæäœããããšã§ãç§ãã¡ã¯ããŒãžã§ã³ç®¡çãè¡ãããšãã§ããŸãã 忣åã® ããŒãžã§ã³ç®¡çã·ã¹ãã ã§ããGitã§ã¯ããŸãåã
人ã®ãã·ã³äžã«ãã ãªããžã㪠äžã§äœæ¥ã宿œåŸã äœæ¥å
容ããããã¯ãŒã¯å
ã®ãµãŒããŒäžãªã©ã«ãã ãªããžã㪠ã«éçŽããæµãã§éçºãé²ããŠãããŸãã ãã®åã
人㮠ãªããžã㪠ããããŒã«ã« ãªããžã㪠ããéçŽå
ãšãªã ãªããžã㪠ãããªã¢ãŒ ããªããž ããªããšåŒã³ãŸãã Gitã䜿ã£ãéçºã§ã¯ãã®åºå¥ãéèŠãšãªãããããã£ããçè§£ããã ããã°ãšæããŸãã GitHub ãšã¯ è€æ°äººã®ãšã³ãžãã¢ããªã¢ãŒ ããªããž ããªãšããŠæŽ»çšããä»ãããŒã éçºãè¡ãããã®æ©èœãæäŸãã WEBãµãŒãã¹ ã GitHub ã§ãã ãªããžã㪠ãšããŠã®æ©èœãæã€ä»ã«ããã³ãŒã ã¬ãã¥ãŒæ©èœ ã Wiki ãªã©ã®ã³ãã¥ãã±ãŒã·ã§ã³ããŒã«ãšããŠã®æ©èœãæã¡ãçµç¹èŠæš¡ãåãããå€ãã®äŒæ¥ã»å£äœããœãããŠã§ã¢éçºã§å©çšããŠããŸãã åŸè¿°ã§ã¯ãªã¢ãŒ ããªããž ããªã®äœãæ¹ããŸãã³ãŒãã¬ãã¥ãŒã宿œããæ¹æ³ã玹ä»ããŠãããŸãã 1. Gitãš GitHub ã®è¶
åºæ¬çãªäœ¿ãæ¹ æŠèŠã®èª¬æãèžãŸãããšããã§ããŸãã¯Gitãš GitHub ã®è¶
åºæ¬çãªäœ¿ãæ¹ã説æããŠãããŸãã Gitã®åæèšå®ãèžãŸãã以äžã®æµãã§ GitHub ã«ãã¡ã€ã«ãåæ ããŠã¿ãŸãããã Gitã®ã€ã³ã¹ããŒã« Gitã®åæèšå® GitHub ã®ã¢ã«ãŠã³ããäœæ ãªã¢ãŒ ããªããž ããªãäœæãã ããŒã«ã« ãªããžã㪠ãäœæãã ããŒã«ã« ãªããžã㪠ã«ã³ããããã ãªã¢ãŒ ããªããž ããªã«ããã·ã¥ãã 1-1. Gitã®ã€ã³ã¹ããŒã« ãŸãã¯Gitãå©çšã§ããç¶æ
ã«ããŠãããŸãããã Mac ã®å Žå Mac ã§ããã°Gitã¯ã€ã³ã¹ããŒã«æžãšãªããŸããããæ¬äœæ¥ã¯äžèŠã§ãã Windows ã®å Žå å
¬åŒããŒãž ãã ã€ã³ã¹ããŒã© ãŒãããŠã³ããŒãããŸãã ã€ã³ã¹ããŒã© ãŒãèµ·åãããšå€ãã®èšåã衚瀺ãããŸããã æ¬èšäºã®äœæ¥ã§ã¯å
šãŠããã©ã«ãã®ç¶æ
ã§åé¡ãããŸããã ãNextããã¿ã³ãã¯ãªãã¯ãç¶ãã以äžã®ç»é¢ãŸã§èŸ¿ãçããŸããããInstallããã¿ã³ã§ã€ã³ã¹ããŒã«ãè¡ããŸãã ã€ã³ã¹ããŒã«ãå®äºããŸããããGit Bash ãèµ·åããŸãã Git Bash ãšã¯ã Windows äžã§Gitã®ã³ãã³ããæäœããããã®ããŒã«ã§ãã Git Bash ãèµ·ååŸã以äžã®ã³ãã³ããå
¥åããŠGitã®ããŒãžã§ã³æ
å ±ã衚瀺ãããããšã確èªããŠãã ããã $ git --version git version 2.26.2.windows.1 â»ä»¥éã®Gitæäœã¯å
šãŠã¿ãŒããã«ãGit Bash ãªã©ã® ã³ãã³ãã©ã€ã³ ãšããŠç޹ä»ããŠãããŸããã Git㯠GUI ããŒã«ã䜿ã£ãŠå©çšããããšãå¯èœã§ãã ãGit GUI ããªã©ã§æ€çŽ¢ã®äžãå©çšã·ãŒã³ã«å¿ããŠäœ¿ãåããŠããã ããã°ãšæããŸãã 1-2. Gitã®åæèšå® Mac ã ãšã¿ãŒããã«ã Windows ã ãšGit Bash ã§ã®äœæ¥ã§ãã Gitã§ã¯ ãœãŒã¹ã³ãŒã ã®å€æŽå±¥æŽã確èªã§ããŸãããã誰ãã倿Žãããã確èªããããã®æ
å ±ãå¿
èŠãšãªããŸãã ãã®äœæ¥è
ãèå¥ããããã®æ
å ±ãšããŠããŠãŒã¶åãšã¡ãŒã«ã¢ãã¬ã¹ãç»é²ããäœæ¥ãè¡ããŸãã ãŠãŒã¶å 以äžã®ã³ãã³ããå
¥åããŠãã ããã git config --global user.name ä»»æã®ãŠãŒã¶å ã¡ãŒã«ã¢ãã¬ã¹ 以äžã®ã³ãã³ããå
¥åããŠãã ããã git config --global user.email ä»»æã®ã¡ãŒã«ã¢ãã¬ã¹ æåŸã«ä»¥äžã®ã³ãã³ããå
¥åãããšãäžèšã®ãŠãŒã¶åãšã¡ãŒã«ã¢ãã¬ã¹ãç»é²ãããŠããããšã確èªã§ããŸãã $ git config --list core.symlinks=false core.autocrlf=false color.diff=auto ã» ã» äžç¥ ã» ã» user.name=èšå®ãããŠãŒã¶å user.email=èšå®ããã¡ãŒã«ã¢ãã¬ã¹ ã» ã» 1-3. GitHub ã®ã¢ã«ãŠã³ãäœæ 次㫠GitHub ã«ã¢ã«ãŠã³ããäœæããŠã¿ãŸãããã GitHub ãžã¢ã¯ã»ã¹ãããŠãŒã¶åã»ã¡ãŒã«ã¢ãã¬ã¹ã»ãã¹ã¯ãŒããå
¥åããã Sign up for GitHub ããã¿ã³ãã¯ãªãã¯ããŸãã æ¬¡ã«ä»¥äžã®ç»é¢ã§ãVerify your accountãã®èšåã«åçåŸããJoin a free planããéžæããŸãã æ¬¡ã«ãWelcome to GitHub ããšè¡šç€ºãããç»é¢ãžé²ã¿ãŸãããäžçªäžãŸã§é²ã¿ã ãComplete setupããã¿ã³ãã¯ãªãã¯ããŠãã ããã ïœïœ äžç¥ ïœïœ æåŸã«ãã¡ãã®ç»é¢ã衚瀺ãããå
¥åããã¡ãŒã«ã¢ãã¬ã¹ãžèªèšŒçšã®ã¡ãŒã«ãé
ä¿¡ãããŸãã ã¡ãŒã«ã確èªã®äžãèªèšŒãè¡ã£ãŠãã ããã ãããŸã§ã§ GitHub ã®ã¢ã«ãŠã³ãäœæã¯å®äºã§ãã 1-4. ãªã¢ãŒ ããªããž ããªãäœæãã GitHub ã«ã¢ã¯ã»ã¹ãããªã¢ãŒ ããªããž ããªãäœæããŸãã ãããç»é¢ã§ãCreate Repositoryããã¿ã³ãã¯ãªãã¯ããŠãã ããã ãªããžããª äœæç»é¢ã«ç§»åããŸãã 以äžã®ç»é¢ã§ã¯ããRepository nameãã«ã¯ä»»æã® ãªããžã㪠åãå
¥åããŸãã â»ããã§ã¯äŸãšããŠããrakusããšãã ãªããžã㪠åãå
¥åããŸãã æ¬¡ã« ãªããžã㪠ã®çš®é¡ãšããŠããPublicãããPrivateããéžæããŸãã GitHub ã§ã¯é·ããææäŒå¡ã®ã¿ãPrivateããéžæã§ããŠããŸãããã2019幎ããFreeãã©ã³ã§ããPrivateããäœæã§ããããã«ãªããŸããã ä»åã¯ã©ã¡ããéžæããã ããŠãæ§ããŸããã ãPublicããéžæããå ŽåïŒä»ã®ãŠãŒã¶ãŒã ãœãŒã¹ã³ãŒã ãé²èЧããããšãå¯èœãšãªããŸãã ãPrivateããéžæããå ŽåïŒéå
¬éãšãªããŸãã æ¬¡ã«ãInitialize this repository with a READMEãã§ããã ãªããžã㪠ã®èª¬æãäœ¿ãæ¹ãèšè¿°ããREADMEãã¡ã€ã«ãäºåäœæããŠããå Žåã«ã¯ãã§ãã¯ãONã«ããŸãã æåŸã®ã.gitignoreãããlicenseã㯠None ãéžæã§æ§ããŸããã æåŸã«ãCreate repositoryããã¿ã³ãã¯ãªãã¯ãããšã ãªããžã㪠ãäœæãããŸãã 1-5. ããŒã«ã« ãªããžã㪠ãäœæãã æ¬¡ã«ããŒã«ã« ãªããžã㪠ãäœæããŠãããŸãã â»èšäºã§ã¯äŸãšããŠãrakusããšãã ãã£ã¬ã¯ã ãªãäœæããŸãã ãã®åŸã git init ã³ãã³ããå
¥åããããšã§ãäœæãã ãã£ã¬ã¯ã ãªãgit ãªããžã㪠ãšããŠåæåããŸãã ã³ãã³ãã¯äœæãã ãã£ã¬ã¯ã ãªäžã§å®æœããå¿
èŠãããç¹ã«æ³šæããŠãã ããã git init 1-6. ããŒã«ã« ãªããžã㪠ã«ã³ããããã ã³ãããïŒcommitïŒ ãšã¯ããã¡ã€ã«ã®è¿œå ã»å€æŽãããŒã«ã« ãªããžã㪠ã«åæ ããæäœãæå³ããŸãã å®éã«ããŒã«ã« ãªããžã㪠ã«ãã¡ã€ã«ã远å ããŠã¿ãŸãããã ãŸãã¯1-5ã§äœæãã ãã£ã¬ã¯ã ãªé
äžã§ãindex.htmlããšãããã¡ã€ã«ãäœæããŸãã ããã¹ããšãã£ã¿ ãªã©ã§ãã¡ã€ã«ãäœæããŠãã ããã ãã®ç¶æ
ã§ã¯ãã¡ã€ã«ãäœæããã ãã§ãã®ã§ããŸã ãªããžã㪠ã«ã¯ãã¡ã€ã«ã¯è¿œå ãããŠããŸããã æ¬¡ã«ä»¥äžã®ã³ãã³ããå
¥åããã€ã³ããã¯ã¹ãžãindex.htmlãã远å ããŸãã ã€ã³ããã¯ã¹ãšã¯ãã³ãããåã«å€æŽå
容ãäžæçã«ä¿åããé åãæããã€ã³ããã¯ã¹ã«è¿œå ããããã¡ã€ã«ã®ã¿ãã³ãããã®å¯Ÿè±¡ãšãªããŸãã git add index.html æåŸã«ãã€ã³ããã¯ã¹ãžè¿œå ãããã¡ã€ã«ãã³ãããããŸãã 以äžã®ã³ãã³ããå
¥åãããšãã€ã³ããã¯ã¹ã«ååšãããã¡ã€ã«ãããŒã«ã« ãªããžã㪠ãžè¿œå ãããŸãã git commit -m "[Add] index" ããã§ -m ã¯ã³ãããã¡ãã»ãŒãžãå
¥åããããã®ãªãã·ã§ã³ã§ãã ã³ãããã¡ãã»ãŒãžãæ®ãããšã§ãã詳现ãªå±¥æŽæ
å ±ãæ®ãããšãã§ããåŸã
ãã°ããã³ãããå
容ã確èªããéã«åœ¹ç«ã¡ãŸãã ç©æ¥µçã«æŽ»çšããŸãããã ãŸããã³ãããã¡ãã»ãŒãžãå«ãã倿Žå±¥æŽïŒãã°ïŒã¯ã以äžã® git log ã³ãã³ããå
¥åããããšã§ä»¥äžã®ããã«ç¢ºèªã§ããŸãã $ git log commit 6a8e257...ã³ãããããã·ã¥.....642e3 (HEAD -> master) Author: ãŠãŒã¶å <ã¡ãŒã«ã¢ãã¬ã¹> Date: Tue May 26 18:45:56 2020 +0900 [Add] index 1-7. ãªã¢ãŒ ããªããž ããªã«ããã·ã¥ãã æåŸã«ããŒã«ã« ãªããžã㪠ã®å€æŽã GitHub äžã®ãªã¢ãŒ ããªããž ããªã«åæ ãã ããã·ã¥ïŒpushïŒ ãè¡ããŸãã ãŸãã¯ããŒã«ã« ãªããžã㪠ãšãªã¢ãŒ ããªããž ããªãçŽã¥ããããããã«ãããŒã«ã« ãªããžã㪠é
äžã§ä»¥äžã®ã³ãã³ããå
¥åããŸãã git remote add origin https://github.com/ãŠãŒã¶/[äœæãããªããžããª].git ããã§ãªã¢ãŒ ããªããž ããªã®æ
å ±ãããŒã«ã« ãªããžã㪠ã«ç»é²ãããŸããã æ¬¡ã«ããŒã«ã« ãªããžã㪠ã®å€æŽå
容ããªã¢ãŒ ããªããž ããªã«åæ ãããããã以äžã®ã³ãã³ããå
¥åããŠããã·ã¥ãè¡ããŸãã GitHub ã®ãŠãŒã¶åãšãã¹ã¯ãŒããæ±ããããŸãã®ã§ãã¢ã«ãŠã³ãç»é²æã«èšå®ããå
容ãå
¥åããŠãã ããã git push origin master ããã§ãªã¢ãŒ ããªããž ããªãžåæ ãããããšãã§ããŸããã GitHub ã§ã倿Žå
容ãåæ ãããŠããããšã確èªã§ããŸãã â» GitHub äžã«å
¬é鵿
å ±ãç»é²ããããšã§ãããã·ã¥æã«ãŠãŒã¶åãšãã¹ã¯ãŒããéœåºŠå
¥åããæéãçãããšãã§ããŸãã è©³çŽ°ãªæé ã¯å²æããŸãããèå³ã®ããæ¹ã¯èª¿ã¹ãŠã¿ãŠãã ããã git commitãgit stashã®ããæ¹ãç¥ããããšããæ¹ã¯ä»¥äžããã°ãåèã«äžããã ã» 【Git入門】git commitを取り消したい、元に戻す方法まとめ - RAKUS Developers Blog | ラクス エンジニアブログ ã» 【Git入門】git stashで作業を便利に退避する - RAKUS Developers Blog | ラクス エンジニアブログ 2. Gitãš GitHub ã䜿ã£ãããŒã éçºã®è¶
å
¥é ãããŸã§Gitãš GitHub åºæ¬çãªäœ¿ãæ¹ã玹ä»ããŠããŸããããããŒã ã§ä»ã®ã¡ã³ããŒãšéçºãè¡ãéã®äœ¿ãæ¹ã«ã€ããŠããåºæ¬çãªæäœã玹ä»ããŠãããããšæããŸãã Gitã«ã¯ ãã©ã³ãïŒbranchïŒ ãšããä»çµã¿ããããããŒã éçºãè¡ãéã«ã¯ãã©ã³ãã䜿ãããªãå¿
èŠããããŸãã 2-1. ãªããžã㪠ãã¯ããŒã³ãã ããªããæ°ãã«éçºçŸå Žã«åå ããããšã«ãªã£ãå Žåããã§ã«ååšãããªã¢ãŒ ããªããž ããªãã ãœãŒã¹ã³ãŒã ãååŸããããšã«ãªããŸãããã¡ãã®äœæ¥ã宿œããŠã¿ãŸãããã å
ã»ã©äœæãã ãã£ã¬ã¯ã ãªãšã¯å¥ã® ãã£ã¬ã¯ã ãªïŒåœèšäºã§ã¯ãrakurakuããšããŸãïŒãäœæãã以äžã®ã³ãã³ããå®è¡ããŠãã ããã ã³ãã³ãã¯äœæãã ãã£ã¬ã¯ã ãªäžã§å®æœããå¿
èŠãããç¹ã«æ³šæããŠãã ããã git clone https://github.com/ãŠãŒã¶å/[äœæãããªããžããª].git æ°ããäœæãã ãã£ã¬ã¯ã ãªïŒrakuraku ãã£ã¬ã¯ã ãªïŒäžã«å
ã»ã©ããã·ã¥ãã index.html ã衚瀺ãããããšæããŸãã ãã®ããã«ãªã¢ãŒããã ãªããžã㪠ããååŸããäœæ¥ã ã¯ããŒã³ïŒcloneïŒ ãšåŒã³ãŸãã 2-2. ãã©ã³ããäœæãã ãœãããŠã§ã¢éçºã§ã¯åæé²è¡ã§è€æ°ã®ããŒãžã§ã³ã®éçºãè¡ãããããšã¯çããããšã§ã¯ãããŸããã ãŸãçªçºçãªãã°å¯Ÿå¿ãçºçããããšãããããã¡ããæ°ãã«ãªãªãŒã¹ããããŒãžã§ã³ãšã¯å¥è»žã§å¯Ÿå¿ããå¿
èŠãåºãŠããŸãã ãããã䞊è¡ãã€ã€éçºãå®çŸããããã®ä»çµã¿ãšããŠãGitã«ã¯ ãã©ã³ãïŒbranchïŒæãæåããïŒ ãšããæ©èœãæäŸãããŠããŸãã 以äžã®å³ã«ç€ºãããã«ãã©ã³ãã䜿ãã倿Žå±¥æŽãåå²ããéçºãå®çŸããããšãã§ããŸãã ãã©ã³ããäœæããã«ã¯ã git branch ã³ãã³ãã䜿ããŸãã äŸãšããŠãçŸåšäœæ¥äžã®ãã©ã³ãïŒããã©ã«ãã§ååšãããã©ã³ãããmasterããšåŒã³ãŸãïŒãããfeature1ããšãããã©ã³ããäœæããŠã¿ãŸãã 以äžã®ããã«ã³ãã³ããå
¥åããŠãã ããã git branch feature1 ããã§master ããfeature1 ãã©ã³ããäœæãããŸããã æ¬¡ã«feature1 ãã©ã³ãäžã§äœæ¥ãè¡ãããã«ãcheckoutã³ãã³ããå
¥åããŠãã©ã³ããç§»åããŸãã git checkout feature1 ããã§ git branch ã³ãã³ããå
¥åãããšãçŸåšããŒã«ã« ãªããžã㪠äžã«ååšãããmasterããšãfeature1ããšãããã©ã³ãã衚瀺ãããŸãã ã*ãã¯äœæ¥ãè¡ã£ãŠãããã©ã³ãã瀺ããŠããŸãã $ git branch * feature1 master 2-3. ãã©ã³ãã§ã³ããããã feature1ãã©ã³ãã§ã®äœæ¥ãšããŠãä»åºŠã¯login.htmlãšãããã¡ã€ã«ãäœæããŠã¿ãŸãã äœæããlogin.htmlãfeature1ãã©ã³ãã«ã³ãããããŸãã 以äžã®ã³ãã³ããå
¥åããŠãã ããã git add login.html git commit -m "[Add] login" 2-4. ãªã¢ãŒ ããªããž ããªã«ããã·ã¥ãã æ¬¡ã«ããªã¢ãŒ ããªããž ããªïŒ GitHub ïŒã«ãfeature1ãã©ã³ãã®å
容ãåæ ããŸãã 1-7ã®æé ãšç°ãªããpushå
ã®ãã©ã³ãã feature1 ã«ãªã£ãŠããç¹ã«æ³šæããŠãã ããã git push origin feature1 GitHub ã«ã¢ã¯ã»ã¹ãããšã2ã€ã®ãã©ã³ãïŒmaster ãš feature1ïŒãååšããããšã確èªã§ããŸãã ãŸãfeature1 ãã©ã³ãã«ã¯å€æŽå
容ãããã·ã¥ãããããšã確èªã§ããŸãã éã«ããã·ã¥å
ã§ã¯ãªãmaster ã«ã¯å€æŽå
容ãåæ ãããŠããªãããšã確èªã§ããŸãã 2-5. ã³ãŒãã¬ãã¥ãŒã»ããŒãž ãã©ã³ãã§ã®éçºäœæ¥ãå®äºããŸããããã¡ã€ã³ãšãªããã©ã³ãïŒäžè¬çã«ã¯ masterïŒã«å€æŽå
容ãåã蟌ã¿ãéçºå
容ãçµ±åããŸãã ãã®ããã«ç¹å®ã®ãã©ã³ãã®å€æŽå
容ãå¥ã®ãã©ã³ãã«åã蟌ãããšã ããŒãž ãšåŒã³ãŸãã ãã®ããŒãžãè¡ãéã GitHub äžã§ã¯ ãã«ãªã¯ ãšã¹ ã ãšåŒã°ããæ©èœã䜿ããã³ãŒãã¬ãã¥ãŒãè¡ãããšãã§ããŸãã ææãããå Žåã«ã¯ã³ã¡ã³ãã远å ããäœæ¥è
ã«ä¿®æ£ãä¿ãããšãã§ããŸãã ãã¡ãã®æŠèŠã«ã€ããŠã説æããŸãã ã¬ãã¥ãŒã®äŸé Œ ãŸã㯠Github äžã§feature1ãã©ã³ããéãããNew Pull Requestããã¯ãªãã¯ããŸãã æ¬¡ã«ãã«ãªã¯ ãšã¹ ããäœæããŸãã 以äžã®ç¹ã確èªã»å
¥åã®äžããCreate pull requestããã¿ã³ãã¯ãªãã¯ããŠãã ããã â ããŒãžå
ã»å
ã®ãã©ã³ã â¡ ã¬ãã¥ã¢ãŒïŒã¬ãã¥ãŒãè¡ãäººïŒ â¢ ã¬ãã¥ãŒå
容 ⣠ã¬ãã¥ãŒã»ããŒãžå¯Ÿè±¡ã® ãœãŒã¹ã³ãŒã ã¬ãã¥ãŒã®å®æœ ãã«ãªã¯ ãšã¹ ããååã£ãã¬ãã¥ã¢ãŒã¯ãPull requestsãã¿ããéãããFiles changedããã ãœãŒã¹ã³ãŒã ã確èªããŸãã ææãããå Žåã«ã¯ã ãœãŒã¹ã³ãŒã ã®ãã¥ãŒäžã«ã³ã¡ã³ãã远å ããéçºè
ãžä¿®æ£ãä¿ããŸãã å
容ã«åé¡ããªããã°ããConversationãã®ãMerge pull requestããã¯ãªãã¯ããŠã¬ãã¥ãŒãå®äºããŸãã ãã®ã¿ã€ãã³ã°ã§ãã©ã³ãã®ããŒãžã宿œãããfeature1 ã®å
容ã master ã«ãåæ ãããŸãã ããŒãžãè¡ã£ãããšã§ãlogin.html ã master äžã«ã衚瀺ãããããšã確èªã§ããŸãã å®éã®ã¬ãã¥ãŒã§ã¯ãéçºããæ©èœããã°ä¿®æ£ã®è€æ°ã® ãœãŒã¹ã³ãŒã ããã«ãªã¯ ãšã¹ ãã§ç¢ºèªããããšãšãªããŸãã ãŸãææãçºçããäœåºŠãéçºè
ãšã¬ãã¥ã¢ãŒãšã®åŸåŸ©ãçºçããããšãçããã¯ãããŸããã ãã¡ãã®åºæ¬çãªæµããããŒã¹ã«ãå®åã§ã®ã³ãŒãã¬ãã¥ãŒã«èšãã§ããã ããã°ãšæããŸãã 2-6. ãªã¢ãŒ ããªããž ããªãããã«ãã ãªã¢ãŒ ããªããž ããªã® master ã«ã¯ããŒãžãè¡ãããŸããããããªãïŒããã³ä»ã®éçºè
ïŒã®ããŒã«ã« ãªããžã㪠äžã® master ã«ã¯ãŸã ããŒãžå
容ãåæ ãããŠããŸããã ä»åŸãéçºäœæ¥ãé²ããŠããã«ã¯ãããŒãžããå
容ïŒããã§ã¯ login.html ïŒãããŒã«ã« ãªããžã㪠㮠master ã«ååŸããææ°åããå¿
èŠããããŸãã ãã®å Žåã ãã«ïŒpullïŒ ãšããæäœãè¡ãããšã§ããªã¢ãŒ ããªããž ããªãã倿Žå
容ãååŸããããšãã§ããŸãã ãŸãã¯ãã©ã³ããmaster ã«åãæ¿ããŠã¿ãŸãããã ãã®æç¹ã§ã¯ãŸã å
ã»ã©ããŒãžããlogin.html ã確èªã§ããªãã¯ãã§ãã git checkout master 次㫠git pull ã³ãã³ããå®è¡ãããªã¢ãŒ ããªããž ããªã®master ããææ°ã®å€æŽå
容ãååŸããŸãã git pull remote: ã»ã»ã»ã» ã» ã» ã» From https://github.com/ãŠãŒã¶å/[äœæãããªããžããª] f5ã»ã»27 e4ã»ã»0f master -> origin/master Updating f5ã»ã»27 e4ã»ã»0f Fast-forward login.html | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 login.html ããã§ããŒã«ã« ãªããžã㪠ã®master ã«ã¯ããªã¢ãŒ ããªããž ããªã®ææ°ã®å
容ãåæ ãããŸããã ls ã³ãã³ããå®è¡ãããšãlogin.html ã確èªããããšãã§ããŸãã ãŸãgit log ã³ãã³ããå
¥åããããšã§ããããŸã§ã®å
šäœæ¥ã®å€æŽå±¥æŽã確èªããããšãã§ããŸãã $ ls index.html login.html $ git log commit 99c9637ã»ã»ã»ã»5281c0e (HEAD -> master, origin/master, origin/HEAD) Merge: f5ã»ã»27 e4ã»ã»0f Author: ãŠãŒã¶å Date: Fri May 29 19:28:48 2020 +0900 Merge pull request #1 from ãªããžããªå/feature1 [Add] login commit e4ccb0fa2ã»ã»ã»ã»ã»3e33b983c0 (origin/feature1, feature1) Author: ãŠãŒã¶å <ã¡ãŒã«ã¢ãã¬ã¹> Date: Fri May 29 19:26:08 2020 +0900 [Add] login commit f5dbc270aã»ã»ã»ã»ã»735f93a53d90a1c1068 Author: ãŠãŒã¶å <ã¡ãŒã«ã¢ãã¬ã¹> Date: Tue May 26 18:45:56 2020 +0900 [Add] index ãã®ããã«ããŠä»ã®éçºè
ã倿Žããå
容ãååŸããããšã§ãããŒã ã§ã®éçºãé²ããŠããããšãã§ããŸãã ãŸãšã Gitãš GitHub ã®è¶
å
¥éãšããŠãæŠèŠã玹ä»ããŸããã Gitã GitHub ãããã ãã§ã¯å
šãŠã玹ä»ãåããªãå¥¥ãæ·±ãããŒã«ã«ãªããŸãã ä»å玹ä»ããŸããåºæ¬çãªå
容ãããŒã¹ã«ãããçè§£ãæ·±ããŠãã£ãŠããã ããã°å¬ããã§ãã ã§ã¯ã§ã¯ã ã ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã https://rakus.hubspotpagebuilder.com/visit_engineer/ rakus.hubspotpagebuilder.com ã©ã¯ ã¹Developersç»é²ãã©ãŒã https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ âTECH PLAY techplay.jp âconnpass rakus.connpass.com
ããã«ã¡ã¯ãbadaikiã§ãã æ°åã³ãããŠã£ã«ã¹ã®åœ±é¿ã§ ã©ã¯ ã¹ãç·æ¥äºæ
宣èšã®çºä»€ã«äŒŽããææé²æ¢ã®ãããªã¢ãŒãã¯ãŒã¯ã«ç§»è¡ããŠãããŸãããå
æ¥ã®ããã°ã§ã¯ã ã©ã¯ ã¹ç€Ÿå¡ããªã¢ãŒãã¯ãŒã¯äžã«ã©ã®ãããªå·¥å€«ãããŠå¹çãäžããŠããã®ãã«ã€ããŠãŸãšããããŠããŸãããç§ãä»äºä»¥å€ã®æéã«ã¯æ¥åçšïŒ°ïŒ£ãèŠããªãå Žæã«çã¥ããããã«ããŠã¡ãªããªãã€ããªãããé±ã«ïŒãïŒåã»ã©å€äžã«ã©ã³ãã³ã°ããããªã©äœèª¿ç®¡çã«æ°ãä»ããŠããŸããã tech-blog.rakus.co.jp ã¯ããã« ãªã³ã©ã€ã³å匷äŒã®ã¡ãªãã åå ããå匷äŒã®çŽ¹ä» ãããã« ã¯ããã« ç§ã¯äžäººæ®ããã®ããæ¥åå€ã®æéã«ãªããšãäžéãã鮿ãããããã«èª°ãšãäŒè©±ããããšããªã誰ã®å£°ãèãããšããªãããã ãã æã€ã¶ãã«ãã¬ãã芳ããã²ãŒã ãããããšãã£ãèªç²ç掻ãéã£ãŠããŸããã ä»åã®ããã°ã§ã¯ããããªç©ºããæéãæŽ»çšããããšåå ãããªã³ã©ã€ã³å匷äŒã玹ä»ããŠããããšæããŸãã æ¥ããããªããããããŸã§ä»ç€Ÿã®å匷äŒã«åå ããããšããããŸããã§ãããå匷äŒã«åå ããªããšãªããããšããææã¯æã£ãŠãããã®ã®åå ã§ããŠããªãã£ãã®ã§ãããæå§ãã«ãªã³ã©ã€ã³å匷äŒã«åå ããŠã¿ããïŒãšæãç«ã¡ãç³ã蟌ã¿ãã¿ã³ãã¯ãªãã¯ããŸããã ãªã³ã©ã€ã³å匷äŒã®ã¡ãªãã å匷äŒã«ã¯åå ããã»ãããããšã¯ããã£ãŠãããã®ã®ããªããªãè¡åã«ç§»ããŠããªã人ãå€ãã®ã§ã¯ãªãããšæããŸããããã§ ãªã³ã©ã€ã³å匷äŒã®ã¡ãªãã ãæããŠã¿ãŸãã ç§»åããªããŠãã ãªã¢ãŒããªãã§ã¯ã§ããããPCãç«ã¡äžããŠURLãã¯ãªãã¯ããã ãã§ãããã§ãããïŒæ®æ®µãªãåå ã§ããªãé æ¹ã®å匷äŒã«åå ã§ããã®ãé
åã§ãããïŒ æèŠªäŒããªã ããã¯è¯ãæªããããŸãããå匷äŒã«åå ã§ããŠããªãçç±ã®äžã€ãšããŠã³ãã¥ãã±ãŒã·ã§ã³ãå¿é
ãšããæ¹ãããã£ãããã®ã§ã¯ãªãã§ããããã æéãçã ç§ãåå ãããã®ã ãš30åã®ãã®ããããŸãããæ®æ®µã®å匷äŒã ãšç§»åæéïŒé嬿éã§æäœã§ã3æéãããã¯ããã£ãŠããŸãã®ã§ãæé ã§ããïŒ ã©ãžãªæèŠã§èãã ããã¯èªåãåå ããŠã¿ãŠäžçªæããŸããããªãã©ã€ã³ã®å匷äŒãšæ¯ã¹ãŠããªãæ°è»œã«èããã®ã¯ãšãŠã倧ãããšæããŸããã ãã®èªç²æéãå©çšããŠ4ã€ã®å匷äŒã«åå ãããŠããã ããã®ã§ãããäžã«ã¯éå€ããçŽåŸããåå ãããã ããŒã¯ã·ã§ãŒ ã ãšå€é£¯ãäœããªããèããŠãããã®ããããŸããã åå ããå匷äŒã®çŽ¹ä» freee Tech Night Online #1ããµããŠããããããã freee-tech-night.connpass.com ãã¡ãã¯freeeæ ªåŒäŒç€Ÿäž»å¬ã® ããŒã¯ã·ã§ãŒ ã§ãããæ
ã·ã¹ã®æ¹ãããªã¢ãŒãã¯ãŒã¯éå§ã®è£åŽããããŒãèªãããããŒãã« ããŒã¯ ãç¹°ãåºããããŠããŸãããããŒãã®éããããŒãäŒè©±ãããŠããŸããããå
容ã¯ãªããªãçžåœå£®çµ¶ãªãã®ã§ãããæ®æ®µã¯èããªã話ãå€ãããšãŠãæ°é®®ã§ããã ã©ã¯ ã¹ãæ
ã·ã¹ãªã©ã®æ¹ã
ãåããŠãã ãã£ãŠäžäŸ¿ãªããªã¢ãŒãã¯ãŒã¯ãžç§»è¡ã§ããŸããã®ã§ãæ¬åœã«æè¬ã§ãã Cybozu Tech Meetup #1 kintoneéçºããŒã cybozu.connpass.com ãã¡ã㯠ãµã€ããŠãº æ ªåŒäŒç€Ÿäž»å¬ã®Meetupã§ãããkintoneéçºããŒã ã®å
æ
ã«ã€ããŠãéçºããŒã ã®æ¹ãQAããŒã ã®æ¹ã®çºè¡šãèãããšãã§ããŸãããkintoneããŒã ãã©ã®ããã«ãªã¢ãŒãã§ã¢ããããè¡ã£ãŠããã®ããæ°åãšã³ãžãã¢ãITæ¥çæªçµéšQAãšã³ãžãã¢ãã©ã®ããã«ç«ã¡äžãã£ãã®ããšããå
容ã§ãããç§ã¯æ°åå
¥ç€Ÿã®ãããæ°åãšã³ãžãã¢ããã®çºè¡šã«æ³šç®ããŠãããŸãããåŠçæä»£ã«æãããæ¬¡ç¬¬æ°ã«ãªã£ãæè¡ãè§Šã£ãŠããããã§ã1ã€ã®ãµãŒãã¹ãçªãè©°ããŠãããã€ã³ããã©ã®ããã«è²ãã§ããããšããå
容ã§ãããæ°å瀟å¡ã®å€ããéãæ©ã¿ã ãšæããŸãã®ã§ãæ°å瀟å¡ãããããå
¥ç€ŸããåŠçã«ãèŠãŠããã ãããçºè¡šã§ããïŒ ããªã³ã©ã€ã³ãé¢è¥¿ PHP ååŒ·äŒ phpkansai.connpass.com ãã¡ãã¯ã PHPã«ã³ãã¡ã¬ã³ã¹ é¢è¥¿2020ããã³ããã®åœ±é¿ã§äžæ¢ãšãªã£ããããPHPerå士ã®äº€æµã®å Žãå¢ãããããšããã®ãç®çãšããLTäŒã§ãããå人çã«èå³ãæã£ãã®ã¯ãPhpStormäžçŽå
¥éããšãLaravelã§DBæäœãç£èŠãããã§ãããPhpStormã䜿ãå§ããŠçŽ2幎ã«ãªããŸããããŸã ãŸã 䜿ãããªããŠããªããªãŒãšæããŸãããDBæäœã®ç£èŠã¯ç¥ããªãæè¡ã ã£ããããèå³ãæã¡ãŸããã顧客ãšã®ãäœãããŠãªãã®ã«å£ãããã®ãããšãã®ãšããçããã®å
±æããããã£ãã§ããw ãé¢è¥¿ PHP å匷äŒãã§ã¯ãããŸãããå
šåœããPHPerãéãŸã£ãŠããŠãªã³ã©ã€ã³ã®è¯ããéç«ã£ãŠããŸããïŒ ããªã³ã©ã€ã³ãPHPerã«ããPHPerã®ããã®ã PHP ã®ãã¥ãŒã¹ãèšäºãèªãåããTechCafe rakus.connpass.com ãã¡ãã¯åŒç€Ÿ ã©ã¯ ã¹ãäž»å¬ã®LT& ããŒã¯ã·ã§ãŒ ã§ãããæ®æ®µã¯ãåŒç€Ÿãªãã£ã¹ã«æ¥ç€Ÿé ããç¹å®ã®ããŒãã«ã€ããŠãã£ã¹ã«ãã·ã§ã³ãããããèªç¿ãªã©ãè¡ã£ãŠããã®ã§ãããåã®ãªã³ã©ã€ã³éå¬ãšãªããŸããã ããŒã¯ ããŒãã¯ã PHP ã®ãã¥ãŒã¹ãèšäºãèªãåãããšããããšã§ã ã©ã¯ ã¹ã®ãšã³ãžãã¢ãæ°ã«ãªã£ãèšäºãæã¡å¯ã£ãŠç޹ä»ã ããŒã¯ ãç¹°ãåºãããšãããã®ã§ãããäžäººã§ãããããšæ
å ±åéããã®ãããã§ãããã»ãã®äººã«å
±æããŠæèŠäº€æããã®ãèªåãšéã£ã芳ç¹ã§ã®æèŠãèãããããã®ã§ããããããªãšæããŸããã ããã㫠以äžãç§ãèªç²æéäžã«åå ãããªã³ã©ã€ã³å匷äŒã§ããã ããŒã¯ã·ã§ãŒ ãLTäŒãªã©æ§ã
ãªå
容ã®å匷äŒã«åå ãããŠããã ããŸããããŸã ãã°ããã¯ãªã³ã©ã€ã³ã®å匷äŒãéå¬ããããšæããŸãã®ã§ãã©ãã©ãåå ããŠãããŸãããïŒç§ãç©æ¥µçã«åå ãããªãã©ã€ã³ã®å匷äŒã«ãåå ããŠããããã«ããŸãïŒ æåŸãŸã§èªãã§ããã ãããããšãããããŸããïŒ
ã¿ãªããããã«ã¡ã¯ãããžãµã¯ã§ãã ç·æ¥äºæ
宣èšãå€ãã® éœé åºçã§ã¯è§£é€ãè¡ããããŸã æªè§£é€ã®å°åã§ãè§£é€ã®æ¹åã«åãã£ãŠããŸããã ã©ã¯ ã¹ãæ¿åºã®ç·æ¥äºæ
宣èšã®çºä»€ã«äŒŽããæææ¡å€§é²æ¢ã®ãããªã¢ãŒãã¯ãŒã¯ã«ç§»è¡ããŸããã ç§»è¡åœåã¯ãæ®æ®µãšã®åæã®éãããæžæã声ãªã©ãå€å°ã¯ãã£ãããã§ãããããšããšåœå
ã»æµ·å€ã®æ ç¹éã§ããããªé話ããã£ããããŒã«ãªã©ãçšããéçºãè¡ãªã£ãŠããã®ã§ãå
šäœãéããŠã¿ãã°å€§ããªæ··ä¹±ã¯å°ãªãã£ãããã§ãã ããããèãéããŠã¿ããšãåã
èªåãªãã®ãªã¢ãŒãã¯ãŒã¯ã¹ã¿ã€ã«ã確ç«ãã æ¥œããã§ãã ååãã«åãåã£ãŠããããã«èŠããŸãã æ°ãã çæŽ»æ§åŒ ãæšå¥šãããäžãä»åŸããªã¢ãŒãã¯ãŒã¯ã¯æ¥æ¬äŒæ¥ã«æ ¹ä»ããŠããã®ã§ã¯ãªãã§ããããã ããã§ã ããªã¢ãŒãã¯ãŒã¯äžã®ãšã³ãžãã¢ã® ã©ã€ããã㯠ã«è¿«ãïŒã ãšé¡ããŸããŠããªã¢ãŒãã¯ãŒã¯äžã® ã©ã¯ ã¹ãšã³ãžãã¢ããèªãã®ãªã¢ãŒãã¯ãŒã¯ã©ã€ããã©ã®ããã«HackããŠããããã玹ä»ããããšæããŸãïŒ åŒç€Ÿãšã³ãžãã¢ã«ãããªã¢ãŒãã¯ãŒã¯ã®è³ªãåäžããããã«ã工倫ããŠããããšãæããŠãã ããïŒããšããã¢ã³ã±ãŒãããšã£ãçµæããäŒãããŸãïŒ ãªã·ãŽãç°å¢ã«ã€ããŠã®Hack ãã£ã¹ãã¬ã€ã»ã¢ãã¿ã«é¢ãããã®ãå§åçã«å€ã ã€ãã§å€ãã£ãã®ã¯ãé³ã»BGMã«é¢ãããã® ã€ã¹ã«é¢ããHackã æå€ã«å€ãã¹ããŒããŠã©ããå¢ çªå€ åãæ¹ã«ã€ããŠã®Hack ãªã³/ãªãã®åãæ¿ãã»ãªãã¬ãã·ã¥ åè²ãŠã»å®¶æãšã®é¢ä¿ é£ç掻 ãªã·ãŽãç°å¢ã«ã€ããŠã®Hack ãã£ã¹ãã¬ã€ã»ã¢ãã¿ã«é¢ãããã®ãå§åçã«å€ã ããã¯äºæ³éãã®çµæã§ããã ãšã³ãžãã¢ã«ãšã£ãŠãã¢ãã¿ã®ææ°ã»ãµã€ãºã»è§£å床ããã®ãŸãŸçç£æ§ã«è·³ãè¿ã£ãŠãããšèšã£ãŠãéèšã§ã¯ãããŸããã ãã¥ã¢ã«ã¢ãã¿ã»ããªãã«ã¢ãã¿ã¯ããããŸããã¢ãã¿ã¢ãŒã ã倧ç»é¢ã¢ãã¿ãæ¡çšãã人ãããã ããã瀟å
ãããå¿«é©ã«ãªã£ãŠãããããªãã ãšæãããã±ãŒã¹ãã äžã«ã¯èªå®
ã®ãã¬ãããã£ã¹ãã¬ã€ãããã«æŽ»çšããŠãã人ãããããã§ãã ã€ãã§å€ãã£ãã®ã¯ãé³ã»BGMã«é¢ãããã® é³ãBGMã«é¢ããŠã®æèŠããããŠãã人ã¯å€ããã®ã®ã人ã«ãã£ãŠãã ãããã€ã³ãã¯å€§ããéã£ãŠããããã§ãã ã©ãžãªãæå£°ãå
¥ã£ãŠãããã®æŽŸ æãªã or æ¥æ¬èªä»¥å€ã®ææŽŸ 鳿¥œãããªãç°å¢é³ïŒãªãã£ã¹ã®é³ãªã©ïŒæŽŸ ãªã©ãæ§ã
ãªæèŠããããŸããã ãå®¶æã®ç掻é³ãæ°ã«ãªããšããããšã§ã ãã€ãºãã£ã³ã»ãªã³ã° æ©èœã®ããããããã©ã³ã䜿ã£ãŠãã人ãã 鳿¥œé
ä¿¡ ãµãŒãã¹ããã©ãžãªé
ä¿¡ãµãŒãã¹ãªã©ã®æŽ»çšã人æ°ã®ããã§ãã é³ã«é¢ããŠã¯ãå®å
šãªç¡é³ç¶æ
ã奜ã人ããããšæããŸããã èªåã«åã£ãã¹ã¿ã€ã«ãéžã¶ããšãã§ããã®ã¯ãªã¢ãŒãã¯ãŒã¯ã®ã¡ãªãã ã®äžã€ãããããŸãããã ã€ã¹ã«é¢ããHackã é·æé座ã£ãŠãããããæ®éã®ã€ã¹ã§ã¯ããªã·ãªãèããããªãã人ãå€ãã£ãæš¡æ§ã ã²ãŒãã³ã°ãã§ã¢ãäœåçºã¯ãã·ã§ã³ãªã©ãå°å
¥ãããšããæèŠãç®ç«ã¡ãŸããã äžæ¹ããã¡ãã¶å°ã«æ£åº§ããã¹ãããšãã å€åŒãããããžã£ãããŒãºã¹ã¿ã€ã«ã§æŠãçè
ãã ã¡ãªã¿ã«ç§ã¯ãã²ãŒãã³ã°ãã§ã¢ïŒã²ã«ã¯ãã·ã§ã³ïŒãããã¹ã¿ã€ã«ã§äœæéã§ã座ã£ãŠããããããã«ãªããŸããã ãªãã£ã¹ã§äœæ°ãªã䜿ã£ãŠããã€ã¹ãããããããã¯å®ã«è¯ããã®ãæ¡çšããŠãããŠãããã ãªãããšæ°ã¥ããããŸããã æå€ã«å€ãã¹ããŒããŠã©ããå¢ ãè
æèšããšãããšãå€åºããæã«èº«ã«çããã€ã¡ãŒãžã§ããããã¹ããŒããŠã©ããã«é¢ããŠã¯ãã®éãã§ã¯ãªãããã§ããã æ¬¡ã®ãããªäœ¿ãæ¹ãããŠãã人ãç®ç«ã¡ãŸããã éåäžè¶³ã«ãªãã®ã§èªãã®ã¢ã¯ãã£ããã£ãå¯èŠåã座ãã£ã±ãªããæå¶ã§ãããå¥åº·ç®¡çã®ããã æéæèŠããªããªãã®ã§äŒè°ãšã¢ã©ãŒã ãé£åããã¢ã©ãŒã ã鳎ãããæ°æã¡ã®åãæ¿ãã«ããªãã çªå€ ä»åã¢ã³ã±ãŒãããšã£ãäžã§ããã£ãšãç°åœ©ãæŸã£ãåçã ä»è·çšãã¹ã¯ã掻çšãã ãšãããã®ã ãããã§å¯ãªããä»äºãã§ããŸãïŒ ãããã§ããæ¬äººè«ã«ããã°ã倧äºãªãã®ïŒäœåïŒã倱ãããŠããæ°ãããããšã®ããšã§ããã æ°ã®ãããããªã ãšæããŸãã ãã®ãŸãŸå¯ãããã«ãªã£ãŠããŸããªãããã«æ°ãã€ããŠããã ããããã®ã§ãã ããšã¯ã ãµããã¯ããããµãŒãžæ©ã䜿ã£ãŠããŸã ãšãã人ãã ãã®è¶
å¿«é©ãªç°å¢ã®äºäººããéåžžã®å€åãåéãããæã§ãã¡ãããšåºç€ŸããŠãããããšãç¥ããŸãã åãæ¹ã«ã€ããŠã®Hack ãããŸã§ã¯ãèšåãç°å¢ãªã©ã«ã€ããŠã®HackãèŠãŠããŸããããããããã¯åãæ¹ã®Hackã«ã€ããŠæ³šç®ããããšæããŸãã ãªã³/ãªãã®åãæ¿ãã»ãªãã¬ãã·ã¥ ãªã¢ãŒãã¯ãŒã¯ã§ã¯ããªã³ãšãªããåãæ¿ããããªãã¬ãã·ã¥ãããŸãè¡ããªããšãæ¥åå¹çãæªããªã£ãŠããŸããŸãã ã©ã¯ ã¹ã®ãšã³ãžãã¢ã¯æ¬¡ã®ãããªã¹ã¿ã€ã«ã§ããªãã¬ãã·ã¥ãå³ã£ãŠããããã§ãã æã®ã©ã³ãã³ã°ã»ãŠã©ãŒãã³ã° ãªãã¬ãã·ã¥ã ãã§ãªããéåäžè¶³ã®è§£æ¶ã«ããªããŸããããªã¢ãŒãã¯ãŒã¯åãšåãæéã«å®¶ãåºãŠãå§æ¥æéãŸã§ãŠã©ãŒãã³ã°ãããŠç¿æ
£ã®ç¶æãè¡ã£ãŠãã人ããæ¥å
ããã¡ããšæµŽã³ãããšã¯éèŠã¿ããã§ããïŒ çã㬠ããªãã£ã¹ã§ã¯ã§ããªãé«åŒ·åºŠãçãã¬ãã§ããããã«ãªããŸããããšã®ããšããšã³ãžãã¢ã«ã¯åŒ·éãªèäœãå¿
èŠã§ãã æ¥ååŸã¯ãããŒãPCãçä»ãããæ¥åçšPCãèŠçã«å
¥ããªãããã«ãã ãªãã³ã°ãªã©ãçæŽ»ç©ºéã§ä»äºãããããåŸãªãæ¹ãå€ãäžãçµæçã«ããããã«ãŒãã£ã³ãåãæ¿ãã®åœ¹å²ãæãããŠããããã§ãã å®¶æã«ãè¡ã£ãŠããŸããããã ããŸãã®æšæ¶ããã æ°æã¡ãåãæ¿ããã«ãŒãã£ã³ãšã®ããšã§ãããã»ã£ãããããšããœãŒãã§ãããªãšæããŸããã ãã¢ããŒããã¯ãã㯠ã䜿ã£ãŠæèçã«äŒæ©ãå
¥ãã 25åäœæ¥ããã5åäŒãããšãããã®ã§ãããä»äººã«åœ±é¿ãããã«ãããããšäœæ¥ããŠãããšãšã³ãã¬ã¹ã«ãªã£ãŠããŸããå¹çãæªããªã£ãŠããŸãã®ã§ããããããã¯ããã¯ã¯éèŠã§ããã 倧ããªæ±ãæ ãªãã¬ãã·ã¥ã®ããŒã«ã ãã§ãªããã©ã㌠ãããã³ã° ã®çžæã«ã䜿ãããšã®ããšããã®èŸºã¯ãšã³ãžãã¢ãããã§ããã äœæ¥å Žæãå€ãã ä»äºéšå±ãå€ããããåºçªã§äœæ¥ããããªã©ãèªå®
å
ã§ããã±ãŒã·ã§ã³ãå€ããããšã§ãªãã¬ãã·ã¥ã§ããããã§ãã çªãéãããéšå±ã®ææ°ããã åºæ¬çãªãšããã§ãããæå€ãšç²ç¹ã ã£ããã ä»ã«ãããè±ã食ãããå£çŽãéäžã§ããè²ã«å€ããããªã©ã®çŽ æµãªæèŠããããŸããã åè²ãŠã»å®¶æãšã®é¢ä¿ åŠæ ¡ã幌çšåã»ä¿è²åãªã©ãäŒæ ¡äžã®ãããåè²ãŠãå®¶æãšã®é¢ããæ¹ã工倫ããŠãã人ãå€ãã£ãããã§ãã ç¥ç¶æ¯ã«ãããªé話ã§åå®ããé¡ããã ä»äºäžã¯ãªããªãåäŸã«ããŸã£ãŠãããããªãã®ã§ãããããã¯è¯ã㢠ã€ã㢠ã§ããïŒç¥ç¶æ¯ããå«ã®é¡ãèŠãããã®ã§ãWin/Winãšã®ããšã ãªã³ã©ã€ã³æè² éã°ããŠããã ãã«ãªããã¡ãªäžããªã³ã©ã€ã³ææã掻çšããŠãããå®¶åºããè±äŒè©±ãªã©ãå
çãä»ããŠããããã®ãªã©ã¯åå®ã®å¹æããã£ãŠè¯ãããã§ããïŒ åäŸåãã® YouTube åç» å¹æã¯çµ¶å€§ã§æŸã£ãŠããã°åæ°žä¹
çã«èŠãŠãããåæ§ãå€ãããã§ããæãå®¶ããæè²äžé·æéèŠãããŠã¯ãããªããªãšæãã€ã€ããã©ãããŠãé ŒããããåŸãªãã·ãŒã³ãããã æåŸã®åãæ ãšããŠãäžè©±ã«ãªã£ãŠããŸãã å®¶åºå
ã®é£çµ¡ã¯LINEã§ãé¡ããã çªçºçã«ãããªäŒè°ãè¡ãªã£ãŠããå Žåãªã©ãå€ãã®ã§ãããŒã«ãä»ããŠã³ãã¥ãã±ãŒã·ã§ã³ãåãã®ã¯è¯ãã§ãããéäžãä¹±ãããªããšãããããªå¹æãæåŸ
ã§ãããã§ãã é£ç掻 çããŠããããã«ã¯ãé£äºãåããªããã°ãªããŸããã é£ç掻ã«é¢ããŠããã¿ãªããè²ã
ãšå·¥å€«ããŠããããã§ãã å®
é
åŒåœã掻çšãã èªçã³ã¹ããæžããã ãã§ãªããå€åºãªã¹ã¯ã®äœæžã«ã圹ç«ã£ãããã§ãã è²·ãç©ã¯ãããã¹ãŒããŒãªã©ã§è¡ã ãã¡ãããæçïŒãªã¹ã¯è»œæžçãšããŠã èªå調çéãç飯åšã§æ ç調 çãã å
·æãèª¿å³æãå
¥ããŠãã¿ã³ãæŒãã ãã§æçãåºæ¥äžããã®ã§ãšãŠã䟿å©ãšã®ããšãä»åã®ä»¶ããªããŠã詊ããŠã¿ããæããããŸãïŒ ãããã§ããã§ããããïŒ ä»åŸãã ã³ãããŠã€ã«ã¹ ã«å¯ŸããŠã¯é©åãªå±æ©æãæã¡ã€ã€ãçµæžãšçåœã®ãã©ã³ã¹ãããŸãåããªããå
±åããŠããããšãæ±ããããŸãã å°ãã§ãããã®èšäºãèªãã§ããã ããæ¹ã®ã圹ã«ããŠã°å¹žãã§ãã ãŸããã¢ã³ã±ãŒãããšã£ãŠã¿ãŠæããããšã§ããããããŸã§ã¯åã空éã§ç»äžçãªç°å¢ã»åãæ¹ã§ä»äºããŠããŸããããè¯ãé¢ãããäžæ¹ãåã
人ã«ãšã£ãŠ å¿
ããããã¹ããªéžæè¢ãšã¯éããªãã®ã ãªããšããããšãããããŸããã 倿§ãªåãæ¹ãå¢ããŠãããšæããŸãã®ã§ãä»åã®çµéšãããŸã掻çšããŠãããããšæããŸãã ã§ã¯ã§ã¯ïŒ
ã¯ãããŸããŠã syoneshin ã§ãã ç§ã¯ãããŸã§ ITåºç/HRé åã®äºæ¥éçº/ ããŒã±ãã£ã³ã° ãçµãŠ çŸåšã¯ ã©ã¯ ã¹æè¡åºå ±æ
åœãšã㊠ããã¯ããã°éå¶ãMeetup/æ¡çšã€ãã³ãäŒç»ãªã©åºå ±æŽ»åãè¡ã£ãŠãããŸãã éçºã¯æªçµéšã§ãã åœç€Ÿæè¡ã¹ã¿ãã¯ã¯æäœé調ã¹ãå®è·µã ã¢ãŠããããããããšããæ°æŠã§ ä»åã¯ã ã·ã§ã«ã¹ã¯ãªãã ãã«ã€ããŠæžããŸããã æ¬èšäºã ã·ã§ã«ã¹ã¯ãªãã ãå匷ããã ã·ã§ã«ã¹ã¯ãªãã ãæãåºãã ã·ã§ã«ã¹ã¯ãªãã ã®ã³ãã³ããåç
§ããã ãšèšãæ¹ã®ã圹ã«ããŠãã°ã幞ãã§ãã  1.ã·ã§ã«ã¹ã¯ãªãããšã¯ 2.åºæ¬èšå® ãã¡ã€ã«ãäœæ 3.åºæ¬ã³ãã³ã ã³ã¡ã³ã å
¥/åºå 倿° ã·ã§ã«ã®ç¹æ®å€æ° æŒç®å(ãªãã¬ãŒã¿ãŒ) æ¡ä»¶åå² Â ifæ caseæ ã«ãŒãåŠç foræ whileæ 4.ãŸãšã 1. ã·ã§ã«ã¹ã¯ãªãã ãšã¯  ã»ç°¡åã«èšããš ã·ã§ã«( Windows ã®ã ã³ãã³ãããã³ãã ãã¿ãããªãã®)ã§è§£éã§ããåœä»€( ããã°ã©ãã³ã°èšèª )ãåœä»€ãå¯ãéããŠäœã£ãããã°ã©ã ã®ããšã§ãã ã»è©³ããèšããš OSæäœã®çºãã·ã§ã«äžã§å®è¡ã§ããç°¡æãª ããã°ã©ãã³ã°èšèª ïŒ ã¹ã¯ãªããèšèª ïŒ ã®äºã§ãã ãŸãããã®ãããªèšèªã«ãã£ãŠæžããã è€æ°ã®OSã³ãã³ããå¶åŸ¡æãªã©ãçµã¿åãããç°¡æããã°ã©ã ãæã äžè¬çã«ã¯ UNIXç³»OS ( Linux ãªã©)ã®ã·ã§ã«ã§å®è¡ã§ãããã®ãæããŸãã ã·ã§ã«ã«ã¯ããã€ãã®çš®é¡ããããŸãã 倧å¥ãããšä»¥äžã®ã·ã§ã«ã«åããããŸãã ã» B-Shell (Bourne-Shell) ç³» ïŒsh, ash, bash , zsh , ksh ã» C-Shellç³» ïŒ csh , tcsh B-Shell ç³»ã®ã·ã§ã«ã§ã sh 㯠ã·ã§ã«ã¹ã¯ãªãã ã§ããå©çšãããŸãã ( Linux ã Mac OS 㯠bash ãã·ã§ã«ã®æšæºç°å¢ã®çºã bash ãããå©çšãããŠããŸã) ã·ã§ã«ã¹ã¯ãªãã ã§æžãããå
žåçãªåŠçäŸã¯ ãã¡ã€ã«æäœãããã°ã©ã å®è¡ãããã¹ãå°å·ãªã©ããã äž»ã«å®åäœæ¥ã®èªååã«ãã䜿ãã æ¡ä»¶åœä»€ã®å®è¡/ãã¡ã€ã«èªã¿èŸŒã¿ã»æžãåºããªã© äžããé ã«ã³ãã³ããå®è¡ãããçºãéœåºŠã³ãã³ããæããã«ãã¿ãŸãã 以äžããã¯ãå®éã« ã·ã§ã«ã¹ã¯ãªãã ãæžããŠãããŸãã 2.åºæ¬èšå® ãã¡ã€ã«ãäœæ  â ã·ã§ã«ã¹ã¯ãªãã ãã¡ã€ã«ã¯ .sh æ¡åŒµåã§åºæ¬äœæ  âããã§ã¯ test.sh ãã¡ã€ã«ãäœæ  test.sh ã·ã§ã«ã¹ã¯ãªãã èšè¿°ã§ããŸãåãã«èŠããªããã°ãªããªãã®ã¯æ¬¡ã®èšè¿° #! /bin/sh # ã¯hashã ! ã¯bangã§ã #! ã shebang (ã·ã§ãã³)ãšèšããŸãã ã·ã§ãã³ãã ã¹ã¯ãªãã ãå®è¡ãã ã€ã³ã¿ãŒããªã¿ ãåŒã°ã /bin/sh ã®ãã¡ã€ã«ãå®è¡ããããšããæå³ã§ãã #! /bin/sh ãæžããã·ã¹ãã ã«ã ã·ã§ã«ã¹ã¯ãªãã ãæžããŸããããšç¥ãããŸãã â» bash ã®ç¬èªæ©èœã䜿ãå Žå㯠#!/bin/bsh ãšæžãå¿
èŠããããŸãã  test.sh #! /bin/sh   test.sh #! /bin/sh echo "Hello, World!" ã·ã§ã«ã¹ã¯ãªãã ãã¡ã€ã«ïŒ test.sh ïŒãå®è¡ããã«ã¯ ã¿ãŒããã«ãããã¡ã€ã«ãä¿åãããŠãå Žæã§ 以äžã®ã©ã¡ããã®ã³ãã³ãã§å®è¡ã§ããŸãã  $ ./test.sh $ sh test.sh ãã¡ã€ã«å®è¡ãããš Hello, World! ãšè¡šç€ºãããŸãã  $ ./test.sh Hello, World!  3.åºæ¬ã³ãã³ã  ã³ã¡ã³ã ã³ã¡ã³ãã®å
¥åã«ã¯ # ãæžãå¿
èŠããããŸãã  test.sh #! /bin/sh #ã³ã¡ã³ãã®å
¥åã«ã¯#ãæžãå¿
èŠããããŸãã å
¥/åºå åºå㯠echo ãå
¥å㯠read ã§è¡ããŸãã  test.sh #! /bin/sh read NAME echo "Hi, $NAME !" å®è¡çµæã¯ä»¥äž  $ ./test.sh syoneshin Hi, syoneshin! Â å€æ° ã»å€æ°ã®ååã«ã¯åè§è±æ°å(a-zãA-Zã0-9)ãšã¢ã³ããŒããŒ(_)ã䜿ããŸãã ã»å€æ°ã«å€ãäžããæã¯ = ãååŸç©ºçœãªãã§æžããŸãã ã»æååã®å Žå㯠" ãä»ããŠå²ã¿ãŸãã ã»å€æ°ã«ã¢ã¯ã»ã¹ããæã¯å€æ°åã®åã« $ ãä»ããŸãããŸã㯠$ ä»ããŠå€æ°ã {} ã§å²ã¿ãŸãã ã»1ã€ã®å€æ°ã«1ã€ã®å€ããä¿åã§ããŸããã ã»å€æ°å€ã®äžæžãããªããã«ã¯ readonly ãæžããŸãã ã»å€æ°ã¯ unset ã§åé€ã readonly ã§å€æ°ã®äžæžã/åé€äžå¯ã«ããŸãã  test.sh #! /bin/sh var = "倿°1" var_2 = "倿°2" echo "var_2= $var_2 " var_2 = "var_2ã倿ŽãããŸããã" echo ${ var_2 } readonly var var = "readonly varãå€ããŠã¿ãã" å®è¡çµæã¯ä»¥äž  $ ./test.sh var_2=倿°2 var_2ã倿ŽãããŸããã ./test.sh: line 11: var: readonly variable  ã·ã§ã«ã®ç¹æ®å€æ° ã·ã§ã«ã¹ã¯ãªãã ã§ã¯ä»¥äžã®ãããªç¹å¥ãªå€æ°ããããŸãã 倿° æ©èœ $1ïœ$9 ã·ã§ã«åŒæ°ã®å€ã第1åŒæ°ã¯$1ã第2åŒæ°ã¯$2ã§ã¢ã¯ã»ã¹ $# ã·ã§ã«åŒæ°ã®æ° $* å
šåŒæ°ããŸãšããŠ1ã€ãšããŠåŠç "$*"ã®ããã«å²ããšã"$1 $2 ⊠$n"圢åŒã«ãªãã $@ å
šåŒæ°ãåå¥ãšããŠåŠçãå
šåŒæ°ãªã¹ãã"$@"ã®ããã«å²ããšã"$1" "$2" ⊠"$n"圢åŒã«ãªãã $$ å®è¡äžã®ã·ã§ã«ã®ããã»ã¹IDã $? æåŸã«å®è¡ããã³ãã³ãã®æ»ãå€ãæåã¯0ã倱æã¯1ã§è¿ã£ãŠããã $- ã·ã§ã«ã®å®è¡ãªãã·ã§ã³ïŒsetã³ãã³ãã#!/bin/ bash è¡ã«ä»ãããªãã·ã§ã³ã $! ã·ã§ã«ãæåŸã«å®è¡ããããã¯ã°ã©ãŠã³ãããã»ã¹ã®ID ã»ã·ã§ã«ã® ç¹æ®æå 以äžã¯ ã·ã§ã«ã¹ã¯ãªãã ã® ç¹æ®æå ã§ãã ; | & ^ \ $ ? * < > ( ) [ ] { } # % = ` " ' ~ TAB SPACE NEWLINE ããã ç¹æ®æå ã衚瀺ããã«ã¯ã ãšã¹ ã±ãŒãããå¿
èŠããã \ ããã¯ã¹ã©ãã·ã¥ãä»ããŠäžæååäœã§æ±ãã ' ã·ã³ã°ã«ã¯ãªãŒããŒã·ã§ã³ãä»ããŠå²ãäºã§æ±ã䜿ããŸãã ãŸã " ããã«ã¯ãªãŒããŒã·ã§ã³ã§å²ãã å Žå $ ` \ ãè©äŸ¡ãå²ãŸãããã¹ãŠãæååãšããŠæ±ãåŠçãã§ããŸãã æŒç®å (ãªãã¬ãŒã¿ãŒ) ã æŒç®å ããšã¯ç°¡åã«ãããšãã©ããªæŒç®ãããããšè¡šãèšå·ã®äºã§ãã ã æŒç®å ãã®çš®é¡ã¯å€æ§ã§ ãç®è¡ æŒç®å ããæ¯èŒ æŒç®å ããè«ç æŒç®å ããªã©ããããŸãã ãâ»è©³çްçç¥ ã·ã§ã«ã§ã¯ãç®è¡æŒç®ãã `expr æ°å æŒç®å æ°å` ã§èšç®ããäºãã§ããŸãã â»ããããããã°ã©ãã³ã°ãã¯ãããããæ¹ã¯æäœéãç®è¡ æŒç®å ããæ¯èŒ æŒç®å ãã¯èŠããæ¹ãããã§ãã 以äžè¡šã¯ã·ã§ã«ã® æŒç®å çš®é¡/æå³/äŸãèšèŒããŠããŸãã ç®è¡ æå³ èšè¿°äŸ + è¶³ã echo `expr 10 + 20` => 30 - åŒã echo `expr 20 - 10` => 10 \* æãã echo `expr 11 \* 11` => 121 / å²ã echo `expr 10 / 2` => 5 % äœã echo `expr 10 % 4` => 2 = æå® a=$b bã®å€ã¯aã«ä¿åãããŸã â» [ ã³ãã³ãã®åŒæ°ã«å€æ°ãæå®ãããšã㯠" ã§ã¯ã©ãŒãããå¿
èŠããããŸã æ¯èŒ æå³ èšè¿°äŸ == çãã [ "$a" == "$b" ] å€aãšå€bãçããå ŽåTRUE(ç)ãè¿ããŸãã != ç°ãªã [ "$a" != "$b" ] å€aãšå€bãç°ãªãå ŽåTRUE(ç)ãè¿ããŸãã -eq ã€ã³ãŒã« [ "$a" -eq "$b" ]ãå€aãšå€bãçãããã°TRUE(ç)ãè¿ããŸãã -ne ç°ãªã [ "$a" -ne "$b" ]ãå€aãšå€bãç°ãªãã°TRUE(ç)ãè¿ããŸãã -gt ãã倧ãã [ "$a" -gt "$b" ]ãå€aãå€bãã倧ãããã°TRUE(ç)ãè¿ããŸãã -lt ããå°ããã [ "$a" -lt "$b" ]ãå€aãå€bããå°ãããã°TRUE(ç)ãè¿ããŸãã -ge çããããã倧ãã [ "$a" -ge "$b" ]ãå€aãå€bãšçãããããã倧ãããã°TRUE(ç)ãè¿ããŸãã -le çãããããå°ãã [ $a" -le "$b" ]ãå€aãå€bãšçããããããå°ãããã°TRUE(ç)ãè¿ããŸãã  è«çã æå³ äŸ -a äž¡æ¹(and) [ "$a" -gt 90 -a "$a" -lt 100 ] å€aã 90ãã倧ãã100ããå°ããå ŽåTRUEãè¿ããŸãã -o ã©ã¡ãã(or) [ "$a" -gt "$b" -o "$a" -lt "$b" ] å€aãå€bãã倧ãããå°ãããã®å ŽåTRUEãè¿ããŸãã ! ã§ã¯ãªã(is not) [ ! "$a" -gt "$b" ] å€aãå€bãã倧ãããªããã°TRUE(ç)ãè¿ããŸãã  æ¡ä»¶åå² Â ifæ ã·ã§ã«ã¹ã¯ãªãã ã®ifæã®åºæ¬ã¯ if [ æ¡ä»¶ ] then ã³ãã³ã fi ã§æžããŸãã if ã®ããšã«æ¡ä»¶åŒãæžããæ¡ä»¶åèŽ(æ¡ä»¶ãTRUE(ç)ã®å Žå)ããŠããã° then ãã fi ãŸã§ã®ã³ãã³ããå®è¡ããŸãã ifæã®æžåŒã¯æ¬¡ã®æ§ã«ãªããŸãã  if [ æ¡ä»¶1 ]; then ã³ãã³ã1 fi ãããæ¡ä»¶1ãã«åèŽããã°ããã³ãã³ã1ããå®è¡ããŸãã®æå³ã§ãã æ¡ä»¶1ã«åèŽããªãå Žåã«ãã³ãã³ã2ããå®è¡ããããšã elseãã䜿ããæ¬¡ã®æ§ã«ããŸãã  if [ æ¡ä»¶1 ]; then ã³ãã³ã1 else ã³ãã³ã2 fi ãããæ¡ä»¶1ãã«åèŽããã°ããã³ãã³ã1ããå®è¡ããŸãã ãã以å€ã¯ãã³ãã³ã2ããå®è¡ããŸããšããæå³ã§ãã ããã«åå²ãåããããšãã«ã¯elifã䜿ããŸããâ»ãelse ifãã®çç¥ Â if [ æ¡ä»¶1 ]; then ã³ãã³ã1 elif [ æ¡ä»¶2 ]; then ã³ãã³ã2 else ã³ãã³ã3 fi ãããæ¡ä»¶1ãã«åœãŠã¯ãŸããªãããã³ãã³ã1ããå®è¡ããŸãã ãã以å€ã§ãæ¡ä»¶2ãã«åœãŠã¯ãŸããªããã³ãã³ã2ããå®è¡ããŸãã ãã以å€ã¯ãã³ãã³ã3ããå®è¡ãããšããæå³ã§ãã caseæ  case æã¯ Cã Java èšèªã® switch æã«è©²åœããå¶åŸ¡æã§ ifæãšåãããã«ã³ãã³ãå®è¡ãåå²ããããã«äœ¿çšããããã®ã§ãã åºæ¬ã®æžãæ¹ã¯Â case 倿° in æ¡ä»¶ã»å€) ã³ãã³ã ;; esac ã§æžããŸãã æ¡ä»¶ã»å€ã倿°ãšåãå Žåãcase æã¯æå®ããæ¡ä»¶ãšå€ã®è€æ°ãã¿ãŒã³ãšã®ãããã³ã°ã«ããæå®ããã³ãã³ããå®è¡ããŸãã â»åçŽãªå岿¡ä»¶ã§ãã³ãã³ãåŠçã3ã€ä»¥äžããå Žåã¯caseæãåããŠãããšãããŸãã caseæã®æžåŒã¯æ¬¡ã®ããã«ãªããŸãã  case å€ in æ¡ä»¶ã»å€1 ) ã³ãã³ã1 ;; æ¡ä»¶ã»å€2 ) ã³ãã³ã2 ;; æ¡ä»¶ã»å€3 ) ã³ãã³ã3 ;; ⊠æ¡ä»¶ã»å€n ) ã³ãã³ãn ;; esac ã«ãŒãåŠç foræ foræã¯ã«ãŒãåŠçãnåæ°ãåãåŠçãç¹°ãè¿ãããšããå¶åŸ¡æã§ foræã®æžåŒã¯æ¬¡ã®ããã«ãªããŸãã  for 倿° in å€ãªã¹ã do ã³ãã³ã done  whileæ Whileæã¯ã«ãŒãåŠçãæ¡ä»¶ãæºãããŠããéã¯åãåŠçãç¹°ãè¿ãããšããå¶åŸ¡æã§ Whileæã®æžåŒã¯æ¬¡ã®ããã«ãªããŸãã  while æ¡ä»¶åŒ do ã³ãã³ã done  4.ãŸãšã  ã·ã§ã«ã¹ã¯ãªãã ãåãä»çµã¿ãåŠã³ãåºæ¬æ§æãæžããæ°ã¥ã㯠äžåºŠãµã¯ããšæžããŠã¿ãŠå®è¡çµæãããããããšãçè§£ããšãŠãé²ããšãã åœããåã®äºã§ããã åŠç¿å Žé¢ã«ãããŠãç§ã®æ§ãªéçºæªçµéšè
ã«äŒãããäºã¯ Leap before you look(èŠãåã«é£ã¹) æž
æ°Žã®èå°ããé£ã³éãã ã§ãã ãŸãããã£ããå®çããDevOpsã®æèã§ã¯ ããã°ã©ã ã§ã®ã€ã³ãã©ç®¡çãäž»æµã«ãªã æ§æç®¡çããŒã«ãªã©ã¯ã䞻㫠ã¹ã¯ãªããèšèª ãå©çšãããã ã³ã³ãã€ã© èšèªã ãã§ãªãã ã¹ã¯ãªããèšèª ãã§ããæ¹ã¯ãšãŠãéå®ãããŸãã ãããã ã¹ã¯ãªããèšèª ãã¯ãããæ¹ã«ã¯ ã·ã§ã«ã¹ã¯ãªãã ã¯ãšã£ãããããããã¹ã¹ã¡ã§ãïŒ ãåŒçšåèã â»WEBåèè³æã¯ä»¥äž ã» ã·ã§ã«ã¹ã¯ãªãã ã«ææŠããã ã·ã§ã«ã¹ã¯ãªããã«ææŠãããïŒ1ïŒæºåç·šïŒâå¿çšåâãã€ããããã®Linuxåå
¥éïŒ21ïŒ - ïŒ IT ã»ãåãããããã§ãåãããªããã§ããåãã£ããæ°ã«ãªããITçšèªèŸå
ž https://wa3.i-3-i.info/index.html ã» ã·ã§ã«ã¹ã¯ãªãã å
¥é æžãæ¹ã®ãŸãšã ã·ã§ã«ã¹ã¯ãªããå
¥é æžãæ¹ã®ãŸãšã | Memo on the Web  â»åå¿è
åãã§ ã·ã§ã«ã¹ã¯ãªãã çè§£ã«åèã«ãªããããªæžç±ã以äžããã¯ã¢ãã ã»æ°ããã·ã§ã«ããã°ã©ãã³ã°ã®æç§æžÂ www.sbcr.jp ã»[æ¹èšç¬¬3ç] ã·ã§ã«ã¹ã¯ãªãã åºæ¬ãªãã¡ã¬ã³ã¹ââ#! /bin/sh ã§ããããŸã§ã§ãã gihyo.jp ã»å
¥é UNIX ã·ã§ã«ããã°ã©ãã³ã°âã·ã§ã«ã®åºç€ããåŠã¶ UNIX ã®äžç books.rakuten.co.jp  ã»ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã»ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã forms.gle ã» ã©ã¯ ã¹Developersç»é²ãã©ãŒã https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ ã»ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ ã»TECH PLAY techplay.jp ã»connpass rakus.connpass.com  Â
ã¯ããã« ããã«ã¡ã¯ã sts -250rrã§ãã æ¬èšäºãå·çäžã®çŸåšã¯Stay Homeé±éãšãããŠããŸãã å®¶ã§ã®ç掻ãé·ããªããã³ãã¥ãã±ãŒã·ã§ã³ã®æ©äŒãæžã£ãŠããŸã£ããšããæ¹ã¯å€ãã®ã§ã¯ãªãã§ããããã ç§ããã®1人ã§ãã èªåã®å£°ãå¿ããŠããŸããããªã»ã©å®¶ã®äžãéããªã®ã§ã誰ãã®å£°ãèŽããããããªè¡åã«é§ãããŠãããšãã... æãå®¶ã«ã¯æ¯æèµ·ãããŠãããŠã ã«ãã éººã®æéãæž¬ã£ãŠãããçŽ æµãªãšãŒãžã§ã³ããããããšãæãåºããŸããã ãããAmazonEchoããš Alexa ã§ãã èªå®
ã® ã¹ããŒãããŒã åãé²ããããŠãããããã¬ãããšã¢ã³ã³ãç
§æã®æäœãã§ããªãç¶æ³ã«ããã®ã§ãããStay Homeé±éã«Alexaã®ããšããã£ãšç¥ããããAlexaãšãã£ãšè©±ãããã ãããªè¡åã«é§ãããå
¬åŒããã°ã§ç޹ä»ãããŠãã Alexaã¹ãã«éçºãã¬ãŒãã³ã° ãå§ããŠã¿ãŸããã æ¬èšäºã§ã¯ã ã¬ãŒãã³ ã°æã«æ°ã¥ãããã€ã³ãããäŒãããŠãããŸãã å
¬åŒã®ããŒãžã§ã ã¬ãŒãã³ ã°ã¯ã§ããŸãã®ã§ã现ããªç»é¢ã®èª¬æçã¯å²æããŠããŸãç¹ããäºæ¿ãã ããã developer.amazon.com ã¯ããã« Alexaã¹ãã«éçºããšã¯ãã ãã€ã³ã1 ã¹ãã«ã®ããã¯ãšã³ããéžæ ãã€ã³ã2 ã¹ãã«ãã³ãã¬ãŒãã®éžæ ãã€ã³ã3 åŒã³åºãåã®æ±ºå® ãã€ã³ã4 ã察話ã¢ãã«ç·šãã©ããªèšèãåãä»ããã®ãã¯ã€ã³ãã³ãã§ç®¡çãã ãã€ã³ã5 ãããã¯ãšã³ãç·šããªã¯ãšã¹ãã®åŠçããããã³ãã©ãçšæ ãã€ã³ã6 ã察話ã¢ãã«ç·šãåãçãã«ããã«ããªãšãŒã·ã§ã³ãäžããã¹ããã ãã€ã³ã7 宿©ã§ã¹ãã«ãåãã æåŸã« Alexaã¹ãã«éçºããšã¯ãã ãã€ã³ã1 ã¹ãã«ã®ããã¯ãšã³ããéžæ Alexaã¹ãã«ã®ããã¯ãšã³ããµãŒãã¹ã¯ãèªåã§ãšã³ããã€ã³ããçšæããããAlexaèªèº«ã«ãã¹ããããããšãã§ããŸãã Alexaããã®ãªã¯ ãšã¹ ã㯠JSON 圢åŒã§æãããããããèªåã§ãšã³ããã€ã³ããçšæããå Žåã¯èªèº«ã§ç«ãŠããµãŒãã®ã¢ããªã±ãŒã·ã§ã³ã§ãªã¯ ãšã¹ ããåŠçãããããšãã§ããããã§ãã Alexaèªèº«ã«ãã¹ããããå Žå㯠AWS lambdaã®ãšã³ããã€ã³ãã«Node.jsã Python ãéžæããŠèŒããããšãã§ããããã§ãã ã¡ãªã¿ã«ã ã¬ãŒãã³ ã°ã§ã¯Node.jsãéžæãããŠããŸãã AmazonEchoã§åãä»ãããªã¯ ãšã¹ ãã¯Alexaã§åãä»ãããã JSON ã®åœ¢åŒã§ããã¯ãšã³ããµãŒãã¹ã«æž¡ãããŸãã Alexaã¹ãã«ã®éçºã§ã¯ãâ Alexaã§ã©ã®ãããªèšèãåãä»ããã®ããâ¡ããã¯ãšã³ããµãŒãã¹ã§ãªã¯ ãšã¹ ããã©ã®ããã«åŠçããã®ããäœã蟌ãã§ããããšã«ãªããŸãã ãã€ã³ã2 ã¹ãã«ãã³ãã¬ãŒãã®éžæ Alexaèªèº«ã«ãã¹ããããå Žåãã¹ãã«ãã³ãã¬ãŒããèšå®ããããšãã§ããŸããã ãã³ãã¬ãŒãã®çš®é¡ã¯ä»¥äžã®4çš®ãããŸãããåºæ¬çã«ã¯ Hello World ã¹ãã«ãéžæããããšã«ãªãã®ã§ã¯ãªãã§ããããã Hello World ã¹ãã« åºæ¬çãªå¿çãå¯èœãªã¹ãã«ãäœæã§ãããã³ãã¬ãŒã Cake WalkïŒ ãã¥ãŒããªã¢ã« ïŒ ã¹ãã«ãèªçæ¥ããç¥ãããŠããããã³ãã¬ãŒã è±ç¥èã¹ãã« ãããããã¯ã«é¢ããè±ç¥èã®ã¹ãã«ãäœæã§ãããã³ãã¬ãŒã Sauce Bossã¹ãã« ç»é¢ä»ãã®Alexaã䜿ããã ãã€ã¹ çšã®ã¹ãã«ãäœæã§ãããã³ãã¬ãŒã (ã¡ãªã¿ã«ãç§ã¯Echo bot ãªã©ã®ç»é¢ä»ã Amazon Echo ãæã£ãŠããªãã®ã§ãSauce Bossã¹ãã«ã®åºçªã¯ãã°ãããªãããã§ãã) ãã€ã³ã3 åŒã³åºãåã®æ±ºå® Alexaã«ã¹ãã«ã®èµ·åãä¿ãéã«ãAlexaãââãããŠããšå£°ããããŸããããã®ââã®éšåãåŒã³åºãåã«ãªããŸãã åŒã³åºãåã«ã¯ä»¥äžã®ãããªèŠä»¶ããããŸãã ã·ã³ãã«ã«èããŠèªåãåŒã³ãããåç§°ãä»ããŠããããšããã§ãããã å
¬åŒã«ã以äžã®ããã«èšèŒããããŸãã åŒã³åºãåã®èŠä»¶ - åŒã³åºãåã¯2èªä»¥äžã§ãªããã°ãªããŸããããŸãã䜿çšã§ããã®ã¯ã²ãããªãã«ã¿ã«ããæŒ¢åãå°æåã®ã¢ã«ãã¡ããããã¹ããŒã¹ã®ã¿ã§ããæ°åãªã©ã¯æåã§è¡šçŸããªããã°ãªããŸããã(äŸ: ãäºåäžããªã©ïŒ - åŒã³åºãåã«ã¯ããèµ·åããŠãããéããŠãããèããŠãããæããŠãããèªã¿èŸŒãã§ãããéå§ããŠãããæå¹ã«ããŠããªã©ã®èµ·åãã¬ãŒãºã䜿çšããããšã¯ã§ããŸããããã¢ã¬ã¯ãµãããã¢ããŸã³ããããšã³ãŒãããã³ã³ãã¥ãŒã¿ãŒããªã©ã®ãŠã§ã€ã¯ã¯ãŒãããã¹ãã«ãããã¢ããªããªã©ã®åèªã¯äœ¿çšã§ããŸããã åã®è¯ãæ¹ã¯ãæ°ã¥ãããšæããŸãããä»åã®ã¿ã€ãã«ãAlexaãStay Homeãå©ããŠããšããåŒã³åºãåã¯èŠä»¶ããå€ããŠããŸãã®ã§NGã«ãªããŸãã æ³£ãæ³£ãåŒã³åºãåã¯ãStay HomeããšããŸããã ãã€ã³ã4 ã察話ã¢ãã«ç·šãã©ããªèšèãåãä»ããã®ã㯠ã€ã³ãã³ã ã§ç®¡çãã Alexaãã¹ãã«ãèµ·åããããæ¬¡ã«èšèã®å
¥åãäžããå¿
èŠããããŸãããåãèšèã§ãããªãšãŒã·ã§ã³ããããŸãã äŸãã°ãAlexaãããã¯ããããããŸãããšãã£ãŠããããç§ãã¡ã¯ããã¯ãããããã¯ããããããŸããããããŒããªã©ãããªãšãŒã·ã§ã³ãããã§ãããã ãããã®ããªãšãŒã·ã§ã³ãåãä»ããããã« ã€ã³ãã³ã ãšããŠèšèã管çããŸãã ã€ã³ãã³ã ã«ãã£ãŠãAlexaãèšèãèªèãã ããã¯ãšã³ãã®äœãã«ãããŸããã Alexaã¯ãã£ãšçŽ æµãªè¿äºãè¿ããŠãããããšã§ãããã ãã® ã€ã³ãã³ã ãåããAlexaã¯ä»¥äžã®ãã㪠JSON ãããã¯ãšã³ãåŽãžæãã€ããŸãã "request": { "type": "IntentRequest", "requestId": "amzn1.echo-api.request.44cd0613-9ffe-4613-bd6b-49529a86c4d3", "timestamp": "2020-05-16T11:22:59Z", "locale": "ja-JP", "intent": { "name": "HelloWorldIntent",# åãä»ããã€ã³ãã³ããHelloWorldIntentãšèªèããŠãã "confirmationStatus": "NONE" } } ãã€ã³ã5 ãããã¯ãšã³ãç·šããªã¯ ãšã¹ ãã®åŠçããããã³ãã©ãçšæ AlexaãæããŠãããªã¯ ãšã¹ ããããã¯ãšã³ãåŽãã©ãåŠçããŠããããæããŠãããŸãã Alexaèªèº«ã«ãã¹ã + Node.jsãéžæããŠããŸãã # ã¹ãã«èµ·åæã®åŠç const LaunchRequestHandler = { canHandle(handlerInput) { return Alexa.getRequestType(handlerInput.requestEnvelope) === 'LaunchRequest'; }, handle(handlerInput) { const speakOutput = '仿¥ãStayHomeé 匵ããŸããããäœãããã°å£°ããããŠãã ããã'; # è¿çã®å
容 return handlerInput.responseBuilder .speak(speakOutput) .reprompt(speakOutput) .getResponse(); } }; # HelloWorldIntentãåããå Žåã®åŠç const HelloWorldIntentHandler = { canHandle(handlerInput) { return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest' && Alexa.getIntentName(handlerInput.requestEnvelope) === 'HelloWorldIntent'; # HelloWorldIntentãåããå Žåã®åå² }, handle(handlerInput) { const speakOutput = 'ãã¯ããããããŸãïŒ'; # è¿çã®å
容 return handlerInput.responseBuilder .speak(speakOutput) .getResponse(); } }; ïŒçç¥ïŒ # ãã³ãã©ã®ç»é² exports.handler = Alexa.SkillBuilders.custom() .addRequestHandlers( LaunchRequestHandler, HelloWorldIntentHandler, HelpIntentHandler, CancelAndStopIntentHandler, SessionEndedRequestHandler, IntentReflectorHandler, ) .addErrorHandlers( ErrorHandler, ) .lambda(); LaunchRequestHandler ã¯ãAlexaãââãããŠãã«ãã£ãŠèµ·åããã¹ãã«ã®ã¯ããã®å¯Ÿè©±ãè¿ããŠãããŸãã ãã®ãæäžãªã®ã§ã仿¥ãStayHomeé 匵ããŸããããããšå±ãŸããŠãããããã§ãã HelloWorldIntentHandler ã§HelloWorldIntentïŒãã¯ããã»ãã¯ããããããŸãïŒãåããæã«ã¯ããã¯ããããããŸãïŒããšå
æ°ã«è¿äºãããŠããããŸãã ããã§æ¯æé 匵ãããšãããã®ã§ãã ãã€ã³ã6 ã察話ã¢ãã«ç·šãåãçãã«ããã«ããªãšãŒã·ã§ã³ãäžããã¹ããã 5ã€ã®ãã€ã³ããæããããšã§ã察話ãã§ããã¹ãã«ãåºæ¥äžãããŸããã ãã ããå®ã¯ãã®ãŸãŸã® HelloWorldIntentHandler ã¯ããããã¿ããšãã£ãŠãããã¯ããããããŸãïŒããšå
æ°ã«è¿äºãããŠãããŸãããã ããå°ãè³¢ãããŠãããïŒå¯Ÿè©±ã®ããªãšãŒã·ã§ã³ãå¢ããïŒããã«ã¹ããããšããæ©èœã䜿ã£ãŠãããŸãã æã ãã§ãªãæŒãå€ã«è©±ããããšããããã®ã§ãããã¯ããããããã«ã¡ã¯ãããããã¿ãã®3ã€ã®ã¹ããããäœæããŸãã ããã«åé¡èªãã¹ãããã§ç»é²ããããšãã§ããŸãã ããã¯ãããã®ããªãšãŒã·ã§ã³ã«ããã¯ããããããŸãããšãGood morningããç»é²ããŠã¿ãŸããã ã¹ããããèšå®ããéã«ç»é²æžã¿ã®ããã¯ããããçºè©±ãããšãã®ãªã¯ ãšã¹ ãã§ãã slots屿§ãå¢ãã身æ§ããŠããŸãããã§ãã察話ã®ãã€ã³ãã«ã«ãªã£ãŠããã®ã¯ ããã¯ãšã³ãã«èšèãéä¿¡ãã slots.slot_sample.value ãšãèšèã®äžèŽç¶æ
ã瀺ã slots.slot_sample.resolutions.resolutionsPerAuthority[0].status.code ã§ãã èšèã®äžèŽç¶æ
ã確èªããããšã§ã "request": { "type": "IntentRequest", "requestId": "amzn1.echo-api.request.d7f9bd50-aa78-4768-919b-e7f92bdf8783", "timestamp": "2020-05-17T05:21:25Z", "locale": "ja-JP", "intent": { "name": "HelloWorldIntent", "confirmationStatus": "NONE", "slots": { "slot_sample": { "name": "slot_sample", "value": "ãã¯ãã", "resolutions": { "resolutionsPerAuthority": [ { "authority": "amzn1.er-authority.echo-sdk.amzn1.ask.skill.6f6d3418-edc7-4567-a7e5-10170a022f41.slot_sample", "status": { "code": "ER_SUCCESS_MATCH" // slot_sampleã®èªå¥ãšäžèŽããŠããããè¿ããäžäžèŽã®å Žåã¯ER_SUCCESS_NO_MATCH }, "values": [ { "value": { "name": "ãã¯ãã", "id": "896c87c2017e74cf8c7ccf42d339ca66" } } ] } ] }, "confirmationStatus": "NONE", "source": "USER" } } } } ã¹ããããå©çšããããšã§èšèã®äžèŽç¶æ
ãååŸããããšãã§ããããã«ãªããŸããã Alexaãè³¢ããªããŸã§ããäžæŒããããã¯ãšã³ãåŽã以äžã®ããã«æ¹ä¿®ããŸãã const HelloWorldIntentHandler = { canHandle(handlerInput) { return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest' && Alexa.getIntentName(handlerInput.requestEnvelope) === 'HelloWorldIntent'; }, handle(handlerInput) { // ã¹ãããã®å€ãååŸ let requestWord = handlerInput.requestEnvelope.request.intent.slots.slot_sample.value; let matchCd = handlerInput.requestEnvelope.request.intent.slots.slot_sample.resolutions.resolutionsPerAuthority[0].status.code; let speakOutput = `ãã¿ãŸããã${requestWord}ãããããŸããã`; if(matchCd !== 'ER_SUCCESS_MATCH'){ // ã¹ãããã«ååšããªãå Žå return handlerInput.responseBuilder .speak(speakOutput) .getResponse(); } switch (requestWord){ case 'ãã¯ãã': speakOutput = 'ãã¯ããããããŸãïŒ'; break; case 'ããã«ã¡ã¯': speakOutput = 'ããã«ã¡ã¯ïŒ'; break; case 'ãããã¿': speakOutput = 'ãããã¿ãªãã'; break; default : // ã¹ãããã«ååšãããåŠçãçšæããŠããªããã®ã¯ãšãŒãã speakOutput = `${requestWord}ã£ãŠãªãã§ããã£ãïŒ`; } return handlerInput.responseBuilder .speak(speakOutput) .getResponse(); } }; ç¥ã£ãŠããïŒïŒã¹ãããã«ç»é²ãããŠããïŒèšèã«å¯ŸããŠãç¥ããªããã®ã¯ããããªããšè¿ãããã«ããŸãããçŽ çŽãªããšã¯ããããšã§ãã å°ãè³¢ããªã£ãAlexaãšå¯Ÿè©±ãã¹ãããŠã¿ããšä»¥äžã®ããã«è¿ããŠãããŸããã ãã€ã³ã7 宿©ã§ã¹ãã«ãåãã ã·ãã¥ã¬ãŒã·ã§ã³ã®ã¿ã§ãªããèªå®
ã®Alexaãšå¯Ÿè©±ããããã«ã¯éçºè
ã¢ã«ãŠã³ãã Amazon Echo ãšçŽã¥ãããŠãã Amazon ã®ã¢ã«ãŠã³ããšããŠãããŸãããã®ããã«ããŠãããšã ã¹ãã ã®Alexaã¢ããªããã㯠https://alexa.amazon.co.jp/spa/index.html ã§éçºäžã®ã¹ãã«ãæå¹ã«ããèªå®
ã®ã¢ã¬ã¯ãµã«è©±ããããã ãã§ãã ïŒå®æ©ã§åããã®ããããŸã§ç°¡åãšæã£ãŠããªãã£ãã®ã§é©ãã§ãããïŒ æåŸã« ãããã«ã¢ããªãèµ·åããŠãã è¿äºãããŠãããã ãã§ã¯ã³ãã¥ãã±ãŒã·ã§ã³ãããŠããæ°ã«ã¯ãªããªãã®ã§äœããã¿ãå¿
èŠã§ãã 埮åŠã«å¿çãªåŒå®³ãæããããããŸããç¹ã«èªåã§å¯Ÿè©±ã®åããæ±ºããŠããã®ã§ãªã«ããã ãºã ãºããŸãã æ®æ®µã¯ãšãã£ã¿ãŒäžã§ã³ãŒããçºããŠéçºããŠããã®ã§ããã©ãŠã¶äžã§éçºããã®ã¯æ°é®®å³ããã£ãŠæ¥œããã§ãããã·ã¥ãã¬ãŒã¿ããã°ã«ãã宿©ã§ããåããããšãã§ããã®ã¯ããªãè¯ãæè§Šã§ããã ç°¡åãªãã®ã§ããã°ãã¡ãã£ãšããæ¯æãã«éçºã§ããã®ã§ãå§ãã§ããŸãã ãŸããå
¬åŒãã玹ä»ãããŠãããã¶ã€ã³ã¢ãã«ã軜ãçºããŠã¿ããšã察話ãã«éãã眮ãããã¶ã€ã³ïŒäŸãã°ãé·æãªè¿çããããã®ã¯NGãªã©ïŒãèããå¿
èŠãããããã§ç®ãããŠãã³æ°åã§æ°é®®ã§ããã ãã ããã¹ãã«éçºãéããŠã察話ãããããšã§äœããããã®ãã ãããèŠã€ããããšãæãé£ãããšæ¹ããŠçæããŸããã
id:radiocat ã§ããå€ãã®äŒæ¥ããªã¢ãŒãã¯ãŒã¯ã«ç§»è¡ããŠè©Šè¡é¯èª€ãããŠããããšãšæããŸããç·æ¥äºæ
宣èšãå»¶é·ãããŠããããã°ãããã®ç¶æ³ãç¶ããããšããããšããããä»åã¯ãªã¢ãŒãã¯ãŒã¯ãžã®ç§»è¡ã«ãã£ãŠè©Šè¡é¯èª€ããŠããç§ãã¡ã®ããŒã éçºã®äºäŸããäŒãããŸãã çµç¹çãªåãçµã¿ãã«ãŒã« æã¯ãã³ãã³ã«ã¬ã³ããŒãæŽæ°ããŠãã§ãã¯ã€ã³ çµæ¥æã¯ã²ãšããšææ³ã§ãã§ãã¯ã¢ãŠã é£çµ¡äºé
ã¯å±¥æŽãæ®ã ãªã¢ãŒãã¯ãŒã¯ã®ããŠããŠããã©ãã«ãèšé²ãã ããŒã éçºã®çŸå Ž ã¿ã¹ã¯ã¯ãªãã¹ãå°ããåè§£ãã WebäŒè°ã¯åžžæã€ãªãã§ãã 1察1ã®çžè«ã¯é»è©±æèŠã§WebäŒè°ãã³ãŒã«ãã ãã€ã³ããããã§ãµãããã ãããã« çµç¹çãªåãçµã¿ãã«ãŒã« ç§ãã¡ã®æå±ããé
é
ã¡ãŒã«éçºèª²ã¯ã¡ã³ããŒ10äººã§æ§æãããããŒã ã§ãããŸãã¯ãã®å
šå¡ã«é¢ä¿ããçµç¹çãªåãçµã¿ãã«ãŒã«ã玹ä»ããŸãã æã¯ãã³ãã³ã«ã¬ã³ããŒãæŽæ°ããŠãã§ãã¯ã€ã³ ããŒã å
šå¡ã®æäŒã§ã¯ãäºåã«ãã³ãã³ã«ã¬ã³ããŒãæŽæ°ããäžèšãã€ãã®æ¥ã®æ°åãææ°èŸŒã¿ãå
±æããŠãã§ãã¯ã€ã³ãããŠããŸããå£ç¯ã®å€ããç®ã§äœèª¿ã厩ãããšããããŸããããèªå®
ã®äœæ¥ç°å¢ã«æ
£ãããŸã§ã¯è©ãããè
°çã«ãªã人ãããŸããã黿°å·¥äºãæ°Žéã®ãã©ãã«ã®ãããªèªå®
ã®ãã©ãã«ã®å
±æããããŸãããå®¶æããã人ããã仿¥ã¯åäŸãé£ã®éšå±ã§éãã§ããã®ã§éšãããããããšãããããªãå®¶åºã®ç¶æ³ã®å
±æããªã¢ãŒãã¯ãŒã¯ãªãã§ã¯ã§ãã ja.wikipedia.org çµæ¥æã¯ã²ãšããšææ³ã§ãã§ãã¯ã¢ãŠã çµæ¥æã«ãããŒã å
šå¡ã®å€äŒã§ãã®æ¥ã®ä»äºã®ææ³ãšä»äºã§èµ·ãã課é¡ã®å
±æãè¡ã£ãŠããŸãããªã¢ãŒãã¯ãŒã¯ã«ãã£ãŠã¡ãã£ãšããçžè«ããã¥ãããªã£ãããã£ããã®éãå¢ããŠæ
å ±ã远ãã¥ãããªã£ãããªã©ã®èª²é¡ã¯å€äŒã§ã®ã¡ãã£ãšããå
±æããæ¹åã«ç¹ããŸããïŒåŸè¿°ïŒãä»äºã®ããæ¹ãå€ããããæ°ããã«ãŒã«ãäœã£ããããªã¢ãŒãã¯ãŒã¯ã«ãã£ãŠæ¥ã
å°ããªå€åãèµ·ããŠãããããå®éã«ãã£ãŠã¿ãŠæããããšã課é¡ã«æããããšãªã©ãã¿ ã€ã 㪠ãŒã«å
±æãåã£ãŠå€åã«å¯Ÿå¿ããããšãã§ããŠããŸãã æãšå€æ¹ã®æ
å ±å
±æçš ã¹ãã¬ããã·ãŒã ãªã¢ãŒãã¯ãŒã¯ã¯ãäºãã®ç¶æ³ãææ¡ãã«ããã§ãããçæŽ»ç°å¢ãšåãé¢ããªãåé¡ãèµ·ããããšããããŸããå
šäœã§ã®æäŒã»å€äŒã¯äºåé£çµ¡ãäžå¿ã ã£ããªãã£ã¹å€åæãããå°ãæéããããããã«ãªããŸããããäœèª¿ãèªå®
ã®ç¶æ³ãææ¡ãããããäºãã®ç¶æ³ã«å
±æãããå±ãŸãåã£ããããããšã§ãå¶çŽã®ããäžã§ã®1æ¥ã®ä»äºãååã工倫ã§ä¹ãè¶ããåã«ãªããšæããŠããŸãããªã¢ãŒãã¯ãŒã¯ã§å¥åº·é¢ãžã®èª²é¡æèãé«ãŸããä»äºã®åã«èµ°ã£ãŠãããæ£æ©ããŠããããã©ã³ãã§äœæãããšããäºãã«åºæ¿ããã£ãŠå¥åº·é¢ã®åãçµã¿ãå¢ããŠããã®ãæ°ããå€åã§ãã é£çµ¡äºé
ã¯å±¥æŽãæ®ã ãªã¢ãŒãã¯ãŒã¯ã§ãã£ããã®éãå¢ããããšã«ãã£ãŠãå
šäœãžã®å
±æäºé
ãåãããŒãããŠäŒãããªãã±ãŒã¹ãçºçããããã«ãªããŸããã察é¢ã§è©±ãããªãåãããã¹ãæ
å ±ã®äŸ¡å€ãé«ãŸã£ãŠåãããŒããªãããã«æ³šæãæ±ããããã®ã¯åœç¶ã§ãããæ
å ±éå€ãªã®ããŸãäºå®ã§ããéçºã®æ¥åã«éäžããŠããåéã«äºåçãªé£çµ¡äºé
ãæµããŠãããèŠèœãšããå¯Ÿå¿æŒããèµ·ããŠã仿¹ãªãé¢ããããŸãããŸããæäŒãå€äŒã¯äŒæçã§åå ã§ããªãã£ãããéä¿¡ãäžå®å®ã§ãã¡ããšãã£ããã¢ããã§ããªãå ŽåããããŸããé£çµ¡äºé
ã®äŒéã§èšã£ãèšã£ãŠããªããšãããããšããäœåºŠãçºçããã®ã¯ãã£ãããªãã®ã§å±¥æŽã«æ®ããŠããããšã«ããŸããã é£çµ¡äºé
ã®å±¥æŽ ãªã¢ãŒãã¯ãŒã¯ã®ããŠããŠããã©ãã«ãèšé²ãã ãªã¢ãŒãã¯ãŒã¯ã§ã®ããŠããŠããã©ãã«ã¯èšé²ãæ®ãããã«ããŠããŸããã¿ããªãæªçµéšã®ç¶æ³ãªã®ã§ãããŠããŠã«ãããã©ãã«ã«ãã誰ããçµéšããŠããã°å°ããªããšã§ãåèã«ãªããããããŸãããã€ã³ã¿ãŒãããã®å©çšãäžççã«å¢å€§ããŠããããã解決ãããããªãéä¿¡çã®åé¡ãå€ã
ãããŸãããèšé²ããŠããããšã§å¥ã®èª°ããæšæ¥ãåãæéã«åãåé¡ãèµ·ããããšã«æ°ã¥ããèœã¡çããŠå¯ŸåŠã§ããããšããããŸãã ãªã¢ãŒãã¯ãŒã¯ã®ãã©ãã«èšé² ããŒã éçºã®çŸå Ž æ¬¡ã«ãããŒã éçºã®çŸå Žã®åãçµã¿ãã玹ä»ããŸãã10人ã®ããŒã ã¯ã4äººã§æ§æããã2ã€ã®ãµãããŒã ãšã2人ã®ãããžã£ãŒïŒãããã¯ããšçµç¹ïŒã§æ§æãããŠããŸããå®éã®éçºçŸå Žã¯ãµãããŒã ã§ã®æŽ»åãäžå¿ã§ãã ã¿ã¹ã¯ã¯ãªãã¹ãå°ããåè§£ãã ãªãã£ã¹å€åã®æã¯ãã¯ã€ãããŒãã®ã«ã³ãã³ã§ä»äºãé²ããŠããŸããããçŸåšã¯ Trello ã«ç§»è¡ããŸããã ãªãã£ã¹å€åæä»£ã®ãã¯ã€ãããŒãã®ã«ã³ãã³ ããŒã å
šäœã®æäŒã®åŸããµãããŒã ã«åãããŠWebäŒè°ã§Trelloã®ã«ã³ãã³ãå
±æããªããæäŒãè¡ã£ãŠããŸãããäºãã®ç¶æ³ãçŽæ¥èŠããªããªã£ãããšã«ããã1ã€ã®ã¿ã¹ã¯ã倧ããã£ãããä»ã®ã¡ã³ããŒãæ³åãã¥ããã¿ã¹ã¯ãé²è¡ããŠãããšã«ã³ãã³äžã§ç¶æ³ãææ¡ããããšãä»ãŸã§ä»¥äžã«é£ãããªããŸããã远å ã¿ã¹ã¯ãå²ã蟌ã¿ã¿ã¹ã¯ãæŒããªãã«ã³ãã³ã«è¿œå ããéçºãšäžŠè¡ã§éçšæ¥åãè¡ã£ãŠãããµãããŒã ã§ã¯éçšã¿ã¹ã¯ãæŒããªãç»é²ããŠããŸãã1ã€1ã€ã®ã«ãŒãã§ããäºãã®ã¿ã¹ã¯ã®é²è¡ç¶æ
ãå
±æããããšã®éèŠæ§ãšé£ãããæ¹ããŠæããŠããŸãã Trelloã®ã«ã³ãã³ WebäŒè°ã¯åžžæã€ãªãã§ãã ãµãããŒã åäœã§ã®WebäŒè°ã1æ¥äžãªãŒãã³ããŠåžžæã€ãªãã ç¶æ
ã«ããŠããŸãããªãã£ã¹å€åã®æã«èªç¶ãšè¡ã£ãŠããã¡ã³ããŒå士ã®ã¡ãã£ãšããçžè«ããé£å士ã®äžé話ããã®ç¶æ³ææ¡ããªããšãªãå°ã£ãŠããé°å²æ°ãå¯ç¥ããŠãµããŒããããªã©ã®ããŒã ã¯ãŒã¯ããªã¢ãŒãã¯ãŒã¯ã«ç§»è¡ããããšã§ã§ããªããªããæŒ ç¶ãšããäžå®ãæãããšããæèŠãåºãŸããããªã³ã©ã€ã³ã§åžžæç¹ãã£ãŠããããšã§ããªãã£ã¹å€åãšåããšãŸã§ã¯ãããªããã®ã®ãçžè«ããããé°å²æ°ããªããšãªããäºãã®ç¶æ³ãææ¡ããããšã¯ã§ããããã«ãªããŸããã ã«ã¡ã©ãé³å£°ã«ã€ããŠã¯ãèªå®
ã®æ¥åç°å¢ã«ãã£ãŠã¯åžžæONã«ããã®ãé£ããã¡ã³ããŒãããããã«ãŒã«ã¯æ±ºããŠããŸããïŒå人ã®å€æã«ããŸããïŒãæ¥åã®äžå®ããªãã¹ãè§£æ¶ãããšããç®çã«å
šå¡ãåãåã£ãŠãªã³ã©ã€ã³ã§ç¹ããããšãéèŠã ãšèããŠããŸãã 1察1ã®çžè«ã¯é»è©±æèŠã§WebäŒè°ãã³ãŒã«ãã åžžæã€ãªãã§ããçžæã¯ãµãããŒã å
ã®ã¡ã³ããŒãªã®ã§ããµãããŒã ãè¶ããçžæãžã®çžè«ããã«ããåé¡ãæ®ããŸãããã£ããã ãšå
容ãäŒããã«ããã£ããããªããªãçžæããè¿äºãããããªããªã©ãããã§ããªã¢ãŒãã¯ãŒã¯ãªãã§ã¯ã®èª²é¡ããããŸããããã£ããæåã®æµžéã«ãã£ãŠæè¿ã¯æžã£ãŠããŸãããã以åã¯ããããã±ãŒã¹ã¯çŽæ¥é»è©±ãããŠèããŠããŸããããªã®ã§ãããŒã ã§æ±ºããã«ãŒã«ã¯ä»¥äžã®éããã»ãŒé»è©±ãšåãã§ãã ã¡ãã£ãšãã確èªäºé
ã§ãçŽæ¥ã³ãŒã«OK ãã ããçžæãåºããªãå Žåãããããšãåæãšãã çžæãåºãªãå Žåã¯ãæéã眮ããŠå床ã³ãŒã«ãããããã£ããã§æãè¿ããäŸé Œãã åŒã³åºãããåŽã¯ç¡çã®ãªãç¯å²ã§å¿çããïŒå¿ããå Žåã¯åºãªããŠãè¯ãïŒ ããŒã å
šäœã§äžæã«ããããããšã³ãŒã«å°çã«é¥ãããã§ãããæŽ»åã®äžå¿ãšãªããµãããŒã å
ã§ã¯åžžæã€ãªãã£ãŠããããã§ããã以å€ã®å¿
èŠãªãšãã«ãã®ææ®µãéžæããã®ã§æãç«ã£ãŠãããšæããŸãã ãã€ã³ãããã ã§ãµãããã ãµãããããªã©ã®è°è«äžå¿ã®ããŒãã£ã³ã°ã§ã¯ãè²ã
ãªãªã³ã©ã€ã³ããŒã«ã掻çšããææ³ãäžè¬ã«å
¬éãããŠããŸããããããæã
ã®ããŒã ã§ã¯éçºçšã®PCç°å¢ã®åé¡ã§WebäŒè°ã«ã€ãªãã ç¶æ
ã§ãããã®ãªã³ã©ã€ã³ããŒã«ã䜿ãããšãé£ããã±ãŒã¹ããããŸãããªãã£ã¹å€åã®æã¯ãæ¥åäžãã€ã§ãæãã€ããæã« KPT æ¹åŒã§Trelloã«ç»é²ããŠããããµããããã®æé㯠ãã¡ã·ãªããŒã¿ãŒ ã ããPCãæã¡èŸŒãã§å
容ã確èªãã€ã€ããã¯ã€ãããŒãã«æŽçããŠããæ¹åŒã§ããããªã¢ãŒãã¯ãŒã¯ã§ãåãããæ¹ã§ããã°ãWebäŒè°ã«ã€ãªãã ãã§é²è¡ã§ããŸããããªã³ã©ã€ã³ã®ãã¯ã€ãããŒãããŒã«ããªãã£ã¹ã®ãã¯ã€ãããŒããšåãèŠé ã§äœ¿ãã®ãé£ããã£ããã ãã€ã³ãããã ããŒã«ã«ç§»è¡ããŸããã ãã€ã³ãããã ã¯ãªãã£ã¹ã®ãã¯ã€ãããŒããããèªç±åºŠãäžãããŸãããWebäŒè°ã§ã®ã³ãã¥ãã±ãŒã·ã§ã³ã«ãå¶éãããããšãããããŸãäžäŸ¿ãã¯æããŠããŸãããäžå®ã®å¶éäžã§æèãæŽçããããã§ ãã€ã³ãããã ã®ããŒã«ãšããŠã®å¶éã¯ããã广çã«äœçšããŠããŸãã ãã¯ã€ãããŒããããã® ãã€ã³ãããã ãããã« ãªã¢ãŒãã¯ãŒã¯ã«ç§»è¡ããŠæ§ã
ãªå€åã«çŽé¢ããŠããŸããããã®äžã§æ°ã¥ããããšã¯ãããŒã ã§åãããã§ã®ã³ãã¥ãã±ãŒã·ã§ã³ã èšèªå ãå¯èŠåã®é£ãããªã©ã§ãããããã¯ãèŠããŠããªãã£ãã ãã§å®éã¯ãªãã£ã¹å€åã®æãã æœåšç ãªèª²é¡ã ã£ãããšãå€ããããšæããŠããŸãããã®ãããæ
ãŠããã£ããåãåã£ãŠå¯ŸåŠããŠããã°ãä»åŸãªãã£ã¹å€åã«æ»ã£ããšããããŒã ã«ãšã£ãŠè¯ã广ã«ç¹ããã®ã§ã¯ãªãããšæããŸãã äžçäžã倧ããªå€åã«å
ãŸããäžã§ãããããæã
ã®åãæ¹ã¯å€§ããå€ãã£ãŠãããšãã話ãèãããŠããŸããç§ãã¡ããŸã ãŸã 詊è¡é¯èª€ã®é£ç¶ã§ããããã®ãããªå€åã®äžã§ç§ãã¡ãšåãããã«åãã¿ãªããã«ãšã£ãŠãäœãã®åèã«ãªãã°å¹žãã§ãã ç§ãã¡ã¯äžç·ã«åãã¡ã³ããŒãåéããŠããŸããèå³ãæãããŸããã以äžã®ãµã€ããããåãåãããã ããã career-recruit.rakus.co.jp
ããã«ã¡ã¯ãgoldminer ã§ãã ã¯ããã« æšå¹Žããæ°ãããããžã§ã¯ãã«æºããããšã«ãªãããã®ãããžã§ã¯ãã§ã¯ ãã¡ã€ã³ é§åèšèšïŒDDDïŒãåãå
¥ããŠããŸãã ãããŸã§ DDD ããã£ãããšããªãã£ãã®ã§è²ã
ãšè©Šè¡é¯èª€ããªããé²ããŠããŠãç¹ã« ãã¡ã€ã³ ãµãŒãã¹ã«ã€ããŠã¯èªåã®äžã§ã®æãæ¹ã®å€åãæ¿ããã£ãã®ã§ãŸãšããŠã¿ãŸããã ãããã DDD ãå§ããããšããæ¹ã®äžå©ã«ãªãã°å¹žãã§ãã 以äžã® ãã¬ãŒã ã¯ãŒã¯ ã ã¢ãŒããã¯ãã£ ãæ¡çšããäŸãèšè¿°ããŠããŸãã Spring Boot ãããµãŽãã« ã¢ãŒããã¯ã㣠ãã¡ã€ã³ ãµãŒãã¹ãšã¯ ãã¡ã€ã³ ãµãŒãã¹ã«ã€ããŠèª¿ã¹ãŠã¿ããšæŠã次ã®ããã«èª¬æãããŠããŸãã ãã¡ã€ã³ã«ãããéèŠãªããã»ã¹ã®å
ããšã³ãã£ãã£ã Value Object ã®è²¬åãšããã¹ãã§ã¯ãªããã®ã ãã¡ã€ã³ãµãŒãã¹ãšããŠå®çŸ©ãã æåã«äœã£ã ãã¡ã€ã³ ãµãŒãã¹ ããã° ã€ã³ãã¹ ã¯ãŒãã¯ããã·ã¥åããŠããŒã¿ããŒã¹ã«ä¿åããããšããã»ãã¥ãªãã£èŠä»¶ã察å¿ããéã«äœæãã ãã¡ã€ã³ ãµãŒãã¹ã§ãã ãã¹ã¯ãŒã㯠Password ã¯ã©ã¹ïŒãšã³ãã£ãã£ïŒãä¿æããŸããããããããã·ã¥åãã責åãŸã§ãã Password ã¯ã©ã¹ã«è² ãããã®ã¯é©åã§ãªããšèããŸããã ããã§ããã·ã¥åãã責åãæã£ã ãã¡ã€ã³ ãµãŒãã¹ãäœæããããšã«ããŸããã ããã·ã¥åã®ïŒã¹ãã¬ããåæ°ãªã©ã®ïŒ ã¢ã«ãŽãªãºã ã¯æè¡çã«ããããšããããšã§ ãã¡ã€ã³ ãµãŒãã¹ã¯ã€ã³ã¿ãŒãã§ãŒã¹ã§å®çŸ©ããå®è£
ã¯ã©ã¹ã¯ã€ã³ãã©ã¹ã ã©ã¯ ãã£å±€ã«é
眮ããããšã«ããŸããã public interface HashPasswordService { /** * å¹³æã®ãã¹ã¯ãŒããããã·ã¥åãã. */ String hash(String plainPassword); // ã€ã³ãã©ã¹ãã©ã¯ãã£å±€ã«é
眮 @Service public class HashPasswordServiceImpl implements HashPasswordService { public String hash(String plainPassword) { // ããã·ã¥åã®ã¢ã«ãŽãªãºã ãå®è£
ããŠãã. } ãã® ãã¡ã€ã³ ãµãŒãã¹ã«ã€ããŠä»ã®æç¹ã§ã¯æ¬¡ã®ããã«è©äŸ¡ããŠããŸãã è¯: ãšã³ãã£ãã£ãè² ãã¹ãã§ãªãããã·ã¥åã®è²¬åã ãã¡ã€ã³ ãµãŒãã¹ãšããŠåé¢ã§ããŠãã è¯: æè¡çã«ãããããã·ã¥åã® ã¢ã«ãŽãªãºã ãã€ã³ãã©ã¹ã ã©ã¯ ãã£å±€ã«åé¢ã§ããŠãã æª: @Service ã¯ã¢ããªã±ãŒã·ã§ã³ãµãŒãã¹ *1 ã«ã䜿çšããŠããã @Service ã®çšæ³ãæ··ä¹±ããŠãã ç·ããŠæªããªããšæã£ãŠããã®ã§ãããæåã«äœæãã ãã¡ã€ã³ ãµãŒãã¹ãããã§ãã£ãããšã§ã ãã¡ã€ã³ ãµãŒãã¹ã¯ã€ã³ã¿ãŒãã§ãŒã¹ãšå®è£
ã¯ã©ã¹ãåé¢ãããã®ããšããééã£ãæã蟌ã¿ãããŠããŸã£ãããã«æããŸãã ãã®åŸ ãã¡ã€ã³ ãµãŒãã¹ãå
šãäœæããªã äžè¿°ããããã«ã ãã¡ã€ã³ ãµãŒãã¹ã¯ã€ã³ã¿ãŒãã§ãŒã¹ãšå®è£
ã¯ã©ã¹ãåé¢ãããã®ããšããééã£ãæã蟌ã¿ãããŠããŸã£ããããæè¡çãªèŠçŽ ãã»ãšãã©ãªã ãã¡ã€ã³ ã§ã¯ ãã¡ã€ã³ ãµãŒãã¹ã®åºçªããããŸããã ãããŠæ¬æ¥ã¯ ãã¡ã€ã³ ãµãŒãã¹ãšããŠäœæãã¹ãã¯ã©ã¹ãå¥ã®ã¢ãã«ã§äœæãããšããè¿·èµ°ãå§ããŠããŸããŸãã... ãæ¶è²»çšãèšç®ããããšããäŸã§æžããŠããŸãïŒå®éã¯å¥ã®èšç®ã ã£ãã®ã§ãããããã説æããã®ã¯ãšãŠã倧å€ãªã®ã§æ¥æ¬äººã«ãªãã¿ã®ããæ¶è²»çšèšç®ã«çœ®ãæããŠããŸãïŒã public interface CalculateTaxPolicy { /** * çšèŸŒäŸ¡æ Œãèšç®ãã. * @param priceExcludingTax çšæäŸ¡æ Œ */ BigDecimal priceIncludingTax(BigDecimal priceExcludingTax); /** * æšæºçšçïŒ10%ïŒã§èšç®ãã CalculateTaxPolicy ã®å®è£
ã¯ã©ã¹. */ public class CalculateStandardTaxPolicy implements CalculateTaxPolicy { @Override public BigDecimal priceIncludingTax(BigDecimal priceExcludingTax) { BigDecimal taxRate = BigDecimal.valueOf( 10 ); // æšæºçšçïŒ10%ïŒ BigDecimal coefficient = BigDecimal.valueOf( 100 ).add(taxRate) .scaleByPowerOfTen(- 2 ); BigDecimal priceIncludingTax = priceExcludingTax.multiply(coefficient); priceIncludingTax = priceIncludingTax.setScale( 0 , RoundingMode.HALF_UP); // åæšäºå
¥ãã return priceIncludingTax; } /** * 軜æžçšçïŒ8%ïŒã§èšç®ãã CalculateTaxPolicy ã®å®è£
ã¯ã©ã¹. */ public class CalculateReducedTaxPolicy implements CalculateTaxPolicy { @Override public BigDecimal priceIncludingTax(BigDecimal priceExcludingTax) { BigDecimal taxRate = BigDecimal.valueOf( 8 ); // 軜æžçšçïŒ8%ïŒ // 以éã¯æšæºçšçã®å Žåãšåããªã®ã§çç¥ } ãã®èšèšã«ã€ããŠã®è©äŸ¡ã¯ä»¥äžã§ãã è¯: ãšã³ãã£ãã£ïŒããããçšæäŸ¡æ Œã¯ãååãã®ãããªã¯ã©ã¹ãæã£ãŠããïŒãè² ãã¹ãã§ãªãçšèŸŒäŸ¡æ Œã®èšç®ã®è²¬åãåé¢ã§ããŠãã æª: ãçšèŸŒäŸ¡æ Œã®èšç®ããšããããã»ã¹ãèšè¿°ããŠããã«ãããããã ãã¡ã€ã³ ãµãŒãã¹ã§ã¯ãªãããªã·ãŒãšããŠäœæããŠãã 8%ãš10%ãšãã è€æ°çšç ããããªã·ãŒã䜿ãããšãçºæ³ãããšãããŸã§ã¯ããã£ãã®ã§ãããããã»ã¹ãŸã§ããããªã·ãŒã«èšè¿°ããŠããŸã£ãŠ ãã¡ã€ã³ ãµãŒãã¹ã䜿ããšããçºæ³ã«ã¯è³ããŸããã§ããã ãã£ãš ãã¡ã€ã³ ãµãŒãã¹ã掻çšããããšèãã ãã¡ã€ã³ ãµãŒãã¹ãäœæããæ©äŒããŸã£ãããªããããã§ããã®ãïŒããšçåã«æã£ãããšããã£ããã§ãã çŸæç¹ã§ã® ãã¡ã€ã³ ãµãŒãã¹ã®æãæ¹ã¯åé ã«ãæžãããšããããšã³ãã£ãã£ãè² ãã¹ãã§ãªã ãã¡ã€ã³ ã«ãããããã»ã¹ãèšè¿°ãããã®ãã§ãã ãæ¶è²»çšãèšç®ãããã®èšèšãä»ã§ã¯æ¬¡ã®ãããªèšèšãèããŠããŸãïŒå®éã« ãªãã¡ã¯ã¿ãªã³ã° äºå®ã§ãïŒã public interface TaxPolicy { /** * çšçãè¿ã. */ int rate(); /** * æšæºçšçïŒ10%ïŒãè¿ã TaxPolicy ã®å®è£
ã¯ã©ã¹. */ public class StandardTaxPolicy implements TaxPolicy { @Override public int rate() { return 10 ; } /** * 軜æžçšçïŒ8%ïŒãè¿ã TaxPolicy ã®å®è£
ã¯ã©ã¹. */ public class ReducedTaxPolicy implements TaxPolicy { @Override public int rate() { return 8 ; } public class CalculateTaxService { /** * çšèŸŒäŸ¡æ Œãèšç®ãã. */ public BigDecimal priceIncludingTax(BigDecimal priceExcludingTax, TaxPolicy policy) { BigDecimal taxRate = BigDecimal.valueOf(policy.rate()); BigDecimal coefficient = BigDecimal.valueOf( 100 ).add(taxRate) .scaleByPowerOfTen(- 2 ); BigDecimal priceIncludingTax = priceExcludingTax.multiply(coefficient); priceIncludingTax = priceIncludingTax.setScale( 0 , RoundingMode.HALF_UP); // åæšäºå
¥ãã return priceIncludingTax; } ã¡ãããš ãã¡ã€ã³ ãµãŒãã¹ã掻çšã§ããŠããŸãã ä»åŸããããªæãã§ ãã¡ã€ã³ ãµãŒãã¹ãçµã¿èŸŒãã§èšèšãèããŠããããã§ãã ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã rakus.hubspotpagebuilder.com ã©ã¯ ã¹Developersç»é²ãã©ãŒã https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ âTECH PLAY techplay.jp âconnpass rakus.connpass.com *1 : ãããµãŽãã« ã¢ãŒããã¯ã㣠ã®çšèª
ã¯ããã« ååã«æ
å ±ãè©°ãèŸŒã æç¢ºãªåèªãéžã¶ æ±çšçãªååãé¿ããïŒãããã¯äœ¿ãç¶æ³ãéžã¶ïŒ æœè±¡çãªååãããå
·äœçãªååãäœ¿ã æ¥å°ŸèŸãæ¥é èŸã䜿ã£ãŠæ
å ±ã远å ãã ååã®é·ããæ±ºãã ååã®ãã©ãŒãããã§æ
å ±ãäŒãã å¶åŸ¡ãããŒãèªã¿ããããã ãããã« åè ã¯ããã« ããã«ã¡ã¯ãæ°å2幎ç®ã®nr_1228ã§ãã ããªã¥ãŒã ã®å€§ããå®è£
ã«æºããããã«ãªã£ãŠãéèŠã ãšåèªèããããšããããŸãã ã³ãŒããæžããšãã¯ãä»ã®äºº(æªæ¥ã®èªåãå«ã)ã§ãçè§£ããããããã«æžãã¹ãã èªåãæžããã³ãŒããæ¢åã®ã³ãŒããèªãéã«ããã®å€æ°ã¯äœãå
¥ã£ãŠãã®ã ããïŒãšãªã£ãããšãäœåããããŸããã ããã¯ãã®æ¬ãèªã¿è¿ãã¹ãã§ã¯âŠ ãšããããšã§ãç ä¿®æã«èªãã ããªãŒããã«ã³ãŒãããåã³èªãããšã«ããŸããã ååèªãã æãããå®äœéšãªã©ããããçè§£ã»çŽåŸã§ããéšåãå¢ããŠããŸããã ããã§ä»åã¯ãæ¹ããŠããªãŒããã«ã³ãŒãããèªãã§ãæè¿åŒã£ãããããšã®å€ãã£ã åœå ã®ãã€ã³ã ãš ããžãã¯ã®å çŽå ã«ã€ããŠãŸãšããŠã¿ãããšã«ããŸãã ååã«æ
å ±ãè©°ã蟌ã ã³ãŒããæžããŠãããšååãä»ããªããã°ãªããªãæãå¿
ããããŸãã 颿°ã倿°åãèŠãæç¹ã§ãããã¯äœãããŠãã颿°ãªã®ããäœã®å€æ°ãªã®ãã ãããšãããããã«ããæ¹ããä»ã®äººã«ã芪åã§ãã ååã®ä»ãæ¹ã®ãã€ã³ãã¯ä»¥äžã®6ç¹ã§ãã æç¢ºãªåèªãéžã¶ ãã®é¢æ°ã»å€æ°ãäœã衚ããŠããã®ãæç¢ºã«ããããšããåãããããååãä»ããå¿
é äºé
ã§ãã èªåã®äžã§ããã«åºãŠããåèªã䜿ãã®ãããã§ãããç¶æ³ã«åãããŠåèªãéžã¶ããã«ããŸãããã åèª ä»£æ¿æ¡ send deliver, dispatch, announse, distribute, route find search, extract, locate, recover start launch, create, begin, open make create, set up, build, generate, compose, add, new æ±çšçãªååãé¿ããïŒãããã¯äœ¿ãç¶æ³ãéžã¶ïŒ æ»ãå€ã«ããååãæãã€ããªããã°ã retval ãªã©ãšä»ããããªããŸããã ãæ»ãå€ã§ããããšãã以å€ã®æ
å ±ã¯ãããŸããã æ»ãå€ãšããŠäœãè¿ããŠããã®ããåãããããªååã«ããªããã°ãªããŸããã äŸãã°ãxã®2ä¹ã®åèšãæ»ãå€ãšãããªãã°ã sum_squares ãšãããããªååãä»ããæ¹ã retval ããã倿°ã®ç®çãäŒããããšãã§ããŸãã æœè±¡çãªååãããå
·äœçãªååã䜿ã ServerCanStart ãšããååã®ãä»»æã®ããŒãããµãŒãããªãã¹ã³ã§ããã確èªããã¡ãœããããããšããŸãã ãã®æããã®ååã¯å
·äœçã§åããããããšèšããã§ããããïŒ ãã£ãšå
·äœçãªååã«ãããšã CanListenOnPort ãšããæ¹ããã¡ãœããã®åäœããã®ãŸãŸè¡šãããšãã§ãã ä»è
ã«ãåãããããäŒãããŸãã æ¥å°ŸèŸãæ¥é èŸã䜿ã£ãŠæ
å ±ã远å ãã æéã¯ãã€ãæ°ã®ããã«èšæž¬ã§ãããã®ã§ããã°ã倿°åã«åäœãå
¥ããã®ãè¯ãã§ãã äŸãã°ãç§ãè¿ãã®ãããªç§ãè¿ãã®ããåããã«ããå Žåã¯ã倿°ã« _ms ã远å ããã°æç¢ºã«ãªããŸãã ååã®é·ããæ±ºãã è¯ãååãéžã¶ãšãã«ã¯ãé·ãååãé¿ããŠç°¡æœãªãã®ããšæããã¡ã§ãã é·ãååãé¿ãããš1ã€ã®åèªã ãã®ååã«ãªã£ãŠããŸããŸãã 倿°ã®äœ¿ãæ¹ã«ãã£ãŠéã£ãŠããŸããã以äžãåèã«ãããšããã§ãããã ã¹ã³ãŒããå°ãããã°çãååã§ããã é·ãååãå
¥åããã®ã¯åé¡ã§ã¯ãªã é æåãšçç¥åœ¢ BackEndManager ã BEManager ã«ãããšä»ã®äººå
šå¡ã«äŒããã§ããããïŒçè§£ã§ãããªãåé¡ã¯ãããŸããããå
šå¡ã«äŒãããåãããªããããªçç¥ã®ä»æ¹ã¯ãããæ¹ãããã§ãã ããããevaluationãevalãdocumentãdocãstringãstrã®ããã«çç¥ããã®ã¯çè§£ãã§ããã®ã§åé¡ãããŸããã äžèŠãªåèªãæãæšãŠã ååã«å«ãŸããåèªãåé€ããŠãæ
å ±ãå
šãæãªãããªãããšããããŸãã äŸãã°ã ConvertToString ã ToString ã«ãããã DoServeLoop ã ServeLoop ã«å€ããŠãæç¢ºãã¯å€ãããŸããã ååã®ãã©ãŒãããã§æ
å ±ãäŒãã ã¢ã³ããŒã¹ã³ã¢ã» ããã·ã¥ ã»å€§æåã䜿ã£ãŠãååã«æ
å ±ãè©°ã蟌ãããšãã§ããŸãã ã¯ã©ã¹åã¯ãã£ã¡ã«ã±ãŒã¹ã倿°åã¯ã¢ã³ããŒã¹ã³ã¢ã§åèªãåºåããªã©ã®æ±ºãŸããäœã£ãŠããã°ã æååãèŠãæç¹ã§äœã衚ããŠããã®ããæç¢ºã«ãªããŸãã å¶åŸ¡ãããŒãèªã¿ããããã ã³ãŒãã®å¶åŸ¡ãããŒãèªã¿ãããããããã«ã§ããããšã¯ããã€ããããŸãã æ¯èŒãæžããšãã«ã¯ãå€åããå€ãå·Šã«ãããå®å®ããå€ãå³ã«é
眮ãã if/elseæã®ãããã¯ã¯é©åã«äžŠã³æ¿ãã ãäžè¬çã«ã¯ãè¯å®ç³»ãåçŽã»ç®ç«ã€ãã®ãå
ã«åŠçããã æ·±ããã¹ããé¿ãã ãè€éãªåŠçãæžããŠãããšç¥ããªãéã«ãã¹ããæ·±ããªã£ãŠããŸãããšããããŸãã ããã¹ããæ·±ããªã£ãŠããŸã£ãå Žåã¯ãå¥ã®åŠçã§ã©ãã«ãã§ããªãããªã©ã ãäžæ©äžãã£ãŠå
šäœãèŠãããã«ããã®ããããããããŸããã ãããã« åããŠãã®æ¬ãèªãã æã¯ããŸãã§ããã§ããããšç¹ã«åŒã£ãããããšããªãèªãã§ããŸããã ãããã³ãŒããèªã¿æžãããæ©äŒãå¢ããŠèªã¿çŽããããããããã®ãããã®ããšæããšãããåºãŠããŠãªãã»ã©ãšæããéšåãçµæ§èŠã€ããã®ã§ãã èªåã ãããèŠãªãã³ãŒããªããŸã ãããä»ã®äººãèŠãã³ãŒãã¯èŠããããåããããããéèŠãã å°ãåããã¥ããããžãã¯ã«ãªã£ãŠããŸã£ãã®ãªãããããŠå€æ°ãã³ã¡ã³ããªã©ã§åãããããäŒããããã«ããŠããããšã 倧åã§ãã è¿·ã£ããšãã«ãã®æ¬ãèªã¿çŽããŠã¿ããšãèªåã®ã³ãŒãã®ã©ãã«æ¹åç¹ãããã®ãèŠã€ãããšæããŸãã 宿çã«èªãã§èªåã®ã³ãŒãã確ãããŠã¿ãã®ããããããããŸããã èªåããŸã ãŸã ãªã®ã§ãæ¹åããŠããããšæããŸãã åè ãªãŒããã«ã³ãŒã âããè¯ãã³ãŒããæžãããã®ã·ã³ãã«ã§å®è·µçãªãã¯ãã㯠(Theory in practice) äœè
: Dustin Boswell , Trevor Foucher ãªã©ã€ãªãŒãžã£ãã³ Amazon