ã¯ããã« æè¿ã ãªã©ã€ãªãŒ ããåºçãããŠããããã«ã·ãŒ ããã°ã©ã ããšããæžç±ãèªã¿ãŸããã ãšã³ãžãã¢ç®ç·ã§å¥åº·ã«ã€ããŠæžãããŠããã®ã§ãããé¢çœãå
容ã ã£ãã®ã§ç޹ä»ããŠã¿ãããšæããŸãã www.oreilly.co.jp ã¯ããã« æŠèŠ ãªãèªãããšæã£ãã®ãïŒ é¢çœããšæã£ããã€ã³ã ãŸãšã æŠèŠ é·æé座ã£ããŸãŸä»äºãç¶ãã ããã°ã©ã ã®æ©ã¿ã§ãããè
°çãæéŠã®çã¿ãç®ã®çã¿ãé çãšãã£ãå¥åº·åé¡ã«å¯ŸããŠãé£ç掻ãçæŽ»ç¿æ
£ãæ¹åããæ¹æ³ãç°¡åãªãšã¯ãµãµã€ãºã玹ä»ããŠãããšã³ãžãã¢åãã®æžç±ã«ãªããŸãã ãªãèªãããšæã£ãã®ãïŒ é£äŒã®éã«æè¡æžã1åã¯èªãããšæã£ãŠãã æ¬å±ãžæ¢ãã«è¡ã£ããšãã«æè¡æžã®ã³ãŒããŒã§ããŸããŸèŠã€ããããã§ãã é¢çœããã ãšæã£ãã®ã§è³Œå
¥ããŠã¿ãŸããã æè¿ãå¥åº·æèãé«ããªã®ã§å°ãèªãã§ã¿ãŠé¢çœãã£ãã èªçããå§ããŠ3幎ç®ã«çªå
¥ããæ®æ®µããé£ç¿æ
£ã«ã¯æ°ãã€ãã£ãŠããŸãã åºãæµ
ã調ã¹ããããŠããŸãããããå°ãç¥èãæ¬²ãããšæã£ãŠããŸããã å¥åº·ãæ é€åŠã«èå³ãããããšã倧ããçç±ã§ãã é¢çœããšæã£ããã€ã³ã ãšã³ãžãã¢ã«ãŠã±ãããªè¡šçŸãå€ããŠãããããã å¥åº·ç¶æ
ãæ¹åããããšã ãªãã¡ã¯ã¿ãªã³ã° ãšè¡šçŸãããŠãã ã¢ãžã£ã€ã« ãªæ¹æ³è«ã§æžãããŠãã ãäœéèšã¯ãµãŒãã®ã¡ã¢ãªãã¢ãã¿ãªã³ã°ããã®ãšåãããã«ãå¥åº·ãã¢ãã¿ãªã³ã°ããããã®ããŒã«ã 説æãç§åŠçã§ããããš åŠäŒèªããåŒçšãããŠããããæ°å€ãªã©ã«ããç§åŠçãªè£ä»ãã®ãã説æã«ãªã£ãŠããã®ã§èª¬åŸåããããŸããã ããã°ã©ã èŠç¹ã§æžãããŠããããšããããããžã«ã«ãªå
容ã§ããã é çãçŒç²Ÿ ç²åŽ ãè
°çãæéŠçãžã®å¯Ÿç ããããããã¹ã¯ã¯ãŒã¯ã«ãã£ãŠåŒãèµ·ããããåå ãç§åŠçã«æžãããŠããŠããã®å¯Ÿçãããšã¯ãµãµã€ãºã«ã€ããŠæžãããŠããŸãã çŒç²Ÿ ç²åŽ ãããã«ããé çã¯ç¹ã«æ©ã¿ãªã®ã§ã以äžã®ãããªå¯ŸçãæèããŠãã£ãŠã¿ããããªãšæããŸããã ãé çã¯ç掻ãè
ããã»ã©ã®ãã®ã§ãªããŠããçç£æ§ãäžããŠããŸãããšæžãããŠããŸãããããã®ãšããã ãšæããŸãã ããŸãã«ç¬ããã ç®ã®éåããã(20åã«1åã6ã¡ãŒãã«å
ã20ç§èŠã€ãã) äŒæ©ãé »ç¹ã«åã(ç®ãäŒããããäŒæ©ãå¢ãã) ã¡ã¬ããå€ã(æå€ãšå€§äºïŒ) ã«ãã§ã€ã³ã¯æããããªã(é çãèªçºãããäžæçã«è§£æ¶ãã广ãããã®ã§æ³šæ) æ°Žã飲ã(1æ¥ïŒãªããã«) ãŸãšã å¥åº·ã«ã¯æ°ãã€ããããã©ãäœããããè¯ããããããªããšã³ãžãã¢ã«ã¯è¯ãæžç±ãªã®ã§ã¯ãªãããšæããŸããã æ°å3幎ç®ã«ãªããå¥åº·ã§ããããšã¯èªåã®ããã©ãŒãã³ã¹ã«ç¹ãã£ãŠãããªãšæ¥ã
æããŠããŸãã éåããªããšãããªããªãŒãšããæ°æã¡ã«ãªããçæŽ»ç¿æ
£ãæ¹åããããšãããã£ããã«ã¯ãªã£ããšæããŸãã ã¡ããã©å¥åº·èšºæã®ã·ãŒãºã³ã§ãããã®ã§ã ãªãã¡ã¯ã¿ãªã³ã° ãå§ãããã£ããã®åèã«ãªãã°å¹žãã§ãã
ã¯ããã« GAS(Google Apps Script)ãšã¯ ä»åããããš GASã®å®è¡çµæãæžã蟌ãSpreadSheetã®äœæ GASã®äœæ POSTããèšå® è£è¶³ïŒæ¿èªãæ±ããããã curlããPOSTãã ãããã« ã¯ããã« kuwa_38ã§ãããã®èšäºã§ã¯ Google Apple ScriptãšããŠäœæãã ã¹ã¯ãªãã ã curl ã³ãã³ãããå®è¡ããæ¹æ³ã玹ä»ããŸãã GAS( Google Apps Script)ãšã¯ 以åãã®ããã°ã§æžãããŠããèšäºã®äžã«åããããã説æããã£ãã®ã§åŒçšããŸãã ã Google ã®åçš®ã¢ããª( Google ã¹ãã¬ããã·ãŒã / Google ããã¥ã¡ã³ããªã©)ãã¢ããªå
ã§ã¯ãªãå€ããæäœã§ããJSã©ã€ã¯ãª ããã°ã©ãã³ã°èšèª ãã§ãã ãšã¯ã»ã«ã«å¯Ÿãã VBA ã®é¢ä¿ãšäžç·ã§ãã tech-blog.rakus.co.jp äžã®èšäºã¯å
¥éãšã㊠ã¹ã¯ãªãã ãšãã£ã¿äžããäœæãã ã¹ã¯ãªãã ãå®è¡ããŠããŸããæ¬èšäºã§ã¯ ã¹ã¯ãªãã ãšãã£ã¿äžããã§ãªããå€éš( curl ã³ãã³ã)ããå®è¡ããæ¹æ³ã®ç޹ä»ãšãªããŸãã ä»åããããš curl ã³ãã³ãããGASãå®è¡ããããã®å€§ãŸããªæé ã¯ä»¥äžã§ãã GASã®å®è¡çµæãæžã蟌ãSpreadSheetã®äœæ GASã®äœæ POSTããèšå® curl ããPOSTãã GASã®å®è¡çµæãæžã蟌ãSpreadSheetã®äœæ ä»åã¯ä»¥äžã®ãããªã·ãŒããäœæããæç©(fruit)ãšå€æ®µ(price)ãæ«å°Ÿã«è¿œèšããŸãã æžã蟌ãSpreadSheet GASã®äœæ 以äžã ã¹ã¯ãªãã ãšãã£ã¿ã«èšèŒããŸãã /** * POSTãããæã«å®è¡ãããã¡ãœãã. * è¡ã®æåŸã«åãåã£ãå€ãæ¿å
¥ãã * @param e äžèšã®JSONãæ³å® * fruit:ãã«ãŒãå * price:äŸ¡æ Œ * @return ãªã */ function doPost(e) { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName( 'ã·ãŒãå' ); var PostData = JSON.parse(e.postData.contents); // è¡ã®æåŸã«å€ã远å sheet.appendRow( [ PostData.fruit, PostData.price ] ); } åèïŒ qiita.com POSTããèšå® POSTããåã«äœæãã ã¹ã¯ãªãã ã«ã¢ã¯ã»ã¹ã§ããããã«èšå®ããŸãã å
¬é > ãŠã§ãã¢ããªã±ãŒã·ã§ã³ ãšããŠå°å
¥ ã¹ã¯ãªãã èš±å¯1 次ã®ãŠãŒã¶ãšããŠã¢ããªã±ãŒã·ã§ã³ãå®è¡ïŒèªå ã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ã§ãããŠãŒã¶ïŒå
šå¡(å¿åãŠãŒã¶ãå«ã) ã¹ã¯ãªãã èš±å¯2 æŽæ°ãã¿ã³ãæŒããšãæ¥ç¶ããããã®URLãäœæãããŸã curl ã§æ¥ç¶ããéã«äœ¿çšããã®ã§ã³ããŒããŠãããšè¯ãã§ã ã¹ã¯ãªãã èš±å¯3 åèïŒ yamap55.hatenablog.com è£è¶³ïŒæ¿èªãæ±ããããã æ¿èªãæ±ããããå Žåã¯äžèšãåèã«æ¿èªããŠãã ããã tonari-it.com curl ããPOSTãã 以äžã® curl ãå®è¡ããPOSTããŸãã curl -X POST -H "Content-Type: application/json" -d '{"fruit":"peach", "price":"650" }' -L https://script.google.com/macros/s/xxxx/exec ã¹ã¯ãªãã å®è¡çµæ ãããã« ãã®èšäºã§ã¯ curl ã³ãã³ãã䜿ã£ãŠPOSTããGAS( Google Apple Script)ãå®è¡ããæ¹æ³ã玹ä»ããŸãããä»å㯠curl ã³ãã³ããçŽæã¡ã§ããããèªäœã¢ããªãªã©ããPOSTããä»çµã¿ã«ããŠããã°ãSpreadSheetãžã®æäœãããæè»œã«ã§ããããã«ãªãããšæããŸãïŒäœãäœããããªãšææ¡äžïŒã æ°ã«ãªã£ãæ¹ã¯ãã²è©ŠããŠã¿ãŠãã ããã ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã 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
ããã«ã¡ã @kawanamiyuu ã§ããæ¥é±æ«ã«éå¬ããããæ¥æ¬æå€§ã® Java ã³ãã¥ããã£ã€ãã³ã JJUG CCC 2019 Spring ã« ã©ã¯ ã¹ã®ãšã³ãžãã¢ã 2 åç»å£ããŸãã®ã§ãç¥ããããŸãã ã€ãã³ãæŠèŠ æ¥æïŒ2019 幎 5 æ 18 æ¥ (å) äŒå ŽïŒ ãã«ãµãŒã« æ°å®¿ã°ã©ã³ãã³ã³ãã¡ã¬ã³ã¹ã»ã³ã¿ãŒ å
¬åŒ HPïŒ http://www.java-users.jp/ccc2019spring/ ããã·ã¥ã¿ã° ïŒ #jjug_ccc www.java-users.jp goo.gl ç»å£ã»ãã·ã§ã³ ã»ãã·ã§ã³äžèЧã¯ã³ãã©ãâã http://www.java-users.jp/ccc2019spring/#/sessions ïŒïŒå£²ããŠã SaaS ãžã®ãªããžã§ã¯ãã¹ãã¬ãŒãžå°å
¥ã«ãŸã€ããæ³¥èã話 ç»å£è
ïŒè¥¿è§ç¥äœ³ïŒæ±äº¬æ ç¹ãšã³ãžãã¢ïŒ ã»ãã·ã§ã³è©³çް ïŒæŠèŠïŒ ãæ¥œæ¥œç²Ÿç®ã ã¯æ ªåŒäŒç€Ÿ ã©ã¯ ã¹ãæäŸããçµè²»ç²Ÿç® ã¯ã©ãŠã ãµãŒãã¹ã§ããåžå Žã®æé·ã åãæ¹æ¹é© ãšãã£ãç€ŸäŒæ
å¢ãšãšãã«ãµãŒãã¹ãæé·ãç¶ããŠããŸãããã®äžæ¹ã§ã売ããŠãããµãŒãã¹ã§ãããããã«èç©ããæè¡çè² åµãããžãã¹ã®ã¹ã±ãŒã«ã«äŒŽãéçšèª²é¡ããŸãæ±ããŠããŸãã ãã®èª²é¡ã®ïŒã€ãšããŠãå¢ãç¶ãã顧客ããŒã¿ã®ããã¯ã¢ããè¥å€§åããã³ããã¯ã¢ããæéå¢å€§ãšãã課é¡ãæ·±å»åããŠããŸããããªãªãŒã¹ã¡ã³ããã³ã¹æéãžã®åœ±é¿ãç¡èŠã§ããªããªã£ãŠããããšããã Amazon S3 ...ã§ã¯ãªãã Amazon S3 äºæã®ãã©ã€ããŒããªããžã§ã¯ãã¹ãã¬ãŒãžãžã®ããŒã¿ç§»è¡ã«èžã¿åããŸããã ãªããžã§ã¯ãã¹ãã¬ãŒãžå°å
¥ã«ãããã©ã®ããã«æè¡éžæãããã©ã®ããã«å€§åãªé¡§å®¢ããŒã¿ãå®å
šç¢ºå®ã«ç§»è¡ããã®ãããŸãããªãªãŒã¹åŸã«çºçããåé¡ã«ã©ã®ããã«å¯ŸåŠããã®ãããµãŒãã¹ããŒã³ããã10幎ãçµéãããªã³ãã¬ãã¹ãæ Java ãã¬ãŒã ã¯ãŒã¯ ãšæ±ºããŠä»ããšãããæè¡ã¹ã¿ãã¯ã§æ§æããããµãŒãã¹ã§ã¯ãªã楜楜粟ç®ã«ãšã£ãŠã®æè¡çãªãã£ã¬ã³ãžã«ã€ããŠãæé·ãç¶ãããµãŒãã¹ãå¿
ãéãããã§ãããçŸå®çã§æ³¥èãã話ãå
·äœçã«çºè¡šããŸãã ç¿é±ã«éå¬äºå®ã® RAKUS Meetup Tokyo #3 ã®ãªãŒãã»ãã·ã§ã³ã JJUG CCC 2019 Spring ãšããç¹å¥ãªå Žæããã²ãšè¶³æ©ããå±ãããŸãã ïŒïŒArchUnit ã§ Java / Kotlin ã¢ããªã±ãŒã·ã§ã³ã® ã¢ãŒããã¯ã㣠ã CI ãã ç»å£è
ïŒãããªã¿ããïŒå€§éªæ ç¹ãšã³ãžãã¢ïŒ ã»ãã·ã§ã³è©³çް ïŒæŠèŠïŒ ArchUnit ãšã¯äžèšã§ãããšã Java / Kotlin ã¢ããªã±ãŒã·ã§ã³ã®ããã±ãŒãžãã¯ã©ã¹ã®äŸåé¢ä¿ããã¢ããªã±ãŒã·ã§ã³åºæã®å®è£
ã«ãŒã«ã JUnit ã®ãã¹ãã³ãŒãããŠè¡šçŸããã¹ãã§ãããã¹ã ãã¬ãŒã ã¯ãŒã¯ ã§ãã æã
ã«ãšã£ãŠ ArchUnit ã¯ãªã«ãå¬ããã®ããArchUnit ã§ã§ããããšã¯äººéã«ããã³ãŒãã¬ãã¥ãŒãéçè§£æã«ãã£ãŠããã§ãã¯ã§ãããã«æããŸãã ãã®çºè¡šã§ã¯ãå®éã«ç§ãã¡ã®ãããã¯ãã® CI ã«çµã¿èŸŒãŸããŠãããã¹ãã³ãŒãã®å®äŸãšåãããŠãã¢ãŒããã¯ãã®èгç¹ãéçºããŒã ã®èгç¹ãã ArchUnit ã®ãŠã¬ã·ã¿ã«ã€ããŠã話ããŸãã æåŸã« ä»åã ã©ã¯ ã¹ãšããŠåã㊠Java ã®ã€ãã³ããžã®ç»å£ã§ãããããŠãæ±äº¬æ ç¹ãšã³ãžãã¢ããã®ç€Ÿå€ã€ãã³ãç»å£ãåã§ããä»å¹ŽåºŠã ã©ã¯ ã¹ã¯ã€ãã³ãç»å£ãžã®åãçµã¿ãæŽã«å éãããŠãããŸãã æåŸã«ãªããŸããããåœæ¥ãã»ãã·ã§ã³ã§ãäŒãã§ããã®ã楜ãã¿ã«ããŠããŸãïŒ
id:radiocat ã§ãã倧éªã§ãšã³ãžãã¢ããããå匷äŒã®éå¶ãããŠããŸãã什åãç¶ç¶ããŠéå¬ããŸãã®ã§ãã²ãåå ãã ããã rakus.connpass.com åéå¬ããäºæ³ããå€ãã®æ¹ã
ã«åå ããŠé ããä»åã¯ãããããããšã«æ©ããå®å¡ã«éããŠããŸããŸããã®ã§å¢æ ããŠããŸããæ§ã
ãªãšã³ãžãã¢ã®æ¹ã«ãäŒãã§ããŠãäžç·ã«åå ããåŒç€Ÿã®ç€Ÿå¡ã楜ããŸããŠé ããŠããŸãã 4æã®ã¬ããŒã å¹³ææåŸã®ãšã³ãžãã¢ããããå匷äŒã®æ§åãå°ãã ãã玹ä»ããŸãã åå é ããæ¹ã
ã¯ã芧ã®ãããªããŒãã§èªç¿ãããŠããããã§ãã ä»ç®ã®å
容ã¯èªå·±ç޹ä»ãå
ŒããŠç°¡åã«å
±æããŠé ãããã«ããŠããŸãã PHP é¢ä¿ã®ããŒããæ¯èŒçå€ãã£ãå°è±¡ã§ãåå è
åå£«ã®æ
å ±äº€æãªã©ãè¡ãããŠããŸãããä»ã«ã Rails ãJSã Java ãæ±ãå
容ããã£ãŠãèªåã®å¥œããªããŒãã§èªç±ã«åãçµãã§é ãããšãã§ããŸãã ãšã³ãžãã¢çµæŽãããèãããéãæ§ã
ã§ãè¥æããããã©ã³ããããŠåŠçã®ãããåå ãããŠããŸããåŒç€Ÿã®éå¶ã次åããè¥æã¡ã³ããŒã«ãæäŒã£ãŠãããäºå®ã§ãå¹
åºããµããŒãããŠãããã°ãšæããŸãã çµæ¥åŸã®å°è
¹ã空ãæé垯ã§ãã®ã§ãçãäžã®ããŒãã«ã§ãèåããèªç±ã«ãåãé ããããã«ãªã£ãŠããŸããæ°è»œã«ç«ã¡å¯ããŠããšã³ãžãã¢ã楜ãããå Žã¥ãããç®æããŠããŸããäžç·ã«æ¥œããã§é ãããšã³ãžãã¢ã®çæ§ã®ãåå ããåŸ
ã¡ããŠãããŸãã
ã¯ããã« ããã«ã¡ã¯ã什åæåã®èšäºã¯ sts -250rrãããå±ãããŸãã ç§ããšã§ããããããžã§ã¯ããå€ãã5æãã ã¢ãžã£ã€ã« éçºãè¡ãããšã«ãªããŸããã ã¢ãžã£ã€ã« éçºã®äžã§ã ã¹ã¯ã©ã ããããšã®ããšã ã£ãã®ã§ãGWã®æéãå©çšããŠãSCRUM BOOT CAMP ã®æ¬ãèªãã§ã¿ãŸããã ä»åã¯èªèº«ã®é ã®äžã®æŽçãèšäºã«æ®ããŠããããšæããŸãã å®éã«ãã£ãŠã¿ãã®ã¯ããããã«ãªããŸãã®ã§ãééããããããšæããŸããã容赊ãã ããã ã¯ããã« ã¢ãžã£ã€ã«éçºãšã¯ ã¹ã¯ã©ã ãšã¯ïŒ ã¹ã¯ã©ã ã®ç¹åŸŽ ã¹ã¯ã©ã ã®å
šäœå ã¹ã¯ã©ã ã§ã®éçºããŒã ã®åœ¹å² éçºããŒã ã®é²ãæ¹ ã¹ããªã³ãã®é²ãæ¹ ãªãªãŒã¹å€æå¯èœ ã¹ããªã³ãã¬ãã¥ãŒ ã¹ããªã³ãã¬ããã¹ãã¯ãã£ãïŒæ¯ãè¿ãïŒ çµããã« åè ã¢ãžã£ã€ã« éçºãšã¯ ã¢ãžã£ã€ã« éçºã§ã¯ããäºåã«ãã¹ãŠãæ£ç¢ºã«äºæž¬ããèšç»ããããšã¯ã§ããªãããšããåæã®ããšä»¥äžã®ãããªé²ãæ¹ãè¡ããŸãã é¢ä¿è
ã¯ç®çéæã®ããã«ãäºãã«ååããããªããé²ãã å©çšè
ã®åå¿ãé¢ä¿è
ããã®ãã£ãŒãããã¯ãç¶ç¶çã«åŸãªãããèšç»ã調æŽããã äžåºŠã«ãŸãšããŠã§ã¯ãªããå°ããã€ãããããããŠå®éã«åºæ¥äžãã£ããã®ãæ±ããŠãããã®ã§ããããé »ç¹ã«ç¢ºèªããã ã¢ãžã£ã€ã« ã§ã¯ããããã®å
šäœåã¯æããã«ããäžã§ãéèŠãªãã®ããªã¹ã¯ã®é«ããã®ãåªå
ããéèŠåºŠã®äœããã®ã¯åŸã«åãããšã§ãèŠæ±ã®åæãèšèšã«å¯ŸããŠå¿
èŠä»¥äžã®æéããããªãããšã§éçºã¹ããŒããäžããŠããææ³ã§ãã ãŠãŒã¶ãæ±ããŠãããã®ãçŽ æ©ãæäŸãããããªãµãŒãã¹ã«åããŠããææ³ããšæããŸãã ã¹ã¯ã©ã ãšã¯ïŒ ã¹ã¯ã©ã 㯠ã¢ãžã£ã€ã« éçºã®äžã®ææ³ã®1ã€ã§ãé¢ä¿è
ã®é²ãæ¹åãåžžã«èª¿æŽããªããç®çãéæããããã äœæ¥ãäŒè°ãææç©ãå®ãã ææ³ã§ãã ãããŸã§ä»äºã®é²ãæ¹ã«ãã©ãŒã«ã¹ããããã®ã§ããããã现ããªã«ãŒã«ïŒã³ãŒãã£ã³ã°èŠçŽããã¹ãã®æ¹æ³ãªã©ïŒã¯èªåãã¡ã§æ±ºããå¿
èŠããããŸãã æžç±ã«èšèŒã® ã¹ã¯ã©ã ã®ç¹åŸŽãèšèŒããŸãã ã¹ã¯ã©ã ã®ç¹åŸŽ èŠæ±ãåžžã«é çªã«äžŠã³æ¿ãããã®é ã«ãããã¯ããäœãããšã§ææãæå€§åãã å®çŸãããããšã®äŸ¡å€ããªã¹ã¯ãå¿
èŠæ§ãåºæºã«ãã åºå®ã®çãæéã«åºåã£ãŠäœæ¥ãé²ãã çŸæç¹ã®é²æãåé¡ç¹ãåžžã«æããã«ãã 宿çã«ä»é²ããŠãããã®ãæ£ããã®ããé²ãæ¹ã«èª€ãã¯ãªãã®ãã®ç¢ºèªãè¡ã é²ãæ¹ã«åé¡ããã£ããããã£ãšè¯ãæ¹æ³ããã£ãå Žåã«ã¯ããæ¹ã倿Žãã ã¹ã¯ã©ã ã®å
šäœå SCRUM BOOT CAMP ã®èè
ã§ããã @ryuzee ããã®å³ãèŠãŠããã ãã®ãè¯ãããšæããŸãã www.ryuzee.com ãã®å³ãèŠãŠæããããšã¯ã1ã¹ããªã³ãã§ãããã¯ããªãŒããŒã®ã¬ãã¥ãŒãåããå¿
èŠããããããã©ã®çšåºŠã®äœæ¥ãã§ããã®ããããææ¡ããŠãããªããã°ãªããªããšããç¹ã§ãã ãããªã£ãŠãããšã1ã¹ããªã³ãã®ãªãã§ã©ããŸã§ã®ããšãã§ããããæ±ºããã¹ããªã³ããã©ã³ãã³ã°ããä»ã©ããŸã§ã§ããŠãããã確èªãããã€ãªãŒ ã¹ã¯ã©ã ãéèŠã«ãªã£ãŠããããšãããªãããŸãã ã¹ã¯ã©ã ã§ã®éçºããŒã ã®åœ¹å² ç§ã¯éçºããŒã ãšã㊠ã¹ã¯ã©ã ã«é¢ããããšã«ãªãã®ã§ãéçºããŒã ã®åœ¹å²ãæãäžããŠãããŸãã éçºããŒã ã®åœ¹å²ã¯ä»¥äžã®ç¹ã§ãã ãªãªãŒã¹å€æãã§ãããããã¯ããäœã 6åïŒÂ±3åïŒã§æ§æãã å
šå¡æãã°ãããã¯ããäœãã äžäžé¢ä¿ã¯ãªã ãŸããéçºããŒã ã¯èŠæ±ã®åæã»èšèšã»ã³ãŒãã£ã³ã°ã»ãµãŒãã®æ§ç¯ã»ããã¥ã¡ã³ãã®äœæãšãã£ã ã·ã¹ãã éçº ã«å¿
èŠãªããšãå
šãŠã§ããå¿
èŠããããŸãã ããã¯åäœæ¥ã«å人ãå²ãåœãŠããšãããã®ã§ã¯ãªããå人ãè€æ°ã®ããšãã§ããããã«ãªããšããããšã§ãã éçºããŒã ã®é²ãæ¹ éçºããŒã ã¯ãããã¯ãã®äœã£ãŠããããã«ã¹ããªã³ããé²ããŠããããã§ããã1ã¹ããªã³ãã§ã©ããŸã§äœæ¥ãè¡ãã®ããæ±ºãã ã¹ããªã³ããã©ã³ãã³ã° ã宿œããŸãã ã¹ããªã³ããã©ã³ãã³ã°ã¯ããããã¯ããªãŒããŒãå«ããŠäœã欲ããã®ããéçºããŒã ã§ã¯ã©ããŸã§ã§ããã®ããããåããã第ïŒéšã 第ïŒéšã§æ±ºãŸã£ãããšãã©ã®ããã«å®çŸããã®ããéçºããŒã å
ã§ããåããã第ïŒéšã§æ§æãããŠããŸãã ããã§æ±ºå®ããããšã ã¹ããªã³ã ããã¯ãã° ãšãã圢ã§ã¿ã¹ã¯ã®äžèЧãçšæããã¹ããªã³ãã®äžã§å®æœããŠãããŸãã ã¹ããªã³ãã®é²ãæ¹ ã¹ããªã³ããè¡ãªã£ãŠããäžã§ã®ãã€ã³ãã§ãããéçºããŒã ã¯ã¹ããªã³ããã©ã³ãã³ã°ã®äžã§åæããå
容ãéæããããšã«å
šåãå°œããå¿
èŠããããŸãããå
šãŠãå®äºããããšãçŽæãããã®ã§ã¯ãªããšããããšã§ãã å
šãŠãå®äºããããšãç®çã«äœæ¥ãããŠããŸããšãäžæž¬ã®äºæ
ãçºçããããå¿
èŠãªäœæ¥ãé£ã°ããŠããŸã£ãããšãã£ãåé¡ãçºçãããæ¬åœã«æ¬²ãããã®ããäœããªãå¯èœæ§ãããããã§ãã ãã®å Žåã¯ãããã¯ããªãŒããŒãšçžè«ãããããã¯ã ããã¯ãã° ã®ãªã¹ããèŠçŽãããããããšã§èšç»ã調æŽããŸãã ãªãªãŒã¹å€æå¯èœ ã¹ããªã³ããçµãã£ãåŸã«ã¯ ãªãªãŒã¹å€æå¯èœãªãããã¯ã ãã§ããŠããããšãæ±ããããŸãã ãªãªãŒã¹å€æå¯èœãšãããã®ãã©ã®ãããªç¶æ
ãæããã®ã§ãããã瀺ãããã« å®äºã®å®çŸ© ãæç¢ºã«ããŠãããŸãã ã¹ããªã³ãã¬ãã¥ãŒ ã¹ããªã³ãã®æåŸã«ãããã¯ããªãŒããŒãã¹ããªã³ãã®ææç©ã確èªããæ©äŒã§ãã ããã§ å®éã«åããã® ããããã¯ããªãŒããŒã確èªãããããã¯ã ããã¯ãã° ã§ãããŠããé
ç®éãã®ãã®ã§ããã°äœæ¥å®äºãšãªããŸãã æ³å®éãã®ãã®ã§ãªãã£ãå Žåã«ã¯ã次åã®ã¹ããªã³ãã«å«ããªã©ã®åœ¢ã§ãããã¯ã ããã¯ãã° ã«æ»ããŸãã ã¹ããªã³ãã¬ããã¹ãã¯ãã£ãïŒæ¯ãè¿ãïŒ ã¹ããªã³ãã¬ãã¥ãŒãçµãããšãä»åã®ã¹ããªã³ãã®æ¯ãè¿ããè¡ããŸããããŸããã£ãããšããããªãã£ãç¹ãæŽãåºããŠä»åŸã®ã¹ããªã³ãã«çãããŠãããŸãã ã¹ããªã³ãã¬ããã¹ãã¯ãã£ããŸã§å®äºããŠ1ã¹ããªã³ããšãªãããããã¯ãã®å®æãŸã§ç¹°ãè¿ããŠããããšã«ãªããŸãã çµããã« ãããŸã§æ·¡ã
ãš ã¹ã¯ã©ã ã«ã€ããŠæžããŠããŸããããæåŸã«ææãè¿°ã¹ãŠçµãããããšæããŸãã éçºããŒã ã®åœ¹å²ã§ãå
šå¡æãã°ãããã¯ããäœããããšãããã®ããããŸããããå®é å
šå¡ãæã ããšã¯ä¿èšŒã§ããªãã§ããã ããããŒããŒãœã³ãããªããšäœæ¥ãé²ãŸãªããããªç¶æ³ã¯ãå±äººåãã®å
žåã§ãããæãŸãããã®ã§ã¯ãªãã§ãã ãã®ãããªç¶æ³ãæ¹åããŠããããã« å人ãè€æ°ã®ããšãã§ããããã«ãªã å¿
èŠããããšèšããŸãã ãã®éã®ãããã§ãã·ã§ãã«ã§ããããšããã¡ããéèŠãªããšã§ããã ã¹ã¯ã©ã ã§ã¯å¹
åºãç¥èãæã£ãäžã§åå ããå¿
èŠãããããã§ãã ãŸããä»åŠç¿ããéšåã§ã¯ ã¹ã¯ã©ã ã®äžã«ã¯ãéçšã»ä¿å®ããšãã£ã芳ç¹ã¯é€ãããŠããããã«æããŸããã ã çæéã§ãªãªãŒã¹ãããå¯èœæ§ã®ãã ã¢ãžã£ã€ã« éçºã«ãããŠãéçšã»ä¿å®ãã«äžãã圱é¿ã¯å°ãããã®ã§ã¯ãªããšèããŸãã ãã®ãããªç¹ã解決ããèãæ¹ãšã㊠DevOps ãçãŸããŠããŠãããããªã®ã§ãDevOpsã®èŠç¹ãèæ
®ããŠéçºãé²ããŠããå¿
èŠãããããã§ãã ãã ãããŸã ç§ã¯ ã¹ã¯ã©ã ãäœéšããŠããŸããã®ã§ééã£ãããšãå€ã
èšèŒããŠããããšæããŸãã å®éã® ã¹ã¯ã©ã ã¯ãããããã£ãŠããããšã«ãªããŸãã®ã§ã次åã¯å®äœéšããåŸããããã®ãã玹ä»ããããšæããŸãã åè SCRUM BOOT CAMP THE BOOK スクラムの概要を1分で理解できるイラスト【2018版】 | Ryuzee.com
ã¯ããã« ããã«ã¡ã¯ãæè¿ iPhoneã¢ã㪠éçºã®ãã Mac ã«æãåºãå§ãã @rs_tukki ã§ãã ååã®èšäºã§ãæžããŸãããããšã³ãžãã¢ã¯åŠã³ç¶ããããšã倧åã§ãã ã©ã¯ ã¹ã§ãTechããã°ãéããã¢ãŠãããããæšå¥šããŠããã å¹Žéœ¢ãæ ç¹ã«é¢ä¿ãªãã ã©ã¯ ã¹ã«æå±ããå
šãŠã®ãšã³ãžãã¢ã®æ¹ã«èšäºãæžããŠããã£ãŠããŸãã tech-blog.rakus.co.jp ãããŠãã¢ãŠãããããæšå¥šãããã£ã³ããŒã³ã®äžç°ãšããŠå
æ¥ãããã°ã®å¹Žé衚地åŒã宿œããŸããïŒ è¡šåœ°åŒã®æ§å 2018幎4æ1æ¥ãã2019幎3æ31æ¥ãŸã§ã«èšäºãæçš¿ãããå
šãŠã®æ¹ã察象ã«ã å€ãã®èšäºãæçš¿ããæ¹ æçš¿ããèšäºã®ã¢ã¯ã»ã¹ç·æ°ãå€ãæ¹ èšäºã®æçš¿ããäžé±éã®ãã¡ã«å€ãã®ã¢ã¯ã»ã¹ãç²åŸããæ¹ ãã®ä»ãããã°ã®æŽ»åã«è²¢ç®ãããæ¹ ã衚地ããŸãã åè³è
ã«ã¯è¡šåœ°çŸã®ã»ãã Kindle ãªã©è±ªè¯å¯è³ãéãããŸããã æè³ããèšäºãã«ããŽãªã¯ãã¡ãã 終わらないスクラム カテゴリーの記事一覧 - RAKUS Developers Blog | ラクス エンジニアブログ 5分で理解する!Google Apps Script超入門 - RAKUS Developers Blog | ラクス エンジニアブログ マイクロサービスアーキテクチャにおけるサービス分割の難しさ - RAKUS Developers Blog | ラクス エンジニアブログ 【図多め】APIを使ってGoogleサービスを操る - RAKUS Developers Blog | ラクス エンジニアブログ Android Studioで天気情報を表示するアプリを作ってみた - RAKUS Developers Blog | ラクス エンジニアブログ ã©ã¯ ã¹ã§ã¯ä»åŸããšã³ãžãã¢å
šäœã§åŠã³ãçºä¿¡ããŠãããŸãã®ã§ãä»åŸãšããããããé¡ãããããŸãïŒ ããŸã 衚地åŒã«åå ãããæ¹ã«ã¯ããã®ãããªåå è³ããé
ãããããŸãã(ç¬)
äžå°äŒæ¥ã®æ¥åå¹çåã«è²¢ç®ããè€æ°ã® ã¯ã©ãŠã ãµãŒãã¹ãæäŸãããæ ªåŒäŒç€Ÿ ã©ã¯ ã¹ãã§ããæ±äº¬ã§ã®3åç®ã®éå¬ãšãªã Meetup ã€ãã³ã RAKUS Meetup #3 ã 5/21(ç«) ã©ã¯ ã¹æ¬ç€ŸïŒ æ°å®¿ã«ãŠéå¬ããŸãã ä»åã®ããŒã ã Amazon S3 äºæã¹ãã¬ãŒãžãšã³ãžã³ã®å°å
¥äºäŸç޹ä»ãã§ãã Amazon S3 ã¯ã»ãŒç¡å¶éã«ã¹ã±ãŒã«ããã¹ãã¬ãŒãžãµãŒãã¹ãšããŠåºã䜿ãããŠãããšæããŸããã ã»ãã¥ãªãã£äžã®éœå ã¯ã©ã€ã¢ã³ããšã®å¥çŽå
容 ãªã©ã®çç±ã§ ã¯ã©ãŠã ãµãŒãã¹ã§ãã Amazon S3 ãå©çšã§ããªãã±ãŒã¹ãå€ã
ãããŸãã ãããªå Žåã«èªåã§ãªããžã§ã¯ãã¹ãã¬ãŒãžãæ§ç¯ãããšããéžæãããããšæããŸãã èªåã§ãªããžã§ã¯ãã¹ãã¬ãŒãžãæ§ç¯ããéã«ã¯ MinIO 瀟㮠minio ã ãšãã ã¯ã©ãŠãã£ã¢ã³ç€Ÿ ã® Cloudian Hyperstore ãªã©ã®ãããã¯ãããããŸãããä»ååŒç€ŸãµãŒãã¹ã® æ¥œæ¥œç²Ÿç® ã«ãŠæ¡çšãããã¯ã©ãŠãã£ã¢ã³ç€Ÿã® Cloudian Hyperstore ã®å°å
¥äºäŸã«ã€ããŠã¢ããªã±ãŒã·ã§ã³ãµã€ããã€ã³ãã©ãµã€ãã®ãããããã玹ä»ãããŠããã ãããšæããŸãã ãããªäººã«ãããã S3ãªã©ã®ãªããžã§ã¯ãã¹ãã¬ãŒãžãå°å
¥ããããåçš®äºæ
ãããªã³ãã¬ã§æ§ç¯ããå¿
èŠããããµãŒãã¹ã®ãšã³ãžã㢠ããã¯ãšã³ããšã³ãžã㢠ã€ã³ãã©ãšã³ãžã㢠䞻ã«BtoBãµãŒãã¹ãæäŸããŠããŠãåçš®å¶çŽã®ãªããµãŒãã¹ãã¹ã±ãŒã«ããããæ¥ã
奮éããŠãããšã³ãžãã¢ããããã¯ããããŒãžã£ãŒããã£ã¬ã¯ã¿ãŒ BtoBãµãŒãã¹éçºè
åå£«ã®æšªã®ã€ãªãããäœãããæ¹ ååã®æ§å ååéå¬æã®æ§å㯠RAKUS Meetup Tokyo #2 ããã³ããšã³ãNight : ã€ãã³ãã¬ããŒã ããåç
§ãã ãã é嬿ŠèŠãšç³ãèŸŒã¿ æ¥æ: 2019/5/21(ç«) 19:00-21:00 éå Žã¯30ååã®18:30ãããšãªããŸã äŒå Ž: ã©ã¯ã¹ æ±äº¬æ¬ç€Ÿ ã»ã ããŒã«ãŒã ã151-0051 æ±äº¬éœæžè°·åº åé§ã¶è°· 5-27-11ãã¢ã°ãªã¹ã¯ãšã¢æ°å®¿2F åå è²»: ç¡æ ããã·ã¥ã¿ã° : #RAKUSMeetup äž»å¬: ã©ã¯ã¹ ç³èŸŒã¿ã¯ Connpass ã®ã€ãã³ãããŒãž ãããé¡ãããŸãã
ã¯ããã« id:FM_Harmony ã§ããRakus Developers Blogã§ã¯ä¹
ã
ã®æçš¿ã«ãªããŸãã ååã®æçš¿ã¯ æ±äº¬éçºãã¢ããã·ã¥ã«åå ããŸããïœ2019幎2æç·šïœ ã§ããã tech-blog.rakus.co.jp ããŠãæè¿Node.jsã®åŠç¿ãå人çã«è¡ã£ãŠããã®ã§ãããåŠç¿ãé²ããŠããå
ã«JenkinsãçšããCIç°å¢ãæãã®ã»ãç°¡åã«æ§ç¯ã§ããããšãåãããŸããã ããã§ä»åã¯ãJenkinsãçšããNode.jsã¢ããªã®CIç°å¢ã®æ§ç¯æé ã«ã€ããŠèšäºãæžããŸãããNode.jsã§ã¢ããªãéçºãããŠããæ¹ã®åèã«ãªãã°å¹žãã§ãã ãªããJenkinsã®ããŒãžã§ã³ã¯ ver. 2.173 ãå©çšããŠããããããã以å€ã®ããŒãžã§ã³ãå©çšããŠããå Žåãèšå®å
容çã«å·®ç°ããããããããŸããã ç®æ¬¡ ã¯ããã« ç®æ¬¡ Jenkinsã®èšå® NodeJS Pluginã®å°å
¥ NodeJSã®èšå®é
ç® Install from nodejs.orgã®èšå®é
ç® ãžã§ãã§ã€ã³ã¹ããŒã«ç¶æ³ã確èªãã èªåãã¹ãã詊ããŠã¿ã ãµã³ãã«ãããžã§ã¯ãã®äœæ åäœãã¹ãã®äœæ ã¬ããŒããã¡ã€ã«ãåºåãã Jenkinsã§CIçšãžã§ããäœæãã ãããã« åè Jenkinsã®èšå® NodeJS Pluginã®å°å
¥ ãNodeJS Pluginããå©çšããããšã§JenkinsãNode.jsãå®è¡ããããã®èšå®ãç°¡æœã«è¡ãããšãã§ããŸãã Topç»é¢ > Jenkinsã®ç®¡ç > ãã©ã°ã€ã³ã®ç®¡ç ãããNodeJS PluginããJenkinsã«ã€ã³ã¹ããŒã«ããŸãã NodeJS Pluginã®ã€ã³ã¹ããŒã« å°å
¥åŸãåèµ·åãããPluginãåæ ãããã®ã§ã次ã«Jenkinsã§å©çšããNode.jsã®èšå®ãè¡ããŸãã Topç»é¢ > Jenkinsã®ç®¡ç > Global Tool Configuration ã«ããNodeJSããšããé
ç®ãå¢ããŠããã¯ããªã®ã§ãããããèšå®ãè¡ããŸãã äœãèšå®ããŠããªããã°ããNodeJS远å ããã¿ã³ãæŒäžããããšã§ãNode.jsã®èšå®ã远å ããããšãã§ããŸãããŸããè€æ°ããŒãžã§ã³ã®Node.jsãå©çšããããã«èšå®ããããšãã§ããŸã NodeJSã®èšå®é
ç® åå Jenkinsã®ãžã§ãã§å©çšããéã«æå®ãã èªåã€ã³ã¹ããŒã« ãã§ãã¯ãå
¥ãããšJenkinsãèªåã§Node.jsãã€ã³ã¹ããŒã«ãããåæã® ã€ã³ã¹ããŒã© ãšããŠãInstall from nodejs.orgããèšå®ãããŠãããåºæ¬çã«ã¯ ã€ã³ã¹ããŒã© ã倿Žããå¿
èŠã¯ãªã ã€ã³ã¹ããŒã« ãã£ã¬ã¯ã 㪠èªåã€ã³ã¹ããŒã«ã«ãã§ãã¯ãå
¥ããªãå Žåã¯å
¥åãä»åã¯å©çšããªã Install from nodejs.orgã®èšå®é
ç® Version å©çšããNode.jsã®ããŒãžã§ã³ Force 32bit architecture ä»åã¯å©çšããªããã32bitOSã®å Žåã¯å¿
èŠãããããªã Global npm packages to install npmã§å©çšããã°ããŒãã«ããã±ãŒãžã®æå®ãåºæ¬çã«ããã±ãŒãžåãæå®ããã°ãããã packageName@version ãšèšèŒããããšã§æå®ã®ããŒãžã§ã³ãã€ã³ã¹ããŒã«ãããããšãã§ããïŒ Global npm packages refresh hours åæå€ã§åé¡ãªãã£ãã®ã§ããã£ãããšã¯èª¿ã¹ãŠããªã... ä»åã¯èšäºäœææç¹ã§ææ°ãã€å®å®ã®Node.jsãå©çšãããmochaã§ åäœãã¹ã ãè¡ãJenkinsã§ã¬ããŒããéèšããããã«ããããã以äžã®ããã«èšå®ããŸããã NodeJS Pluginã®èšå® ãžã§ãã§ã€ã³ã¹ããŒã«ç¶æ³ã確èªãã 以äžã®èšå®å
容ã§ããªãŒã¹ã¿ã€ã«ã»ãããžã§ã¯ãã®ãã«ããžã§ããäœæããŠNode.jsã®ããŒãžã§ã³ãnpmããã±ãŒãžã®ã€ã³ã¹ããŒã«ç¶æ³ã確èªããŠã¿ãŸãã ãã«ãç°å¢ Provide Node & npm bin/ folder to PATHã«ãã§ãã¯ãå
¥ãã以äžã®éãèšå® NodeJS Installation NodeJSã®èšå®é
ç®ã§ãååãã«å
¥åãããã® npmrc file ç¹å¥ã«èšå®ããŠããªããã°ã -use system default- ãã衚瀺ãããŠããªãã¯ã ãã«ã 以äžã® ã·ã§ã«ã¹ã¯ãªãã ãå®è¡ãã node --version npm ls --depth=0 -g ãã«ãå®è¡ãæåãããã«ãã®ã³ã³ãœãŒã«åºåã«ä»¥äžã®ãããªå
容ã衚瀺ãããŠããã°èšå®ã¯æåŸ
éãã«ãªã£ãŠããã¯ãã§ããïŒä»åã¯Jenkinsã tomcat ã«èŒããŠããŸãïŒ Started by user xxx Running as SYSTEM Building in workspace /home/tomcat/.jenkins/workspace/NodeJSConfigurationCheck [WS-CLEANUP] Deleting project workspace... [WS-CLEANUP] Deferred wipeout is used... [WS-CLEANUP] Done [NodeJSConfigurationCheck] $ /bin/sh -xe /opt/tomcat/temp/jenkins8667759308635013491.sh + node --version v10.15.3 + npm ls --depth=0 -g /home/tomcat/.jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/NodeJS_v10.15.3/lib âââ mocha@6.1.3 âââ mocha-junit-reporter@1.21.0 âââ npm@6.4.1 Finished: SUCCESS èªåãã¹ãã詊ããŠã¿ã ãµã³ãã«ãããžã§ã¯ãã®äœæ ä»åã¯ä»¥äžã®ãããªæ§æã®ãããžã§ã¯ããäœæããŠã¿ãŸãã ãµã³ãã«ãããžã§ã¯ã âânode_modules ââsrc â ââindex.js â ââcalc.js ââtest â ââcalcTest.js ââpackage.json ââpackage-lock.json åãã¡ã€ã«ã®èª¬æã¯ä»¥äžã®éãã§ãã src/index.js ã¢ããªã±ãŒã·ã§ã³ã®ãšã³ããªãã€ã³ã src/calc.js èšç®ãè¡ãã¢ãžã¥ãŒã« test/calcTest.js src/calc.js ã® åäœãã¹ã ãã以å€ã¯npmã§èªåçã«äœæããããã¡ã€ã«ã§ãã ãŸãã¯ã mocha + power-assert ã§ åäœãã¹ã ãè¡ãããã®ã§ããããžã§ã¯ãã®ã«ãŒã ãã£ã¬ã¯ã ãªã§ä»¥äžãå®è¡ããŸãã npm init npm install -g mocha mocha-junit-reporter npm install --save-dev power-assert intelli-espower-loader 次ã«ã index.js ã calc.js ãäœæããŸããä»åã¯ãindex.jsãnodeã§èµ·åããŠãåŒæ°ãšããŠæž¡ãã2ã€ã®æ°å€ãè¶³ãããã®ãã³ã³ãœãŒã«ã«è¡šç€ºãããããã«ããŸãã // index.js 'use strict' ; var calc = require( './calc' ); if (require.main === module) { main( { argv: process.argv } ); } function main(options) { var argv = options.argv; var x = parseInt(argv [ 2 ] ); var y = parseInt(argv [ 3 ] ); var result = calc.add(x, y); console.log(x + '+' + y + '=' + result); } // calc.js 'use strict' exports.add = function (x, y) { return x + y; } ; ã«ãŒã ãã£ã¬ã¯ã ãªã§index.jsãå®è¡ããŠã¿ããšã以äžã®ããã«ã³ã³ãœãŒã«è¡šç€ºãè¡ãããã¯ãã§ãã $ node src/index.js 1 2 1+2=3 åäœãã¹ã ã®äœæ 次ã«ã calc.js ã® åäœãã¹ã ãäœæããŸããä»åã¯ããã¹ããšã㊠1+1=2ãæºãã ããšããã¹ãæåã®æ¡ä»¶ã«ããŠã¿ãŸãã //calcTest.js 'use strict' var assert = require( 'power-assert' ); var calc = require( '../src/calc' ); describe( 'addãã¡ã³ã¯ã·ã§ã³ã®åäœãã¹ã' , function () { it( 'add(1, 1) = 2' , function () { var result = calc.add(1, 1); assert.strictEqual(result, 2); } ); } ); ããŒã«ã«ã§ åäœãã¹ã ãå®è¡ããŠã¿ãŸããã«ãŒã ãã£ã¬ã¯ã ãªã§ mocha ãå®è¡ããã°è¯ãã§ãã $ mocha addãã¡ã³ã¯ã·ã§ã³ã®åäœãã¹ã â add(1, 1) = 2 1 passing (15ms) ã¬ããŒããã¡ã€ã«ãåºåãã package. json ãç·šéããŠã¬ããŒããã¡ã€ã«ãåºåããããã«ããŸãã以äžã®èšå®ã远èšã㊠npm test ãå®è¡ãããšãããã©ã«ãã§ã¯ã«ãŒã ãã£ã¬ã¯ã ãªã® test-results.xml ã«ãã¹ãçµæãåºåãããã¯ãã§ãã " scripts ": { " test ": " mocha test --reporter mocha-junit-reporter " } , // test-results.xml <?xml version="1.0" encoding="UTF-8"?> <testsuites name="Mocha Tests" time="0.001" tests="1" failures="0"> <testsuite name="Root Suite" timestamp="2019-04-16T04:39:33" tests="0" failures="0" time="0"> </testsuite> <testsuite name="addãã¡ã³ã¯ã·ã§ã³ã®åäœãã¹ã" timestamp="2019-04-16T04:39:33" tests="1" file="C:\Users\kazuki.hirayama\Desktop\NodeJSCISample\test\calcTest.js" failures="0" time="0.001"> <testcase name="addãã¡ã³ã¯ã·ã§ã³ã®åäœãã¹ã add(1, 1) = 2" time="0.001" classname="add(1, 1) = 2"> </testcase> </testsuite> </testsuites> ãã®æç¹ã§ãCI飿ºçšã« Github ã® ãªããžã㪠ãžpushããŠãããŸãã Jenkinsã§CIçšãžã§ããäœæãã æåŸã«CIçšã®ãžã§ããäœæããŸããããããªãŒã¹ã¿ã€ã«ãã«ããžã§ãã以äžã®ããã«èšå®ããŸãã â» Github ãšã®é£æºã«é¢ãããšããã¯å²æããŸã ãã«ãç°å¢ ããžã§ãã§ã€ã³ã¹ããŒã«ç¶æ³ã確èªãããã®éã«èšå®ãããã® ãã«ã ã·ã§ã«ã®å®è¡ npm install npm test ãã«ãåŸã®åŠç JUnit ãã¹ãçµæã®éèš ãã¹ãçµæ XML ããã©ã«ãã§ããã°ã test-results.xml ãå
¥å ãã以å€ã®é
ç® ãšãã«å€æŽããªã ãã®åŸã Github ã® ãªããžã㪠ãžpushãè¡ããšãã«ããå§ãŸãã¯ãã§ãããã«ããæåããŠãæååŸã®ã³ã³ãœãŒã«åºåã以äžã®ããã«ãªã£ãŠããã°æåŸ
éãã§ãã Started by GitHub push by xxx Running as SYSTEM Building in workspace /home/tomcat/.jenkins/workspace/NodeJSSampleCI No credentials specified Cloning the remote Git repository Cloning repository xxx > git init /home/tomcat/.jenkins/workspace/NodeJSSampleCI # timeout=10 Fetching upstream changes from xxx > git --version # timeout=10 > git fetch --tags --progress xxx +refs/heads/*:refs/remotes/origin/* > git config remote.origin.url xxx # timeout=10 > git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10 > git config remote.origin.url xxx # timeout=10 Fetching upstream changes from xxx > git fetch --tags --progress xxx +refs/heads/*:refs/remotes/origin/* > git rev-parse refs/remotes/origin/master^{commit} # timeout=10 > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10 Checking out Revision 9600a7cf391f3aea917dc06db88b84851d7de87b (refs/remotes/origin/master) > git config core.sparsecheckout # timeout=10 > git checkout -f 9600a7cf391f3aea917dc06db88b84851d7de87b Commit message: "test commit" First time build. Skipping changelog. [NodeJSSampleCI] $ /bin/sh -xe /opt/tomcat/temp/jenkins7429977434779181980.sh + npm install npm WARN nodejscisample@1.0.0 No description added 79 packages from 155 contributors and audited 280 packages in 2.283s found 0 vulnerabilities + npm test > nodejscisample@1.0.0 test /home/tomcat/.jenkins/workspace/NodeJSSampleCI > mocha test --reporter mocha-junit-reporter Recording test results Finished: SUCCESS ãŸãããã«ãã®ããã¹ãçµæãããäžèšç»åã®ãããªãã¹ãçµæãååŸã§ããã¯ãã§ãã ãã¹ãçµæ ãããã« ãããã§ããã§ããããããNodeJS Pluginããå©çšããããšã§Node.jsã®ã¢ããªã±ãŒã·ã§ã³ãJenkinsã§CIããç°å¢ã容æã«æ§ç¯ã§ããããšããåããããã ããããšæããŸããåºæ¬çã« ãã©ã°ã€ã³ ã®èšå®ã®ã¿ã§å®çµããããã å人çã«ã¯ãµãŒãã§çŽæ¥äœæ¥ãããå¿
èŠããªãã®ãå¬ãããšæããŠããŸãã ãŸã ãŸã èªèº«ãCIãJenkinsã«ã€ããŠäžå匷ãªé¢ããããŸãã®ã§ãä»åŸãåŠç¿ããŠããããšæããŸãã åè çéã§Jenkinsããã¹ã¿ãŒããã(NodeJSç·š) ~ Jenkinsã»ããã¢ããããNodeJSèªåãã¹ããJob DSLãŸã§ ~ ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã 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
ããã«ã¡ã¯ MasaKu ã§ãã å
æ¥ãããã°ã§ãã玹ä»ããŸããããåŒç€Ÿãã¹ãã³ãµãŒãšããŠåè³ããŠãã PHPerKaigi 2019 ã«åå ããŠããŸããã phperkaigi.jp tech-blog.rakus.co.jp çºè¡šã倧å€çŽ æŽãããã£ãããšã¯ãã¡ãããã€ãã³ãã®æ§ã
ãªè¶£åãé¢çœããå
å®ããã€ãã³ãã§ããã®ã§æ¯éãšãåå ã¬ããŒããæžãããŠããã ããããšæããŸããã åçºè¡šã®ã¹ã©ã€ãã¯ä»¥äžã®èšäºã§å€§å€äžå¯§ã«ãŸãšããããŠãããŸãã qiita.com PHPerKaigi 2019 å
šäœãéããŠæããããš æ®æ®µãæ¥åã§ã¯ PHP ã§éçºãè¡ã£ãŠãããŸããã瀟å€ã®ãšã³ãžãã¢ã®æ¹ã§ PHP ãå©çšãããŠããæ¹ã«ããŸããäŒãããããšããªãã£ãã®ã§ãäŒå Žã®ããããšããã§ PHP ã®è©±ã§çãäžãã£ãŠããå
æ¯ããããæ°é®®ã§ããã æè¡ç³»ã€ãã³ãã§ã¯ twitter ã® ããã·ã¥ã¿ã° ãçšæãããŠããããšãå€ãã€ã¡ãŒãžã§ããããã®ã€ãã³ãã§ã¯çºè¡šäŒå Žããšã« ããã·ã¥ã¿ã° ãçšæãããŠããŸããã ã¡ã€ã³ã® ããã·ã¥ã¿ã° ãã»ã»ã»ã #phperkaigi AäŒå Žã® ããã·ã¥ã¿ã° ãã»ã»ã»ã #phperkaigi #a BäŒå Žã® ããã·ã¥ã¿ã° ãã»ã»ã»ã #phperkaigi #b ãã®ãããçºè¡šãèããªããã€ã¶ãããå
容ãã»ãã®åå è
ã®æ¹ãæŸã£ãŠäžãã£ãããäœæ°ãªãçåã«æã£ãããšãã€ã¶ããããšãããçºè¡šåŸã«çºè¡šè
ã®æ¹ãããåçããã ãããããããšããããŸããã ã PHPerKaigi2019ã®ãµã€ããã§ãããŸã§ ããšããçºè¡šã§ã¯ãPHPerKaigi 2019 ã®ãµã€ããå¶äœãããäŒæ¥æ§ã®ã¢ãŒããã£ã¬ã¯ã¿ãŒã®æ¹ãçºè¡šãããŠããã®ã§ããããµã€ãã®ã³ã³ã»ãããã åå è
ãã¹ããŒã«ãŒã¯ãã¡ãããã¹ã¿ãããã¹ãã³ãµãŒã倧ãã«æ¥œããå Ž ããšãããŠããŸããã speakerdeck.com ã€ãã³ãäŒå Žå
ã«çšæãããããªãŒã¹ããŒã¹ã§ã¯ãã¢ã³ã«ã³ãã¡ã¬ã³ã¹ãéå¬ãããããåå è
ã®æ¹ã
ãçºè¡šè
ã®æ¹ãšäº€æµãããŠãããããŠåæ°ãããããšããé°å²æ°ãããããŸãã«ã³ã³ã»ããéãã®ã€ãã³ãã ã£ããšæããŸãã ã¢ã³ã«ã³ãã¡ã¬ã³ã¹ã®äºå®ããŒã LTäŒå Ž æ³å以äžã«åºãäŒå Žã§ãã å°è±¡ã«æ®ã£ãçºè¡š æ§ã
ãªçºè¡šãèŽè¬ãããŠããã ããäžã§ãç¹ã«å°è±¡çã ã£ããã®ãããã€ãã玹ä»ãããŠããã ããŸãã èšèšåãäžããããªãšãŒã·ã§ã³ã®èŠæ¥µãè¡ speakerdeck.com ãµãŒãã¹ãéçšããŠãããšãåœåã¯æ³å®ããŠããªãã£ããããªæ°ããæ©èœã®è¿œå ãªã©ãçºçããŸãã ãã®ããããå€åãã«åŒ·ãããã°ã©ã ãäœãããšãéèŠã§ãã ããŸéçºããŠããæ©èœãã ä»åŸã®æ©èœè¿œå ãèæ
®ãããšãããäœãã¹ãã ãããïŒ ããšããæ³ååãåãããªããããã°ã©ãã³ã°ããèœåãå¿
èŠã ãšæããŸããã çºè¡šã®äžã§ããã£ãããããŠããŸããããäžèšã®ãããªæ³ååã¯ãæ¥åç¥èãã€ããªããã°èº«ã«ã€ããªããã®ãªã®ã§ãã³ãŒãã£ã³ã°åã ãã§ãªãããµãŒãã¹ã«å¯Ÿããçè§£ãéèŠã ãšæ¹ããŠæã£ãçºè¡šã§ããã ããã¥ã¢ã«ã«ãªãåŒæ°ãäžãããšã©ããªãïŒ php -srcãžã®ãã°å ±åãããæã®è©± speakerdeck.com PHP ã®ãã°ãå ±åããããšããçºè¡šã§ãããããã°ã®å ±åã®ããã«å¿
èŠãªèŠç¹ããŸãšããããŠããå
容ã倧å€åèã«ãªããŸããã PHP ã®å
¬åŒããåºãŠãã ãã°å ±åæã®ã«ãŒã« ãšããŠä»¥äžã®ããã«ãŸãšããããŠããŸããã è±èªã§å ±åããŠãã ãã ïŒã€ã®ãã°ã¯ïŒã€ã®å ±åã«ããŠãã ãã ã©ãããç®çã®ããäœãããŠã©ããªã£ãã®ãå ±åããŠãã ãã å¿
èŠååãªæ
å ±éã§å ±åããŠãã ãã éå»ã®ããŒãžã§ã³ã®ãã°ã¯å ±åããªãã§ãã ãã æ¢ã«å ±åæžã¿ã®ãã°ããªãã調æ»ããŠãã ãã ãšã©ãŒã¡ãã»ãŒãžã®å
容ãã¡ãããšèªãã äžã§å ±åããŠãã ãã OSS ã«ã³ã³ããªãã¥ãŒããããšããããšã«å¯ŸããŠãéæ¹ããªãé«ãããŒãã«ãæããŠããŸãããããã°å ±åã«ã€ããŠã¯ãéçºæã®ãã©ãã«ã®å ±åãšäŒŒãŠãããšæããŸããã ãããšåæã«ãæ®æ®µã®ãã©ãã«å ±åã®å
容ã§ãäžèšã®èгç¹ã«æ°ãã€ããªããå ±åããªããã°ãªããªããšæããŸããã ãã°ãèŠã€ãã£ãéã¯ã äœãããã°ãã°ãåçŸããã®ã ããšããããšãšã é¢ä¿ã®ç¡ãæ
å ±ã¯æ··åãããªã ããšããããšãæèããŠããããã§ãã ãã¢ã³ã«ã³ãã¡ã¬ã³ã¹ã STEPUP ããã°ã©ãã³ã°é«éåïŒïœãåãããã°ã©ãã³ã°æ©ããããšããããããã« speakerdeck.com ããã°ã©ãã³ã°ãæ©ãããããã®æœçãïŒã€ã®ã¹ãããã§ã説æãããŠããŸããã STEP1: æžããŠèŠãã STEP2: 綺éºã«æžã STEP3: æžãæ¹ãèŠãã STEP4: ããã°ã©ãã³ã°ãããããã°ã©ã ãæžã ç¹ã«éèŠã ãšæã£ãã®ã¯STEP2ã®ã 綺éºã«æžã ãã ãšæããŸããã 綺éºãªæžãæ¹ãšããã®ã¯ãããžã§ã¯ãã«ãã£ãŠæ§ã
ã§ãã äŸãã°ã䜿çšããŠãã ãã¬ãŒã ã¯ãŒã¯ ãéã£ããã³ãŒãã£ã³ã°ã«ãŒã«ããã£ãããšããã®ãããžã§ã¯ãã«ãããæé©ãªæžãæ¹ãããããååšãããããã±ãŒã¹ãã€ã±ãŒã¹ã§æžãæ¹ã調æŽããŠãããªããã°ãããŸããã æžãæ¹ã«æ
£ããŠããªãæã«æ¥ãã§éã«æžããããã°ã©ã ã¯ç°¡åãªãã¹ãçŽã蟌ãã ãããã°ãçºçããéã«ä¿®æ£ã³ã¹ãã倧ãããªãããã°ã©ã ã«ãªã£ãŠããŸããŸãã ããããããã°ã©ã ãæžãäžãããŸã§ã«æéãããã£ããšããŠãã綺éºã«æžãäºãæ°ãã€ããŠããã°ããããã°ãèŠã€ãã£ããšããŠãä¿®æ£ç®æãèŠã€ããããçŽ æ©ãä¿®æ£ã§ããŸãã ãŸãã綺éºã«æžãããšã«æ
£ããŠãããšããã®æžãæ¹ã§çŽ æ©ãæžãäžããããšãã§ããããã«ãªã£ãŠããã®ã§ãçµæçã«ãã°ãå°ãªããèªã¿ãããã³ãŒããçãæéã§æžããããã«ãªããŸãã ãã®èгç¹ã¯æ°ããæžãæ¹ãå¢ãããã³ã«æŽæ°ããŠãããªããã°ãªããªãå
容ãªã®ã§ããã§ããããã«ãªã£ãããšæã£ãŠãæ°ãæãããç¶ç¶çã«æèããŠãããªãã°ãªããªãå
容ã ãšæããŸããã ãŸãšã äœãšãªãç¥ã£ãŠããããŒã¯ãŒããé Œãã«çºè¡šãèãã ãã§ãããããããããšã ã£ããã ïŒããšãã£ãæ°ã¥ããåŸãããããããæ°ããèå³ãæ¹§ããŠãããããããããã€ãã³ããžåå ããããšã¯æ¬åœã«ããçµéšã«ãªããšæ¹ããŠæããŸããã ã€ãã³ãèªäœãçºè¡šè
ãšåå è
ãäžç·ã«æ¥œãããè¶£åãçãã ãããã ã£ãã®ã§ããªãŒãã£ãšã³ã¹ãšããŠã®åå ã§ã¯ãããŸããããæ±ºããŠåãæ®ãããŠããæèŠã«ã¯ãªããªãã€ãã³ãã ãšæããŸããã ä»åŸã® PHP é¢ä¿ã®ã«ã³ãã¡ã¬ã³ã¹ã¯ä»¥äžã®ãšããã§ãã PHPã«ã³ãã¡ã¬ã³ã¹ çŠå²¡ 2019 PHPã«ã³ãã¡ã¬ã³ã¹ åæµ·é2019 PHPã«ã³ãã¡ã¬ã³ã¹ æ²çž CakeFest - THE CAKEPHP CONFERENCE JAPAN 2019 - PHPã«ã³ãã¡ã¬ã³ã¹ 2019 æ®å¿µãªããé¢è¥¿ã§ã®éå¬ã¯ä»ã®ãšãããããŸããããæ©äŒãããã°ã©ããã«ãŸãåå ããŠã¿ãããšæããŸããã qiita.com åèãµã€ã PHPerKaigi 2019 PHPerKaigi 2019 に協賛します - RAKUS Developers Blog | ラクス エンジニアブログ PHPerKaigi2019 スライドまとめ - Qiita PHPerKaigi2019のサイトができるまで - Speaker Deck 設計力を上げる!バリエーションの見極め術 - Speaker Deck PHPのマニュアルにないことをしてphp-srcへバグ報告をした - Speaker Deck STEP UP プログラミング高速化 「君、プログラミング早いね」 / Step up! fast programming - Speaker Deck 2019年に開催される全国のPHPカンファレンスのまとめ - Qiita
ããã«ã¡ãã @kawanamiyuu ã§ããå
é±ã AWS èªå®ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã - ã¢ãœã·ãšã€ã 詊éšïŒä»¥äžãSAA 詊éšïŒãåéšããŠããŸããã®ã§ãååŒ·æ¹æ³ãªã©ãå
±æããããšæããŸããã¡ãªã¿ã«ã詊éšçµæã¯ 893 ç¹ (/1000) ã§ åæ Œ ã§ãã ε-(ÂŽâïœ*)ïŸïœ¯ çè
ã® AWS ã¹ãã«æ AWS ã§ã®åºæ¬çãªåé·æ§æïŒELB + Auto Scaling + RDS Multi-AZïŒãšãã Well-Architected ãã¬ãŒã ã¯ãŒã¯ ã¬ãã«ã®ããšã¯ãããŸã§ã®ãšã³ãžãã¢çµéšã®äžã§ç¥èãšããŠã¯ç¥ã£ãŠãã 以åãã®ããã°ã§ç޹ä»ãã ãã¿ãããããžã§ã¯ã ãªã©ã®æè¡æ€èšŒç³»ã®ãããžã§ã¯ãã§ ECS ãªã©ã®æµè¡ãã®ãµãŒãã¹ãã¡ããã¡ããè§Šã£ãããšããã AWS ã§ã€ã³ãã©ã 0 ããæ§ç¯ããçµéšã¯ãªã æ¬çªç°å¢ã§ã® AWS éçšçµéšã¯ãªã â» AWS ãå©çšãããµãŒãã¹ã®éçºã«æºãã£ãããšã¯ãããŸãããã€ã³ãã©ã¬ã€ã€ã¯åœæããŒã¿ãã åéšã®ã¢ãããŒã·ã§ã³ çŸåšéçºãæ
åœããŠããæ°èŠäºæ¥ïŒHR x TechïŒã§ AWS ãå©çšããããšã確å®ããŠããããã€ãŸã§ããç¥ã£ããã¶ããã§ã¯ãã©ã€ïŒç¬ïŒã®ã§ã AWS ã®åºæ¬ã«ã€ããŠäžåºŠã¡ãããšçè§£ããŠããããã£ã 瀟å
ã« AWS ã«è©³ãããšã³ãžãã¢ãå°ãªãã®ã§ãä»åŸã® ãã£ã©ç«ã¡ ãçã£ãŠ ååŒ·æ¹æ³ åŠç¿æé æéãšããŠã¯ 2019/1 ã 2019/3 ã®çŽ 3 ã¶æé åœåã2 æäžã«åéšããããšèšç»ããŠããŸãããããªããªãå匷æéããšãããªããšã幎床æ«ã«åéšã§ããŸãã æ®æ®µ Studyplus ãšããã¢ããªã§å匷ã®èšé²ãä»ããŠããŠãå®è³ªã®åŠç¿æé㯠20 ã 30 æéã§ãã åŠç¿ææ ã¡ããã©ããã¿ã€ãã³ã°ã§ ææ° ã®è©Šéšå
容ã«å¯Ÿå¿ããå¯Ÿçæ¬ã 2 ååºçãããŸããã®ã§äž¡æ¹è³Œå
¥ããŠå匷ããŠã¿ãŸããã 以äžã®é ã§å匷ããŸããã AWS Well-Architected ãã¬ãŒã ã¯ãŒã¯ ã® ãã¯ã€ãããŒã㌠äžéãèªã¿ãŸãã Amazon Web Services ãšã³ã¿ãŒãã©ã€ãº åºç€èšèšã®åºæ¬ çºå£²æ¥ïŒ2018 幎 10 æ 8 æ¥ ãªã³ãã¬ãã¹ã®ã³ãŒãã¬ãŒããµã€ããã¢ãã«ã«ã AWS ã®ãµãŒãã¹ã䜿ã£ãŠå¯çšæ§ãæ¡åŒµæ§ãã»ãã¥ãªãã£ãä¿å®æ§ã段éçã«é«ããŠãããšããå
容ã§ã AWS ã®åºæ¬çãªãµãŒãã¹ã«ã€ããŠçè§£ã§ããŸã å³ãå€ããŠéåžžã«ããããããã£ãã§ã åç« æ«ã« SAA 詊éšãæ³å®ããåé¡ãã€ããŠããŠã詊éšå匷ã«ããã£ãŠã€ãã§ãã www.nikkeibp.co.jp åŸ¹åºæ»ç¥ AWS èªå® ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã - ã¢ãœã·ãšã€ãæç§æž çºå£²æ¥ïŒ2019 幎 1 æ 19 æ¥ æš¡æ¬åé¡ãããªãããã«è³Œå
¥ 65 åã®æš¡æ¬åé¡ïŒPDFïŒãã€ããŠããŸã æç§æžéšåãäžéãèªã¿ãŸããã詊éšç¯å²ã®äºé
ã«ã€ããŠã¡ããã©ããããªã¥ãŒã æã§ãŸãšãŸã£ãŠããŠå匷ã«ãªããŸãã book.impress.co.jp æççªç Ž AWS èªå®ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã ã¢ãœã·ãšã€ã åæ Œææ¬ çºå£²æ¥ïŒ2019 幎 2æ 21 æ¥ åœåããã¡ãã®è³Œå
¥äºå®ã¯ãããŸããã§ããããåéšææã®ãºã¬ã«äŒŽã远å 賌å
¥ããŸãã æš¡æ¬åé¡ãããªãããã«è³Œå
¥ 65 åã®æš¡æ¬åé¡ïŒå°ååïŒãã€ããŠããŸã æš¡æ¬åé¡ã®é£æåºŠã¯ãåŸ¹åºæ»ç¥ AWS èªå® ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã - ã¢ãœã·ãšã€ãæç§æžãããå°ãé£ããã£ãæ°ãããŸã ãã¡ããæç§æžéšåãäžéãèªã¿ãŸãã ãåŸ¹åºæ»ç¥ AWS èªå® ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã - ã¢ãœã·ãšã€ãæç§æžããšæ¯èŒãããšããã»ãã¥ã¢ãªè€æ°éå±€ã¢ããªã±ãŒã·ã§ã³ïŒç¬¬ 9 ç« ïŒããé«å¯çšæ§æ§æïŒç¬¬ 10 ç« ïŒããšãã£ãéèŠãªäºé
ã«ããããŒãžãå²ããå³ãå€çšããŠãããããã解説ãããŠããŸã gihyo.jp AWS Black Belt ã® AWS ãµãŒãã¹å¥è³æ å¯Ÿçæ¬ã®åŠç¿ãšäžŠè¡ããŠèªã¿é²ããŸãã ã AWS Well-Architected ãã¬ãŒã ã¯ãŒã¯ ã®ãã¯ã€ãããŒããŒããšã Amazon Web Services ãšã³ã¿ãŒãã©ã€ãº åºç€èšèšã®åºæ¬ãã®äžã§ç»å ŽãããµãŒãã¹ã«ã€ããŠã¯äžéãèªã¿ãŸãã aws.amazon.com AWS å
¬åŒã® ãµã³ãã«åé¡ ïŒ10 åïŒâ»ç¡æ AWS å
¬åŒã®ãªã³ã©ã€ã³æš¡æ¬åé¡ïŒ25 åïŒâ»ææ è©Šéšæ¬çª 詊éšäŒå Žã¯äº¬éœã®åµå±±è¿ãã®ãã¹ãã»ã³ã¿ãŒã§ãã ãã¹ãã»ã³ã¿ãŒã§ã®è©Šéšã¯åäœéšã ã£ãã®ã§ãã¡ãããšãã¹ããåããããšãã§ãããç·åŒµããŸãã ãªã¢ãŒã詊éšå®ãšã®ãã£ãããæ¥æ¬èªã ã£ãã®ã§å®å¿ããŸãã æ¬çªè©Šéšã¯ 130 åã§ 65 åãåºé¡ãããŸããèŠçŽããå«ã㊠70 åãããã§åçå®äºããŸãã 詊éšå
容ã«ã€ããŠã¯ AWS èªå®ããã°ã©ã ã¢ã°ãªãŒã¡ã³ã ã®ãã詳ããã¯ç޹ä»ã§ããŸããããæš¡æ¬åé¡ããããããå
·äœç㪠ãŠãŒã¹ã±ãŒã¹ ã«ã€ããŠã AWS ãµãŒãã¹ãžã®ããå
·äœçãªçè§£ãæ±ããããèšåãå€ãã£ãã§ã åéšããŠã¿ãŠ è©Šéšå匷ãéããŠã VPC ããµãããããã»ãã¥ãªãã£ã°ã«ãŒããIAMããªãŒãã¹ã±ãŒã«ãšãã£ããã»ãã¥ãªãã£ãå¯çšæ§ã«é¢ãã AWS ã®åºæ¬ã®ããšããããµãŒãã¹ãæ©èœã«ã€ããŠçè§£ããããšãã§ãããšãŠãææçŸ©ãªãã£ã¬ã³ãžã ã£ããšæããŠããŸãã AWS ãžã®é¢å¿ãšæåŸ
ãæ®ãã® AWS èªå®ååŸãžã®ã¢ãããŒã·ã§ã³ãé«ãŸã£ãŠããŠãä»åŸãéçºå®åã§ AWS ãæŽ»çšãã€ã€ãèªå®ã«ã€ããŠãåŒãç¶ããŸãã¯ã¢ãœã·ãšã€ãã¬ãã«å¶èŠãç®æã㊠AWS ã®çµéšãšçè§£ãæ·±ããŠãããããšæããŸãã P.S. ã¡ãªã¿ã«ã ã©ã¯ ã¹ã«ã¯ãšã³ãžãã¢ã®è³æ ŒååŸãæ¯æŽããå¶åºŠããããä»åã®åéšæã¯ãã£ããçµè²»ãšããŠç²Ÿç®ããŸãã (-ÐŽâ)ïŸïœ¯
4æ1æ¥ã«ããã«ãªã£ã çŠå²¡@楜楜 åŽå éçºèª² ã§ãã ãã¡ããã¡ãã«ã¯ã€ã€ã§ã⪠ããŠããŠãåšèªæ
¢ã¯ãããããã«ããŠã åå è
æ§ãã奜è©ãããã ããŠãããŸãåŒç€Ÿã®ããããå匷äŒã4æéå¬ã®åç¥ãå
ŒããŠ3æã®æš¡æ§ããäŒãããããšæããŸãã 2æã®æš¡æ§ã¯ãã¡ããã â tech-blog.rakus.co.jp 3æå®æœã®æš¡æ§ ïŒæå®æœäŒã®æ¯ãè¿ããããä»åã¯æ¬¡ã®ãããªæ¹åã宿œããŸããã BGMã®é³ãéåããªãããã«ãã ãèåããšãããã空æ°ãã€ãã â BGMã®é³ãéåããªãããã«ãã ããããå匷äŒã®BGMã¯ãã©ãºãã€ããã©ãžãªãæµããŠããŸããã ããããå°ãåããã©ãºãã€ã®åŠççãªåé¡ãªã®ãBGMãéåãéåãã«ãªã£ãŠããŸã£ãŠããããã ã¹ãã ãã鳿¥œãæµãããã«ããŸããã çµæãéåããããšã¯ãªããããéäžããŠåŠç¿ããå Žã«ãªã£ãã®ã§ã¯ãšæããŸãã â ãèåããšãããã空æ°ãã€ãã äºåã«ããã°ã§åšç¥ãã广ãªã®ããã¬ã³ã¬ã³æžã£ãŠãããŸããã éå§30åã§ã»ãŒååã«ïœ æ¬æ¥ã®ç®çãšããŠã¯ããèåãåãã«è¡ã£ãéã«ã³ãã¥ãã±ãŒã·ã§ã³ãçºçããã°ãããªãŒãšããæãããèšå®ããŠãããŸããã 誰ãããèåããšãããšã§ããèåããšãããã空æ°ïŒé£ã¹ãªãã亀æµãããšãã空æ°ãåºæ¥äžãã£ãŠããããã«æããŸãã æ¬¡åãçããã¬ã³ã¬ã³æ¶è²»ããŠãã¬ã³ã¬ã³äº€æµããŠããã ããã°ãšæããŸãã æ¬¡ååç¥ æ¬¡åã¯4æ9æ¥ã«éå¬äºå®ã§ãã æšææ¥ã§ã¯ãªãç«ææ¥ã§ãã®ã§ããæ³šæãã ããïŒ æ¢ã«connpassã«å
¬éäžã§ãã®ã§ãèå³ãæãããæ¹ã¯æ¯éãè¶ããã ããã rakus.connpass.com
ããã«ã¡ã @kawanamiyuu ã§ããæ ªåŒäŒç€Ÿ ã©ã¯ ã¹ã¯ãä»é±æ«ã«éå¬ããã PHPerKaigi 2019 ã« Silver ã¹ãã³ãµãŒãšããŠåè³ããŠããŸããã¡ãªã¿ã«ãCfP ãåŒç€Ÿãã 3 åã®ãšã³ãžãã¢ãå¿åããŸãããããæ®å¿µãªããäžæ¡æã§ãã... åœæ¥ã¯ã¹ãã³ãµãŒæ ã§åŒç€Ÿã®ãšã³ãžãã¢ã 1 ååæŠããŸãã®ã§ãåå è
ã®ã¿ãªããŸãšäžç·ã«ã€ãã³ããæ¥œãããã°ãšæããŸãïŒ ã€ãã³ãæŠèŠ æ¥æ : 2019 幎 3 æ 29 æ¥ (é) ã 31 æ¥ (æ¥) äŒå Ž : ç·ŽéŠ¬åº ç« åºæ°ã»ç£æ¥ãã©ã¶ Coconeri ããŒã« å
¬åŒ HP : https://phperkaigi.jp/2019/ ããã·ã¥ã¿ã° ïŒ #phperkaigi phperkaigi.jp ãPHPer ãã£ã¬ã³ãžãäŒç» ä»åã® PHPerKaigi ã§ã¯æéäžã®3æ¥éãPHPerãã£ã¬ã³ãžããšããäŒç»ãéå¬ãããŸãã PHP ãã£ã¬ã³ãž ãšã¯ã»ã»ã» PHPerãã£ã¬ã³ãžã¯äŒå Žå
å€ã«é ããããPHPer ããŒã¯ ã³ããæ¢ãã ããã€ãã³ããµã€ãã«å
¥åããŠåŸãããã¹ã³ã¢ãç«¶ãäŒç»ã§ãã PHPer ããŒã¯ ã³ã¯ãèšå·ã®# + ä»»æã®æååãã®åœ¢ãããŠããŸãã PHPer ããŒã¯ ã³ã¯ã€ãã³ãå
¬åŒã®ãã®ã«å ããŠãã¹ãã³ãµãŒããæäŸããããã®ããããŸãã ã©ã¯ ã¹ã® PHPer ããŒã¯ ã³ã¯ã³ãã©ã§ãïŒãâã #RAKUSMeetup
ããã«ã¡ã¯ã æ°å1幎ç®ã®badaikiã§ãã ã¯ããã« ãŸããªãå
¥ç€ŸããŠ1幎ãé
å±ãããŠ9ã«æã PHP æŽ9ã«æã«ãªããŸãã PHP ã®èšæ³ã«ãã€ãŸãããšãªãã³ãŒãã£ã³ã°ã§ããããã«ãªã£ãã®ã§ãããããã¹ãããã¢ãããç®æããŠãããŸãã ããã§ä»å㯠v7.1 ïœ v7.3 ã§è¿œå ãããæ°æ©èœã®äžéšã玹ä»ããä»åŸã«æŽ»ãããŠãããŸãã ã¯ããã« å
¬åŒãµããŒãæé æ°æ©èœ v7.1 nullableãªå void颿° 察称çãªé
åã®åè§£ ã¯ã©ã¹å®æ°ã®ã¢ã¯ã»ã¹ç¯å²æå® v7.2 objectå æœè±¡ã¡ãœããã®ãªãŒããŒã©ã€ã v7.3 ãã¬ãã·ãã«ãª HereDoc æ§æãš NowDoc æ§æ array_key_first(), array_key_last() ãããã« å
¬åŒãµããŒãæé æšå¹Ž 2018幎12æ ããã£ãŠ v5.6 ã EOL (End Of Life) ãè¿ããŸããã ããŒãžã§ã³ ååãªãªãŒã¹æ¥ ææ°ãªãªãŒã¹ ææ°ãªãªãŒã¹æ¥ ã¢ã¯ãã£ããµããŒã ã»ãã¥ãªãã£ãµããŒã 7.3 2018/12/06 7.3.1 2019/01/10 2020/12/06 2021/12/06 7.2 2017/11/30 7.2.14 2019/01/10 2019/11/30 2020/11/30 7.1 2016/12/01 7.1.26 2019/01/10 2018/12/01 (çµäº) 2019/12/01 7.0 2015/12/03 7.0.33 2018/12/06 2017/12/03 (çµäº) 2018/12/03 (çµäº) 5.6 2014/08/28 5.6.40 2019/01/10 2017/01/19 (çµäº) 2018/12/31 (çµäº) äžèšã«åŸããçŸåšã»ãã¥ãªãã£ãµããŒãããã®v7.1ïœv7.3ã察象ãšããŸããã æ°æ©èœ v7.1 nullableãªå ãã©ã¡ãŒã¿ãè¿ãå€ã®å宣èšã§ nullable æå®ãã§ããããã«ãªããŸããã v7.0 ã§åãå
¥ãããã å倿 ã®åã®åã« ã¯ãšã¹ãã§ã³ããŒã¯ ãã€ãããšãnullable ã§ããããšãæå®ã§ããŸãã nullable æå®ããããšãæå®ããåã ãã§ãªã NULL ãæž¡ããããã«ãªããŸãã <?php function returnString () :? string { return "Hello!" ; } function returnNull () :? string { return null ; } function dumpParam ( ? string $ str ) { var_dump ( $ str ) ; } var_dump ( returnString ()) ; var_dump ( returnNull ()) ; dumpParam ( "Hello!!!" ) ; dumpParam ( null ) ; åºåçµæ string(6) "Hello!" NULL string(8) "Hello!!!" NULL void颿° æ»ãå€ã®åãšã㊠void ãå°å
¥ãããŸãããæ»ãå€ã®åã void ãšå®£èšãã颿°ã¯ã颿°å
ã§ã® return æãçç¥ãããããããã¯ç©ºã® return ã䜿ãå¿
èŠããããŸãã void 颿°ãã NULL ãè¿ãããšã¯ã§ããŸãããäœãå€ãè¿ãããšãããšãšã©ãŒã«ãªããŸãã <?php function dumpParam () : void { var_dump ( "Hello!!!" ) ; } dumpParam () ; åºåçµæ string(8) "Hello!!!" 察称çãªé
åã®åè§£ é
åã®ççž®æ§æ ( [ ] ) ã䜿ã£ãŠã 代å
¥çšã«é
åã®å€ãåãåºããããã«ãªããŸãã (foreach ã§ã䜿ããŸã)ã ããã¯ãlist() ã®ä»£æ¿ãšããŠäœ¿ããŸã (list() ããŸã 䜿ããŸã)ã <?php $ colors = [ [ 'apple' , 'red' ] , [ 'banana' , 'yellow' ] ] ; echo "liståœ¢åŒ \n " ; foreach ( $ colors as list ( $ fruits , $ color )) { echo $ fruits . "'s color is " . $ color . ". \n " ; } echo "[]åœ¢åŒ \n " ; foreach ( $ colors as [ $ fruits , $ color ]) { echo $ fruits . "'s color is " . $ color . ". \n " ; } åºåçµæ liståœ¢åŒ apple's color is red. banana's color is yellow. []åœ¢åŒ apple's color is red. banana's color is yellow. ã¯ã©ã¹å®æ°ã®ã¢ã¯ã»ã¹ç¯å²æå® ã¯ã©ã¹å®æ°ã®ã¢ã¯ã»ã¹ç¯å²ãæå®ã§ããããã«ãªããŸããã <?php class ConstDemo { const PUBLIC_CONST_1 = 1 ; public const PUBLIC_CONST_2 = 2 ; protected const PROTECTED_CONST = 3 ; private const PRIVATE_CONST = 4 ; } v7.2 objectå objectå ãæ°ãã«å°å
¥ãããŸããã ä»»æã®ãªããžã§ã¯ãã«å¯Ÿãã (åå€) ãã©ã¡ãŒã¿ã®åä»ãã (å
±å€) è¿ãå€ã®åä»ãã§äœ¿ããŸãã <?php function test ( object $ obj ) : object { return new SplQueue () ; } test ( new StdClass ()) ; æœè±¡ã¡ãœããã®ãªãŒããŒã©ã€ã ããæœè±¡ã¯ã©ã¹ãå¥ã®æœè±¡ã¯ã©ã¹ãç¶æ¿ããŠãããšãã«ã ç¶æ¿å
ã¯ã©ã¹ã®æœè±¡ã¡ãœããããªãŒããŒã©ã€ãã§ããããã«ãªããŸããã <?php abstract class Animal { abstract function call ( $ str ) ; } abstract class Dog extends Animal { abstract function call ( $ s ) ; } v7.3 ãã¬ãã·ãã«ãª HereDoc æ§æãš NowDoc æ§æ v7.2 以åã® HereDoc æ§æãš NowDoc æ§æ <?php //HereDoc æ§æ echo <<< HERE abc \n HERE ; //NowDoc æ§æ echo <<< 'NOW' def NOW ; v7.2 ã® HereDoc æ§æãš NowDoc æ§æã§ã¯ä»¥äžã®èšæ³ã«ããå¶éãããŠããŸããã çµç«¯ ID ã¯ã€ã³ãã³ãã®ãã®ã«ããŸãã çµç«¯ ID ã®ããè¡ã«ã¯ã¹ããŒã¹ãã¿ããªã©ã®æåãå«ããããšã¯ã§ããŸããã çµç«¯ ID ã®åã®æåã®æåã¯æ¹è¡ã«ããŸãã çµç«¯ ID ã®åŸã«æ¹è¡ããŸãã v7.3 以éã§ã¯èšæ³ãæ¹åãããŸãã çµç«¯ ID ã®ã€ã³ãã³ããè¡é ã¹ããŒã¹ã®åé€ãå¯èœã«ãªã çµç«¯ ID ã®æ¹è¡èŠä»¶ãåé€ããã ãã£ãŠä»¥äžã®ããã«æžãããšã§åãçµæãåŸãããŸãã v7.2 <?php $ values = <<< END a b c END . ' d e' ; v7.3 <?php $ values = <<< END a b c END . ' d e' ; array_key_first(), array_key_last() v7.2 以åã§ã¯ reset()ãend() ããã³ key() 颿°ã䜿çšããŠé
åã®æåãšæåŸã®ããŒãåãåºãããšãã§ããŸãããã ããé
åã®å
éšãã€ã³ã¿ãå
é ãæ«å°Ÿã«ç§»åãããŠããŸããããã³ãŒãã®å¯èªæ§ãšããã©ãŒãã³ã¹ãäœäžããŠããŸããŸãã v7.3 ã§ã¯ array_key_first(), array_key_last() ã远å ããŸããããã®é¢æ°ã¯é
åã®å
éšãã€ã³ã¿ã«åœ±é¿ãäžããã«å
é ãæ«å°Ÿã®ããŒãååŸããããšãã§ããŸãã ãããã« ä»åãv7.1 ïœ v7.3 ã®ããŒãžã§ã³ã¢ããã§è¿œå ãããæ°æ©èœã«ã€ããŠäžéšã玹ä»ããŸãããç¥ã£ãŠããã°åãå
¥ãããããªãšæããã®ãã©ã®ããã«äœ¿ãã°ããã®ãããããªãããããŸããããä»åŸãããŒãžã§ã³ã¢ããã«ãã¢ã³ããã匵ãã远å ãããæ°æ©èœã颿°ã䜿ãããªããŠãããããšæããŸãã
æ ªåŒäŒç€Ÿã©ã¯ã¹ ã§ãšã³ãžã㢠ãªã³ã°ã ããŒãžã£ãããŠããmzwkunã§ãã å
æéå¬ããã Developers Summit 2019 ã«ãŠã AWS ã®æ¹ãã ã€ãããŒã·ã§ã³ ãæ¯ããã¢ããŸã³æåããšããããŒããçºè¡šãããŠããã®ã§ãæ®æ®µè¡ã£ãŠããèªåãã¡ã®éçºã¹ã¿ã€ã«ãšæ¯èŒããŠãç¹ã«æ°ã«ãªã£ããšãããããã¯ã¢ããããŠãããŸãã å€åœ©ã§äœ¿ãããããµãŒãã¹ãæäŸãããŠãã AWS ãããšæ¯èŒããŠåŠã¹ãã°ãšæã£ãŠããŸãã AWSã®ã€ãããŒã·ã§ã³ã®æå AWSã®ã€ãããŒã·ã§ã³ã®ããã®çµç¹ã¥ãã AWSã®ã¢ãŒããã¯ã㣠AWSã®ã«ã«ãã£ãŒ AWSã®çµç¹ Every day is still Day One. AWS ã® ã€ãããŒã·ã§ã³ ã®æå 顧客ã«åŸ¹åºçã«ãã ããã顧客ãèµ·ç¹ã«è¡åãã é·æçèŠç¹ã§ã®ç¶ç¶ããæè³ ããžã§ã³ã«ã¯ãã ãããã詳现ãªããšã¯æè»ã«å¯Ÿå¿ ããåµé çã§ãããããªã倱æãæããªã ã©ã¯ ã¹ã«ã¯ ãªãŒããŒã·ããããªã³ã·ãã« ããããå°ã衚çŸã¯éããŸãã以äžãšåèŽãããã ãšæããŸããã ãããã¹ãããšãå®è¡ããããå°ãã詊ããŠå€§ããè²ãŠãããèª æããã£ãŠäººãšæ¥ãããã倱æã蚱容ããã èªåã®ããããäºã§ã¯ãªãã顧客èŠç¹ã倱æãæããªãã§ãã£ã¬ã³ãžããç¹ã¯ ã€ãããŒã·ã§ã³ ã®èµ·ç¹ã§ããã AWS ã® ã€ãããŒã·ã§ã³ ã®ããã®çµç¹ã¥ãã æ°ãµãŒãã¹éçºãè¡ãéã«ãŸãã¯ãã¬ã¹ãªãªãŒã¹ãšFAQãäœã FAQã¯é¡§å®¢ãš ã¹ããŒã¯ãã«ã㌠ïŒç€Ÿå
é¢ä¿è
ïŒã®äž¡é¢ãå«ãã äŒè°ã§ãã¬ãŒã³ããŒã«ã¯ããŸã䜿ããèŠãç®ã«å§ããªãããã«ããïŒèŠæ ãã§éšãããªãããã«ïŒ 6pagerãšåŒã°ããã¬ããŒããäœãäºåã«èªãã§ããïŒãã©ãã£ããç©èªããšãåŒã°ããŠããïŒ ç®çã广ãå®ããããã«çã£å
ã«ãã¬ã¹ãªãªãŒã¹ãäœãã®ã¯è峿·±ãè¡åã§ããã ç§éã®éçºã§ã¯ãèŠæ±ä»æ§æžããšããããã¥ã¡ã³ããäŒç»ãšéçºãé¢é£éšçœ²ã§äœæããŠæèãåãããããã«ããŠããŸãã ããã«ã¯èŠæ±æŠèŠãæ©èœèŠæ±ãªã©å®ããã¹ãåœç¶ãªãã®ãããä¿å®ã»åè³ªã»æ§èœã»éçšã»ãµããŒããšãã£ããµãŒãã¹å
šäœã«å¿
èŠãšæããããã®ãèšèŒãããŠããŸãã ãã¬ã¹ãªãªãŒã¹ã¯äœããŠããŸãããã ã¹ããŒã¯ãã«ã㌠ã®èŠç¹ã¯å
šãŠéçŽã§ããããã«ããã¬ãã¥ãŒã«ãã£ãŠå€æ§ãªç«å Žããã®æèŠãåãå
¥ããããã«ããŠããŸãã AWS ã® ã¢ãŒããã¯ã㣠åäžç®çã®ãµãŒãã¹ HTTPS ã® API ã®ã¿ã«ããéä¿¡ ãäºãã®ãµãŒãã¹ã¯ ãã©ãã¯ããã¯ã¹ ã« DevOpsãæšé²ïŒãã¹ããéèŠãèªååãéèŠïŒ ãã€ã¯ããµãŒãã¹ãåæã«ãã¹ããèªååã®éèŠãšå¥ããŠããããšç¡ãåºæ¬ã«å¿ å®ã§ããã ã©ã¯ ã¹ã§ãDevOpsã¯å€éšã«ä»»ããå
補ã§åãã€ããªããé²ããŠããŸãã AWS ã®ã«ã«ãã£ãŒ 5 whys ïŒããããããªããªãïŒ ãã¢ãã¹ã¯ãããã嵿¥æã«ãã¢çšã®æ¿ãç°¡çŽ ãªæºã«ããŠãããâ»å¹çŽãå¿ããªãããã«ïŒ ã¹ããŒããéå°ãªåæãéå°ãªè°è«ããããããã¿ã€ããäœã£ãŠã¿ã ãã¹ããå°œãããé«ãç®æšãã¡ã³ã¿ãªã³ã°ããã¢ãã£ãŒããã㯠QCDãããžã«ã«ãã€ã³ã¿ ã©ã¯ ã·ã§ã³ãšããããŒã¯ãŒãã«ãªãããã§ãã ããžã«ã«ã¯ ã©ã¯ ã¹ã§ãå€ãããã®éèŠãªæåã§ãããã€ã³ã¿ ã©ã¯ ã·ã§ã³ãæè¿éèŠèŠãããŠããŠã1on1ããŒãã£ã³ã°ã ã³ãŒãã³ ã°ãšããã¯ãŒããé£ã³äº€ã£ãŠããŸãã ããããã©ã®ãããªè¡åã«ç§»ããŠãããã¯ä»åŸã玹ä»ããããšæããŸãã AWS ã®çµç¹ 2-Pizza Teamsãå¿
ãç®ãè¡ãå±ãããã« QAãé害察å¿ãéçšã¯ãã¹ãŠèªããŒã å
ã§ãã æ©ãçµéšããç¹°ãè¿ã ã¬ãã¥ãŒåŸ
ã¡ç¶æ
ã¯å³çŠïŒ ãã¯ã10人以äžã®ããŒã æ§æã«ããããã现ãããªã³ãã¥ãã±ãŒã·ã§ã³ãåå°ãšããããŒã éçºãéèŠããã§ãã ã©ã¯ ã¹ã§ãã¡ã³ããŒãå¢ããã ãã§ã¯ãªãããªãŒããŒããããŒãžã£ãç©æ¥µçã«è²æãæ¡çšãããŠäžèªç¶ãªæ§æã«ãªããªãããåªããŠããŸãã èªããŒã å
ã§ãããšããã®ããå
šãŠãå
補ã§é²ããŠãã ã©ã¯ ã¹ãšäŒŒãŠããŸãã ã¬ãã¥ãŒåŸ
ã¡å³çŠã¯å°ãè³ã®çãèšèã§ããããªãŒããŒã®çãããé 匵ã£ãŠå¹çæ§ãå®ã£ãŠãããŠããŸãã Every day is still Day One. æ¯æ¥ãåžžã«ãDay Oneãã§ãã æåã®äžæ©ãèžã¿åºãæ¥ æ°ããªææŠãå¿åŸ
ã¡ã«ããæ¥ ãããŠä»æ¥ããçæ§ã«ãšã£ãŠã®ãDay Oneã çŽ æŽãããèãæ¹ã§ãããçŽ çŽã«åèãšãããã§ãã ãããããšèŠãŠãããŸããããå
±éãšãªããããªç¹ãå€ããèªåãã¡ã®ãã£ãŠããããšã«ããã«èªä¿¡ãæãŠããã§ãã
ã¯ããã« ããã«ã¡ã¯ã 幎æ«ã« http://www.java-users.jp/ccc2018fall/#/ ã«åå ããŠããŸããã®ã§ãå°ãæéã空ããŠããŸããŸããããèŽè¬ããã»ãã·ã§ã³ã«ã€ããŠæçš¿ããŸãã åœæ¥ã®ã¿ã€ã ããŒãã«ãè³æã¯äžèšãã芧ãã ããã https://docs.google.com/spreadsheets/d/1cyNPjk8doq26FgjhLVwA0Pw2grGFwxqo4yVXqJgQCTE/edit#gid=413114967 qiita.com ã¯ããã« åå ã»ãã·ã§ã³ ã»ãã·ã§ã³ææ³ IBM CloudãšKubernetesã§Spring Bootã®ãã€ã¯ããµãŒãã¹ãç°¡åã«ïŒ ãšã ã¹ãªãŒã§ã®Kotlinãžã®åãçµã¿ Java ãæŽ»çšãããã€ã¯ããµãŒãã¹ã®ããã® Kubernetes æŽ»çš çµããã« åå ã»ãã·ã§ã³ https://jjug-cfp.cfapps.io/submissions/017fc549-8d12-49dc-bb20-08ed3c9ccbb2 https://jjug-cfp.cfapps.io/submissions/331c1102-be76-4e17-bf7c-43f55dbc73da https://jjug-cfp.cfapps.io/submissions/cf4aefdb-b146-449e-9350-66f581900a84 ã»ãã·ã§ã³ææ³ IBM Cloudãš Kubernetes ã§Spring Bootã®ãã€ã¯ããµãŒãã¹ãç°¡åã«ïŒ IBM ã¯ã©ãŠã äžã« Kubernetes ã® ã¯ã©ã¹ã¿ ãäœæããŠãDBã®æ§ç¯ãäºåã«Dockerã€ã¡ãŒãžãšããŠäœã£ãŠãããSpring Bootã® Java ã¢ããªã±ãŒã·ã§ã³ããããã€ããŠãµãŒãã¹ãæ§ç¯ããŠããã»ãã·ã§ã³ãšãªã£ãŠããŸããã å
æ¥ããDockeråšãã«èå³ãæ¹§ããŠãããšãããªã®ã§ã次㯠Kubernetes ã«æãåºããããã£ããã«ãªãããã ãšã ã¹ãªãŒã§ã®Kotlinãžã®åãçµã¿ éçšäžã® Java ã¢ããªã±ãŒã·ã§ã³ãKotlinã«ç§»è¡ãã話ã ç§»è¡ã®æ¹æ³ãšããŠã¯ïŒéãã»ã©èããããŠããŸããããä»åã¯ãå
šéšãŸãšããŠæžãæãããæ¹æ³ãåãããŠããŸããã ã³ã³ããŒãäžã¯å®å
šã«æ©èœéçºãæ¢ããŠãç§»è¡ãããããšã«éäžãäœèšãªããšã¯ããªããçæéã«å®äºããã ç§»è¡äœæ¥ã®ããŠããŠãåŠã¶ããšãã§ããã·ã¹ãã ãAããBã«ç§»è¡ããããšãªã£ãæã®åèã«ãªãããã§ãã Java ãæŽ»çšãããã€ã¯ããµãŒãã¹ã®ããã® Kubernetes æŽ»çš ããªãå
å®¹ã®æ¿ãã»ãã·ã§ã³ã«ãªã£ãŠããŠã k8s ã«ãŸã è§ŠããŠããªãç§ã¯å°ã
ãã³ã¯æ°å³ã§ããããä»åŸèªèº«ã§ K8s ãè§Šãæã®åèã«ãªãTips玹ä»ãå€ãã£ãã§ãã Dockeré¢é£ Dockerã€ã¡ãŒãžã®ååŸæããã€ã®ããŒãžã§ã³ãããããªããªãã®ã§latestã¯äœ¿ããªãããš! å°ããªãµã€ãºã®ã€ã¡ãŒãžãã€ããããã«! DockerHubã®ã€ã¡ãŒãžã¯å®å
šã? ä¿¡é ŒãããŠãªãã€ã¡ãŒãžã¯ èåŒ±æ§ ãå«ãŸããŠããå¯èœæ§ã¯ããã æ¬çªå©çšãããªãã»ãã¥ãªãã£ãã§ãã¯ã»æ€èšŒã¯ããŸãããã k8s é¢é£ å©çšçšéã«ãã£ãŠãåãäžåãããã®ã§äœã§ãããã§ã k8s ã§ãšããã®ã¯ãããŸãããã k8s ã¯è²ã
ã§ãããã©ãå
šãŠã®æ©èœã䜿ãå¿
èŠã¯ãªãïŒ åŸã
ã®ã¡ã³ããã³ã¹ã®ããšãèããŠã·ã³ãã«ãªæ§æã«ããŠããã®ãããããã k8s ã®ããŒãžã§ã³ã¢ããã«ã¯èŠæ³šæïŒ ä»ãŸã§åããŠãã yaml ã§ã¯åããªããªãå¯èœæ§ãããã æ°ãã ã¯ã©ã¹ã¿ ãäœæããŠãåãããšãããã£ãŠããã«ãŒãã£ã³ã°ãå€ããŠå¯ŸåŠããŸããã Dockerã k8s ã«é¢ããŠã¯ãŸã ãŸã ååŠè
ã§ãããããè§ŠãçšåºŠã§ããããã£ãŠããªãéšåããããŸãããä»åŸè§Šã£ãŠããéã®æçãªæ
å ±ã«ãªããŸããã äœã§ãããã§ã k8s ã§ãšããã®ã¯ãããŸãããã ç§ãããèšãããŠããŠè³ãçãã§ãããææ®µããŒã¹ã§ãã®ãéžãã§ã¯ãããªãã®å
žåã§ããã çµããã« JJUG ã«ã¯æšå¹ŽåºŠããåå ããŠããŸãããæšå¹Žãããå
容ããããããã«ãªã£ãŠããèªåãæããããšãã§ããŸããã åãããŒãã§è€æ°ã®çºè¡šãããã°ä»ã®ãã¬ã³ãã®æè¡ã¯ãããªã®ããªïŒãšãã£ãæ¥çã®æµãã®ãããªãã®ãå°ãæããããç¹ãæšå¹Žããåå ããŠããææããšæããŸãã è¥æã«ãšã£ãŠãã¯ãããŠã®å匷äŒãã«ã³ãã¡ã¬ã³ã¹ãžã®åå ã¯è¶³ãéã人ãå€ããããããŸãããã倧ããã®ã«ã³ãã¡ã¬ã³ã¹ã¯åå ã®ããŒãã«ãäœãã®ã§ãïŒã¶æåŸã«å
¥ç€Ÿããæ°ã¡ã³ããŒã«ããªã¹ã¹ã¡ããŠããããã§ãã
ããã«ã¡ã¯ãæ°å1幎ç®ãšã³ãžãã¢ã®badaikiã§ãã ã¯ããã« ä»åã¯ãå
æ¥å€§éªãªãã£ã¹ã§éå¬ããã3æãã¢ããã·ã¥ãã玹ä»ããããŸãã ååã®ãã¢ããã·ã¥ã®èšäºã¯ãã¡ãã§ããâ tech-blog.rakus.co.jp ã¯ããã« ããŒãæ çºè¡š èªç±æ çºè¡š ãµãŒãã¹ã®ç°å¢æ§ç¯ 1幎éã§åŸãæ°ããªCSSã®ç¥è ãããã« ããŒãæ çºè¡š ä»åã®ããŒãã¯ãããã©ãã«äºäŸç¹éããä»å¹ŽåºŠã«çºçãããã©ãã«ãçºè¡šããŠããã ããŸããã ãä»å¹ŽåºŠã®ãã©ãã«ã¯ä»å¹ŽåºŠã®ãã¡ã«ããšããããšã§ãäœãåå ã§ã©ã®ããã«å¯ŸåŠããã®ããåããŒã ã«åœæã®å¿æ
ã蟌ããŠã話ããŠããã ããŸããã å
±æããããšãããªã®ã§ãããã»ãšãã©ã®å
容ã瀟å€ç§ã®å
容ã®ãã以äžã¯çºè¡šå
šäœã®ç·æ¬ã«ãªã£ãŠãããŸãã å
šéšã§5ã€ã®ãµãŒãã¹ã§èµ·ãããã©ãã«ãçºè¡šããŠããã ããŸããã ãªãã«ã¯ããªãªãŒã¹æ¥ãšéçœãéãªã£ãããšã§åºç€Ÿã§ãã瀟å¡ã2åãšããç¶æ³äžã§çºçãããã°å¯Ÿå¿ããšãããã®ããããããããããšãããåŸãã®ã ãšç¥ããŸããã ãã©ãã«ãèµ·ãããªãããšãäžçªã§ã¯ãããŸããããã©ãã«ãèµ·ããŠããŸã£ããšãã«åŠäœã«å·éãã€è¿
éã«å¯Ÿå¿ã§ããããéèŠã«ãªããšæããŸãããããã«ã¯é£ããã§ããããããã¯ç§ããã©ãã«ã®å¯Ÿå¿ãã§ããæè¡ã身ã«ã€ããŠããããã§ãã ãããŸã§é
å±ãããŠããã»ãšãã©ã®ãã¢ããã·ã¥ã«åå ããŠããŸãããããã€ãã®ãã¢ããã·ã¥ãšæ¯ã¹ãŠç·è¿«æããã£ããããªæ°ãããŸããã èªç±æ çºè¡š ããŒãæ ã®ã»ãã«èªç±æ çºè¡šããããŸããã ããŒãæ ãšã¯ç°ãªããä»èªåãæ°ã«ãªã£ãŠããããšãäŒãããããšã顿ã«2åã®çºè¡šè
ãç»å£ããŠãã ãããŸãããä»åã¯2åãšãæ°å1幎ç®ã®è¥æãçºè¡šããŠããã ããæè¿ã€ãŸã£ãããšãä»å¹ŽåºŠãæ¯ãè¿ã£ãå
容ãšãªã£ãŠããŸããã ãµãŒãã¹ã®ç°å¢æ§ç¯ ããŒã ã«æ°ããåå
¥ããã¡ã³ããŒã®ç°å¢æ§ç¯ãéçºã®æºåãè¡ã£ãéã«ãèŠæŠããç¹ãçºè¡šããŠããã ããŸããã ããš3ãæã»ã©ããã°æ°åã®åŸèŒ©ãç§ã®ããŒã ã«ãé
å±ããããããç§ãä»äººäºã§ã¯ãªããªãšèããªããèããŠãããŸããã æé æžã«èšèŒãããŠããéãã«è¡ãã®ã§ã¯ãªãããªããã® ã¹ã¯ãªãã ãå©ãå¿
èŠãããã®ãããªããã®äœæ¥ãå¿
èŠãªã®ãããèããªããäœæ¥ãããŠããã¹ãã ãšæããŸããã 1幎éã§åŸãæ°ã㪠CSS ã®ç¥è æ°å1幎ç®ã®ã¡ã³ããŒãé
å±ããŠããã®æéã§åŸã CSS ã®ç¥èã«ã€ããŠçºè¡šããŠããã ããŸããã ãã®æ¹ã¯åŠçã®ãšããã CSS ã«èå³ããã䜿ã£ãŠãããããªã®ã§ãããæ¥åã¬ãã«ã«ã¯ãŸã éããŠããªãã£ãããšãçæããããã§ãã ç§ãåŠçã®ãšãã«åŸãç¥èã ãã§ã¯è¶³ããªããšæãç¯ããã®äžå¹Žéã ãã§å€ããããŸãããä»ã®ç¥èã ãã§ååã ãšæ
¢å¿ããã«ç©æ¥µçã«æè¡ãåžåããããšã®éèŠããåèªèããããŸããã æåŸã«ã¯åœŒã®ä»åŸã®æé·ææ¬²ãæããŸããã ãããã« æ®æ®µã¯ããŸãèãããšãã§ããªãåãµãŒãã¹ã®ãã©ãã«ã«ã€ããŠèãããšãã§ããŸãããçŽã§èãããšã«ãããåœæã®ç·è¿«æãªã©ãäŒããæ®æ®µã®ãã¢ããã·ã¥ãšã¯äžé¢šå€ãã£ããã¢ããã·ã¥ã ã£ãã®ã§ã¯ãšæããŸããã ç§èªèº«ã¯ãŸã 倧ããªãã©ãã«ã«èŠèãããããšã¯ãããŸããããçºçæã«ã¯æ
éã«å¯Ÿå¿ããŠãããŸãã ã©ã¯ ã¹ã§ã¯åããããªåé¡ãäºåºŠèµ·ãããªããããéçºå
šäœã§èµ·ããåé¡ããã®å¯ŸåŠæ³ãå
±æããŠãããŸãã éå»ã®ç¥èŠã掻ãããé害ãä¹ãè¶ãã ã©ã¯ ã¹ã®ãµãŒãã¹ã¯é²åããŠãããŸãã
ã¯ããã« ã¯ãããŸããŠãæ°å1幎ç®ã®ãšã³ãžãã¢ã®mrym_618ã§ãã ä»åã¯ãSchooã§ JavaScript ã«ã€ããŠåŠç¿ããŠã¿ãŸããã®ã§ããã®ææ³ãæžããŠãããŸãã ç®æ¬¡ ã¯ããã« ç®æ¬¡ Schooãšã¯ å®éã«åŠç¿ããŠã¿ã Schooãšãããã€ã³ã¹ããŒã«ã®æ¯èŒ ãŸãšã Schooãšã¯ Schoo(ã¹ã¯ãŒ)ãšã¯ã倧人ãã¡ããã£ãšåŠã³ç¶ããçæŸéã³ãã¥ããã£ã§ãããåå åã®çæŸéææ¥ãšã4,600ææ¥ä»¥äžã®åç»ææã§ ãä»äºã«æŽ»ãããç¥èã»ã¹ãã«ã»èãæ¹ãåŠã¹ããµãŒãã¹ã§ãã schoo.jp ç¹åŸŽ ããã°ã©ãã³ã°ãWebãã¶ã€ã³ãªã©ã®ITåé以å€ã«ãè±èªãããžãã¹ã¹ãã«ãäŒç»ã» ããŒã±ãã£ã³ã° ãªã©å¹
åºãåéã®ææ¥ããã çæŸéãªãã§ã¯ã®è¬åž«ãçåŸå士ã§ã®ãªã¢ã«ã¿ã€ã ãªã³ãã¥ãã±ãŒã·ã§ã³ããšãããšãã§ãã PCã ãã§ãªãã ã¹ããŒããã©ã³ ãã¢ããªãããå©çšããããšãã§ãã å®éã«åŠç¿ããŠã¿ã ä»åã¯ãæ¥åã§ã䜿ãããšãå€ã JavaScript ã«ã€ããŠæ¹ããŠåŠç¿ããããšæãã JavaScript å
¥éãåè¬ããŠã¿ãŸããã ãŸãããããã€ã³ã¹ããŒã«ã§ã JavaScript ã«ã€ããŠã®åŠç¿ãè¡ããSchooãšã®æ¯èŒãããŠã¿ãŸããã schoo.jp Schooãšãããã€ã³ã¹ããŒã«ã®æ¯èŒ Schoo è¬çŸ©ããŒã¹ãªã®ã§ãåºç€ããããããããåŠç¿ã§ãã è¬åž«ã®æ¹ãå®éã®ãšã³ãžãã¢ã®æ¹ãªã®ã§ãçŸå Žã§ã¯ã©ã®ããã«äœ¿ããããã話ããŠããã ãããã€ã³ã¹ããŒã« äžã€äžã€ã®é
ç®ãçæéã§åŠç¿ããããšãã§ãã ç¥ãããé
ç®ããã³ãã€ã³ãã«åŠç¿ã§ãã æ°ããããšãªã©åºç€ ããã ã£ããåŠç¿ãããå Žåã¯ãSchooã§åŠç¿ããæ¹ãåããããããšæããŸãããéã«ãããçšåºŠç¥èããããçæéã§ãã³ãã€ã³ãã«åŠç¿ãããå Žåã¯ããããã€ã³ã¹ããŒã«ã§åŠç¿ããæ¹ããããšæããŸããããªã®ã§ãã©ã®ããã«åŠç¿ããããã«ãã£ãŠäœ¿ãåããããšã倧åã ãšæããŸããã ãŸãšã ä»åã¯ãSchooã§ JavaScript ã«ã€ããŠåŠç¿ããŸãããSchooã¯ãæ°ããããšãåºç€ ããã ã£ããåŠç¿ããã«ã¯åããããããšæããŸããã®ã§ãä»åŸãæ§ã
ãªåéãåŠç¿ãããšãã«æŽ»çšããŠãããããšæããŸãã
ã¯ããã« ããã«ã¡ã¯ãæ°åã§å
¥ç€ŸããŠ3幎ç®ã®north_mkyã§ãã æè¿æ¥åã§ SQL ãã¥ãŒãã³ã°ãããæ©äŒããã£ãã®ã§ãå®è¡èšç»ãèªã¿è§£ãèšäºãæžããïŒ...ãšæããã£ãã®ã§ãããèšäºãæžãã«ããã£ãŠãµãŒãã¹ã®ããŒã¿ããŒã¹ã䜿ãããã«ã¯ãã¡ãããããªãã®ã§ é©åºŠãªãµã³ãã«ããŒã¿ããŒã¹ãäœæãã 倧éã®ããŒã¿ãæå
¥ãã ãšããæºåäœæ¥ãè¡ãå¿
èŠãã§ãŠããŸããã ä»ãŸã§å€§éã®ããŒã¿ãå
¥ãããšããäœæ¥ã¯ããŸãããããšããªãã£ããããåå¿ã蟌ããŠåœåäºå®ããŠããèšäºãæžãåã«å€§éããŒã¿ã®æå
¥ã«ã€ããŠè¿°ã¹ãããšæããŸãã ã¯ããã« PostgreSQLã«å€§éããŒã¿ãæå
¥ããæ¹æ³ã¯å€§ããã¯2〠generate_series()颿°ã䜿çšããæ¹æ³ããããããã3ã€ã®çç± 1. 倧éããŒã¿æå
¥åŠçãŸã§ã®æºåã¯ãªã 2. åŠç¿ã³ã¹ããã»ãšãã©ãªã 3. å®è¡æéãCOPYã³ãã³ããšå€ãããªã generate_series()颿°ã䜿çšãã倧éããŒã¿æå
¥æ¹æ³ãšã¯ æ€èšŒ : COPYã³ãã³ã VS generate_series()颿° ç°å¢ ãµã³ãã«ããŒã¿ããŒã¹ çµæ ãããã« PostgreSQL ã«å€§éããŒã¿ãæå
¥ããæ¹æ³ã¯å€§ããã¯2〠è²ã
æ¢ããŠãããšã倧ããã¯äžèš2ã€ãæå
¥æ¹æ³ãšããŠåºãŠããŸããã CSV ãã¡ã€ã«ãã€ã³ããŒãããæ¹æ³ generate_series()颿°ã䜿çšããæ¹æ³ 1. 㯠postgresql ãçšæããŠããCOPYã³ãã³ãã䜿çšããæ¹æ³ã§ããå
¬åŒã®ã墚ä»ãã§ãã 14.4. ããŒã¿ããŒã¹ãžã®ããŒã¿æå
¥ ããŒã¿ããŒã¹ã«ããŒã¿ãåææå
¥ããããã«ã倧éã®ããŒãã«æ¿å
¥æäœãè¡ãå¿
èŠããŸãŸãããŸãã æ¬ç¯ã§ã¯ããã®äœæ¥ãå¹çè¯ãè¡ãããã®ã¡ãã£ãšããæèšã瀺ããŸãã (äžç¥) åäžã³ãã³ãã§ãã¹ãŠã®è¡ãããŒãããããã«äžé£ã®INSERTã³ãã³ãã§ã¯ãªããCOPYã䜿çšããŠãã ããã COPYã³ãã³ãã¯è¡ã倧éã«ããŒãããããšã«æé©åãããŠããŸãã https://www.postgresql.jp/document/10/html/populate.html ã§ãããå
¬åŒã®èšèãæŒãåã£ãŠä»åç§ã¯ 2. generate_series()颿°ã䜿çšããæ¹æ³ ãããããããŸãã generate_series()颿°ã䜿çšããæ¹æ³ããããããã3ã€ã®çç± 1. 倧éããŒã¿æå
¥åŠçãŸã§ã®æºåã¯ãªã äž¡è
ã®äœæ¥æé ã¯ä»¥äžã«ãªããŸãã æå
¥æ¹æ³1ã§ã¯å€§éããŒã¿ãçæããâçæããããŒã¿ãã€ã³ããŒãããããšããããŒã¿æå
¥åã«ããŒã¿ãçšæããæºåäœæ¥ãçºçããŸãããæå
¥æ¹æ³2ã§ã¯ ããŒã¿çæâããŒã¿ã€ã³ããŒãã®äž¡æ¹ã®åŠçãSQL1æã§è¡ã£ãŠããã ãããæå
¥ãããŸã§ã«ãããæºåã¯ãããŸãããgenerate_series()颿°ã¯æšæºã§å
¥ã£ãŠããã®ã§æ¡åŒµã¢ãžã¥ãŒã«ã®èªã¿èŸŒã¿çãäžèŠã§ãã CSV ãã¡ã€ã«ãã€ã³ããŒãããæ¹æ³ CSV ãã¡ã€ã«ãçæãã ã¹ã¯ãªãã ãäœã äœæãã ã¹ã¯ãªãã ãå®è¡ãã COPYã³ãã³ãã«é©åãªåŒæ°ãäžããŠå®è¡ãã generate_series()颿°ã䜿çšããæ¹æ³ å€§éããŒã¿ãçæãã SQL ãäœã(generate_series()颿°ã䜿çš) SQL ãå®è¡ãã 2. åŠç¿ã³ã¹ããã»ãšãã©ãªã æå
¥æ¹æ³1ã® CSV ãã¡ã€ã«çæ ã¹ã¯ãªãã ã¯èªåã®å¥œããªããæ¹ã§çµãã°ããã®ã§ãããŸã§æéã¯ããããŸãããã鬌éã¯COPYã³ãã³ãã ãšæããŸããCOPYã³ãã³ãã¯ãããã倧éããŒã¿ã®æå
¥ããæ¢åããŒãã«ã®å¥ããŒãã«ãžã®è€è£œã«äœ¿ããšæããŸããããã䜿ãããšãããšè²ã
ãäœæ³ã«éŠŽæã¿ããªãæéåã£ãŠããŸããŸãã COPY table_name [ ( column_name [, ...] ) ] FROM { 'filename' | PROGRAM 'command' | STDIN } [ [ WITH ] ( option [, ...] ) ] ããã§optionã¯ä»¥äžã®ããããã§ãã FORMAT format_name OIDS [ boolean ] FREEZE [ boolean ] DELIMITER 'delimiter_character' NULL 'null_string' HEADER [ boolean ] QUOTE 'quote_character' ESCAPE 'escape_character' FORCE_QUOTE { ( column_name [, ...] ) | * } FORCE_NOT_NULL ( column_name [, ...] ) FORCE_NULL ( column_name [, ...] ) ENCODING 'encoding_name' https://www.postgresql.jp/document/10/html/sql-copy.html ãã¡ã€ã«ãã¹ã®æå®1ã€ã«ããŠã windows ãš linux ã§ç°ãªãã®ã¯ãã¡ããã®ããšãæå
¥ããã«ã©ã å€ã«ç©ºçœãå
¥ã£ãŠããå Žåã®æ±ããæå®ããããªã©ã銎æã¿ã®ãªã人éã«ãšã£ãŠã¯ ãã©ã€ã¢ã³ããšã©ãŒ ã§æéãããããŸã(ç§ã¯5-10åããããŸãã)ã äžæ¹æå
¥æ¹æ³2ã¯ãã€ãã©ãã SQL ãäœæããã ããªã®ã§åŠç¿ã³ã¹ã㯠ã»ãŒãªã ã§ãã 3. å®è¡æéãCOPYã³ãã³ããšå€ãããªã ããã¯å®æž¬ããŠé©ããã®ã§ãããäž¡è
ãšã æå
¥æéã¯ã»ãŒå€ãããªã ãšããçµæã«ãªããŸããã å
¬åŒã®ã墚ä»ãã®COPYã³ãã³ããšåçã®åŠçæ§èœã§ãæºåã«æéãããããªããšããã®ã§ç§ã¯ãã®generate_series()颿°ã䜿çšããæ¹æ³ãããããããŸãã generate_series()颿°ã䜿çšãã倧éããŒã¿æå
¥æ¹æ³ãšã¯ ã顧客ããŒãã«ã«1000äžè¡ã®ããŒã¿ãå
¥ãããååã¯" ã©ã¯ ã¹å€ªén"ã«ãã(n=1...10,000,000)ã äžèšãæºãã倧éããŒã¿çæ SQL ã¯ä»¥äžã«ãªããŸãã 1000äžè¡ãå
¥ã£ã1GBè¶
ã®ãã¡ã€ã«ãçšæããå¿
èŠã¯ãããŸãããSQL1æã§äœæã§ããŸãã INSERT INTO customer (id,name) SELECT i, format('ã©ã¯ã¹å€ªé%s', i) FROM generate_series(1,10000000) as i ; SELECT éšåã ããæã€ãšäžèšãè¿ã£ãŠããŸãã ?column? | ?column? ----------------+------------------------ 1 | ã©ã¯ã¹å€ªé1 2 | ã©ã¯ã¹å€ªé2 ... 10000000 | ã©ã¯ã¹å€ªé10000000 é£çªãçæããéåãšããŠè¿ãgenerate_series()颿°ãå¿çšãããšããã®ããã«ãã®å Žã§ããŒãã«ãäœããããªããšãã§ãã倧éããŒã¿ãæå
¥ããããšãã§ããŸããä»ã«ãäžè¿°ã®format()颿°ã®ããã«random()颿°ãªã©ãšçµã¿åããããšããæãã®å€§éããŒã¿ãæè»œã«äœæããããšãã§ããŸãã æ€èšŒ : COPYã³ãã³ã VS generate_series()颿° ããããŒãã«ã«1000äžè¡ãæå
¥ããåŠçã®çµéæéãèšæž¬ããŸããã ç°å¢ Mac OS10.14, ã¡ã¢ãª8GB postgresql 11 postgresql .conf shared_buffer=128MB wal_level = minimal # ã¢ãŒã«ã€ã ãoffã«ãã ãµã³ãã«ããŒã¿ããŒã¹ PostgreSQLTutorial.com ã®ãµã³ãã«ããŒã¿ããŒã¹ã䜿çšããŸããã ãã¥ãŒãã³ã°ã®èšäºãæžãç®çã ã£ããããããçšåºŠå€éšããŒå¶çŽããã£ããã«ã©ã æ°ããã£ããããããŒã¿ããŒã¹ã¯ãªãããªããšæ¢ããŠãããããã«ãã®ããŒã¿ããŒã¹ãèŠã€ãããŸããã http://www.postgresqltutorial.com/postgresql-sample-database/ çµæ äž¡è
ãšãã»ãŒåãçµæã«ãªããŸããã COPYã³ãã³ã dvdrental=# COPY customer (store_id,first_name,last_name,email,address_id,activebool,create_date,last_update,active) FROM '/Users/north_mky/customer.csv' ( delimiter ',', format csv, header true ); COPY 10000000 Time: 556051.126 ms (09:16.051) generate_series()颿° dvdrental=# INSERT INTO customer (store_id,first_name,last_name,email,address_id,activebool,create_date,last_update,active) dvdrental-# SELECT dvdrental-# 2, dvdrental-# 'Austin', dvdrental-# format('Cintron%s', i), dvdrental-# format('austin.cintron%s@sakilacustomer.org', i), dvdrental-# 605, dvdrental-# 't', dvdrental-# '2006-02-14', dvdrental-# '2013-05-26 14:49:45.738', dvdrental-# 1 dvdrental-# FROM dvdrental-# generate_series(1,10000000) as i dvdrental-# ; INSERT 0 10000000 Time: 558479.994 ms (09:18.480) ãããã« generate_series()颿°ã¯å€§éããŒã¿ã®æå
¥ã«å¯ŸããŠã楜ã«å°å
¥ã§ããŠæ¥œã«äœ¿ãã颿°ã§ãã ãã¹ãæã«å€§éããŒã¿ãå¿
èŠã«ãªã£ãéã®æå©ãã«ãªãã°å¹žãã§ãã ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã 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
RAKUS Meetup ã®ã㎠@moomooya ããš ååŒ·äŒæéãªãžãµã³ ãç®æããŠããéŽæšã§ãã å
æ¥åŒç€Ÿã«ãŠ RAKUS Meetup Tokyo #2 ããã³ããšã³ãNight ãšç§°ããã€ãã³ããéå¬ããŸããã®ã§ããã¡ãã®ã€ãã³ãã¬ããŒããæçš¿ããŸãã ãã€ãã¯ã€ãã³ãéå¹åŸ3ç§ä»¥å
ã«ã¬ããŒããå
¬éããŠããã®ã§ãããä»åã¯1,688,400ç§ã»ã©çµéããŠããŸããŸããorz åœæ¥ã®æ§å çºè¡šã®çŽ¹ä» Vue.js ã®æ°èŠãããã¯ãã§æ¥œã㊠UI ãæäŸããããšæã£ãããããŸã§æ¥œãããªãã£ã話 話ã®çµç·¯ãšçºç«¯ éžæã®æåŠ éŽæšã®ææ³ æ¢å Web ã¢ããªã±ãŒã·ã§ã³ãžã® React.js é©çš 話ã®çµç·¯ãšçºç«¯ React å°å
¥ã«ããã£ãŠãã£ãããš æ¢åå®è£
ãšã®å
±åãšããã®åŸã®èª²é¡ éŽæšã®ææ³ Vue.js ãåããŠãããã¯ãã«å°å
¥ããŠçŽé¢ãã課é¡ãšåŸããã幞ã ãããã¯ãã« Vue.js ãå°å
¥ããŠã¶ã€ãã£ãèª²é¡ Vue.js ãæ¡çšããŠå¹žãã ã£ãããš æèŠªäŒ æ¬¡åéå¬ã«ã€ããŠ åœæ¥ã®æ§å RAKUS Meetup Tokyo #2 äŒå Žã®æ§å ä»åã¯30人ã®åéæ ãäºå®ããŠããã®ã§ãããäºæ³å€ã®å¥œè©ã«ã€ãäŒå Žãã°ã«ãŒãäŒæ¥ã§ãã ã©ã¯ã¹ããŒãããŒãº ã®ãªãã£ã¹ã«å€æŽããŠã®éå¬ãšãªããŸããã åœæ¥ã¯éšãéã æªå€©å ã®äžãåå ããã ãããããšãããããŸããã çºè¡šã®çŽ¹ä» Vue.js ã®æ°èŠãããã¯ãã§æ¥œã㊠UI ãæäŸããããšæã£ãããããŸã§æ¥œãããªãã£ã話 奜ããªèšè㯠YAGNI ãš "Done is better than perfect." *1 ãšããåŒç€Ÿãã¶ã€ããŒç«¹å·ã®çºè¡šã§ãã æ°èŠãµãŒãã¹ã§å©çšãã UI ãã¬ãŒã ã¯ãŒã¯ ãéžå®ããæã®è©±ã§ãã 話ã®çµç·¯ãšçºç«¯ æ°èŠãµãŒãã¹éçºãããžã§ã¯ãã« ã¹ã¯ã©ã éçºã®ãããã¯ããªãŒããŒãšããŠåç»ããããžã§ã¯ãã®æ¹éã ãæäŸããŠããèãããã ãšãããã®ã ã£ããããUIã«ã€ããŠã¯ã©ãã©ãå€ãããã®ãšããŠèªåã§ã®äœã蟌ã¿ãé¿ããæ¹åã«æææ±ºå®ãããšã®ããšã éžæè¢ãšã㊠Bootstrap ã Material Design ãæ€èšãããšããã仿§ãšããŠæè¡ã¬ã€ã€ããç¬ç«ããŠãã Material Design ãæ¡çšããããšã«ã ããã«äž»ã ã£ã3çš®é¡ã® UI ãã¬ãŒã ã¯ãŒã¯ ã®ãªããã Vuetify ãæ¡çšã Material Design 㪠UI ãã¬ãŒã ã¯ãŒã¯ ã®ç¹åŸŽæ¯èŒ éžæã®æåŠ ãã ããçŸç¶ã§ã¯ã©ã®éžæè¢ãå®ç§ã§ã¯ãªãæ§åãäžæã¯éžå®ããã¹ãããšæãå床æ€èšŒãããã®ã®ã Material Design ã®ä»æ§ã«å¯Ÿããå
足床ã¯ã©ããäžé·äžçã§ãã ããšãããã£ããæ¡çšãã Vuetify ã®äœè
㯠Twitter äžã§ãã®ããã«çºèšããŠããã One thing I've learned over the years working with @materialdesign is that there are so many inconsistencies between the spec and their web components. It's frustrating, but in the end works out for the user because we are going to make sure both are supported. — John Leider (@zeroskillz) 2019幎1æ6æ¥ ã仿§ãšå
¬åŒå®è£
ã®å·®ç°ãå€ããã UI ãã¬ãŒã ã¯ãŒã¯ åŽã§åžåããŠãããããªããããïŒæèš³ïŒ éŽæšã®ææ³ ãBootstrap 㯠Twitter Geek åãã ãšãããªããªããã³ã¯ãªçºèšãé¢çœãã£ãã§ãã æ¢å Web ã¢ããªã±ãŒã·ã§ã³ãžã® React.js é©çš dev ãã¡ã€ã³ 賌å
¥äºå®ã® ãã±ã¢ã³GO ãªãžãµã³ã§ãåŒç€Ÿæ¥œæ¥œæçްãªãŒããšã³ãžãã¢ã®äžç°ã®çºè¡šã§ãã 2017幎åŸå㫠楜楜æçް ã®æ°æ©èœãéçºããéã« React.js ãå°å
¥ãã話ã§ãã 話ã®çµç·¯ãšçºç«¯ æ¢åã®ããã³ããšã³ãã®å®è£
㯠jQuery ãçšãããã®ã ã£ããããã®ãšãéçºããæ©èœã¯ããã³ããšã³ãã®èŠä»¶ãè€éãªãã®ã ã£ãã DOM ãåºè»žã«æäœãè¡ã jQuery ã§ã¯ç¶æ
ã®ç®¡çãé£ãã ãããã³ããšã³ã ãã¬ãŒã ã¯ãŒã¯ ã®å°å
¥ãæ€èšã éžå®åœæã¯ç¹ã«æ¥æ¬åœå
ã§ React.js ãçªåºããŠæµè¡ã£ãŠãããJSX ã®èŠãç®ã® ã€ã³ã㯠ããšã¯è£è
¹ã«èŠããããšãå°ãªãã ããŒã¯ã¢ãã ãã·ã³ãã«ã«ä¿ãŠããã ã£ãããšãé
åã«æãããå ããŠãæµè¡ã£ãŠããããæ
å ±éãå€ãããšããã©ã¹è©äŸ¡ã«ãªã£ãã React å°å
¥ã«ããã£ãŠãã£ãããš å°å
¥ã«ããã£ãŠã¯ããŒã å
ã§å°ããªããŒã«ãéçºããŠã¿ããå®éã«éçºããŠã¿ããš state ãš props ã®ç®¡çã倧å€ã ã£ããããæåãã Redux ãæ¡çšããããšã«ã å°ãã詊ããŠã¿ãããšã¯å€§äº ã ã£ãã ããã« ES2015 å匷äŒãããŒã å
ã§éå¬ãè³æãšã㊠WEB+DB vol.87 ã¯ç¥å· ãªã®ã§ãªã¹ã¹ã¡ã æ¢åå®è£
ãšã®å
±åãšããã®åŸã®èª²é¡ jQuery ãšã®å
±åã¯ã§ããŠããŠã驿驿ã«äœ¿ãåããŠãããæ¬çªç§»è¡åŸã« React ã«èµ·å ãããã°ã¯ãŸã èµ·ããŠããªã ã åœæãŸã v15 ç³»ã ã£ãã®ã§çŸåš v16 ç³»ãžã®ä»¥éãé 匵ã£ãŠããããç Žå£çãªå€æŽãããå°ãã€ããã ä»ç»é¢ãžã®é©çšã¯ç°¡åãªç»é¢ã§ãé©çšããã¹ããã©ãããªã©æ©ãã§ããããå€ãã·ã¹ãã ãå°ãã〠React ã«çœ®ãæããŠããããšã¯å¯èœããã éŽæšã®ææ³ ã人é¡ã«DOMãæ±ãã®ã¯é£ããããã ãšããçºèšãããããããã¿ãæ·±ãã£ãã§ããDOM ããŒã¹ã§è€éãªç¶æ
管çã¯ãããé£ããã§ãã ã¡ãªã¿ã«ã¹ã©ã€ã5æç®ã® åºçªã®ãªãSãã ã¯ç§ã®ããšã§ãïŒåœææ¥œæ¥œæçްéçºããŒã ã«ããŸããïŒã äœè«ã§ããã æ¥œæ¥œæçްãã€ãã« CM ãäœã£ãŠããããŸãã ã Vue.js ãåããŠãããã¯ãã«å°å
¥ããŠçŽé¢ãã課é¡ãšåŸããã幞ã Qiitaã§ååŒ·äŒæéãªãžãµã³ãç®æããŠãã åŒç€Ÿãšã³ãžãã¢éŽæšïŒç§ã®ããšã§ãïŒã®çºè¡šã§ãã 竹å·ã®çºè¡šã«ãåºãŠãã æ°èŠãµãŒãã¹ ã®éçºã« Vue.js ãå°å
¥ãã話ã§ãã åŒç€Ÿã®ãµãŒãã¹ã§ã¯äžéš Vue.js ãæ¡çšããŠãããµãŒãã¹ã¯ãããã®ã®ããããã¯ã·ã§ã³ã¬ãã«ã§å
šé¢çã«ããã³ããšã³ã ãã¬ãŒã ã¯ãŒã¯ ãšã㊠Vue.js ãå°å
¥ããã®ã¯ä»åã®ãããžã§ã¯ããåã§ããã ã¡ããã©ç§ããã®ãããžã§ã¯ãã«åç»ããéã« Vue ç±ãé«ãŸã£ãŠããããšãããã åã°ãŽãªæŒãã§ æ¡çšã«ããã€ããŸããã ãšã¯ããæ¬æ Œçã«å©çšããã«ããã£ãŠä»¥äžã®ãããªèª²é¡ã«ã¶ã€ãããŸããã ãããã¯ãã« Vue.js ãå°å
¥ããŠã¶ã€ãã£ãèª²é¡ ã¢ã㌠æŒç®å 䜿ããªã åæåæã«ååšããªãããããã£ããªããžã§ã¯ãã«è¿œå ãããšãã¯æ³šæãå¿
èŠ ã©ã€ãã©ãªéã§èŠçŽ åãè¡çªããŠããŸããšåäœããªããªã ã»ãªãªãŒãããããªã ãã©ã¹ã¿ã€ã«ã¬ã€ããå
å®ããŠããã®ã§çèªãããšçããæžããŠããããšãå€ã Vue.js ã¹ã¿ã€ã«ã¬ã€ã Vue.js ã³ã³ããŒãã³ãã¹ã¿ã€ã«ã¬ã€ã Vuex䜿ãããïŒåé¡ ã³ã³ããŒãã³ã ã«éãããããªéåæãªããŒã¿ååŸåŠç *2 ã Vuex ã«å®è£
ããŠãã React ïŒãšããã Redux ïŒã ãšãããæ£è§£ããã *3 ã§ãããVue ã ãš ã³ã³ããŒãã³ã ã«å®è£
ããã»ããæ±ããããã£ã mixins 䜿ãããã props ãããŒã«ã«ã¹ããŒãã mixins ã§å®çŸ©ããŠããŸãã mixins ã解決ããããŸã§ã®äžç¬ã®é undefined ã«ãªã£ãŠå°ã£ã Vue.js ãæ¡çšããŠå¹žãã ã£ãããš åäžãã¡ã€ã« ã³ã³ããŒãã³ã ã¯æ¬åœã«å¹žã ããã¥ã¡ã³ããå
å®ããŠããã®ãæ¬åœã«å¹žã æè¿ã åŒç€Ÿã®å€§å¹³ ã ããŒã«ã©ã€ãºã®ã³ã³ããªãã¥ãŒã¿ãŒã«ãªã£ãŠããŸã React + Redux ãã£ãŠã人ãªãèãæ¹ãè¿ãã®ã§ Vue + Vuex ãã¹ã ãŒãºã«å
¥ããŠå©ãã£ã æèŠªäŒ ãçŽæã® Sushi ãš Pizza ãš Beer ãçšæããŸãã æ¬¡åéå¬ã«ã€ã㊠次åã®æ±äº¬ã§ã®éå¬ã¯5æã« ãBtoBãµãŒãã¹ãèªç€ŸDCã« Amazon S3 äºæã¹ãã¬ãŒãžãå°å
¥ãããšãã®èŠæ©ã ãããŒãã«éå¬äºå®ã§ãã 仿3æã®åŸåã«ã¯åéãéå§ã§ãããšæããŸãã Connpassã®ã°ã«ãŒã ã«å
¥ã£ãŠããã ãããšéç¥ãé£ã³ãŸãã®ã§ãã¡ããããããããããããŸãã *1 : Facebook æ¬ç€Ÿã®å£ã«è²ŒãããŠãããšããæšèªãæ¥æ¬ã§ã¯ãå®ç§ãç®æããããŸãçµããããããšèš³ãããŠããã *2 : API å©ããŠããŒã¿ååŸãããããªåŠç *3 : æèŠªäŒã§æããŠããã ããŸãã
ã¯ããã« ããã«ã¡ã¯ããšã³ãžãã¢1幎ç®ã®y_kwmtã§ããå
æ¥ãæ¥åã§puppeteerãçšããŠE2Eãã¹ãã®ãã¹ãã³ãŒããå®è£
ããŸãããE2Eãã¹ããšã¯ãEnd to Endãã¹ãã®ç¥ã§ãéå§ããçµäºãŸã§ã¢ããªãæåŸ
éãåãã確èªãããã¹ãã§ããä»åã¯puppeteerã®åŠç¿ãããããã«puppeteerãçšããŠèªåã§ ã©ã¯ ã¹ã®ãšã³ãžãã¢ããã°ãµã€ãã«ã¢ã¯ã»ã¹ããããšã«ã€ããŠæžããããšæããŸãã ç®æ¬¡ ã¯ããã« ç®æ¬¡ puppeteerãšã¯ å°å
¥æ¹æ³ ã³ãŒãã£ã³ã°ãå®è¡ æåŸã« puppeteerãšã¯ puppeteerã¯ãNode.jsã§Headless Chrome ãèªåã§æäœã§ããããã«ããã©ã€ãã©ãªã§ããpuppeteerãçšããããšã§ã¯ãªãã¯ãããã¹ãå
¥åãç»é¢é·ç§»ãªã©ãèªåã§è¡ããŸãã å
¬åŒãµã€ãã¯ãã¡ãã§ãã github.com å°å
¥æ¹æ³ ä»åã¯ãã¡ãã®èšäºãåèã«ã€ã³ã¹ããŒã«ãè¡ããŸããã tech-blog.rakus.co.jp ãŸãã¯Node.jsãšnpmãã€ã³ã¹ããŒã«ããŠãã ããã Node.js㯠ãã¡ã ããããŠã³ããŒããè¡ãã ã€ã³ã¹ããŒã© ãå®è¡ããç»é¢ã®æç€ºã«åŸã£ãŠã€ã³ã¹ããŒã«ããŠãã ãããnpmã®ã€ã³ã¹ããŒã«ã¯ä»¥äžãå®è¡ããŠãã ãããpuppeteer ã¯æäœçµæã Promise ã§è¿ãã®ã§ãasync/await ã䜿ããv7.6.0 以éã®ããŒãžã§ã³ãçšæããã»ããããã§ãã npm init Node.jsãšnpmã®ã€ã³ã¹ããŒã«ãå®äºããããpuppeteerã®ã€ã³ã¹ããŒã«ãå®è¡ããŸãã npm i puppeteer ã³ãŒãã£ã³ã°ãå®è¡ puppeteerã®ã€ã³ã¹ããŒã«ãå®äºããããã³ãŒããæžããŠãããŸããã³ãŒãã¯ãã¡ãã®ããŒãžãåèã«ãããŠããã ããŸããã webbibouroku.com 以äžã®ãã¡ã€ã«ãå®è¡ã㊠ã©ã¯ ã¹ã®ãšã³ãžãã¢ããã°ã«ã¢ã¯ã»ã¹ããŸããä»åã¯å®è¡ã§ããŠããã確èªããããã«ãã©ãŠã¶ã衚瀺ããã ãã§ãªãã ã¹ã¯ãªãŒã³ã·ã§ãã ãæ®åœ±ããŸããããã®ã³ãŒãããã¡ãã§ãã ãã¡ã€ã«åïŒsample.js const puppeteer = require( 'puppeteer' ); (async () => { //ãã©ãŠã¶ãå®çŸ©(headless:false ãã©ãŠã¶ã衚瀺ãã, true 衚瀺ããªã) const browser = await puppeteer.launch( { headless: false } ); //ã¿ããå®çŸ© const page = await browser.newPage(); //ãã©ãŠã¶ã®ãµã€ãºãå®çŸ© await page.setViewport( { width: 1240, height:1080 } ); //åŸ
æ© async function sleep(delay) { return new Promise(resolve => setTimeout(resolve, delay)); } // Googleã«ã¢ã¯ã»ã¹ await page. goto ( 'https://www.google.co.jp/' ); // æ€çŽ¢çªã«ãã©ã¯ã¹ããšã³ãžãã¢ããã°ããšå
¥å await page.type( '.gLFyf' , 'ã©ã¯ã¹ããšã³ãžãã¢ããã°' ); //ã¹ã¯ãªãŒã³ã·ã§ããæ®åœ± await page.screenshot( { path: 'google.png' } ); // æ€çŽ¢ãã¿ã³ã¯ãªã㯠//åŸ
æ©æéãèšããªããšæ¢ãŸã£ãŠããŸãããšãããã®ã§èšè¿° await sleep(5000); await page.focus( 'input[name="btnK"]' ); await page.click( 'input[name="btnK"]' ); //åŸ
æ©æéãèšããªããšæ¢ãŸã£ãŠããŸãããšãããã®ã§èšè¿° await sleep(5000); //ã¹ã¯ãªãŒã³ã·ã§ããæ®åœ± await page.screenshot( { path: 'search_result.png' } ); // æ€çŽ¢çµæã®å
é ãªã³ã¯ãã¯ãªã㯠await page.click( '.rc > .r > a' ); //ã¹ã¯ãªãŒã³ã·ã§ããæ®åœ± await page.screenshot( { path: 'blog.png' } ); //ãã©ãŠã¶ãéãã await browser.close(); } )(); ã³ãŒããæžããããã³ãã³ãã§ãã¡ã€ã«ãå®è¡ããŸãã node sample.js å®è¡äžã«æ®åœ±ãã ã¹ã¯ãªãŒã³ã·ã§ãã ããã¡ãã§ãã google . png search_result. png blog. png æåŸã« ä»åã¯ãµã€ãã«ã¢ã¯ã»ã¹ãããšããç°¡åãªåäœã§ããããpuppeteerã0ããå§ããŠãã¡ã€ã«ãå®è¡ããããšãã§ããŸãããä»åŸããŸãæ¥åã§puppeteerã䜿ããšãªã£ãæã®ããã«ããããããå匷ãç¶ããŠè€éãªåäœãèªååã§ããããé 匵ããŸãã