ã¿ãªããããã«ã¡ã¯ãããžãµã¯ã§ããä»åã¯ã ååã®èšäº ã§ã玹ä»ããããŸãããã é ïŒ ã ïŒ çºã® æª ïŒ ã¿ ïŒ æ¥ã« å
ïŒ ãã ïŒ æããã€ãããžã§ã¯ãïŒéç§°ïŒãã¿ãããããžã§ã¯ãïŒãã«ã€ããŠã®éäžçµéãã¬ããŒããããŠããã ããŸãã ä»å¹ŽåºŠã®ãã¿ãããããžã§ã¯ãã§ã¯ã倧ãã以äžã®ïŒã€ã®ããŒã Elasticsearch ããŒã¿å¿ååææ³ ã«ã€ããŠæ€èšŒãé²ããŠãããæ¬èšäºã§ã¯Elasticsearchã®æ€èšŒã«ã€ããŠèšèŒããããŸãã é£èŒç®æ¬¡ ãå
šææ€çŽ¢ ã ElasticsearchãšããŒã¿å¿ååææ³ã ãå
šææ€çŽ¢ã®æ¢æ± Elasticsearch(1) ã: ãããžã§ã¯ãæ¹éããã³ElasticsearchæŠèŠ âä»èªãã§ããèšäº 倧éããŒã¿ãæ€çŽ¢ãããµãŒãã¹ã§Elasticsearchã¯RDBã®ä»£æ¿åè£ã«ãªããããïŒ(Elasticsearch vs pg_bigm)ã ããŒã¿å¿åå 第1åïŒå¿ååãããå人æ
å ±ãšã¯äœãªã®ã ããŒã¿å¿åå 第2åïŒå人æ
å ±ã¯å¿ååããŠãæå³ããªãã®ã§ã¯ãªããïŒ ããŒã¿å¿åå 第3åïŒå人æ
å ±ãå¿ååããããã»ã¹ ããŒã¿å¿åå 第4åïŒå¿ååã®ããã«è¡ãããŒã¿é
ç®ã®äžè¬åãšã¯ ããŒã¿å¿åå 第5åïŒããŒã¿å¿ååã®ææš ããŒã¿å¿åå 第6åïŒå®éã®å¿åå SQL ãã¥ãŒãã³ã°ä»¥å€ã®ææ®µã åŒç€Ÿãéå¶ããŠãããµãŒãã¹ã®éçºã§ã¯ãæ€çŽ¢åŠçã®ããã©ãŒãã³ã¹èª²é¡ã«åãçµãããšããã°ãã°ãããæ€çŽ¢èŠä»¶ãžã®å¯Ÿå¿ç¯å²ãåºããããšèããŠããŸãã è€æ°ã®åçã«ã©ã ã®ããŒã¿ã暪æçã«æ€çŽ¢ããã ã¡ãŒã«ãªã©ã®å€§éã®æç« ããŒã¿ãæ€çŽ¢ããã ãªã©ã SQL ãã¥ãŒãã³ã°ã§ã¯äžççžã§ã¯ãããªããããªã·ãŒã³ã«ãããŠããã®ä»ã®æè¡çå¯Ÿå¿ææ®µãšããŠã®åœ¹å²ããElasticsearchã«æåŸ
ããŠããŸãã â»Elasticsearchãæ€èšŒå¯Ÿè±¡ãšãã詳现ãªçµç·¯ã«ã€ããŠã¯ã ååã®èšäº ãã芧ãã ããã å
šææ€çŽ¢ ã䜿ããæªæ¥ãæã«å
¥ãã Elasticsearchã®æ€èšŒãé²ããã«ãããã ããã¯ãã° ã®æŽãåºããè¡ããŸããã ããŒã å
šå¡ãElasticearchã«é¢ããç¥èŠããªãç¶æ
ããã®ã¹ã¿ãŒãã ã£ãããããŸãã¯ä»¥äžã®æžç±ãåèªèªã¿ãElasticsearchã®æŠèŠãçè§£ãããšããããå§ããŸããã Elasticsearchå®è·µã¬ã€ã Elasticsearchå®è·µã¬ã€ã (impress top gear) äœè
: æ£é å²ä¹ ã€ã³ãã¬ã¹ Amazon Elasticsearchã«ã€ããŠè©³ããç¥ãããã®èª¿æ»ãéå§ Elasticsearchã«é¢ããåºç€çãªæ
å ±ããå®éã«åäœãããŠã¿ãçµæãªã©ã Wiki ã«ãŸãšããŠãã¬ããžã®èç©ãè¡ããŸããã PHP ã§åäœãããµã³ãã«ããã°ã©ã ãäœæããã¢ããªã±ãŒã·ã§ã³ããã®Elasticsearchã®å©ç𿹿³ã®æ€èšŒãªã©ãè¡ãªã£ãŠããŸãã åäœç¢ºèªã¯ãåè¿°ã®æžç±ã®ä»ã«ã以äžã®ãããªæ
å ±ãåèã«ããŠè¡ããŸããã Elasticsearc å
¬åŒãªãã¡ã¬ã³ã¹ åºæ¬ç㪠API ã®äœ¿ãæ¹ãªã©ã¯ãå
¬åŒãªãã¡ã¬ã³ã¹ããªãã£ãŠåäœç¢ºèªããŸããã åœç«æ
å ±åŠç ç©¶æäœæã®Githubãªããžã㪠Elasticsearchã«é¢ããŠãäžéãåçž®ããŠãŸãšããããŠããŸãã REST API ã§ã®æ€çŽ¢ã€ã¡ãŒãž ããã§ã¯ã調æ»çµæã®äžéšãæç²ããŠã玹ä»ããããŸãã Elasticsearchã®æŠèŠ ãªãŒãã³ãœãŒã¹ ã®åæ£ å
šææ€çŽ¢ãšã³ãžã³ èªç¶èšèª ã§èšè¿°ããã倧éã®ææžããŒã¿ã®æ€çŽ¢ãé«éã«å®è¡å¯èœ ææžããŒã¿ãåå¥è§£æããåèªãªã©ã«åå²ããŠã€ã³ããã¯ã¹åããããšã§å®çŸããŠãã æ¥æ¬èªã®åå¥è§£æã«å¯Ÿå¿ãã ãã©ã°ã€ã³ ïŒKuromoji Analysis PluginïŒããã Elastic瀟 ãäžå¿ã«ãªã£ãŠéçºãé²ããããŠãã æ€çŽ¢ãšã³ãžã³ ã®ã³ã¢éšå㯠Java è£œã®æ€çŽ¢ã©ã€ãã©ãª Apache Lucene ã䜿çšãããŠãã ããã¥ã¡ã³ãåããŒã¿ããŒã¹ã§æè»ãªããŒã¿æ§é ã§ããŒã¿ãä¿åã§ãã ããã¥ã¡ã³ãåãªã®ã§ã鿣èŠåããç¶æ
ã§ããŒã¿ãæã€å¿
èŠããã ã¹ã±ãŒã©ãã«ãªæ§æã«ãªã£ãŠãããäºåã«æå€§ããŒã¿éã®æ€èšãã§ããŠããã°ã容æã«ã¹ã±ãŒã«ã¢ãŠãããããšãå¯èœ ããŒã¿ã®åå²åäœã§ããã·ã£ãŒãæ°ãäºåã«å®çŸ© ããŒããå¢ãããšãæ°ããå¢ããããŒãã«ã·ã£ãŒããåé
ããã¹ã±ãŒã«ã¢ãŠãã§ãã ãã ããã·ã£ãŒãæ°ã¯åŸãã倿Žã§ããªããããäºåã«æå€§ããŒã¿éãæ³å®ããèšç»ãå¿
èŠã«ãªã ãã©ã³ã¶ã¯ã·ã§ã³ ãæããªãïŒæ€çŽ¢ã»åç
§ã«ç¹åïŒ æ€çŽ¢ãããŒã¿ã®ç»é²ã ãã§ãªãã ã¯ã©ã¹ã¿ ã®ç®¡çãã¡ã³ããã³ã¹çã®ãã»ãŒå
šãŠã®æäœãã REST API ãçšããŠå®è¡ã§ãã æ€çŽ¢ã ãã§ãªããæ€çŽ¢çµæã®åé¡ãéèšãªã©ãé«éã«å®è¡ã§ãããKibanaãšã®çµã¿åããã«ãããããŒã¿ã®åŸåããã¿ãŒã³åæãªã©ã®çšéã§ãçšãããã Linux , Windows , Mac çã®åOSã«å¯Ÿå¿ããŠãããå
¬åŒã®Dockerã€ã¡ãŒãžãªã©ãå
¬éãããŠãã åºæ¬åäœã®ç¢ºèªã¯Dockerã³ã³ããäžã§å®æœ Elasticsearchã®æŽ»çšäºäŸ Elascticsearchã®æŽ»çšäºäŸã¯ãElastic瀟㮠å
¬åŒããŒãž ã«å€æ°æ²èŒãããŠããŸãã ããã§ã¯ãããã€ãç¹åŸŽçãªçšéã§äœ¿çšããŠããäºäŸãæç²ããããŸãã GitHub ãªããžã㪠ããŠãŒã¶ãŒãIssueãPRã ãœãŒã¹ã³ãŒã ãªã©ã®å€§éã®æ
å ±ãé«éã«æ€çŽ¢ã§ãã æ¥æ¬çµæžæ°è瀟 æ¥çµé»åçã®èšäºæ€çŽ¢æ©èœã§æŽ»çš LINE 倧éã®ãã°ããŒã¿ã®äžå
管çãšKibana飿ºã«ããå¯èŠå ãã¿ããElasticsearchæ€èšŒããŒã ã®æ§å éçºã®æªæ¥ã«å
æãæã€ããã®è°è«ãž Elasticsearchã®æŠèŠãæ©èœã®çè§£ãçµãåŸãä»åŸã©ã®ãããªæ€èšŒãè¡ãã¹ããããããŒã å
ã§è°è«ããŸããã ãã®éãããŒãšãªã£ãã®ã¯ã以äžã®ãã€ã³ãã ãElasticsearchã調æ»ã»æ€èšŒããããšã§åŸãããMinimum Value ãšã¯ãªã«ãïŒã ãããŠãç§ãã¡ãåŸãçµè«ã¯ã ãæ€çŽ¢æ©èœãæããæ°èŠãµãŒãã¹ã® ã¢ãŒããã¯ã㣠æ€è𿮵éã§ã RDB ã ãã§ãªãElasticseachãæ¯èŒæ€èšææãšããŠæããç¶æ
ãäœãã ãšãªããŸããã ãæ¯èŒæ€èšææãšããŠæããç¶æ
ãäœããããã«ãElasticsearchã®åŸæåéã§ããã èªç¶èšèª ã§èšè¿°ãããæååããŒã¿ãæã€ã倧éããŒã¿ã察象ã«ããæ€çŽ¢ããã©ãŒãã³ã¹ãæ€èšŒãè¡ãã RDB ãšã®æ¯èŒãè¡ãããšã«ããŸããã Minimum Value ã®æ€èšé¢šæ¯ â»ãã®ç»åã¯è°è«ã®éäžçµéã®ãã®ã§ãæçµçã«è³ã£ãçµè«ã§ã¯ãããŸãã SQL ãã¥ãŒãã³ã°ã§ã¯è§£æ±ºã§ããªãæ€çŽ¢èŠä»¶ãçãŸããæªæ¥ã«å
æãæã€ããã®èª¿æ»ãšæ€èšŒã«çæ çŸåšãMinumum Value ãã¢ãŠãããããã¹ããElasticsearchã®ããã©ãŒãã³ã¹æ€èšŒãè¡ã£ãŠããŸãã æ€èšŒå¯Ÿè±¡ã®ããŒã¿ã«ã¯ã Wikipediaã®æ¥æ¬èªçå
šããŒã¿ ãæ¡çšã æ€èšŒéå§æç¹ã®ã§ããã¥ã¡ã³ãæ°ïŒ2,339,123 ä»¶ äžèšã®ç°å¢ã«ã¹ãã¢ããŠæ€èšŒã宿œäž ElasticsearchïŒ Amazon Elasticsearch Service RDB ïŒ Amazon RDS for PostgreSQL ãµãŒããŒã®ã¹ããã¯ïŒã¡ã¢ãªãããŒãæ°ãªã©ïŒã«ããå€åãæ€çŽ¢ã¯ãšãªã®åœãŠæ¹ãªã©ãã©ã®ãããªèгç¹ã§æ€èšŒãè¡ãã¹ããã«ã€ããŠãè°è«ãããªããé²ããŠããŸãã æ¬¡åã¯ãæ€èšŒçµæã«ã€ããŠã¬ããŒããããŠé ãäºå®ã§ãã é£èŒç®æ¬¡ ãå
šææ€çŽ¢ ã ElasticsearchãšããŒã¿å¿ååææ³ã ãå
šææ€çŽ¢ã®æ¢æ± Elasticsearch(1) ã: ãããžã§ã¯ãæ¹éããã³ElasticsearchæŠèŠ âä»èªãã§ããèšäº 倧éããŒã¿ãæ€çŽ¢ãããµãŒãã¹ã§Elasticsearchã¯RDBã®ä»£æ¿åè£ã«ãªããããïŒ(Elasticsearch vs pg_bigm)ã ããŒã¿å¿åå 第1åïŒå¿ååãããå人æ
å ±ãšã¯äœãªã®ã ããŒã¿å¿åå 第2åïŒå人æ
å ±ã¯å¿ååããŠãæå³ããªãã®ã§ã¯ãªããïŒ ããŒã¿å¿åå 第3åïŒå人æ
å ±ãå¿ååããããã»ã¹ ããŒã¿å¿åå 第4åïŒå¿ååã®ããã«è¡ãããŒã¿é
ç®ã®äžè¬åãšã¯ ããŒã¿å¿åå 第5åïŒããŒã¿å¿ååã®ææš ããŒã¿å¿åå 第6åïŒå®éã®å¿åå
åããŸããŠãMasaKuã§ãã ã¯ãããéä¿¡ 第ïŒåãæ
åœãããŠããã ããŸãã ã¯ãããéä¿¡ã¯ããããå
šïŒåã«ããã£ãŠèšäºãæçš¿ããŠãããŸãã®ã§ã楜ãã¿ã«ïŒ tech-blog.rakus.co.jp 第ïŒåã§ã¯ãå
æ¥ãåŒç€Ÿã§éå¬ãã RAKUS Meetup Osaka ã®çºè¡šå
容ãããå°ãæãäžããèšäºãæžããããšæããŸãã rakus.connpass.com çºè¡šè³æã¯ ã³ãã© https://speakerdeck.com/masaku_2019/merumagapei-xin-sabisufalseyue-jing-puroziekuto-merudao-da-lu-xiang-shang-hefalsetiao-zhan speakerdeck.com ã¯ããã«ïŒãã¡ãŒã«ãå±ããªããã«ã¯ããããªçç±ã ãã¡ãŒã«ãå±ããªããã®ãã¿ãŒã³ ã¬ã€ãã©ã€ã³ãæŽçããŠã客æ§ã«ãææ¡ãã ã³ã³ãã³ããã§ãã¯ãããŠã客æ§ã«ä¿®æ£ããææ¡ãã IPã¬ãã¥ããŒã·ã§ã³ãè¯ãã¹ã³ã¢ã«ç¶æãã ãŸãšã åèãµã€ã ã¯ããã«ïŒãã¡ãŒã«ãå±ããªããã«ã¯ããããªçç±ã æ®æ®µãªã«ããªãå©çšããã¡ãŒã«ã§ãããã¡ãŒã«ã¯éä¿¡ããã°å¿
ãå±ããšã¯éããæ§ã
ãªçç±ã§çžæå
ã«å±ããªãããšããããŸãã ãã®ãããã¡ã«ãã¬é
ä¿¡ãµãŒãã¹ã«ãšã£ãŠãã©ãã ãã¡ãŒã«ãå±ãããããïŒã¡ãŒã«å°éçïŒã¯éèŠãªèŠçŽ ã®ïŒã€ã§ãã ããããã¡ã«ãã¬é
ä¿¡ãµãŒãã¹ã¯ã¡ãŒã«ãå±ããããšã ãã課é¡ã§ã¯ãããŸããã é
ä¿¡ããã¡ãŒã«ãè¿·æã¡ãŒã«ãšããŠåŠçãããã«ã¡ã«ãã¬èªè
ã«èªãŸããããšãéèŠãªèŠçŽ ã®ïŒã€ ã§ãã çãããã以äžã®ãããªçµéšãããã®ã§ã¯ãªãã§ããããïŒ ããã£ãŠæ®éã®å
容ã®ã¡ãŒã«ãè¿·æã¡ãŒã«ãšããŠåŠçããã ä»ãŸã§æ®éã«ããåãããŠããæ¹ã®ã¡ãŒã«ããçªç¶è¿·æã¡ãŒã«ãšããŠåŠçããã æéããããŠäœæããã¡ã«ãã¬ãè¿·æã¡ãŒã«ã«ãªã£ãŠããŸã£ãŠã¯æ¬æ«è»¢åã§ãã ã客æ§ãæããã¡ãŒã«ãå±ãããšã¯ ãã®èª²é¡ã¯ã¡ã«ãã¬é
ä¿¡ãµãŒãã¹ã«ãšã£ãŠéèŠãªèª²é¡ã§ãããå®ã¯é
ä¿¡ã®ä»çµã¿ãã¢ããªã±ãŒã·ã§ã³åŽã®åŠçã ãã§è§£æ±ºããããšãé£ãã課é¡ãªã®ã§ãã ãã¡ãŒã«ãå±ããªããã®ãã¿ãŒã³ ã¡ãŒã«ãå±ããªããšããããšã§ãæ©ã¿ã®ã客æ§ã«ã¯ä»¥äžã®ãããªãã¿ãŒã³ããããŸãã è¿·æã¡ãŒã«ãšå€å®ãããã¡ãŒã«ã«ãªã£ãŠãã è¿·æã¡ãŒã«ãšå€å®ãããªãããã«çæããŠããããç¡æèã®ãã¡ã«ã¡ãŒã«å
å®¹ãæªããªã£ãŠãã ã¡ãŒã«ã®å
å®¹ãæªããªããããªããè¿·æã¡ãŒã«ã«ãªã£ãŠããŸã è¿·æã¡ãŒã«ãšãããšã å
¬åºè¯ä¿ ã«åãããããªå
容ã®ã¡ãŒã«ïŒãããã ã¹ãã ã¡ãŒã« ïŒãæ³åãããšæããŸãããå®ã¯ãã以å€ã®çç±ã§è¿·æã¡ãŒã«ãšå€å®ãããå ŽåããããŸãã é
é
ã¡ãŒã«ã§ã¯ãããã£ã課é¡ãã¯ãªã¢ããããã«ãããã€ãã®æœçãè¡ã£ãŠããŸãã®ã§ãæ¬æ¥ã¯ãã¡ãã«ã€ããŠã話ããããšæããŸãã ã¬ã€ãã©ã€ã³ ãæŽçããŠã客æ§ã«ãææ¡ãã ã¹ãã ã¡ãŒã« ãªã©ã®ã³ã³ãã³ããäžæ£ãªã¡ãŒã«ã¯è¿·æã¡ãŒã«ãšããŠåŠçãããããšã¯ãåãããšæããŸãã ããããã©ã®ãããªã¡ãŒã«ãè¿·æã¡ãŒã«ã«ãªããã¯ãåä¿¡ãµãŒãããšã«èšãããããã£ã«ã¿ã«äŸåããããå®ç§ãªå¯Ÿçããšãããšãé£ããã§ãã ããã§ãé
é
ã¡ãŒã«ã§ã¯å°ãã§ãå€ãã®ã¡ãŒã«ãã¡ã«ãã¬èªè
ã«å±ããããã® ã¡ãŒã«ãäœæããããã® ã¬ã€ãã©ã€ã³ ãã客æ§åãã«å±éããŠããŸãã ã¡ãŒã«å°éçåäž ã¬ã€ãã©ã€ã³ äŸãã°ãåä¿¡ãµãŒãåŽã§ãããã¯ãããããããŒã¯ãŒãã¯é¿ããŠã¡ãŒã«ãäœæããŠããã ãããšããé
ä¿¡ããã¡ãŒã«ã®ä¿¡é Œæ§ãé«ããããã« SPF ã DKIM ã®èšå®æé ãæ¡å
ãã ã¬ã€ãã©ã€ã³ ããæäŸããŠããŸãã ãã® ã¬ã€ãã©ã€ã³ ã¯é
é
ã¡ãŒã«ã®é¡§å®¢ãµããŒãéšçœ²ãäœæããŠãããŸãã ã³ã³ãã³ããã§ãã¯ãããŠã客æ§ã«ä¿®æ£ããææ¡ãã ã¡ãŒã«æ¬æå
ã®ã³ã³ãã³ããæªããšè¿·æã¡ãŒã«ãšããŠåŠçãããããšãç¥ã£ãŠãããšããŠããæå³ãã ã¬ã€ãã©ã€ã³ ã«éåããã¡ãŒã«ãäœæããŠããŸãå ŽåããããŸãã é
é
ã¡ãŒã«ã§ã¯ãã¡ãŒã«æ¬æå
ã®æ
å ±ãè§£æãããè¿·æã¡ãŒã«ãæ±ãã«ãªãå¯èœæ§ã®ããã°ã¬ãŒãªå
å®¹ãæ€ç¥ããä»çµã¿ãå°å
¥ããŠããŸãã äŸãã°ãã¡ãŒã«æ¬æã«ãçŸéããšã皌ããšããããŒã¯ãŒããå«ãŸããã¡ãŒã«ãé
ä¿¡ããããšãã·ã¹ãã åŽã§è¿·æã¡ãŒã«ã®çããããšå€æãæ¬åœã« ã¹ãã ã¡ãŒã« ããçŽæ¥ãã§ãã¯ããŠããŸãã ã³ã³ãã³ããã§ãã¯ã®ãã㌠迷æã¡ãŒã«ã«ãªãåºæºã¯åä¿¡ãµãŒãåŽã®åºæºã«ããããã ã·ã¹ãã ãæ€ç¥ãããããšãã£ãŠãçŽã¡ã« ã¹ãã ã¡ãŒã« ãšå€æããã«ã顧客ãµããŒãããŒã ãçŽæ¥ã客æ§ãžãé£çµ¡ããã¡ãŒã«å
容ã®ä¿®æ£ã®çžè«ãããŠããŸãã å°éãªäœæ¥ã§ã¯ãããŸãããéèŠãªèª²é¡ãšèªèããŠã課é¡è§£æ±ºã«åãçµãã§ããŸãã IPã¬ãã¥ããŒã·ã§ã³ãè¯ãã¹ã³ã¢ã«ç¶æãã æåŸã«ããããŸã§ã説æããããšããã¹ãŠå®ãããŠããã®ã«è¿·æã¡ãŒã«ãšããŠåŠçãããŠããŸãããšã®å¯Ÿçã§ãã ãããã IPã¢ãã¬ã¹ ã®ä¿¡é Œæ§ïŒã¬ãã¥ããŒã·ã§ã³ïŒãšãã仿§ã§ãã äŸãã°ã ã¹ãã ã¡ãŒã« ãé »ç¹ã«é
ä¿¡ããŠãããµãŒãã¯åä¿¡ãµãŒãåŽããè¿·æã¡ãŒã«é
ä¿¡ãè¡ããµãŒããšã㊠ãã©ãã¯ãªã¹ã ã«ç»é²ãããŠããŸããŸãã ãã®çµæããã®ãµãŒãããé
ä¿¡ãããã¡ãŒã«ããããã¯ãããŠããŸããæ®éã®ã¡ãŒã«ããå±ããªãã¡ãŒã«ãµãŒãã«ãªã£ãŠããŸããŸãã è¿·æã¡ãŒã«é
ä¿¡ãæŸçœ®ããŠã¯ãããªãçç± é
é
ã¡ãŒã«ã§ã¯ãè¿·æã¡ãŒã«ãšãªãã¡ãŒã«ãé
ä¿¡ãç¶ããŠããã客æ§ã«ã¯ãèŠåã®ãé£çµ¡ãããåŸãããã§ãæ¹åãèŠãããªãå Žåã¯å¥ã®ãµãŒãã«ç§»åããŠããã ãããšããæœçããããªã£ãŠããŸãã ã³ã³ãã³ãéå顧客ã®éé¢ ãã®æœçã«ãããã³ã³ãã³ããæ£åžžãªã¡ãŒã«ãé
ä¿¡ãããã客æ§ã®ã¡ãŒã«ãå©çšãããã¡ãŒã«é
ä¿¡ãµãŒãã® IPã¢ãã¬ã¹ ã®ä¿¡é Œæ§ã¯é«ãç¶æ
ã§ç¶æããããšãã§ããŸãã ãŸãšã ãããã§ããã§ããããïŒ ã¡ãŒã«é
ä¿¡ãµãŒãã¹ã«ãããã ã¡ãŒã«ãå±ãã ããšã¯ãåçŽã«ã¡ãŒã«ãå±ããã ãã§ãªããã¡ã«ãã¬èªè
ã«ã èªãŸãã ãããšãéèŠã§ãã ãã®ããã«ã¯ãè¿·æã¡ãŒã«ãšããŠåŠçãããªãããã«æ§ã
ãªå·¥å€«ãå¿
èŠã§ããããšããçè§£ããã ããã幞ãã§ãã ã¯ãããéä¿¡ã§ã¯ããããããã¡ã«ãã¬é
ä¿¡ã«ã€ããŠã®èšäºãæ²èŒããŠãããŸãïŒ æ¬¡åãã©ãããæ¥œãã¿ã«ïŒ åèãµã€ã メルマガ配信・一斉メール配信サービス「配配メール」 https://speakerdeck.com/masaku_2019/merumagapei-xin-sabisufalseyue-jing-puroziekuto-merudao-da-lu-xiang-shang-hefalsetiao-zhan
ã¯ããã« ããã«ã¡ã¯ãæ°å2幎ç®ã®mrym_618ã§ãã æè¿ã jQuery ã§ã¹ã¯ããŒã«äœçœ®ã®ååŸããæ¹æ³ãå®è£
ããŸãããããªããªãããŸããããŸããã§ããã®ã§ããã®ãšãã®ããšãæžããŠãããããšæããŸãã ã¯ããã« jQueryã§ã¹ã¯ããŒã«äœçœ®ãååŸããæ¹æ³ ããŸããããªãã£ãããš ãããã« jQuery ã§ã¹ã¯ããŒã«äœçœ®ãååŸããæ¹æ³ jQuery ã§ã¹ã¯ããŒã«äœçœ®ãååŸããã«ã¯ããscrollTop()ãã¡ãœããã䜿çšããŸãã ãscrollTop()ãã¡ãœããã®èšè¿°æ¹æ³ã¯ä»¥äžã®éãã§ãã 察象èŠçŽ .scrollTop(); ãã©ãŠã¶å
šäœã®ã¹ã¯ããŒã«äœçœ®ãååŸããã«ã¯å¯Ÿè±¡èŠçŽ ã« window ãæå®ããŸãã $(window).scrollTop(); ããŸããããªãã£ãããš ä»åã¯ã察象èŠçŽ ã« body ãæå®ããŠå®è£
ããŠããŸããã ãããšãEdgeãš Safari ã§ã¯ãæ£ããå€ãååŸã§ããŠããŸãããã Chrome ãš IE ãš Firefox ã§ã¯ãåžžã«0ãååŸããŠããŸããã åå ã¯ã以äžã®ãµã€ãã®éããã©ãŠã¶ã«ãã£ãŠãscrollTop()ãã¡ãœãããå¹ãã¿ã°ãéãããšã§ããã chaika.hatenablog.com ããã§ããã®ãµã€ããåèã«ãã©ãŠã¶ããšã«å¯Ÿè±¡èŠçŽ ãå€å®ããããã«å®è£
ããŸããã var ua = navigator.userAgent; var scrollTag; // Edge, Safariã®å Žå if(ua.indexOf('Edge') !== -1 || (!window.chrome && 'WebkitAppearance' in document.documentElement.style)) { scrollTag = 'body'; // Chrome, IE, Firefoxã®å Žå } else { scrollTag = 'html'; } ãããã« ä»åã¯ã jQuery ã§ã¹ã¯ããŒã«äœçœ®ãååŸãããšãã«å°ã£ã話ã«ã€ããŠæžããŸããããããåããããªããšã§å°ã£ãŠããã°ããã®èšäºãåèã«ãªãã°å¹žãã§ãã ãŸãã jQuery ã«ã¯ãscrollTop()ãã¡ãœãã以å€ã«ããã©ãŠã¶ã«ãã£ãŠæåãç°ãªãã¡ãœããã¯ãããšæãã®ã§ã jQuery ã§å®è£
ãããšãã¯ãã£ãããã«ããã©ãŠã¶ã§ãã¹ãããããšãå¿ãããŠãããããšæããŸãã ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã forms.gle ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ rakus.connpass.com
ããã«ã¡ã¯ãæ°å2幎ç®ã®badaikiã§ããæ©ããã®ã§åŸèŒ©ãé
å±ããã瀟å
ã®é°å²æ°ãããæãããããæŽ»çºã«ãªã£ãŠããããã«æããŸãã ç®æ¬¡ ç®æ¬¡ ã¯ããã« ãã·ãžã§ã³ããŒãã«ãšã¯ ãã·ãžã§ã³ããŒãã«ã®æ§æ ã¡ãªããããã¡ãªãã æåŸã« åèã«ãããµã€ã ã¯ããã« ä»åã¯ãã¹ãææ³ã® ãã·ãžã§ã³ããŒãã« ã«ã€ããŠæžããŠãããŸãã æè¿ã¯èŠæš¡ã®å€§ããªéçºãè€éãªä»æ§ã®éçºãä»»ããŠããã ãæ©äŒãå¢ããŠããŸããããã®ãšãã«ãè€æ°ã®æ¡ä»¶ãè€éã«çµ¡ã¿åãããšã«ãã£ãŠãã¹ãã±ãŒã¹äœææã«ãå
šãã¿ãŒã³ãç¶²çŸ
ã§ããŠããã®ãããäžå®ã«ãªãå Žé¢ããããŸããããã¡ãã100%ãšããã®ã¯é£ããã§ãããæŒããèµ·ãã«ãããã¹ãã±ãŒã¹ãèªåãçŽåŸã®ãããã¹ãã±ãŒã¹ãæžãããã«ã¯ã©ãããã°ããã®ããèããŸããã ãŸãåãã«äžèšã®äžå®ã®åå ãçŸç¶ææ¡ãå
ŒããŠåæããŸããã åå€åå²ãå¢çå€åæã¯çè§£ããŠãã ã€ãã (åäžã®æ¡ä»¶ãªã倧äžå€«) 宿ãããã¹ãã±ãŒã¹ãèŠãŠç¶²çŸ
ã§ããŠããã®ããèªã¿åãã«ãã çç¥ãããã¹ãã±ãŒã¹ãæ¬åœã«çç¥ããŠããã£ãã®ãäžå®ã«ãªã(å¿
èŠãªãã®ã誀ã£ãŠçç¥ããŠããªãããªâŠ) äžèšã®ãããªäžå®ã®åå ã«ãªã£ãŠãããã®ã«å¯ŸããŠãäœãäžè¶³ããŠãã芳ç¹ããªãããæžãæ¹ã工倫ããããšã§è£ããªãããšèã調ã¹ãããšã«ããŸãããããã§çç®ããã®ã ãã·ãžã§ã³ããŒãã« ã§ããã ãã·ãžã§ã³ããŒãã« ãšã¯ ãã·ãžã§ã³ããŒãã« ãšã¯ã決å®è¡š(JIS X 0125) 1 ãšããŠèŠæ Œãå®çŸ©ãããŠããŸããè«çé¢ä¿ã衚圢åŒã§æŽçããããã®ããŒã«ã§ãè¡æ¹åã«æ¡ä»¶ãšåäœãåæ¹åã«ã«ãŒã«ãçµåããŸããããã°ã©ã ã®åŠçæ¡ä»¶ãããªã·ãŒãªã©ããããããã衚çŸããããã«å©çšãããããœãããŠã§ã¢ã®ãã¹ãæ¡ä»¶ãæŽçããããã«ãå©çšãããŸãã 以äžã仿§ãšãããšãã® ãã·ãžã§ã³ããŒãã« ãäŸã«ããŠèããŠã¿ãŸãã ãžã ã®å©çšæéã®ä»æ§ ã» ã¯ãŒãã³æåã®å Žåã¯10%OFF ã» å¹³æ¥ãªã30%OFF â» è€æ°ã®å²åŒã¯äœµçšã§ããããããåŸãªãã®ãåªå
ããã ãžã å©çšæéã® ãã·ãžã§ã³ããŒãã« ãã·ãžã§ã³ããŒãã« ã®æ§æ ãã·ãžã§ã³ããŒãã« ã¯ä»¥äžã®ãããªèŠçŽ ã§æ§æãããŠããŸãã æ¡ä»¶èšè¿°éšïŒcondition stubïŒ æ¡ä»¶èšè¿°éš èæ
®ãã¹ãæ¡ä»¶ã»åå ãåæããéšåã§ãã åäœèšè¿°éšïŒaction stubïŒ åäœèšè¿°éš èæ
®ãã¹ãåäœã»çµæãåæããéšåã§ãã æ¡ä»¶æå®éšïŒcondition entryïŒ æ¡ä»¶æå®éš ããããã®æ¡ä»¶ã»åå ãç¹å®ã®å€ã»æå³ã§æå®ããã²ãšã€ã®ã«ãŒã«ãšããŠé¢é£ä»ããããŸããæ¡ä»¶æå®éšã«ã¯ä»¥äžã®ãããªæžãæ¹ãããŸãã è¡šèš ã«ãŒã«ã§é¢é£ä»ããæå³ YïŒYesïŒ ãã®è¡ã«å¯Ÿå¿ããæ¡ä»¶ã»åå ãçã§ããããšãæå³ãã NïŒNoïŒ ãã®è¡ã«å¯Ÿå¿ããæ¡ä»¶ã»åå ãåœã§ããããšãæå³ãã å€ãèªå¥ãªã© ãã®è¡ã«å¯Ÿå¿ããæ¡ä»¶ã»åå ãèšè¿°ãããå€ã§ãã£ãããèªå¥ãæºããããšãæå³ãã - ãã®è¡ã«å¯Ÿå¿ããæ¡ä»¶ã»åå ãç¡é¢ä¿ã§ããããšãæå³ãã åäœæå®éšïŒaction entryïŒ åäœæå®éš ããããã®åäœã»çµæãç¹å®ã®å€ã»æå³ã§æå®ããã²ãšã€ã®ã«ãŒã«ãšé¢é£ä»ããããŸããæ¡ä»¶æå®éšã«ã¯ä»¥äžã®ãããªæžãæ¹ãããŸãã è¡šèš ã«ãŒã«ã§é¢é£ä»ããæå³ XïŒeXecuteïŒ ãã®åã«æå®ãããæ¡ä»¶ã»åå ã®çåœå€ã«ãã¹ãŠé©åããå Žåããã®è¡ã«å¯Ÿå¿ããåäœã»çµæãçããããšãæå³ãã - ãã®åã«æå®ãããæ¡ä»¶ã»åå ã®çåœå€ã«ãã¹ãŠé©åããå Žåããã®è¡ã«å¯Ÿå¿ããåäœã»çµæãçããªãããšãæå³ãã å€ãèªå¥ãªã© ãã®åã«æå®ãããæ¡ä»¶ã»åå ã®çåœå€ã«ãã¹ãŠé©åããå Žåããã®è¡ã«å¯Ÿå¿ããåäœã»çµæãèšè¿°ãããå€ã§ãã£ãããèªå¥ãæºããããšãæå³ãã èŠå èŠå æ¡ä»¶ã»åå ã®çµã¿åãããšãããã«å¯Ÿããåäœçµæãçµã¿åããããã®ã§ãã1ã€1ã€ããã¹ãã±ãŒã¹ã«ãªããŸãã ã¡ãªããããã¡ãªãã ã¡ãªãã è€æ°ã®æ¡ä»¶ã絡ã¿ãã£ãçµã¿åãããæç¢ºã«ããããšãã§ãã ç¶²çŸ
çãç®åºã§ããïŒ = 宿œããèŠåæ° / å
šèŠåæ°ïŒ ãã¡ãªãã é åºãèæ
®ã§ããªã èŠåïŒãã¹ãã±ãŒã¹ïŒæ°ãççºçã«å¢å ãã äŸãã°ä»æ§ã«ãæææ¥ãªã女æ§ã¯50%OFFïŒç¥æ¥ã¯é€ãïŒããšãã仿§ã远å ããŸãã ãžã ã®å©çšæéã®ä»æ§ ã» ã¯ãŒãã³æåã®å Žåã¯10%OFF ã» å¹³æ¥ãªã30%OFF ã» æææ¥ãªã女æ§ã¯50%OFFïŒç¥æ¥ã¯é€ãïŒ â» è€æ°ã®å²åŒã¯äœµçšã§ããããããåŸãªãã®ãåªå
ããã ãžã å©çšæéã® ãã·ãžã§ã³ããŒãã« ïŒä»æ§è¿œå ïŒ ãããšãé端ã«ã±ãŒã¹æ°ãå¢ããããšãããããŸããã§ãããææ¥ãšæ§å¥ã絡ãã§ããæ¡ä»¶ã远å ããã«ãé¢ãããæ¡ä»¶èšè¿°éšã¯æ¯èŒçã·ã³ãã«ãªãŸãŸç¶æããããšãã§ããããã«ããŒãã«ã«ãªã£ãŠãããã空ã§ãã¹ãã±ãŒã¹ã䞊ã¹ããããç¶²çŸ
æ§ã®ç¢ºèªãææ¡ãããããšæããŸããã æåŸã« ä»å㯠ãã·ãžã§ã³ããŒãã« ã«ã€ããŠãŸãšããŸããã è€æ°ã®æ¡ä»¶ã絡ããã¹ãã±ãŒã¹ã§ã¯èгç¹ãããã€ãååšããããç¶²çŸ
ã§ããŠããã®ããäžå®ã«ãªããŸãã ãã·ãžã§ã³ããŒãã« ãå©çšããããšã§1ã€1ã€ã®æ¡ä»¶ã«åè§£ãæ¡ä»¶èšè¿°éšãæžãããšãã§ããç¶²çŸ
æ§ã確èªãããããªãããæçšã§ã¯ãªãããšæããŸããããã ãããã¹ãã±ãŒã¹ãèšå€§ã«ãªã£ãŠããŸããšäœæ¥ã³ã¹ããããã£ãŠããŸãããã1ã€ã®ç»é¢ã®äžéšã«çšãããªã©å·¥å€«ãå¿
èŠã ãšæããŸããã ãã¹ãã®ç²ŸåºŠãé«ããããã«ãä»åŸãããŒã«ãæ¹æ³ãåŠç¿ããå®è·µãåªããŠãããŸãã åèã«ãããµã€ã softest.jp www.techscore.com ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã 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 規格検索結果 | 日本規格協会 JSA Group Webdesk ↩
ã¯ããã« ããã«ã¡ã¯ïŒä»åã¯6æ25æ¥ã«è¡ããããã¢ããã·ã¥ã®ã玹ä»ãããŸãã ä»åã®ãã¢ããã·ã¥ã¯ç¿æ¥ã«è¡ãããMeetupã®ãªããŒãµã«ãšLTã®2éšæ§æã§ããã Meetupã«ã€ããŠã¯ compass ã®ããŒãžãã芧ãã ããã rakus.connpass.com 察象ã®Meetupã¯çµäºããŠããŸããŸãããã宿çã«ã€ãã³ããå
¬éããŠãããŸãã®ã§ãã²ãåå ãã ãããã ã§ã¯ã§ã¯ãLTã®ã玹ä»ãããŠãããŸãã ã¯ããã« ãã¯ãã¡ãœããisäœ ã¢ãããªçŽæïŒPromiseïŒ ãã¶ã€ã³ãã¿ãŒã³ååŒ·äŒ PHP7.4 Updates ã¢ãŠããããé§åèªæžè¡å®è·µå
¥é æ¹åæ¥åãå
šæ©èœãã¹ãã®èªååã ããã ãã¯ãã¡ãœããisäœ Scala 奜ããšã³ãžãã¢ãåããããã¯ãã¡ãœããããã¯ãã¡ãœãããšã¯ãªãããïŒ ãšãã£ãçåã«ã€ã㊠Scala ã®èšæ³ã®ç¹åŸŽãšãšãã«è§£èª¬ããŠãã ãããŸããã Scala ã¯çç¥èšæ³ãå€ããç§ã®ããã«æ
£ããªã人ããèŠããšãããã«ããéšåããããŸããããã®ããã«ç€Ÿå
ã§å
±æããŠãã ããã®ã§å匷ãæããŸãã ã¢ãã ãªçŽæïŒPromiseïŒ ã¢ãã ãéããŠã JavaScript ã®Promiseã®äœ¿ãæ¹ãå©çšç®çããããããã解説ããŠãã ãããŸããã JavaScript ã§éåæåŠçãèšè¿°ããéã«ãPromiseãã¿ãŒã³ã¯å¿
ãç®ã«ãããšã¯æããŸãããåããŠã®ãã¡ã¯ãªããªããšã£ã€ãã«ããéšåããããšæããŸããïŒå°ãªããšãçè
ã¯ããã§ãïŒ å¥ã®ãã®ïŒä»å㯠ã¢ãã ïŒã«çœ®ãæããŠçè§£ã®å©ããšããããšãããã²èªåã®å匷ã®éã«ã掻ãããããã®ã§ãã ãã¶ã€ã³ãã¿ãŒã³ ååŒ·äŒ çŸåšå€§éªã§å®æçã«è¡ãããŠãã瀟å
å匷äŒã ãã¶ã€ã³ãã¿ãŒã³ å匷äŒã«åå ããè¥æãšã³ãžãã¢ããæè¿åŠãã Simple Factoryãã¿ãŒã³ã«ã€ããŠçºè¡šããŠãããŸããã ããã©ã³ PHP ãšã³ãžãã¢ã®ã¿ãªããã«ãã£ãŠãè¥æã®ç¥èã®å¹
ãã©ãã©ãåºãã£ãŠããŠãããŸãã PHP7.4 Updates PHP ãããã ãå
ããããææ°ã®PHP7.4ã®æ©èœã«ã€ããŠç޹ä»ããŠãã ãããŸããã å人çã«ã¯Typed Properties ã®ããããã£åæå®ã«èå³ãæ¹ãããŠããŸããŸãã ã©ã¯ ã¹ã®åæã¯ PHP ã§äœãããŠãããã®ãå€ãã®ã§èŠãã§ãã¯ã§ããã ã¢ãŠããããé§åèªæžè¡å®è·µå
¥é èªæžå
容ã«ã€ããŠèªå·±åŠç¿çãªå®è·µãè¡ã£ãŠå
çãããã®çµæãã¢ãŠããããããããšã§ã³ã³ãã¯ãã«çµéšåŠç¿ãè¡ãã ã¢ãŠããããé§åã§èªæžããããšã¯ãéã¢ãŠããããé§åãªèªæžãåšåé
ãã«ããã»ã©ã®èªå·±æé·ãé«ãã广ãããïŒãããããªãïŒ ç¥èã ä»å
¥ ããŠã§ããæ°ã«ãªã£ãã¯ãããã®ã®ãããä»äºã«æŽ»ãããŠã¿ããšäžæããããªãã£ãŠããšãå€ã
ãããŸãã å
¬éãããŠããã¹ã©ã€ãã§çºè¡šè
ãåèã«ããæ
å ±ãæžç±ãèšèŒãããŠããã®ã§ãæ°ã«ãªãæ¹ã¯ã©ããã speakerdeck.com æ¹åæ¥åãå
šæ©èœãã¹ãã®èªååã è¥æãšã³ãžãã¢ããå
šæ©èœãã¹ãã®èªååãpuppeteerãçšããŠé 匵ã£ãŠãã話ãããŠãããŸããã ãªãªãŒã¹ãµã€ã¯ã«ãæ©ããããããã¹ãæéãççž®ããããã«èªååã«åãçµãã éã®ææ³ãé£ããã«ã€ããŠèµ€è£žã
ã«èªã£ãŠãããŸããã ããã æè¿ã§ã¯ãã¢ããã·ã¥ã®çºè¡šè
ãå¢å åŸåã«ãããå
容ãå€å²ã«æž¡ãéåžžã«èŽããããããããã®ãšãªã£ãŠããŸãïŒïŒ ä»åŸããã¢ããã·ã¥ã®å
容ã¯ããã°ã«æ²èŒããŠããã®ã§ãã©ãããæ¥œãã¿ã«ïŒïŒ
ã¯ããã« ããã«ã¡ã¯ã2幎ç®ã«ãªã£ãyk_itgã§ãã ä»å㯠postgreSQL ã§indexãå©çšããæãã©ãã ãæ€çŽ¢é床ãäžããã®ã調ã¹ãŠã¿ããâŠãšããã®ã§ãããããŸãindexã䜿ã£ãŠããããŸããã§ãããä»åã¯ãã®æã®ããšãèšäºã«ããããšæããŸãã ãªãããã®èšäºã§ã¯ postgreSQL ã§indexãäœæããæã®ããã©ã«ãã§ããB-tree indexã䜿çšããŠããããšãåæãšããŠããŸãã ã¯ããã« æ€èšŒããŒãžã§ã³ ãã£ããindexãäœã£ãŠã¿ã ããå®è¡ 䜿ãããªãçç± äžã€ç®ã®çç± äºã€ç®ã®çç± ææ³ åè æ€èšŒããŒãžã§ã³ postgreSQL 11.4 ãã£ããindexãäœã£ãŠã¿ã ãšãããããindexã貌ãããŒãã«ãå¿
èŠã§ãã 倧éããŒã¿ããªããšå¹æãããããªããšæã£ãã®ã§ããã¡ãã®èšäºãåèã«100äžä»¶ã®ã¬ã³ãŒããæã€ããŒãã«ãäœã£ãŠã¿ãŸããã tech-blog.rakus.co.jp CREATE TABLE indexTest ( id integer PRIMARY KEY, name text ) INSERT INTO indexTest (id,name) SELECT i, format('text%s', i) FROM generate_series(1,10000000) as i ; ãã®ããŒãã«ã«CREATE INDEXããŠindexãäœã£ãŠã¿ãŸãã CREATE INDEX ON indexTest (id); CREATE INDEX ON indexTest (name); explain_test=# \di List of relations Schema | Name | Type | Owner | Table --------+--------------------+-------+----------+----------- test1 | indextest_id_idx | index | postgres | indextest test1 | indextest_name_idx | index | postgres | indextest (2 rows) ããå®è¡ ã§ã¯å®éã«indexã貌ã£ãããŒãã«ã«å¯ŸããŠæ€çŽ¢ããããŠã¿ãŸãã ãã ãæ€çŽ¢ãéããªããšãã£ãŠãç®èŠã§ã¯ãã£ã±ãéããããããªãã®ã§EXPLAINã䜿ããŸãã EXPLAINã䜿ããšã³ã¹ããšã©ããªæ¹æ³ã䜿ã£ãŠæ€çŽ¢ããããšããŠããã®ã調ã¹ãããšãã§ããŸãã Indexãå©çšãããŠããå Žåã«ã¯ãIndex ScanãIndex Only Scanãªã©ã®indexã䜿ã£ãŠããããšã瀺ãEXPLAIN æŒç®å ãå®è¡èšç»ã«è¡šç€ºãããã¯ãã§ãã æ©éå
ã»ã©indexã匵ã£ãnameã®ã«ã©ã ãæ€çŽ¢æ¡ä»¶ã«å
¥ããŠæ€çŽ¢ããŠã¿ãŸãã explain_test=# EXPLAIN SELECT COUNT(name) FROM indexTest WHERE name LIKE '%text10001%'; QUERY PLAN -------------------------------------------------------------------------------------------- Finalize Aggregate (cost=107139.59..107139.60 rows=1 width=8) -> Gather (cost=107139.38..107139.59 rows=2 width=8) Workers Planned: 2 -> Partial Aggregate (cost=106139.38..106139.39 rows=1 width=8) -> Parallel Seq Scan on indextest (cost=0.00..106138.33 rows=417 width=11) Filter: (name ~~ '%text10001%'::text) (6 rows) ããïŒindexã䜿ãããŠããªãããã§ããã Index Scanã§ã¯ãªããããŒãã«ãé çªã«èŠãŠããSeq Scanã衚瀺ãããŠããŸãã 詊ãã«æ€çŽ¢æ¡ä»¶ãidã«å€æŽããŠã¿ãŸãã explain_test=# EXPLAIN SELECT COUNT(*) FROM indexTest WHERE id <= 5000000; QUERY PLAN ----------------------------------------------------------------------------------------------- Finalize Aggregate (cost=112375.23..112375.24 rows=1 width=8) -> Gather (cost=112375.01..112375.22 rows=2 width=8) Workers Planned: 2 -> Partial Aggregate (cost=111375.01..111375.02 rows=1 width=8) -> Parallel Seq Scan on indextest (cost=0.00..106138.33 rows=2094672 width=0) Filter: (id <= 5000000) (6 rows) ãããã¯ãindexã¯äœ¿ãããªãããã§ãã 䜿ãããªãçç± äžã€ç®ã®çç± äžã€ç®ã®çç±ã¯åæ¹äžèŽä»¥å€ã®LIKEã䜿ã£ãŠæ€çŽ¢ããŠããããã§ãã B-treeã®indexã䜿çšããå Žåã¯ãæååã®ååã«ã€ããŠããæ€çŽ¢ãè¡ããŸããã ãªã®ã§ãååãæ€çŽ¢æ¡ä»¶ã§ããåæ¹äžèŽã®æ€çŽ¢ã§ã¯indexã䜿çšããŠãããŸãã explain_test=# EXPLAIN SELECT COUNT(name) FROM indexTest WHERE name LIKE 'text10001%'; QUERY PLAN --------------------------------------------------------------------------------------------------- Aggregate (cost=12.27..12.28 rows=1 width=8) -> Index Only Scan using indextest_name_idx on indextest (cost=0.43..9.77 rows=1000 width=11) Index Cond: ((name >= 'text10001'::text) AND (name < 'text10002'::text)) Filter: (name ~~ 'text10001%'::text) (4 rows) å®è¡èšç»ãèŠãŠããã£ãã Index Only Scanã衚瀺ãããŠããŸãã äºã€ç®ã®çç± äºã€ç®ã®çç±ã¯æ€çŽ¢æ¡ä»¶ã«åœãŠã¯ãŸãè¡æ°ãå€ãããããã§ãã åœãŠã¯ãŸãè¡æ°ãå€ãããå Žåã«ã¯ãindexã䜿ã£ãŠæ€çŽ¢ãããããããŒãã«ãé çªã«ã¿ãŠããã»ããéããªããŸãã explain_test=# EXPLAIN SELECT COUNT(*) FROM indexTest WHERE id <= 3700000; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------- Finalize Aggregate (cost=110081.60..110081.61 rows=1 width=8) -> Gather (cost=110081.38..110081.59 rows=2 width=8) Workers Planned: 2 -> Partial Aggregate (cost=109081.38..109081.39 rows=1 width=8) -> Parallel Index Only Scan using indextest_pkey on indextest (cost=0.43..105174.50 rows=1562752 width=0) Index Cond: (id <= 3700000) (6 rows) ãã®ããã«æ€çŽ¢æ¡ä»¶ã«å¿ããŠé©åãªãã©ã³ãããŒã¿ããŒã¹ã¯çµã蟌ãã§ãããŸãã ææ³ indexã䜿ãã°ã©ããããéããªãã®ãã¯æ€èšŒããããšãã§ããŸããã§ããããindexã®ä»çµã¿ãå®è¡èšç»ã«ã€ããŠè§Šããããšãåºæ¥ãŸããã ã©ãã©ãè§Šããæ©äŒãå¢ããŠãããšæãã®ã§ãä»åŸãããŒã¿ããŒã¹ã®ä»çµã¿ãåŠãã§ãããããšæããŸãã åè [MySQL]WHERE句でLIKEを使っている場合のINDEX | DayByDay PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~ 【SQL】インデックスの基本知識まとめ - Qiita B木 - Wikipedia ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã rakus.hubspotpagebuilder.com ã©ã¯ ã¹Developersç»é²ãã©ãŒã https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ âTECH PLAY techplay.jp âconnpass rakus.connpass.com
id:radiocat ã§ãã é
é
ã¡ãŒã« ïŒ ã¯ã«ã¡ã« ã®éçºããŒã ã§ã¯ãæã
ã®åãçµã¿ãå€ãã®æ¹ã
ã«ç¥ã£ãŠãããããã ããã°é£ èŒãããžã§ã¯ããçºè¶³ãããŸãããåçã¯ããã¯ãªãã®æ§åã§ãããŸãã¯ã¡ã³ããŒåå£«ã§æåŸ
å€ãããåãããããã« ãã©ãã«ãŒ 颚ãšã¯ãµãµã€ãºãªã©ãè¡ãããã®åŸã¿ããªã§æçš¿ããŒãã®ã¢ ã€ã㢠ãåºããŸããã ããã¯ãªãã®æ§å ã¡ãŒã«é
ä¿¡ãæ¯ããæè¡ãšããŠããŠãã¢ãŠããããããã ã¡ãŒã«é
ä¿¡ãåãå·»ã ITæè¡ ãã客æ§ã®ããžãã¹ã¯ããŸã ã«æ¥ã
é²åãç¶ããŠããŸãã è¿·æã¡ãŒã«ãªã©ã§ãã¬ãã£ããªã€ã¡ãŒãžãããå©çšã«æ¶æ¥µçãªå£°ãèãããã¡ãŒã«é
ä¿¡ã§ãããçŸåšã§ãå€ãã®äººãã¡ãŒã«ãèŠãŠã·ã§ããã³ã°ãããªã©ã®åœ¢ã§çæŽ»ãžæŽ»çšããŠãããããžãã¹ã«ãå©çšãããŠããŸãããŸããã¡ãŒã«é
ä¿¡ã®ä»çµã¿ã¯è€æ°ã®éä¿¡ãã£ãªã¢ããã©ãããã©ãŒã ãè·šãè€éãªã·ã¹ãã åºç€äžã«æ§ç¯ãããŠãããæ§ã
ãªã¡ãŒã«ã®çš®é¡ãšé
ä¿¡æ¹æ³ã§æãç«ã£ãŠããŸãã ãããªäžã§ãç§ãã¡ã¯ã客æ§ã®ããžãã¹ãæåãžå°ãããã«ã1éã§ãå€ãã®ã¡ãŒã«ããå±ãã§ããããæ¥ã
åªåãç¶ããŠããŸãã瀟å
ã§ãæ®æ®µã¯ããŸãèªãããããšã®ãªãã¡ãŒã«é
ä¿¡ã®è£åŽã€ããŠé
é
ã¡ãŒã«ïŒã¯ã«ã¡ã«ã®éçºãæ
åœããŠãããšã³ãžãã¢ãçŸå Žããçºä¿¡ããããšã§ãã¡ãŒã«é
ä¿¡ã«èå³ã®ããäººãæ®æ®µãã®ããã°ãã芧é ããŠãããšã³ãžãã¢ã®ã¿ãªããã«å°ãã§ãèå³ããã£ãŠé ããã°ãšæãããããžã§ã¯ããçºè¶³ãããŸããã ãŸãã¯ç¬¬äžåŒŸãšããŠã4人ã®ã¡ã³ããŒã以äžã®ããŒãã1ã€ãã€æ
åœããæçš¿èšäºãæ€èšäžã§ãã ã¡ãŒã«ãå°éããã ã«ã€ãŒã³ æ¥åã®åãçµã¿ 6/26ã®ãRAKUS Meetup Osaka ã«ã€ãŒã³ Nightãã«ç»å£ãããŠããã ããä¹
å±±ã§ãã ã¡ã«ãã¬é
ä¿¡ãµãŒãã¹ã«ãããŠãã¡ãŒã«ãé
ä¿¡ã§ãããã©ããã¯éåžžã«éèŠã§ãããã®ãããé
é
ã¡ãŒã«ã«ãããŠãã¡ãŒã«å°éçãåäžãããããã«ãããã€ãã®æœçãè¡ã£ãŠããŸããããããéçºè
ãæ³å®ããŠããã¡ãŒã«å°éçã¯ãã客æ§ãæåŸ
ããŠããå°éçãšã®ã£ãããããããšã«æ°ã¥ããŸããã ç§ãæ
åœããèšäºã§ã¯ãå
æ¥çºè¡šãããRAKUS Meetup Osaka ã«ã€ãŒã³ Nightãã®è³æãããŒã¹ã«ã ã·ã¹ãã éçº è
ã®ç«å Žã§ã¯æ°ã¥ãã«ããå°éçã®æ¬è³ªçãªåŽé¢ã«ã€ããŠã話ã§ããã°ãšæããŸãã å€çš®å€æ§ãªãã©ãããã©ãŒã ã«å¯Ÿå¿ããããã®ã¡ãŒã«ã®çš®é¡ äžéã§ããç§ããå±ãããããŒãã¯ãã¡ãŒã«ã®çš®é¡ã«ã€ããŠãã§ãã ã¡ãŒã«é
ä¿¡ã«ã¯ãHTMLã¡ãŒã«ãããã¹ãã¡ãŒã«ãå€èšèªã¡ãŒã«ãªã©ã®ãæ§ã
ãªçš®é¡ã®ã¡ãŒã«ããããŸãããµã ãçããŸã®ãæå
ã«å±ããŠããã¡ãŒã«ã®çš®é¡ãšãã®ã¡ãŒã«ãéãããŠããä»çµã¿ãç¥ã£ãŠé ããããã«ããããããããŠã©ã€ããªèšäºãå·çããŠãããŸãã çããŸã«ãšã£ãŠæçãªæ
å ±ããå±ãã§ããããããã°ããŸãã®ã§ããæåŸ
ãã ããïŒ ã¡ãŒã« ããŒã±ãã£ã³ã° ãæ¯ããé
ä¿¡æ¹æ³ ãã£ã³ã§ãã2014幎㫠ã©ã¯ ã¹ ãããã ãžå
¥ç€ŸããŸããã å»å¹Žã®8æã«æ¥æ¬ã«æ¥ãŠé
é
ã¡ãŒã«ã®ã¡ã³ããŒãšäžç·ã«ä»äºãããŠããŸãã ã客æ§ã«ãšã£ãŠã ããŒã±ãã£ã³ã° ã®æ¹æ³ããããããã£ãŠãããã«åãããé
ä¿¡æ¹æ³ãéžã³ãŸããç§ã®æçš¿ã§ã¯ãé
é
ã¡ãŒã«ã§ã客æ§ãéžã¹ã ããŒã±ãã£ã³ã° ã®æ¹æ³ãšã¡ãŒã«ã®é
ä¿¡æ¹æ³ãã玹ä»ããŸããã©ããæ¥œãã¿ã«ãåŸ
ã¡ãã ããã ãã£ãªã¢ã¡ãŒã«ã®ä»ãŸã§ãšä»åŸ å°æã§ãããã£ãºããŒãšãã¥ã®ã¢ããããªãæããã¢ã©ãã£ãç®åã®éçºãªãŒããŒã§ããæšä»ãæºåž¯é»è©±ã¯ãã¥ãŒãã£ãŒãã©ã³ãã ã¹ããŒããã©ã³ ã«å€åãããã£ãªã¢ã¡ãŒã«ã«ã€ããŠãå€åããŠããŸããã ãã³ã¡ãŒã« ã» ã¹ããŒããã©ã³ ã®HTMLã¡ãŒã«ãªã©ãä»åŸã¡ãŒã«ã®ä»æ§ãã©ãå€ãã£ãŠããã®ããæžããããšèããŠããŸãã è¿æ¥äžã«é 次æçš¿äºå® ã¡ãŒã«é
ä¿¡ã«é¢ãã人ããããã§ãªã人ããæ¥œããã§é ãããšå¹žãã§ãã第1åã®èšäºãŸã§ããããã°ãããåŸ
ã¡ãã ããã
ã¯ããã« ããã«ã¡ã¯ãæ°å2幎ç®ã®y_kwmtã§ãã æè¿WebStorageã«è§Šããæ©äŒããã£ãã®ã§ã JavaScript ã§WebStorageã®ããŒã¿ãä¿åãäžæžããåé€ããæ¹æ³ã«ã€ããŠèª¬æããŸãã ã¯ããã« WebStorageãšã¯ SessionStorageãšã¯ LocalStorageãšã¯ ããŒã«ã«ç°å¢ã§å®è£
æåŸã« åèã«ãããµã€ã WebStorageãšã¯ WebStorageãšã¯ããŠãŒã¶ã®ããŒã«ã«ãã©ãŠã¶ã«ããŒã¿ãä¿åããä»çµã¿ã®ããšãèšããŸãã WebStorageã¯SessionStorageãšLocalStorageã®2çš®é¡ã«åãããŸãã SessionStorageãšã¯ SessionStorageãžæã£ãŠããå€ã¯ãŠã£ã³ããŠãéãããŸã§æå¹ãšãªããŸãã å¥ã¿ããå¥ãŠã£ã³ããŠãžã®å
±æã¯ã§ããŸããã LocalStorageãšã¯ LocalStorageãžæã£ãŠããå€ã¯ãŠã£ã³ããŠãéããããšã§ãæå¹ãšãªã£ãŠããŸãã å¥ã¿ããå¥ãŠã£ã³ããŠãžã®å
±æãã§ããŸãã ããŒã«ã«ç°å¢ã§å®è£
ä»åã¯SessionStorageãçšããŠãã¿ã³ãæŒããåæ°ãä¿åãåé€ããŸãã ãã«ãŠã³ãããã¿ã³ãæŒããŠã«ãŠã³ããå¢ããããã¯ãªã¢ããã¿ã³ãæŒããŠãã«ãŠã³ããã¯ãªã¢ããŸãã <!DOCTYPE html> < html > < head > < meta charset = "utf-8" > </ head > < body > < button id = "count" > ã«ãŠã³ã </ button > < button id = "clear" > ã¯ãªã¢ </ button > < script > document .getElementById ( "count" ) .onclick = function () { sessionStorage.setItem ( 'count' , eval ( Number ( sessionStorage.getItem ( 'count' )) + 1)) ; } ; document .getElementById ( "clear" ) .onclick = function () { sessionStorage.removeItem ( 'count' ) ; } ; </ script > </ body > </ html > sessionStorage(localStorage).getItemã§ããŒã¿ã®ååŸãè¡ããŸãã ãsessionStorage.getItem('count')ãã§ãcountããšããkeyãæã€sessionStorageã® value ãååŸããããšãã§ããŸãã sessionStorage(localStorage).setItemã§ããŒã¿ã®è¿œå ãäžæžããè¡ããŸãã ãsessionStorage.setItem('count', eval(Number(sessionStorage.getItem('count')) + 1));ãã§ããcountããšããkeyãæã€sessionStorageã® value ã1ãã€å¢ãããå€ãäžæžãããŠããŸãã sessionStorage(localStorage).removeItemã§ããŒã¿ã®åé€ãè¡ããŸãã ãsessionStorage.removeItem('count');ãã§ããcountããšããkeyãæã€sessionStorageã®ããŒã¿ãåé€ããŸãã ãã©ãŠã¶ã§ã®å®è¡ã®æ§åããã¡ãã§ãã æåŸã« ä»å㯠JavaScript ãçšããŠWebStorageã®ç®¡çãè¡ããŸããã ç°¡æçãªå®è£
ããã§ããŸããã§ããããæ¬¡ã¯æéãããã JavaScript ã®å®è£
ãè¡ãã JavaScript ã®çè§£ãæ·±ããããšæããŸãã åèã«ãããµã€ã
ã¯ããã« ããã«ã¡ã¯ãæ°åïŒå¹Žç®ã®aa_cryingã§ãã æè¿è峿¬äœã§Vue.jsã«ã€ããŠåŠç¿ãå§ããŸããã®ã§ãä»åã¯Vue.jsã®åºç€çãªéšåã«ã€ããŠç޹ä»ããããšæããŸãã ã¯ããã« Vue.jsãšã¯ ããã°ã¬ãã·ããã¬ãŒã ã¯ãŒã¯ãšã¯ Vue.jsã®ä»£è¡šçãªæ©èœ ãªã¢ã¯ãã£ããªããŒã¿ãã€ã³ãã£ã³ã° ã³ã³ããŒãã³ã é«éãªã¬ã³ããªã³ã° ãããã« åèã«ããèšäº Vue.jsãšã¯ Vue.jsãšã¯ã ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ (UI)ãæ§ç¯ããããã® JavaScript ã® ããã°ã¬ ãã·ã ãã¬ãŒã ã¯ãŒã¯ ã§ãã ããã§ããŸã㯠ããã°ã¬ ãã·ã ãã¬ãŒã ã¯ãŒã¯ ãšã¯äœãã«ã€ããŠèª¬æããããšæããŸãã ããã°ã¬ ãã·ã ãã¬ãŒã ã¯ãŒã¯ ãšã¯ ããã°ã¬ ãã·ã ãã¬ãŒã ã¯ãŒã¯ ( Progressive Framework ) ãšã¯ãVue.jsäœè
ã®Evan Youæ°ãæå±ããæŠå¿µã§ãã JavaScript ã«ã¯Vue.jsã®ä»ã« jQuery ãReact.jsãAngular.jsãªã©æ§ã
㪠ãã¬ãŒã ã¯ãŒã¯ ãååšããŸãã å®éã®ãããžã§ã¯ãã§ã¯ã¹ã¿ãŒãæã«ãããã®äžãã ãã¬ãŒã ã¯ãŒã¯ ãéžæããéçºãé²ããããšã«ãªããŸãã ããããã¢ããªã±ãŒã·ã§ã³ã®éçºãé²ããŠãããšãæ§ã
ãªèŠä»¶ã«å¯Ÿå¿ããããã«ã¢ããªã±ãŒã·ã§ã³ã®èŠæš¡ã倧ãããªã£ãŠãããŸãã ãããããšãæåã«å°å
¥ãã ãã¬ãŒã ã¯ãŒã¯ ãåããªããªããä¹ãæããããã«æ°ãã ãã¬ãŒã ã¯ãŒã¯ ãæš¡çŽ¢ããªããã°ãªããŸããã ãšãããVue.jsã¯ããµããŒãããããŒã«ãã©ã€ãã©ãªãšãã£ããšã³ã·ã¹ãã ã®ååšã«ãã£ãŠãã¢ããªã±ãŒã·ã§ã³ã®èŠæ±ã«æè»ã«å¯Ÿå¿ããããšãã§ããŸãã ãã®ããã«ã ã©ã®ãããªèŠæš¡ã段éã®ã¢ããªã±ãŒã·ã§ã³ã«ã察å¿ã§ãã ãšããã®ã ããã°ã¬ ãã·ã ãã¬ãŒã ã¯ãŒã¯ ã®æŠå¿µã«ãªããŸãã Vue.jsã®ä»£è¡šçãªæ©èœ ããã§ã¯Vue.jsã®ä»£è¡šçãªæ©èœã§ãã以äž3ã€ã®æ©èœã«ã€ããŠèª¬æããŠãããŸãã ãªã¢ã¯ãã£ããªããŒã¿ ãã€ã³ãã£ã³ã° ã³ã³ããŒãã³ã å é«é㪠ã¬ã³ããªã³ã° ãŸãã¯ç°¡åãªã³ãŒãã®äŸãèŠãŠããã ããã°ãšæããŸãã <!DOCTYPE html> <!DOCTYPE html> <html> <head> <meta charset= "utf-8" > </head> <body> <div id= "binding" ></div> <div id= "components-button" > <p><count-button></count-button></p> <p><count-button></count-button></p> <p><count-button></count-button></p> </div> <script src= "https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js" ></script> <script> //ããŒã¿ãã€ã³ãã£ã³ã°ã®äŸ new Vue( { el: '#binding' , template: ` <div> <p><input v-model= "message" ></p> <p> {{ message }} </p> </div> `, data: { message: 'Hello World!' } } ) //componentã®äŸ Vue.component( 'count-button' , { template: '<button v-on:click="increase">{{ count }} åæŒããŸãã</button>' , data: function () { return { count: 0 } } , methods: { increase: function () { this .count++; } } } ) new Vue( { el: '#components-button' } ) </script> </body> </html> ãã©ãŠã¶ã§è¡šç€ºãããšä»¥äžã®ããã«ãªããŸãã ãã©ãŠã¶ã§ã®å®è¡ Vue.jsãç°¡åã«å°å
¥ããã«ã¯ cdn.jsdelivr.net ãããœãŒã¹ãåç
§ããæ¹æ³ããããŸãã ãã®éã¯ä»¥äžã®ããã«èšè¿°ããŸãã < script src = "https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js" ></ script > vue@2.6.10 ãšèšèŒãããšããŒãžã§ã³ãæå®ããŠäœ¿çšããããšãåºæ¥ãŸãã ãŸããVue.jsã§ã¯ã以äžã®ããã«èšè¿°ããããšã§ãVue ã€ã³ã¹ã¿ã³ã¹ ãšHTMLèŠçŽ ãšã®çŽã¥ããå¯èœã§ãã new Vue( { //<div id="binding"></div>ãšçŽã¥ã el: '#binding' , // ...ç¥... } ) ãªã¢ã¯ãã£ããªããŒã¿ ãã€ã³ãã£ã³ã° el: '#binding' ã®éšåã§ã¯ããŒã¿ã®æŽæ°ãšDOMã®æŽæ°ãåæçã«è¡ã£ãŠããŸãã inputèŠçŽ ã« v-model ãšãããã£ã¬ã¯ãã£ãã䜿çšããŠããŸãããããã«ãããªã¢ã¯ãã£ããªå
¥åããŒã¿ã®åæãå¯èœã«ããŠããŸãã v-model ã¯ãå
éšçã«ã¯ input èŠçŽ ã«å¿ããŠç°ãªãããããã£ã䜿çšããç°ãªãã€ãã³ããéãåºããšããåããããŠããŸãã ãã®ãããv-modelã§ã¯formèŠçŽ ã«ãã value çã®åæå€ãç¡èŠããŠããŸãã®ã§ã JavaScript åŽã® data ãªãã·ã§ã³ã®äžã§åæå€ãæå®ããå¿
èŠããããŸãã data: { message: 'Hello World!' } ä»å㯠Hello World! ãåæå€ãšããŠãããããåæè¡šç€ºã§ã¯ãã®ããã«åºåãããŠããŸãã ã³ã³ããŒãã³ã Vue.componentã®éšåã§ã¯ã<count-button>ãšãã ã³ã³ããŒãã³ã ãå®çŸ©ããŠããŸãã ã³ã³ããŒãã³ã ãšã¯ãååä»ãã®åå©çšå¯èœãªVue ã€ã³ã¹ã¿ã³ã¹ ã«ãªããŸãã new Vue ã§äœæãããã«ãŒãVue ã€ã³ã¹ã¿ã³ã¹ å
(ä»åã¯component-button) ã§ã«ã¹ã¿ã èŠçŽ ãšããŠäœ¿çšã§ããŸãã ãã®ããã«åå©çšã§ããã®ã¯ãšãŠã䟿å©ã§ãã count-buttonã®äžã§ã v-on:click ãšããèšè¿°ããããšæããŸãã <button v-on:click= "increase" > {{ count }} åæŒããŸãã</button> ãã¡ãã¯Vue.jsç¹æã® v-on ãšãããã£ã¬ã¯ãã£ãã§ãDOMã€ãã³ãçºç«æã® JavaScript ã®å®è¡ãå¯èœã«ãªããŸãã ä»åã®å Žåã¯ããã¿ã³ãclickããããšã§ increase ãšãã颿°ãåŒãã§ããŸãã increase ãšãã颿°ã¯countãã€ã³ã¯ãªã¡ã³ããããšããå
容ã«ãªã£ãŠããã ã¯ãªãã¯ãããš âåæŒããŸãã ã®æ°åãã€ã³ã¯ãªã¡ã³ããããŠãããŸãã ãŸããVue.jsã§ã¯ã€ãã³ã修食åãšãããã®ãæäŸããŠããããããçšããŠã€ãã³ããå¶éããããšãã§ããŸãã äŸãã°ã以äžã®ããã«èšèŒãããšãã¿ã³ã1åããæŒããªããªããŸãã <button v-on:click.once= "increase" > {{ count }} åæŒããŸãã</button> .onceãä»ããçµæ ä»ã«ãæ§ã
ãªã€ãã³ã修食åããããŸãã®ã§ã詳现ã¯äžèšãªã³ã¯ãåç
§ããŠãã ããã Vue.jså
¬åŒ - ã€ãã³ããã³ããªã³ã° é«é㪠ã¬ã³ããªã³ã° Vue.jsã§ã¯ Virtual DOM ãæ¡çšããŠãããããé«é㪠ã¬ã³ããªã³ã° (衚瀺åŠç) ãå¯èœãšããŠããŸãã Virtual DOMãšã¯ããã®åã®éãä»®æ³ã®DOMã«ãªããŸãã å®éã®DOMãšåãæ§é ã®ä»®æ³DOMãçšæããä»®æ³DOMã«å¯ŸããŠåŠçãè¡ããŸãããããŠããã®çµæçãŸããå·®åã ããå®éã®DOMã«åæ ããŸãã ãã®ä»çµã¿ãçšããããšã§ãé«é㪠ã¬ã³ããªã³ã° ãå¯èœã«ããŠããŸãã ãããã« ä»åã¯Vue.jsã®åºç€çãªéšåã«ã€ããŠç޹ä»ãããŠããã ããŸããã Vue.jsã«ã¯ä»å玹ä»ã§ããªãã£ã䟿å©ãªæ©èœã沢山ãããŸãã®ã§ã 次åã¯ãã£ãšæãäžããŠç޹ä»ããŠãããã°ãšæããŸãã åèã«ããèšäº Vue.jså
¬åŒã¬ã€ã ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã forms.gle ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ rakus.connpass.com
ã¯ããã« ããã«ã¡ã¯ãæ°åïŒå¹Žç®ã®taku_76ã§ãã ä»å㯠Ajax ã«ã€ããŠãã£ããããããšããåãã£ãŠããªãã£ãã®ã§å°ãæéã確ä¿ããŠã³ãŒãããåŠç¿ããããšã«ããŸããã ã¯ããã« Ajaxãšã¯ ããŒã«ã«ç°å¢ã§å®è£
ããŠã¿ã Ajaxã§å€éšAPIãžéä¿¡ãã ãããã« åèã«ããèšäº Ajax ãšã¯ 以äžã¯ Wikipedia ã®åŒçšã§ãã Ajax ïŒãšã€ãžã£ãã¯ã¹[1][2]ã ã¢ãžã£ãã¯ã¹ [3]ïŒã¯ããŠã§ããã©ãŠã¶å
ã§éåæéä¿¡ãè¡ããªãã ã€ã³ã¿ãŒãã§ã€ã¹ ã®æ§ç¯ãè¡ãããã°ã©ãã³ã°ææ³ã§ãã[4]ã XMLHttpRequest ïŒHTTPéä¿¡ãè¡ãããã® JavaScript çµã¿èŸŒã¿ã¯ã©ã¹ïŒã«ããéåæéä¿¡ãå©çšããéä¿¡çµæã«å¿ããŠãã€ãããã¯HTML (DHTML) ã§åçã«ããŒãžã®äžéšãæžãæãããšããã¢ãããŒããåã[5]ã Ajax ã¯Asynchronous JavaScript + XML ã®ç¥ã§ã2005幎2æ18æ¥ã«ç±³åœã®ã€ã³ãã©ã¡ãŒã·ã§ã³ã¢ãŒããã¯ãã§ããJesse James Garrettã«ããåä»ãããã[5][6][7]ã ä»ã®ãµã€ããèŠãŠã¿ãŸããããç°¡åã«è¡šããš JavaScript ãçšããŠãµãŒããšéåæéä¿¡ãè¡ãææ³ã§ã Ajax ãçšããããšã§WebããŒãžã®å
容ããªããŒããªãã§å€æŽããããšãã§ããŸãã ããŒã«ã«ç°å¢ã§å®è£
ããŠã¿ã ãŸãã¯ãããžãã¯çè§£ã®ããã«éä¿¡å
ãããŒã«ã«ãã¡ã€ã«ã«ããŠå®è£
ããŠã¿ãŸãã index3.html <!doctype html> <head> <meta charset="utf-8"> <title>Ajaxãå©çšããŠããŒã«ã«ã®å€éšãã¡ã€ã«ãèªã¿èŸŒã</title> <link href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js" type="text/javascript" ></script> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js" type="text/javascript"></script> <script type="text/javascript"> $( function() { $( '#ajax-button' ) .click( function() { $.ajax( { //URLæå® url: 'sample.json', //ããŒã¿åœ¢åŒæå® dataType : 'json', //éä¿¡ã«æåããå Žåã®åŠç success: function( data ) { var message = jsonParser(data); $( '#sample-text' ).html( message ); $( '#sample-text' ).html( obj.code ); $( '#sample-result' ).html( '<hr/><font color="blue">èªã¿èŸŒã¿æå</font><hr/>' ); }, //éä¿¡ã«å€±æããå Žåã®åŠç error: function( data ) { $( '#sample-result' ).html( '<font color="red">èªã¿èŸŒã¿NG</font>' ); } } ); } ); $('#clear').click(function(){ $( '#sample-text' ).html(''); $( '#sample-result' ).html(''); }); } ); function jsonParser(data) { var message = data.code; message = message + '<br/>'; message = message + data.message; return message; } </script> </head> <body> <h3>Ajaxãå©çšããŠjson圢åŒã®ãã¡ã€ã«ãèªã¿èŸŒã¿ããŒã¹ãã</h3> <p> <input type="button" id="ajax-button" value="èªã¿èŸŒã"/> <input type="button" id="clear" value="clear" onclick="OnButtonClick"/> <br/> </p> <div id="sample-result"></div> <div id="sample-text"></div> </body> </html> 以äžãä»åèªã¿èŸŒã sample.json ã§ãã { "code" : "100", "message" : "ã¡ãã»ãŒãž" } Webãã©ãŠã¶ ã§è¡šç€ºããã®ã¡ã èªã¿èŸŒã ãã¿ã³ãæŒãããšã«ãã£ãŠ json ãã¡ã€ã«ã®äžèº«ã衚瀺ãããŸããã index3.html Ajax ã§å€éš API ãžéä¿¡ãã 以äžã®ã³ãŒãã§å€éšã® API ãžã¢ã¯ã»ã¹ããããšãã§ããŸãã ä»å䜿çšããŠãã API ã¯ãå°åæ¯ã®å€©æ°äºå ±ã Json 圢åŒã§è¿ã API ã§ãã ç¡æã§äŒå¡ç»é²ç¡ãã§äœ¿ãããšãã§ããŸãã $( function() { $( '#ajax-button' ) .click( function() { $.ajax( { //倩æ°äºå ±ãJson圢åŒã§è¿ãAPI url: 'http://weather.livedoor.com/forecast/webservice/json/v1?city=400040', ããããã //éä¿¡æ¹æ³ type:'GET', ãããããã//ããŒã¿åœ¢åŒãæå® dataType : 'json', //éä¿¡ã«æåããå Žåã®åŠç }).done(function(data){ alert("æå!"); $( '#sample-text' ).html( data.link ); //éä¿¡ãšã©ãŒã«ãªã£ãå Žåã®åŠç }).fail(function(data){ alert("倱æ!"); }); }); }); idã sample-text ã« Json ãã¡ã€ã«ã® link ã衚瀺ããŠããŸãã ãããã« ä»å㯠Ajax ã«ã€ããŠåºç€çãªåŠç¿ãè¡ããŸããã å®è·µã§äœ¿ãããšã«ãã£ãŠããçè§£ãæ·±ãŸããŸãã®ã§ãä»åã¯æéãçãããã«äŒå¡ç»é²ã®å¿
èŠã®ãªã倩æ°äºå ±ã® API ãå©çšããŸãããã æ¬¡ã¯äœ¿ã£ãŠã¿ããå€éšã® API ãæ¢ãäœãäœã£ãŠã¿ãããšæããŸãã åèã«ããèšäº http://javatechnology.net/ajax/biginer-start-up/ javatechnology.net ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã forms.gle ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ rakus.connpass.com
ã¯ããã« ããã«ã¡ã¯ïŒä»åã¯å€§éªãªãã£ã¹ã§éå¬ããã5æãã¢ããã·ã¥ã®ã玹ä»ã§ãã 什åäžçºç®ã®ãã¢ããã·ã¥ã¯ãããŒããªããã«ããŠãåã
ãèªç±ã«çºè¡šã§ãã圢åŒã«ããŸããã ããã§ã¯çºè¡šå
容ã®äžéšããã€ãžã§ã¹ãã§ãéãããããŸãã ã¯ããã« ãã¢ããã·ã¥å°çšã¹ããã¢ã㪠ITãšã³ãžãã¢ã¯åŠç¿ããªããšæ»ãã§ããŸãçãç© PHPerKaigi2019äžæ äŒæ¯ãè¿ã å°ããããšããå§ããæ¹å ãããã« ãã¢ããã·ã¥å°çš ã¹ãã ã¢ã㪠倧éªã§ã¯ãã¢ããã·ã¥ã®ãã³ããªåã«ãããåå è
ãçºè¡šè
ãåºå®åãããªã©ã®èª²é¡ãæ±ããŠããŸãã ãã¢ããã·ã¥ããã£ãšæ¥œããããã®æœçãšããŠããªã¢ã«ã¿ã€ã ã«çºè¡šã«ãã£ãŒãããã¯ã§ããã¢ããªãç»å ŽããŸããïŒ ã¢ããªã«ãçºè¡šå
容ããç»é²ããŠãããšãåå è
ã¯ã¢ããªãéããŠçºè¡šå
容ã«ã³ã¡ã³ããã¹ã¿ã³ããéä¿¡ã§ããŸãã ãã®ã¢ããªãéããŠãããã©ã³ãšã³ãžãã¢ã ãã§ãªãæ°äººãããæ°è»œã«ãã¢ããã·ã¥ã«åå ã§ããããã«ãªãã°ããã§ããïœ ITãšã³ãžãã¢ã¯åŠç¿ããªããšæ»ãã§ããŸãçãç© åŒç€Ÿãšã³ãžãã¢ã®"æè¡ååäž"æœçã®ã話ã§ãã æã
ã®æ¥çã§ã¯ãšã³ãžãã¢ã¯åžžã«æè¡åã磚ããªããã°ãããŸããããšã¯èšãããã¯ãã¢ãããŒã·ã§ã³ç¶æã倧å€ã§ããã ãããªäžã ã©ã¯ ã¹ã§ã¯ãåŠã³ãã¢ãŠããããããå Žã®æäŸãã«åãå
¥ããŠããŸãïŒ ç¹ã«æè¿ã§ã¯ã瀟å€åãã«èªç€Ÿã§ Meetup ãéå¬ãããå€éšã€ãã³ããž åå ïŒç»å£ ãããªã©ã®æŽ»åã粟åçã«è¡ã£ãŠããŸãã ãšã³ãžãã¢ãããæé·ããããã«ããä»åŸãæ§ã
ãªæœçã宿œããŠããããã§ããïœ PHPerKaigi2019äžæ äŒæ¯ãè¿ã PHPerã®æ¹ã«ã¯ã銎æã¿ãPHPerKaigiãã®äžæ äŒã宿œããã話ã§ãã æ¬å®¶PHPerKaigiã®æ§å㯠fortee ã«åç»ã³ã³ãã³ãããŸãšãŸã£ãŠããã®ã§äžæ ããããã§ããïœã äžæ äŒåŸã«çºè¡šå
容ã«ã€ããŠã¿ããªã§è°è«ããããšã§æ°ããªçè§£ãé¢é£ç¥èãåŸãããšãã§ããŸãã "è¯ã"æè¡ã€ãã³ãã¯ã¿ããªã§ã·ã§ã¢ã§ãããšããã§ããã å°ããããšããå§ããæ¹å åŒç€Ÿãšã³ãžãã¢ã«ãã"æ¹åã®ããã"ã®ã話ã§ãã åŒç€Ÿã«éãããã©ã®æ¥çã§ããæ¹åãã¯å€§äºã§ããäžèšã«ãæ¹åããšèšã£ãŠãæ¥åãããŒã®èŠçŽããç¹å®äœæ¥ã®èªååãªã©ãæããã°ããããããããã§ãã ãããããŸãã¯ãèšé²ãããããšãæ¹åã®ç¬¬1æ©ãèšé²ããããšã§çŸç¶ãææ¡ããããŒã ã§çžè«ãåããªããããè¯ãããæ¹æ³ãæ¢ãããšãã§ããŸãã ä»ãŸã§è¡ã£ãŠããã¿ã¹ã¯ãèšé²ãã ECRSã®æ³å ã䜿ã£ãŠäžèŠãªã¿ã¹ã¯ã®æé€ãé¡äŒŒã¿ã¹ã¯ã¯çµåããŠãããšãããªãããšã«é ã䜿ããªããŠãããªããŸãb çè
㯠ECRSã®æ³å ã¯ç¥ããªãã£ãã®ã§ãããæ©ã«å匷ããŠã¿ããã§ã"Ï(ïŸâ¡ïŸ (ïŸâ¡ïŸ )Ï" ïŸïŸïŸïŸ ãããã« ãã¢ããã·ã¥ãæ¯åããããªçºè¡šãèããŠæ¥œããã§ãã åå ããŠã¿ãŠããªãã»ã©ããšæãããšãå€ãã®ã§ãå人çãªå匷ãã¿ãå¢ããŠãããŸãïŒãã ããæ¶åããã®ã倧å€ã§ãããïŒ ãã²æ¥æãæåŸ
ããŠåå ããŸãïœ
id:radiocat ã§ããæ¯æã楜ãã¿ã®ãšã³ãžãã¢ããããå匷äŒã®ãç¥ããã§ããä»åã¯6/13ïŒæšïŒã«éå¬äºå®ã§ãã rakus.connpass.com 5æã®ã¬ããŒã ååãæ§ã
ãªæè¡åéã«åãçµãã§ããæ¹ã
ãåå ãããŸããã PHP ã Python ãDockerãVue.jsãšãã£ãããŒã¯ãŒããè€æ°ç»å ŽããŠããŸãã ããã°ãæžããŠãã人ãå€ããåå ãããçããã®æŽ»åã®äžç«¯ãç¥ãããšãã§ããŠãšã³ãžãã¢ãšããŠåèã«ãªããŸãããŸããããã°ã©ãã³ã°ãªã©ã®äœæ¥ã®åãã§æè¡æžç±ãèªãã§åèã«ããŠãã人ãå€ãããã£ããããŸããã瀟å
ã§å®æè³ŒèªããŠããæè¡éèªãããã€ãããã®ã§ã次åã¯äŒå Žå
ã«çœ®ããŠãèªã¿é ããããã«ããããšèããŠããŸããå¿
èŠã«å¿ããŠåŠç¿ã®åèã«ããŠé ããã°ãšæããŸãã äŒå Žã®çãäžã«çœ®ããŠãããèåã奜è©ãªã®ã§åŒãç¶ããæäŸããŠããŸããåž°å®
åã«è»œããèåãã€ãŸã¿ãªãããããããããŠé ããã°ãšæããŸãã 仿ãçæ§ã®ãåå ããåŸ
ã¡ããŠãããŸãã 6/26ïŒæ°ŽïŒã«ã¯Meetupãéå¬äºå®ã§ãã rakus.connpass.com ãã¡ãã¯åå ã ãã§ãªãLTãåéããŠããŸããæ®ã1æ ãšãªã£ãŠããŸãã®ã§çºè¡šããŠã¿ãããšããæ¹ã¯ãæ¥ããã ãããäžè¬åå æ ãåééå§2æ¥ç®ã§50%ãè¶
ããŠããç¶æ³ã§ãããèå³ã®ããæ¹ã¯ãæ©ãã«ãç»é²ãã ãããããããå匷äŒãšåãããŠãšã³ãžãã¢ã®çæ§ã®ãåå ããåŸ
ã¡ããŠãããŸãã
æè¿ 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幎ç®ã«ãªããå¥åº·ã§ããããšã¯èªåã®ããã©ãŒãã³ã¹ã«ç¹ãã£ãŠãããªãšæ¥ã
æããŠããŸãã éåããªããšãããªããªãŒãšããæ°æã¡ã«ãªããçæŽ»ç¿æ
£ãæ¹åããããšãããã£ããã«ã¯ãªã£ããšæããŸãã ã¡ããã©å¥åº·èšºæã®ã·ãŒãºã³ã§ãããã®ã§ã ãªãã¡ã¯ã¿ãªã³ã° ãå§ãããã£ããã®åèã«ãªãã°å¹žãã§ãã