æè¿ RAKUS Meetup é¢é£ã®å®£äŒã°ããããŠããéŽæš( @moomooya )ã§ããä»å㯠ã©ã¯ ã¹éçºéšã§å®æœããŠããåãçµã¿ã«ã€ããŠè€æ°åã«ããã£ãŠç޹ä»ããŠãããã°ãšæããŸãã ã©ã¯ ã¹ã®éçºéšã§ã¯ãããŸã§ç€Ÿå
ã§å©çšããŠããªãã£ãæè¡èŠçŽ ãèªç€Ÿã®éçºã«é©åãããæ€èšŒããããžãã¹èŠæ±ã«å¯ŸããŠè¿
éã«å¿ããããããã«ããªãã ã é ïŒ ã ïŒ çºã® æª ïŒ ã¿ ïŒ æ¥ã« å
ïŒ ãã ïŒ æããã€ãããžã§ã¯ãïŒéç§°ïŒãã¿ãããããžã§ã¯ãïŒã ãšãããããžã§ã¯ãããããŸãããã¡ãã®ãããžã§ã¯ãã®ææã«ã€ããŠå®æçã«ç޹ä»ããŠãããããšæããŸãã é£èŒç®æ¬¡ ä»åŸæçš¿ãããèšäºã«ãªã³ã¯ã貌ã£ãŠãããŸãã ãå
šææ€çŽ¢ ã ElasticsearchãšããŒã¿å¿ååææ³ã âä»èªãã§ããèšäº ãå
šææ€çŽ¢ã®æ¢æ± Elasticsearch(1) ã: ãããžã§ã¯ãæ¹éããã³ElasticsearchæŠèР倧éããŒã¿ãæ€çŽ¢ãããµãŒãã¹ã§Elasticsearchã¯RDBã®ä»£æ¿åè£ã«ãªããããïŒ(Elasticsearch vs pg_bigm)ã ããŒã¿å¿åå 第1åïŒå¿ååãããå人æ
å ±ãšã¯äœãªã®ã ããŒã¿å¿åå 第2åïŒå人æ
å ±ã¯å¿ååããŠãæå³ããªãã®ã§ã¯ãªããïŒ ããŒã¿å¿åå 第3åïŒå人æ
å ±ãå¿ååããããã»ã¹ ããŒã¿å¿åå 第4åïŒå¿ååã®ããã«è¡ãããŒã¿é
ç®ã®äžè¬åãšã¯ ããŒã¿å¿åå 第5åïŒããŒã¿å¿ååã®ææš ããŒã¿å¿åå 第6åïŒå®éã®å¿åå ãã¿ãããããžã§ã¯ãã§ã¯åããŒã ããæå¿ãåããå
è¿°ã®èª²é¡è§£æ±ºãè¡ãéçºéšæšªæãããžã§ã¯ããšããŠ2017幎ããéå¶ãããŠããŸãããã¡ããæ¥åæéå€ã§ã®åãçµã¿ ã§ã¯ãªã ãæ¥åæéå
ã§ã®åãçµã¿ã§ãïŒéçºéšã®äºæ¥èšç»ã«ãã¡ãããšèšèŒãããŠããŸãïŒã ãããžã§ã¯ãçºè¶³ã®çç± åŒç€Ÿãé·ããµãŒãã¹ãæäŸããŠããŸãããé·ãç¶ããµãŒãã¹ã«ãããã¡ãªã®ãæè¡çãªé³è
åããããããããšã«åæ¥çã«æåãåããŠããŸãããããããã«ãªããã倧ããªå€åãå ãã«ããç¶æ³ã«ãªãã€ã€ãããŸãã ãšã¯ãã幎ã
çç£æ§ã®é«ã ãã¬ãŒã ã¯ãŒã¯ ãã©ã€ãã©ãªãåºãŠããäžã§ãå€åãé¿ãç¶ããŠãããšç«¶åä»ç€Ÿããã®è¿œãäžãã«è² ããŠããŸããããŸããã5幎åŸã10幎åŸã«ãåªäœæ§ãä¿ã€ããã«ã¯ä»åŸã©ããã£ããã®ãåãå
¥ããã¹ããªã®ããæš¡çŽ¢ããå¿
èŠããããšãã倿ã«ããããã¿ãããããžã§ã¯ããçºè¶³ããããšã«ãªããŸããã ãªãããã¿ãããããžã§ã¯ãã«ã€ããŠã¯ä»¥åã«åæããããã¡ãã®èšäºããåç
§ãã ããã ãã€ã¯ããµãŒãã¹ãžã®ææŠãã©ã¯ã¹ãèããæè¡çè² åµãè¿æžããæé©ãªã¿ã€ãã³ã° - Qiita:Zine 仿ã®åãçµã¿ ãã¿ãããããžã§ã¯ãã§ã¯äžå®æéããšã«ããŒããå€ããŠæ€èšŒãé²ããŠããŸããã仿2019å¹ŽåºŠäžæã¯ã æ€çŽ¢ãšã³ãžã³ ãçšãã å
šææ€çŽ¢ ããããŒãã«é²ããŠããŸãã æ€çŽ¢ãšã³ãžã³ ãšããŠã¯Elasticsearchãã¿ãŒã²ããã«æ€èšŒãé²ããŠããŸããElasticsearchèªäœã¯2014幎ããããæ®åãé²ãã§ããŸããããåŒç€Ÿã§ã¯æŽ»çšããŠããŠã貯ããããšãã§ããŠããŸããã§ããã ã¹ã±ãŒã©ãã«ãªæ€çŽ¢ã®ä»çµã¿ã¯ä»åŸããŒã¿åãããèŠçŽ ãå¢ããŠæ€çŽ¢å¯Ÿè±¡ãå€§èŠæš¡åããŠãã£ãéã«å¿
èŠã«ãªããã®ãšããŠé·æçãªèª²é¡ãšãªã£ãŠããŸãããªã®ã§ãŸãã¯åŒç€Ÿã§æŽ»çšã§ããããªçšéã®æ€èšŒãåªå
ã§ãããã³ã³ããããŒã¹ã® ã¯ã©ã¹ã¿ ã§ã¹ã±ãŒã«ãå¿
èŠã«ãªã£ãæã®éçšããŠããŠèç©ãè¡ãªã£ãŠããããšèããŠããŸãã Elasticsearch㯠å
šææ€çŽ¢ 以å€ã«ããElastic StackïŒä»¥åã¯ELK StackãšåŒã°ããŠããŸããïŒã§ç¥ãããããã«åæ£ã·ã¹ãã ã®ãã°åéãåæãå¯èŠååºç€ãšããŠå©çšã§ããããšãããããã³ã°åºŠåããã¿ãããšãã§ããç¹åŸŽããä»åŸã®ãµãŒãã¹å±éã«ãããŠå¿çšã§ããç¯å²ã¯åºãã ãããšèããŠããŸãã 䜵ããŠæ€çŽ¢ã®éã«å¿
èŠããªãããŒã¿ãåæã«å¿
èŠãªãæ©åŸ®æ
å ±ãæé€ããç¡çšãªãªã¹ã¯ãäœæžããããã«ããŒã¿ãå¿ååããææ³ã坿¬¡çãªããŒããšããŠä»æã®åãçµã¿ã«å«ããŠããŸãã ããŒã¿ãã©ã®çšåºŠå¿ååãããŠããããæ°å€åããææ³ããããŒã¿ãå¿ååããããã®äžè¬åææ³ã®ããŠããŠãèç©ããä»åŸ ããã°ããŒã¿ ã婿޻çšããéã«ãããŒã¿ãé©åã«æ±ããããã«ãªãããšãæåŸ
ããŠããŸãã ä»åŸã宿çã«èšäºãæçš¿ããŠãããŸãã®ã§ãããããé¡ãããŸãã é£èŒç®æ¬¡ ä»åŸæçš¿ãããèšäºã«ãªã³ã¯ã貌ã£ãŠãããŸãã ãå
šææ€çŽ¢ ã ElasticsearchãšããŒã¿å¿ååææ³ã âä»èªãã§ããèšäº ãå
šææ€çŽ¢ã®æ¢æ± Elasticsearch(1) ã: ãããžã§ã¯ãæ¹éããã³ElasticsearchæŠèР倧éããŒã¿ãæ€çŽ¢ãããµãŒãã¹ã§Elasticsearchã¯RDBã®ä»£æ¿åè£ã«ãªããããïŒ(Elasticsearch vs pg_bigm)ã ããŒã¿å¿åå 第1åïŒå¿ååãããå人æ
å ±ãšã¯äœãªã®ã ããŒã¿å¿åå 第2åïŒå人æ
å ±ã¯å¿ååããŠãæå³ããªãã®ã§ã¯ãªããïŒ ããŒã¿å¿åå 第3åïŒå人æ
å ±ãå¿ååããããã»ã¹ ããŒã¿å¿åå 第4åïŒå¿ååã®ããã«è¡ãããŒã¿é
ç®ã®äžè¬åãšã¯ ããŒã¿å¿åå 第5åïŒããŒã¿å¿ååã®ææš ããŒã¿å¿åå 第6åïŒå®éã®å¿åå
ã¯ããã« ããã«ã¡ã¯ å
¥ç€ŸïŒå¹Žç®ã®Engawaã§ããã¿ã€ãã«ã«èšèŒã®éã5/18(å)ã«éå¬ããã JJUG CCC 2019 Springã«åå ããŠããŸããã æ§ã
ãªã»ãã·ã§ã³ãèŠãŠããŸããããã®äžã§ãç¹ã«å°è±¡ã«æ®ã£ããã®ã玹ä»ããããšæããŸãã http://www.java-users.jp/ccc2019spring/#/ www.java-users.jp ã¡ãªã¿ã«ä»åã® JJUG ã«ã¯ ã©ã¯ ã¹ç€Ÿå¡ãç»å£ããŸããïŒïŒ çºè¡šè³æã¯äžèšããã確èªãã ããã tech-blog.rakus.co.jp tech-blog.rakus.co.jp å°è±¡ã«æ®ã£ãã»ãã·ã§ã³ ãã¹ããšã³ãžãã¢ãæããã JUnit ãæžãå§ããåã«èããã¹ããã¹ã JUnit ã®æžãæ¹ã«ã€ããŠã§ã¯ãªããã¹ãã®ç®çã¯äœãããªãæ©æã®ãã¹ããããã®ããªã©ã®ãã¹ãã³ãŒãäœæã®åã«èããããšã«ã€ããŠã®ã»ãã·ã§ã³ã§ããã æç€ºãããäŸé¡ããã©ã®ãããªãã¹ããè¡ãã®ãå®éã«èãããããã»ãã®æ¹ãšå
±æããããšãè¡ããŸããã倧äœäŒŒããå¯ã£ãããªéšåã¯ãã£ãã®ã§ããã现ããªéšåã§ç®ã®ä»ãæãéããèªåã§ã¯æãã€ããªããããªãã¹ãã±ãŒã¹ããããŸããã ãã¹ãã±ãŒã¹ãèããéã¯ã©ãã®ãã¹ããè¡ãã®ãããªãè¡ãã®ããèããã®ã¯åœç¶ã ãšæã£ãŠããã®ã§ããããããã©ããããéèŠãªããšãªã®ããæ¹ããŠå®æããŸããã 仿¥ããå§ããã«ãžã¥ã¢ã«ãª ãœãŒã¹ã³ãŒã è§£æ JavaParserãšãã Java ã® æ§æè§£æ ããŒã«ã䜿ã£ãŠã ãœãŒã¹ã³ãŒã è§£æã®å
¥éçãªå
容ãããç°¡åãªå®çšäŸãŸã§ã玹ä»ããŠããã»ãã·ã§ã³ã§ããã æ§æè§£æ ã¯ããŸãŸã§è¡ã£ãããšããªãããªããšãªãæ·å±
ãé«ããã ãªãããã®èªèã§ãããããããŸã§é£ãããªãã®ã§ã¯ãªãããšå°è±¡ãåããã®ã§æãåºããŠã¿ãããæ©äŒã«ãªã£ããããããŸããã çµããã« ä»ååã㊠JJUG ã«åå ããŸãããæã
çè§£ã§ããªãã£ãããšããããèªèº«ã®ç¥èã®ä¹ãããçæãããããŸããã ãããæ©ã«ã©ã®ãããªæè¡ãæµè¡ã£ãŠããã®ããææ¡ããä»åŸã®ããã«åŠç¿ãè¡ã£ãŠããããšæããŸãã
RAKUS Meetup ã®ã㎠ããã«ã¡ã¯ãéŽæšã§ããå
æ¥ RAKUS Meetup Tokyo #3 ãéå¬ããããŸããã®ã§ããã¡ãã®ã€ãã³ãã¬ããŒããæçš¿ããŸãã åœæ¥ã®æ§å çºè¡šã®çŽ¹ä» ãªããžã§ã¯ãã¹ãã¬ãŒãžå°å
¥ã«ãããããããã¯ãŒã¯ãšã³ãžãã¢èгç¹ã§å·¥å€«ããäºãèŠåŽããäºã 売ããŠã SaaS ãžã®ãªããžã§ã¯ãã¹ãã¬ãŒãžå°å
¥ã«ãŸã€ããæ³¥èã話 æèŠªäŒ æ¬¡åéå¬ã«ã€ããŠ åœæ¥ã®æ§å RAKUS Meetup Tokyo #3 äŒå Žã®æ§å ä»åã¯åŒç€Ÿæ¬ç€Ÿãªãã£ã¹ã® ã»ã ããŒã«ãŒã ã§ã®éå¬ã§ããã åœæ¥ã¯éšãéã æªå€©å ã®äžãåå ããã ãããããšãããããŸãããRAKUS Meetup Tokyoã¯æ¯åéšãéã£ãŠããæ°ãããŸããæ¬¡åã¯æŽããŠæ¬²ããã§ããã çºè¡šã®çŽ¹ä» ãªããžã§ã¯ãã¹ãã¬ãŒãžå°å
¥ã«ãããããããã¯ãŒã¯ãšã³ãžãã¢èгç¹ã§å·¥å€«ããäºãèŠåŽããäºã åŒç€Ÿã€ã³ãã©ãšã³ãžãã¢ã®æ°žæã®çºè¡šã§ãã æ¥œæ¥œç²Ÿç® ã«ãªããžã§ã¯ãã¹ãã¬ãŒãžãå°å
¥ããã«ãããèæ
®ããå
容ããæ
å ±ã»ãã¥ãªãã£ã®3èŠçŽ ïŒæ©å¯æ§ãå®å
šæ§ãå¯çšæ§ïŒã«æ²¿ã£ãŠçºè¡šããŸããã ãããã¯ãéžå® ããŒããŠã§ã¢æ§æ ã¬ããªã±ãŒã·ã§ã³ èšå® ããŒãžã§ãã³ã°èšå® ãšãã£ã芳ç¹ã«ã€ããŠçºè¡šããŸããã 売ããŠã SaaS ãžã®ãªããžã§ã¯ãã¹ãã¬ãŒãžå°å
¥ã«ãŸã€ããæ³¥èã話 åŒç€Ÿãšã³ãžãã¢ã®è¥¿è§ã®çºè¡šã§ãã ãªããžã§ã¯ãã¹ãã¬ãŒãžã®å°å
¥ç§»è¡æã«æ³šæããããšããçºçãããã©ãã«ã«ã€ããŠçºè¡šããŸããããã®çºè¡šã¯ å
æ¥ã®JJUG ã§çºè¡šããå
容ã®åæŒïŒÎ±ã«ãªã£ãŠããŸãã ãã¡ã€ã«ã¹ãã¬ãŒãžããªããžã§ã¯ãã¹ãã¬ãŒãžã«ããéã®å®è£
äžã®åœ±é¿ç¯å² 20æ¥ ãããŠããŒã¿ç§»è¡ ç§»è¡åŸã«çºçãããã©ãã« ã¡ã³ããã³ã¹æéãçŽ90%åæž ãšãã£ã芳ç¹ã«ã€ããŠçºè¡šããŸããã æèŠªäŒ ãçŽæã® Sushi ãš Pizza ãš Beer ã«å ã㊠RED BULL ãçšæããŸãã æ¬¡åéå¬ã«ã€ã㊠次åã®æ±äº¬ã§ã®éå¬ã¯8æã« ãçŽæ¶Œè詊ãïŒ WEBãµãŒãã¹ éçšã®æã話ã ãããŒãã«éå¬äºå®ã§ãã 仿6æã®åŸåã«ã¯åéãéå§ã§ãããšæããŸãã Connpassã®ã°ã«ãŒã ã«å
¥ã£ãŠããã ãããšéç¥ãé£ã³ãŸãã®ã§ãã¡ããããããããããããŸãã
ã¯ããã« ããã«ã¡ã¯ãæ°å3幎ç®ãšã³ãžãã¢ã®kasuke18ã§ãã ç§ã¯æšå¹ŽåºŠã®1幎éããã¢ããã·ã¥éå¶å§å¡ã®äžå¡ãšããŠææ¢ãããæŽ»åããŠããŸããã éå¶ããäžã§èŠã€ãã£ããšãã課é¡ã«å¯ŸããŠãWebã¢ããªãå°å
¥ããããšã§ ã«ã€ãŒã³ ã§ãããã ãšããããšã«ãªãããã£ãããªã®ã§ãã¢ããã·ã¥éå¶å§å¡ã§Webã¢ããªãäœãããšã«ãªããŸããã çŸåšãã®éçºã®çã£æäžã§ãããæ¯ãè¿ã£ãŠã¿ãŠåŸãããæ°ä»ããã玹ä»ããããšæããŸãã ã¯ããã« ãã£ãŠã¿ãŠã®æ°ã¥ã äžäººã§åŠç¿ãããããå¹çããã ããããªãããšã¯å
šå¡ã§èãã äœæ¥æéãäœãã®ãå€§å€ ãŸãšã ãã£ãŠã¿ãŠã®æ°ã¥ã äžäººã§åŠç¿ãããããå¹çããã ãšã³ãžãã¢ãšããŠèªå·±åŠç¿ã¯å€§åã§ãããšã¯ããã¢ãããŒã·ã§ã³ç¶æãé£ãããç¹ã«æ°ããæè¡ãåŠã¶å Žåã¯ãäžäººã§ã¯è³æãèŠãŠæãåããã®ãéçã§ãã³ããªåããŠããŸãããšãå€ãã§ãããã®ç¹ãããŒã ã§éçºããããšã«ãã£ãŠçžäºã«ã¬ãã¥ãŒã§ããã®ã§ããã£ãŒãããã¯ããããããããã§ãäžäººã§ãã£ãŠããŠã¯æ°ã¥ããªãããšã«ãæ°ã¥ããŸããããããããã«å人çã«æ°ã«ãªã£ããšããã远å ã§åŠç¿ããããšããããŸãã ã ããããªãããšã¯å
šå¡ã§èãã ããŒã ã¡ã³ããŒå
ã«è©³ãã人ãããããè¥æã¡ã³ããŒã®ã¿ã§éçºããŠãããããããããªãããšãçžè«ãããã«ãå
šå¡ããããªããšããå Žé¢ããããŸãããã®ãããªãšãã¯å
šå¡ã§ ãã¹ããã©ã¯ãã£ã¹ã¯äœã ããïŒ ãªã©ãšèããªããé²ããŠããŸããäžäººå¯ãã° ææ® ã®ç¥æµããšããã»ã©ããŸããããªããšãå
šå¡ã§èããçµæãªã®ã§çŽåŸæãæã£ãŠé²ããããŸãã äœæ¥æéãäœãã®ãå€§å€ æå
ã«éçºç°å¢ããªããã°ç¢ºèªã§ããªãã®ã§ããŸãšãŸã£ãæéãäœã£ãŠèªå®
ã§äœæ¥ïŒå®è£
ã»ã¬ãã¥ãŒïŒããããšãå€ããªããŸãããšã¯ãããä»ã«ãããããããšãããã®ã§ãåºæ¬çã«ã¯é±æ«ä»¥å€ã§ã¯ãŸãšãŸã£ãæéãåããŸããããã®èª²é¡ã¯ããŒã ã¡ã³ããŒå
ã§ãèªèããŠããã ããããååŒ·äŒ ãªã©ã®éãŸããæéãäœã£ãŠã¢ãããçã«éçºãããããšã§ãå·®ãæ»ãã®æéãæžãããå¹ççã«é²ããããããã«å¯ŸçããŠããŸãã ãŸããå人ã§ãé倿éäžã«ã³ãŒããèŠãã ããªã ã¹ããŒããã©ã³ ã§ãã§ããã®ã§ãã³ãŒãã¬ãã¥ãŒã ãããããšã«ããŠããŸããå
ã«ã§ããããšã¯ãã£ãŠãããŠã鱿«ã¯åäœç¢ºèªãšèªåã®å®è£
ã«éäžããŠåãçµããšããããã«ããŠããŸãã ãŸãšã ãã®èšäºãæžãã«ããã£ãŠãå人çã«æ¯ãè¿ã£ãŠã¿ãŸããã ä»åã®éçºã§æ¡çšããæ°ããæè¡ã¯ãå人çã«ã¯äžäººã§åŠç¿ããã«ã¯ããŒãã«ãé«ããããããäžéå端ã«åŠç¿ããã ãã§çµãã£ãŠããŸãããšã«ãªã£ãŠããŸãããã§ãããããŒã ã§éçºããããšã§ãã®ãããªç¶æ³ãåé¿ã§ããŸããã æ¯åãã®ãããªæ©äŒãããããã§ã¯ãªãã®ã§ãæ¬¡ã«æªçµéšã®æè¡ãåŠç¿ããé㯠ååŒ·äŒ ã«åå ãããªã©ããŠãæèŠäº€æãã§ããå Žã«èº«ã眮ãããšãéžæè¢ãšããŠèããããšæããŸãã
ããã«ã¡ã @kawanamiyuu ã§ããå
æ¥ ããã°ã§ãç¥ãã ããŸããéãã5/18 (å) ã«éå¬ããã JJUG CCC 2019 Spring ã§ç»å£ããŠããŸããã ããã²ãšãã®ç»å£è
ã§ãã西è§ããã®ç»å£ã¬ããŒãã¯ãã¡ãâ tech-blog.rakus.co.jp ç»å£è³æ speakerdeck.com ç»å£ã«å¯Ÿããåå¿ #ccc_i2b hashtag on Twitter ãããããããšã«æºåžã§ããïŒ ç«ã¡èŠåºãŠãŸãïŒïŒ #ccc_i2b #jjug_ccc — yaaka (@yaaka4) 2019幎5æ18æ¥ äººãå€ãããŠã³ã£ãã #ccc_i2b — tea (@tethon) 2019幎5æ18æ¥ ã»ãã·ã§ã³ã®åé ã§ ArchUnit ãç¥ã£ãŠãããåããããŠã¿ããšãããã»ãŒå
šå¡ã®æ¹ã ArchUnit ãç¥ããªãã£ãããã§ããã ArchUnitã åããŠèããã — ãããã (@sumeragizzz) 2019幎5æ18æ¥ ã¢ãŒããã¯ã㣠ã®åè³ªç¶æé¢ããæ©ã¿ãArchUnit ã®é
åããã¹ãã³ãŒãã®ã¢ ã€ã㢠ãäºäŸãå
±æã§ããçµ¶å¥œã®æ©äŒãšãªããŸããã ã¢ãŒããã¯ãã®æ©ã¿ ãã£ã¡ãããã åæã®èšèšããã€ã®éã«ãå®ãããªããªã æ°èŠã¡ã³ããŒãžã®åšç¥ãã§ããŠããªã ã¬ãã¥ãŒè² æ
#ccc_i2b — hituzi3939 (@hituzi3939) 2019幎5æ18æ¥ commonããã€ã®éã«ãcommonã§ãªããªãã®ã¯ãããããéãã #ccc_i2b #jjug_ccc — yaaka (@yaaka4) 2019幎5æ18æ¥ ArchUnitã ã¢ãŒããã¯ã㣠ã ããããªããŠã¢ããªã±ãŒã·ã§ã³ã»ããŒã åºæã®ã«ãŒã«ãé©å¿åºŠé¢æ°åã§ããŠã ãã¶ãããã #ccc_i2b — enk (@enk_enk) 2019幎5æ18æ¥ æ®æ®µãããã¥ã¡ã³ãã«æžããŠããããªéçºæšæºããã¹ãã³ãŒãã§è¡šçŸããŠèªåãã§ãã¯ã§ããæãã£ãœããŠãããã > ArchUnit #jjuc_ccc #ccc_i2b — kntmr (@knt_mr) 2019幎5æ18æ¥ ArchUnit ããã²ãããã¯ãã§æŽ»çšããŠããã ãããïŒ ArchUnit ããã¯äœ¿ãããã — ããã¬ã (@chronos2074) 2019幎5æ18æ¥ ã»ãã·ã§ã³ã¯èããŠãªããã ãã©ãArchUnit ãè¯ãããã ã£ããªãŒãäžåºŠã¯è©äŸ¡ããŠã¿ããã — Hirotaka Ikoma (@hikoma) 2019幎5æ18æ¥ ãããã« ïŒç»å£è³æã®çµã³ã®èšèããïŒ èªåãã¹ãã§ ã¢ãŒããã¯ã㣠ã®å質ãæ
ä¿ãã€ã€ããããã¯ãéçºãéããŠç¶ç¶çã« ã¢ãŒããã¯ã㣠ã磚ããŠããããšãã§ãããšããã... ã©ãã§ãããããããããããªãã§ããããïŒ ð
ããã«ã¡ã¯ã西è§ïŒwest-cïŒã§ãã å
æ¥åç¥ããããŸããéã ã5æ18æ¥ïŒåïŒã«éå¬ããã JJUG CCC 2019 Spring ã«ãŠã売ããŠã SaaS ãžã®ãªããžã§ã¯ãã¹ãã¬ãŒãžå°å
¥ã«ãŸã€ããæ³¥èã話ããšããã¿ã€ãã«ã§ç»å£ããŸããã åœæ¥çºè¡šãèŠã«æ¥ãŠãã ãã£ãçæ§ãããããšãããããŸããã çºè¡šè³æ ç»å£ã¬ããŒã ä»å¹Žã§ãµãŒãã¹éå§10åšå¹Žãè¿ããã æ¥œæ¥œç²Ÿç® ãã«ãªããžã§ã¯ãã¹ãã¬ãŒãžãå°å
¥ãããããžã§ã¯ãã§ã®äžéšå§çµãšããŠã以äžã®ãããªã話ãããŸããã ãªããžã§ã¯ãã¹ãã¬ãŒãžå°å
¥ã®èŠå ãšãªã£ã楜楜粟ç®ãæ±ããŠããèª²é¡ ã¯ã©ãŠã ãµãŒãã¹ïŒ Amazon S3 ãªã©ïŒã§ã¯ãªããªã³ãã¬ãã¹ã®ã¹ãã¬ãŒãžãéžæããçç± å°å
¥æã«ã¢ããªã±ãŒã·ã§ã³ã®èšèšé¢ã§æèããç¹ å°å
¥åŸã«çºçãããã©ãã«ããæèãã¹ãã ã£ãç¹ ã¢ããªã±ãŒã·ã§ã³ã®èšèšã«çæããã®ã¯ã¡ããã©å»å¹Žã®ä»é ã§ããããä»åã®ç§éã®ããã«ãªããžã§ã¯ãã¹ãã¬ãŒãžãžãã¡ã€ã«ããŒã¿ç§»è¡ãè¡ã£ãäºäŸã¯ããŸãèŠåœããããææ¢ãç¶æ
ã§èšèšãé²ããŠãããšèšæ¶ããŠããŸãã ä»åã®ç»å£ã決ãŸã£ãŠãããåããããªèª²é¡ã»æ©ã¿ãæ±ããïŒãŸãã¯ä»åŸæ±ããããããããªãïŒæ¹åãã«ã§ããéãçèº«ã®æ
å ±ããå±ãããããšèããæºåãé²ããŸããã æãçºè¡šã§ã¯ãããŸããããçºè¡šãèããŠãã ãã£ããè³æãèŠãŠãã ãã£ãçæ§ã«ãšã£ãŠäœãããã®ç¥èŠãåŸãããå
容ã«ãªãã°å¹žãã§ãã ãŸãããã¡ãã¯å人çãªè©±ã§ãããç§ã«ãšã£ãŠä»åãåããŠã®å€éšæè¡ã€ãã³ãã§ã®ç»å£ã§ããã ç·åŒµããããŸãããã倧ããªåé¡ãèµ·ããçºè¡šãçµããããšãã§ããŠè¯ãã£ãã§ãã ãããè³æäœæãçºè¡šç·Žç¿ã«ä»ãåã£ãŠããã ãããåœæ¥å¿æŽã«æ¥ãŠãããåŒç€Ÿã¡ã³ããŒã®ååã®ãããã§ã ð äžæ¹ã§ãç»å£ã®å Žã«æ
£ããŠããªãããšã«ããåçç¹ãå€ã
æããŸããã®ã§ãä»åŸããããã£ãå Žã«åå ããããšã§è
ã磚ããŠãããããšæããŸããïŒ
ããã«ã¡ã¯ãMasaKuã§ãã å
æ¥ã PostgreSQL ã®éçšç¥èåŠç¿ãšããŠä»¥äžã®æžç±ãèªã¿ãŸããã gihyo.jp æžç±å
ã§ç޹ä»ãããŠããã ããŒãã£ã·ã§ãã³ã° ãã«ã€ããŠãå
¬åŒããã¥ã¡ã³ãã«èšèŒãããŠããå
容ãšç
§ããåãããŠãã©ã®ãããªã±ãŒã¹ã§ããã°ããã©ãŒãã³ã¹ã®åäžãèŠèŸŒããã®ãã確èªããŠã¿ãããšæããŸããã ãªããPostgreSQL11ã®ããŒãã£ã·ã§ãã³ã°ã«ã€ããŠã¯ãåŒç€Ÿã® ã¢ããã³ãã«ã¬ã³ã㌠ã«ãæ²èŒãããŠãããŸãã®ã§ãããããŠã確èªããã ãããšå¹žãã§ãã qiita.com ããŒãã«ã®ããŒãã£ã·ã§ãã³ã°ãšã¯ ããŒãã£ã·ã§ãã³ã°ã®ã¡ãªãã ããŒã¿ã®æºå å®è·µ ããŒãã£ã·ã§ã³ã®ããŒãçšããæ€çŽ¢ã®å Žå å
šäœæ€çŽ¢ã®å Žå ããŒãã£ã·ã§ã³åå²ã®ããŒä»¥å€ã®æ€çŽ¢ã®å Žå ãããã« åèãµã€ã ããŒãã«ã®ããŒãã£ã·ã§ãã³ã°ãšã¯ ïŒã€ã®ããŒãã«ãè€æ°ã®ããŒãã«ã«åå²ããŠç®¡çããããšãããŒãã«ã®ããŒãã£ã·ã§ãã³ã°ãšãããŸãã ããŒãã£ã·ã§ãã³ã°ã«ã¯ä»¥äžã®çš®é¡ããããŸãã ã·ã§ããã³ã°ãµã€ãã®è³Œå
¥å±¥æŽã«é¢ããããŒã¿ç®¡çæ¹æ³ãäŸã«èª¬æããããšæããŸãã ã¬ã³ãžã»ããŒãã£ã·ã§ãã³ã° æå®ãããç¯å²ã®å€ãåºã«ããŒã¿ã忣ããŠé
眮ããã ïŒäŸ: 賌å
¥å±¥æŽããŒãã«ãïŒã¶æåäœã§åå²ïŒ ã¬ã³ãžã»ããŒãã£ã·ã§ãã³ã° ãªã¹ãã»ããŒãã£ã·ã§ãã³ã° ããŒãã«ã®ããŒã®å€ãåºã«ããŒã¿ã忣ããŠé
眮ãã ïŒäŸ: ååã«ããŽãªIDã«ããåå²ïŒ ãªã¹ãã»ããŒãã£ã·ã§ãã³ã° ããã·ã¥ã»ããŒãã£ã·ã§ãã³ã°ïŒ PostgreSQL 11 ããïŒ ããŒã¿ã®æ¿å
¥æã«ã«ã©ã ã® ããã·ã¥å€ ãå
ã«ç¹å®ã® ããŒãã£ã·ã§ã³ ã«ããŒã¿ãåããªãããã«åæ£ããŠé
眮ãã ïŒäŸ: ã¬ã³ãŒãIDã«ããåæ£ïŒ ããã·ã¥ã»ããŒãã£ã·ã§ãã³ã° ããŒãã£ã·ã§ãã³ã°ã®ã¡ãªãã PostgreSQLã®å
¬åŒããã¥ã¡ã³ã ã§ã¯ããŒãã£ã·ã§ãã³ã°ã®ã¡ãªããã以äžã®ããã«èª¬æãããŠããŸã ç¹å®ã®æ¡ä»¶äžã§åãåããã®ããã©ãŒãã³ã¹ãåçã«åäžããããšããããŸãã ç¹ã«ããŒãã«å
ã®ã¢ã¯ã»ã¹ãéäžããè¡ã®æ®ã©ãåäžãŸãã¯å°æ°ã® ããŒãã£ã·ã§ã³ ã«ååšããŠããå Žåãããã§ãã ããŒãã£ã·ã§ãã³ã°ã¯ã€ã³ããã¯ã¹ã®å
é ã«ããåã®ä»£ããã«ãªããã€ã³ããã¯ã¹ã®å€§ãããå°ããããŠãã€ã³ããã¯ã¹ã®é »ç¹ã«äœ¿ãããéšåãã¡ã¢ãªã«åãŸãããããªãããã«ããŸãã åãåãããæŽæ°ãäžã€ã® ããŒãã£ã·ã§ã³ ã®å€§éšåã«ã¢ã¯ã»ã¹ããå Žåãã€ã³ããã¯ã¹ãã©ã³ãã ã¢ã¯ã»ã¹ã䜿çšããŠããŒãã«å
šäœã«ãŸãããèªã¿åãããã代ããã«ããã® ããŒãã£ã·ã§ã³ ãžã®é 次ã¢ã¯ã»ã¹ãããããšã§ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã äžæ¬æ¿å
¥ãåé€ã«ã€ããŠããã®èŠä»¶ã ããŒãã£ã·ã§ã³ ã®èšèšã«çµã¿èŸŒãã§ããã°ãããã ããŒãã£ã·ã§ã³ ã®è¿œå ãåé€ã§å®çŸããããšãå¯èœã§ãã ALTER TABLE DETACH PARTITIONãå®è¡ããããããã¯åã
ã® ããŒãã£ã·ã§ã³ ã DROP TABLEã§åé€ããã®ã¯ãäžæ¬ã®æäœããããããé¥ãã«é«éã§ãã ãããã®ã³ãã³ãã¯ãŸããäžæ¬ã®DELETEã§åŒãèµ·ããããVACUUMã®ãªãŒããŒããããå®å
šã«åé¿ã§ããŸãã æ»
å€ã«äœ¿çšãããªãããŒã¿ãå®äŸ¡ã§äœéãªã¹ãã¬ãŒãžã¡ãã£ã¢ã«ç§»è¡ããããšãã§ããŸãã ä»åã¯ã1ã€ç®ã®å©ç¹ã«çç®ããŠåäœã確èªããŠã¿ãããšæããŸãã ããŒã¿ã®æºå æ€èšŒã®ããã«ä»¥äžã®ããŒãã«ãäœæããŠãããŸãã -- ååã«ããŽãªããŒãã« CREATE TABLE categories( id SERIAL PRIMARY KEY, name TEXT UNIQUE ); -- ååã«ããŽãªããŒãã«ã®ãµã³ãã«ããŒã¿ INSERT INTO categories (name) VALUES ( ' é£å ' ); INSERT INTO categories (name) VALUES ( ' è¡£é¡ ' ); INSERT INTO categories (name) VALUES ( ' æ¬ ' ); INSERT INTO categories (name) VALUES ( ' ã³ã³ãã¥ãŒã¿ ' ); -- 賌å
¥äœå±¥æŽããŒãã« CREATE TABLE purchase( id SERIAL PRIMARY KEY, category_id INTEGER , name TEXT, date TIMESTAMP DEFAULT NOW()), FOREIGN KEY (category_id) REFERENCES categories(id) ); 賌å
¥å±¥æŽããŒãã«ã®ãã¹ãããŒã¿ã¯éå»ïŒå¹Žåã§åèš50äžä»¶ãšããŸãã -- 賌å
¥å±¥æŽããŒãã«ã®ãµã³ãã«ããŒã¿ INSERT INTO purchase (name, category_id, date ) SELECT ' test ' , TRUNC ((RANDOM() * 4 ):: NUMERIC, 0 ) + 1 , ' 2014-01-01 ' :: DATE + (RANDOM() * 1780 ):: INTEGER AS date FROM GENERATE_SERIES( 1 , 500000 ) ; ããŒãã£ã·ã§ãã³ã°ã§äœæããããŒãã«ã«ã€ããŠã¯åŸè¿°ããŸãã å®è·µ æç« å
ã«ããããŸããšãããç¹å®æ¡ä»¶äžãšã¯ãç¹ã«ããŒãã«å
ã®ã¢ã¯ã»ã¹ãéäžããè¡ã®æ®ã©ãåäžãŸãã¯å°æ°ã® ããŒãã£ã·ã§ã³ ã«ååšããŠããå Žåãã§ãã 賌å
¥å±¥æŽãäŸã«ããŠèããŠã¿ãããšæããŸãã ãããµãŒãã¹ã§ã¯ã5幎åã®è³Œå
¥å±¥æŽãä¿ç®¡ããŠãããšããŸãã ãã®ãã¡ãçŽè¿ïŒå¹Žã®è³Œå
¥å±¥æŽãããªã¹ã¹ã¡ååãæç€ºããæ©èœãå®è£
ããå Žåã賌å
¥å±¥æŽãäžã€ã®ããŒãã«ã§ç®¡çãããããã幎åäœã§åå²ãããããŒãã«ã§ç®¡çããŠããã»ããããã©ãŒãã³ã¹ã¯åäžããããã§ãã ä»åã®ã±ãŒã¹ã§ã¯ date ã«ã©ã ãããŒãšããã¬ã³ãžã» ããŒãã£ã·ã§ã³ ãè¡ããŸãã CREATE TABLE purchase_range( id SERIAL, category_id INTEGER , name TEXT, date TIMESTAMP DEFAULT NOW(), FOREIGN KEY (category_id) REFERENCES categories(id) ) PARTITION BY RANGE ( date ); CREATE TABLE purchase_range_y2014 PARTITION OF purchase_range FOR VALUES FROM ( ' 2014-01-01 00:00:00 ' ) TO ( ' 2014-12-31 23:59:59 ' ); CREATE TABLE purchase_range_y2015 PARTITION OF purchase_range FOR VALUES FROM ( ' 2015-01-01 00:00:00 ' ) TO ( ' 2015-12-31 23:59:59 ' ); CREATE TABLE purchase_range_y2016 PARTITION OF purchase_range FOR VALUES FROM ( ' 2016-01-01 00:00:00 ' ) TO ( ' 2016-12-31 23:59:59 ' ); CREATE TABLE purchase_range_y2017 PARTITION OF purchase_range FOR VALUES FROM ( ' 2017-01-01 00:00:00 ' ) TO ( ' 2017-12-31 23:59:59 ' ); CREATE TABLE purchase_range_y2018 PARTITION OF purchase_range FOR VALUES FROM ( ' 2018-01-01 00:00:00 ' ) TO ( ' 2018-12-31 23:59:59 ' ); -- 賌å
¥å±¥æŽããŒãã«ãµã³ãã«ããŒã¿ïŒããŒãã£ã·ã§ã³ïŒ INSERT INTO purchase_range (name, category_id, date ) SELECT ' test ' , TRUNC ((RANDOM() * 4 ):: NUMERIC, 0 ) + 1 AS category_id, ' 2014-01-01 ' :: DATE + (RANDOM() * 1780 ):: INTEGER AS date FROM GENERATE_SERIES( 1 , 500000 ) ; ããŒãã£ã·ã§ã³ ã®ããŒãçšããæ€çŽ¢ã®å Žå ãŸãã¯ã2017幎12æã®è³Œå
¥å±¥æŽã®ä»¶æ°ãååŸãã SQL ãå®è¡ããçµæãèŠãŠã¿ãŸãããã -- åäžããŒãã«ã§ç®¡çãããŠããå Žå explain analyze select count (*) from purchase where date > ' 2017-12-01 ' and date < ' 2017-12-31 ' ; QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------- Finalize Aggregate (cost= 6114 . 90 .. 6114 . 91 rows = 1 width= 8 ) (actual time= 125 . 218 .. 125 . 218 rows = 1 loops= 1 ) -> Gather (cost= 6114 . 69 .. 6114 . 90 rows = 2 width= 8 ) (actual time= 120 . 538 .. 125 . 274 rows = 3 loops= 1 ) Workers Planned: 2 Workers Launched: 2 -> Partial Aggregate (cost= 5114 . 69 .. 5114 . 70 rows = 1 width= 8 ) (actual time= 96 . 651 .. 96 . 652 rows = 1 loops= 3 ) -> Parallel Seq Scan on purchase (cost= 0 . 00 .. 5108 . 41 rows = 2513 width= 0 ) (actual time= 0 . 036 .. 96 . 162 rows = 2053 loops= 3 ) Filter: (( date > ' 2017-12-01 00:00:00 ' ::timestamp without time zone) AND ( date < ' 2017-12-31 00:00:00 ' ::timestamp without time zone)) Rows Removed by Filter: 100529 Planning Time: 0 . 215 ms Execution Time: 125 . 323 ms -- ããŒãã£ã·ã§ã³ã§åå²ããŠããããŒãã«ã®å Žå explain analyze select count (*) from purchase_range where date > ' 2017-12-01 ' and date < ' 2017-12-31 ' ; QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------- Aggregate (cost= 26 . 09 .. 26 . 10 rows = 1 width= 8 ) (actual time= 0 . 007 .. 0 . 007 rows = 1 loops= 1 ) -> Append (cost= 0 . 00 .. 26 . 07 rows = 5 width= 0 ) (actual time= 0 . 004 .. 0 . 004 rows = 0 loops= 1 ) -> Seq Scan on purchase_range_y2017 (cost= 0 . 00 .. 26 . 05 rows = 5 width= 0 ) (actual time= 0 . 003 .. 0 . 003 rows = 0 loops= 1 ) Filter: (( date > ' 2017-12-01 00:00:00 ' ::timestamp without time zone) AND ( date < ' 2017-12-31 00:00:00 ' ::timest amp without time zone)) Planning Time: 0 . 667 ms Execution Time: 0 . 034 ms å®è¡æé㯠ããŒãã£ã·ã§ã³ ã§åå²ããŠããããŒãã«ã®æ¹ãçããªããšããçµæã«ãªããŸããã æ¥æã§ ããŒãã£ã·ã§ã³ ãåå²ããŠããããã察象å€ã®æéã®ã¬ã³ãŒãã«ã¯ã¢ã¯ã»ã¹ãããªãããããã©ãŒãã³ã¹ãåäžããŸããã å
šäœæ€çŽ¢ã®å Žå ä»åºŠã¯ãå
šããŒã¿ã®ä»¶æ°ãååŸããå Žåãèæ
®ããŠã¿ãŸããã -- åäžããŒãã«ã§ç®¡çãããŠããå Žå explain analyze select count (*) from purchase; QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------- Finalize Aggregate (cost= 6789 . 38 .. 6789 . 39 rows = 1 width= 8 ) (actual time= 274 . 970 .. 274 . 970 rows = 1 loops= 1 ) -> Gather (cost= 6789 . 17 .. 6789 . 38 rows = 2 width= 8 ) (actual time= 273 . 169 .. 275 . 097 rows = 3 loops= 1 ) Workers Planned: 2 Workers Launched: 2 -> Partial Aggregate (cost= 5789 . 17 .. 5789 . 18 rows = 1 width= 8 ) (actual time= 252 . 091 .. 252 . 092 rows = 1 loops= 3 ) -> Parallel Seq Scan on purchase (cost= 0 . 00 .. 5268 . 33 rows = 208333 width= 0 ) (actual time= 0 . 016 .. 105 . 048 rows = 166667 loops= 3 ) Planning Time: 0 . 135 ms Execution Time: 275 . 149 ms -- ããŒãã£ã·ã§ã³ã§åå²ããŠããããŒãã«ã®å Žå explain analyze select count (*) from purchase_parent; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------- Finalize Aggregate (cost= 8690 . 90 .. 8690 . 91 rows = 1 width= 8 ) (actual time= 429 . 425 .. 429 . 425 rows = 1 loops= 1 ) -> Gather (cost= 8690 . 68 .. 8690 . 89 rows = 2 width= 8 ) (actual time= 429 . 415 .. 429 . 608 rows = 3 loops= 1 ) Workers Planned: 2 Workers Launched: 2 -> Partial Aggregate (cost= 7690 . 68 .. 7690 . 69 rows = 1 width= 8 ) (actual time= 406 . 901 .. 406 . 901 rows = 1 loops= 3 ) -> Parallel Append (cost= 0 . 00 .. 7169 . 85 rows = 208334 width= 0 ) (actual time= 0 . 018 .. 269 . 589 rows = 166667 loops= 3 ) -> Parallel Seq Scan on purchase_y2017 (cost= 0 . 00 .. 1259 . 81 rows = 60481 width= 0 ) (actual time= 0 . 015 .. 90 . 205 rows = 102817 loops= 1 ) -> Parallel Seq Scan on purchase_y2015 (cost= 0 . 00 .. 1259 . 19 rows = 60419 width= 0 ) (actual time= 0 . 017 .. 112 . 477 rows = 102713 loops= 1 ) -> Parallel Seq Scan on purchase_y2016 (cost= 0 . 00 .. 1257 . 65 rows = 60365 width= 0 ) (actual time= 0 . 016 .. 18 . 776 rows = 34207 loops= 3 ) -> Parallel Seq Scan on purchase_y2014 (cost= 0 . 00 .. 1255 . 53 rows = 60253 width= 0 ) (actual time= 0 . 014 .. 61 . 613 rows = 51215 loops= 2 ) -> Parallel Seq Scan on purchase_y2018 (cost= 0 . 00 .. 1096 . 00 rows = 52600 width= 0 ) (actual time= 0 . 019 .. 76 . 853 rows = 89420 loops= 1 ) Planning Time: 0 . 162 ms Execution Time: 429 . 668 ms ããæå³äºæ³éãã§ããããå®è¡æéã¯ããŒãã£ã·ã§ãã³ã°ããŠããããŒãã«ã®ã»ããé·ããªããŸããã ããŒãã«ãåå²ããŠããããã«ãæ¬æ¥äžåºŠã§å®äºããã·ãŒã±ã³ã·ã£ã«ã¹ãã£ã³ã ããŒãã£ã·ã§ã³ ã®æ°ã ãå®è¡ããããããããã©ãŒãã³ã¹ãå£åãããšæãããŸãã 賌å
¥å±¥æŽãæ€çŽ¢ããããšããããšã«äž»çŒã眮ãå Žåã¯ãéçšæ¹æ³æ¬¡ç¬¬ã§ã¯ããŒãã£ã·ã§ãã³ã°ãå¿
ãããé©åã§ã¯ãªãå Žåãããã®ã§æ³šæãå¿
èŠã§ãã ããŒãã£ã·ã§ã³ åå²ã®ããŒä»¥å€ã®æ€çŽ¢ã®å Žå æåŸã«ã ããŒãã£ã·ã§ã³ åå²ã«å©çšããããŒä»¥å€ã®ã«ã©ã ãçµèŸŒã¿æ¡ä»¶ã«ããå Žåã®ããã©ãŒãã³ã¹ã確èªããŠã¿ãŸãã ä»åã¯ã«ããŽãªIDã察象ã«ããæ€çŽ¢ãè¡ã£ãŠã¿ãããšæããŸãã -- åäžããŒãã«ã§ç®¡çãããŠããå Žå explain analyze delete from purchase where category_id = 1378 ; QUERY PLAN ------------------------------------------------------------------------------------------------------------- Delete on purchase (cost= 0 . 00 .. 7031 . 81 rows = 1 width= 6 ) (actual time= 87 . 803 .. 87 . 803 rows = 0 loops= 1 ) -> Seq Scan on purchase (cost= 0 . 00 .. 7031 . 81 rows = 1 width= 6 ) (actual time= 87 . 801 .. 87 . 801 rows = 0 loops= 1 ) Filter: (category_id = 1378 ) Rows Removed by Filter: 307745 Planning Time: 0 . 062 ms Execution Time: 87 . 829 ms -- ããŒãã£ã·ã§ã³ã§åå²ããŠããããŒãã«ã®å Žå explain analyze delete from purchase_range where category_id = 1378 ; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------- Delete on purchase_range (cost= 0 . 00 .. 7869 . 12 rows = 5 width= 6 ) (actual time= 103 . 825 .. 103 . 826 rows = 0 loops= 1 ) Delete on purchase_range_y2014 Delete on purchase_range_y2015 Delete on purchase_range_y2016 Delete on purchase_range_y2017 Delete on purchase_range_y2018 -> Seq Scan on purchase_range_y2014 (cost= 0 . 00 .. 1614 . 14 rows = 1 width= 6 ) (actual time= 22 . 576 .. 22 . 576 rows = 0 loops= 1 ) Filter: (category_id = 1378 ) Rows Removed by Filter: 76811 -> Seq Scan on purchase_range_y2015 (cost= 0 . 00 .. 1612 . 55 rows = 1 width= 6 ) (actual time= 21 . 112 .. 21 . 112 rows = 0 loops= 1 ) Filter: (category_id = 1378 ) Rows Removed by Filter: 76844 -> Seq Scan on purchase_range_y2016 (cost= 0 . 00 .. 1627 . 21 rows = 1 width= 6 ) (actual time= 20 . 850 .. 20 . 850 rows = 0 loops= 1 ) Filter: (category_id = 1378 ) Rows Removed by Filter: 77537 -> Seq Scan on purchase_range_y2017 (cost= 0 . 00 .. 1603 . 49 rows = 1 width= 6 ) (actual time= 21 . 146 .. 21 . 146 rows = 0 loops= 1 ) Filter: (category_id = 1378 ) Rows Removed by Filter: 76279 -> Seq Scan on purchase_range_y2018 (cost= 0 . 00 .. 1411 . 74 rows = 1 width= 6 ) (actual time= 18 . 105 .. 18 . 106 rows = 0 loops= 1 ) Filter: (category_id = 1378 ) Rows Removed by Filter: 67099 Planning Time: 0 . 376 ms Execution Time: 103 . 901 ms å€å°ã®å·®ããããã®ã®ãããŸã§å€§ããªå·®ããªããšãããå°ãæå€ãªçµæãšãªããŸããã ãšããã®ããä»åäœæãããµã³ãã«ããŒã¿ã¯æ¥ä»ã§ããŒãã£ã·ã§ãã³ã°ããŠãããããã«ããŽãªIDã§çµã蟌ãã å Žåã¯åæ£é
眮ããŠããããŒãã«ãã¹ãŠããã§ãã¯ããªããã°ãªããªããªããŸãã ãã®ãããå
ã»ã©ã®å
šäœæ€çŽ¢ãšåçšåºŠã®ããã©ãŒãã³ã¹ã«ãªããšæã£ãŠããŸããã ããŒãã£ã·ã§ã³ ã§åå²ãããŠããããŒãã«ã®æ°ããïŒããŒãã«ã«æ ŒçŽãããŠããã¬ã³ãŒãã®éã«ãã£ãŠå·®ãåºãã®ã§ã¯ãªãã§ããããã ãããã« ããŒãã£ã·ã§ãã³ã°ãšãã£ãŠããããŒã¿ç®¡çã® éã®åŒŸäžž ãšãããã®ã§ã¯ãªããå Žåã«ãã£ãŠã¯ããã©ãŒãã³ã¹ãå£åããå ŽåãããããšãããããŸããã ä»åã¯ã¬ã³ãž ããŒãã£ã·ã§ã³ ãäŸã«ããŸããããå®éã®ãµãŒãã¹ãã©ã®ããã«éçšãããŠããããèæ
®ããããšã§ãã©ã®ããã« ããŒãã£ã·ã§ã³ ãåå²ãã¹ãããèŠããŠããã®ã§ã¯ãªãã§ããããã ïŒãããã¯ã ããŒãã£ã·ã§ã³ åå²ããå¿
èŠãç¡ãããšãïŒ ãã®ä»ã«ããç¶æ¿ããŒãã£ã·ã§ãã³ã°ã®æ€èšŒããé«è² è·ç¶æ
ã§ã®ããã©ãŒãã³ã¹ãªã©ãæ€èšŒããŠã¿ããããšããããŸãããããã®èŸºã¯ãŸãå¥ã®æ©äŒã«ããããšæããŸãã åèãµã€ã [改訂新版]内部構造から学ぶPostgreSQL 設計・運用計画の鉄則:書籍案内|技術評論社 第1回「テーブル・パーティショニングが大幅アップデート」 | NTTデータ先端技術株式会社 PostgreSQL 11先行紹介 - パーティション機能のさらなる改善 | NTTテクノクロスブログ PostgreSQL11のパーティショニングを試してみる - Qiita 5.10. テーブルのパーティショニング ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã forms.gle ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ rakus.connpass.com
ã¯ããã« æè¿ã ãªã©ã€ãªãŒ ããåºçãããŠããããã«ã·ãŒ ããã°ã©ã ããšããæžç±ãèªã¿ãŸããã ãšã³ãžãã¢ç®ç·ã§å¥åº·ã«ã€ããŠæžãããŠããã®ã§ãããé¢çœãå
容ã ã£ãã®ã§ç޹ä»ããŠã¿ãããšæããŸãã 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 ã®ããŒãžã§ã³ã¢ããã§è¿œå ãããæ°æ©èœã«ã€ããŠäžéšã玹ä»ããŸãããç¥ã£ãŠããã°åãå
¥ãããããªãšæããã®ãã©ã®ããã«äœ¿ãã°ããã®ãããããªãããããŸããããä»åŸãããŒãžã§ã³ã¢ããã«ãã¢ã³ããã匵ãã远å ãããæ°æ©èœã颿°ã䜿ãããªããŠãããããšæããŸãã