以åã®èšäºãã¡ãã»ãŒãžã®å®å
šæ§æ°æ代ïŒLetter Sealingãã«ãŠãLINEã®1:1ããŒã¯ã«ãšã³ãããŒãšã³ãæå·å(End-to-End EncryptionãE2EE)ãå®è£
ããããšããäŒãããŸããããã以éãLINEã¯ãããå€ãã®æ©èœã«Letter Sealingãé©çšæ¡å€§ããããã«å€å€§ãªåªåãç¶ããŠããŸãããä»åã®èšäºã§ã¯ããããŸã§ã®åãçµã¿ãã玹ä»ããããšæããŸãã é©çšæ¡å€§ã«ããæ¹åç¹ 1ïŒ1ããŒã¯ã§Letter Sealingãããã©ã«ãæå¹åããã ããå®å
šã«ãµãŒãã¹ããå©çšããã ããããã1:1ããŒã¯ã§Letter Sealingãããã©ã«ãã§æå¹åãããŸããããããŸã§ã¯ãŠãŒã¶ãŒãå¿
èŠã«å¿ããŠLetter Sealingãªãã·ã§ã³ããªã³ã«èšå®ããå¿
èŠããããŸããããçŸåšã¯ãŠãŒã¶ãŒããªãã«èšå®ããªãéãLetter Sealingãããã©ã«ãã§æå¹åãããŠããŸãã æåããå
šãŠãŒã¶ãŒã察象ã«Letter Sealingãããã©ã«ããªã³ã§æäŸããªãã£ãäžçªå€§ããªçç±ã¯ãiOSã®ããã·ã¥éç¥æ¹åŒã®ããã§ãããLINEã¯ãåä¿¡ããã¡ãã»ãŒãžå
容ã®äžéšãããã·ã¥éç¥ã§ãã¬ãã¥ãŒè¡šç€ºããŸãããã ãAndroidãšéã£ãŠiOSã§ã¯ãããã·ã¥éç¥ã衚瀺ããããã»ã¹ã«ã¢ããªãä»å
¥ã§ããäœå°ãå°ãªãã®ãäºå®ã§ããéåžžããµãŒãã¯ã¡ãã»ãŒãžå
容ã®äžéšãããã·ã¥éç¥ã§éä¿¡ããŸãã ããããLetter Sealingã®ç¹æ§äžãLINEãµãŒãã¯ãŠãŒã¶ãŒéã§ããåããããã¡ãã»ãŒãžãèŠãããšã¯ã§ããªãããããã®å
容ãããã·ã¥éç¥ã«å«ããããšã¯ã§ããŸããã§ããã ãããã幞ããªããšã«ãVoIP Push Notificationãšããããã·ã¥éç¥æ¹åŒãiOS 8ãããµããŒããããããã«ãªããŸããããã®æ¹åŒãæ¡çšããã°ãããã·ã¥éç¥ãå±ããéã«ã¢ããªãèµ·åããŠæå·åãããã¡ãã»ãŒãžãåä¿¡ãããã®å
容ã埩å·ããŠãŠãŒã¶ãŒç«¯æ«ã«ããã·ã¥éç¥ã§è¡šç€ºããããšãã§ããŸããLINEã®éçºããŒã ã¯ãiOS 9.3.1ããåæ©èœãå®å®çã«åäœããããšã確èªããLetter Sealingã䜿çšãããŠãŒã¶ãŒã«åŸæ¥ãšåæ§ã®ãŠãŒã¶ããªãã£ãä¿èšŒã§ãããšå€æããŸããããã®çµæãiOS 9.3.1ã«ã¢ããããŒããããŠãŒã¶ãŒã察象ã«Letter Sealingãããã©ã«ãæå¹ç¶æ
ã«ããŠé©çšããããšãã§ããŸããã ã°ã«ãŒãããŒã¯ã«ãŒã ã§ãããå®å
šã«ã¡ãã»ãŒãžãéåä¿¡ã§ãã 1:1ããŒã¯ã«ãŒã ã®ã¿ãªãããã°ã«ãŒãããŒã¯ã«ãŒã ã§ãããå®å
šã«ããŒã¯ã楜ããããšãã§ããŸãã ã°ã«ãŒãããéäŒããå Žåããã®ãŠãŒã¶ãŒã¯ã°ã«ãŒãããŒã¯ã«ãŒã ã®æå·åãããã¡ãã»ãŒãžã解èªã§ããªãããå¿
èŠããããŸããããã«ããäžã€æ³šæãããã®ã¯ãã¢ãã€ã«ã¡ãã»ã³ãžã£ãŒã®ç¹æ§äžãã°ã«ãŒãããŒã¯ã«ãŒã ã®åå è
å
šå¡ãåžžã«ãªã³ã©ã€ã³ç¶æ
ãã€ãŸãåžžã«ãªã¢ã«ã¿ã€ã ã§ã¡ãã»ãŒãžã確èªã§ããç¶æ
ã§ã¯ãªããšããããšã§ãããã®ããã1:1ããŒã¯ã«ãŒã ããã°ã«ãŒãããŒã¯ã«ãŒã ãžã®Letter Sealingé©çšã¯ãã£ãšè€éã§ãã ãã®ãããªåé¡ããã¹ãŠèæ
®ããããã§çŽ1幎ã«ãããŠéçºãšãã¹ããè¡ããææ°ããŒãžã§ã³ã«ãããŠã°ã«ãŒãããŒã¯ã«ãŒã ã«Letter Sealingãé©çšããããšãã§ããŸãããçŸåšã¯ã50人以äžã®ã°ã«ãŒãããŒã¯ã«ãŒã ã®ã¿ã察象ãšããŠããŸãã LINEã®éçºããŒã ããããã®åé¡ãããã«è§£æ±ºãããã«ã€ããŠã¯ã次åã®èšäºã§è©³ãã説æããããšæããŸãã ç¡æé話ãšãããªé話ã§ãLetter Sealingãå©çšã§ãã LINEã¯ããã€ã©ãã§ãç¡æã§é³å£°é話ããã³ãããªé話ãã§ããç¡æé話æ©èœã2011幎10æããæäŸããŠããŸããäžè¬ã®ããŒã¯ã¡ãã»ãŒãžä»¥å€ã«è¿œå ã§Letter Sealingãé©çšããæ©èœãå
éšã§æ€èšããçµæãããå®å
šãªé話ãå®çŸãã¹ãç¡æé話ã§ãE2EEãéçºãé©çšããããšã«ããŸãããã¡ãã»ãŒãžãéåä¿¡ããå Žåãšåæ§ã1:1é話ã®å Žåããé話ãè¡ããŠãŒã¶ãŒå士ã®ã¿ãç¥ãããæå·åéµãçæããé話å
容ãæå·åããŠè»¢éããŸãããã®æå·åéµã¯ãŠãŒã¶ãŒã®ç«¯æ«äžã«ã®ã¿ä¿æããããããLINEãµãŒãã§ãé話å
容ã解èªããããšã¯ã§ããŸããã æ°èŠã«è¿œå ãããç¡æé話ã®ã»ãã¥ãªãã£æ©èœã䜿çšããããã«ã¯ãå¥éèšå®ãè¡ãå¿
èŠã¯ãããŸãããLINE 6.5(iOSçãAndroidç)ããã³LINE 4.8(Windows PCç)以éã®ããŒãžã§ã³ã䜿çšããŠãããŠãŒã¶ãŒã®å Žåãæ¢åã®Letter Sealingãªãã·ã§ã³ããªã³ã«ãªã£ãŠããã°ãå¥éèšå®ããªããŠãã»ãã¥ãªãã£ã匷åãããç¡æé話ã䜿çšã§ããŸãã ããŒã¯ã«ãŒã ã®Letter Sealingé©çšæç¡ãäžç®ã§åãã LINEã§ã®ããŒã¯ã¯ãLetter Sealingããªã³ã«èšå®ããŠããªããŠãããŠãŒã¶ãŒç«¯æ«ãšãµãŒãéã®éä¿¡ãæå·åããŠè¡ã£ãŠãããéåä¿¡ãããã¡ãã»ãŒãžã®ä¿è·ãè¡ã£ãŠããŸããLetter Sealingã¯ãå人ã®ãã©ã€ããŒããªããŒã¯å
容ãéä¿¡è
ãšåä¿¡è
ã®ç«¯æ«ã§ã®ã¿ç¢ºèªã§ããããã«ããLINEã®ãµãŒãäžãžã®ä¿åããå
éšã®ãµãŒãéã®éä¿¡ã«ãããŠãæå·åãããç¶æ
ã®ãŸãŸã§ãããå®å
šã«è¡ãããã«èæ¡ãããæ©èœã§ãã Letter Sealingãå®è£
ããåŸãLINEå
éšã§ã¯Letter Sealingããªã³ã«ãªã£ãŠããããŒã¯ã«ãŒã ãèå¥ã§ããç¶æ
衚瀺(status indicator)ã®å¿
èŠæ§ã«ã€ããŠå€ãã®è°è«ãè¡ãããŸãããè°è«ã®çµæãã»ãŒãã¹ãŠã®ããŒã¯ã«ãŒã ã«Letter Sealingãé©çšããåãŸã§ã¯ãåæ©èœã䜿ããã±ãŒã¹ãšäœ¿ããªãã±ãŒã¹ãæ··åšããããšã«ãã£ãŠãŠãŒã¶ãŒã«æ··ä¹±ãäžããããšãæžå¿µãããŸããããŸããLetter Sealingãé©çšãããŠããªãããŒã¯ã«ãŒã ã¯å®å
šã§ã¯ãªãããšãã誀解ãæãå¯èœæ§ããããšå€æããŸããã ä»ã¯Letter Sealingãããã©ã«ãã§æå¹åãããŠããã®ã§ããã®ãããªããšãæžå¿µããŠããããã¯ãLetter Sealingã®é©çšæç¡ã«é¢ããç¶æ
æ
å ±ããŠãŒã¶ãŒã«åããããã衚瀺ããããšããã£ãšéèŠã§ãããšå€æããŸããããã®ãããLetter Sealingãæå¹ã«ãªã£ãŠãã1:1ããŒã¯ã«ãŒã ãã°ã«ãŒãããŒã¯ã«ãŒã ã1:1ç¡æé話ã«ã¯ããã¯ã¢ã€ã³ã³()ã衚瀺ããLetter Sealingé©çšäžã§ããããšãåããããã«ããŸããã 以äžã§ã玹ä»ãã匷åãããã»ãã¥ãªãã£æ©èœã¯ãiOSçãAndroidçãPCç(WindowsãMac)â»æ³šãžã®å¯Ÿå¿ãç®åãã«ãä»ã®ãã©ãããã©ãŒã ãžã察å¿ç¯å²ãæ¡å€§ãã€ã€ãããŸããLINEã¯ãããããããŠãŒã¶ãŒã®çæ§ã«å®å¿ããŠã¡ãã»ã³ãžã£ãŒãµãŒãã¹ããå©çšããã ããããã«æåãå°œãããŠãŸãããŸãã â»æ³šïŒPCç(WindowsãMac)ã®LINE 4.8ã§ã¯ã1:1ããŒã¯ãšã°ã«ãŒãããŒã¯ã«éã£ãŠç¶æ
衚瀺(status indicator)ãæäŸããŠããŸããç¡æé話ãžã®ç¶æ
衚瀺ã¯æ¬¡ã®ããŒãžã§ã³ã§å¯Ÿå¿äºå®ã§ãã äœæè
ã®çŽ¹ä» ãã®èšäºã¯ãLINEã§ã¡ãã»ã³ãžã£ãŒãµãŒãéçºãæ
åœããŠããã·ã³ã»ããã³ãããäœæããŸããã
â§
ã¡ãã»ãŒãžã®å®å šæ§ã®ãããªã匷åïŒLetter Sealingã®é©çšæ¡å€§
â§
PromCon 2016ç»å£ã¬ããŒã
ã¯ãã㫠以åã®blog postã§äºåããããã«ãOSSã®ã¢ãã¿ãªã³ã°ããŒã«ãšããŠæè¿æ³šç®ãéããŠããPrometheusã®åã®ã«ã³ãã¡ã¬ã³ã¹PromCon 2016ã«åå ããŠçºè¡šããŠããŸããã çºè¡šè³æãåç»ã¯ãã¡ãããèŠãããšãã§ããã®ã§åã»ãã·ã§ã³ã®è©³çŽ°ã¯ãã¡ããã芧ãã ããã ãã®blog postã§ã¯åœæ¥ã®æ§åããäŒãããããšæããŸããæ¬å®¶ã§ãã¬ããŒããåºãŠããã®ã§èå³ããæ¹ã¯ãã¡ãããã§ãã¯ããŠã¿ããšè¯ããšæããŸãã https://prometheus.io/blog/2016/09/04/promcon-2016-its-a-wrap/ åœæ¥ã®ã€ãã³ãã®æ§å åå è
ã®é°å²æ° PromCon 2016ã¯8/25(æš), 26(é)ã®2æ¥éã«ããã£ãŠãã€ãã®ãã«ãªã³ã§éå¬ãããã€ãã³ãã§ããäŒå Žã¯Google Berlinã§ãLINEã¯ã·ã«ããŒã¹ãã³ãµãŒãšããŠåè³ããŸããã ã«ã³ãã¡ã¬ã³ã¹ã®èŠæš¡ã¯åå è
çŽ80åã§ã·ã³ã°ã«ãã©ãã¯ã§é²è¡ããŸãããæ±äº¬ã§ã®Prometheusã€ãã³ãã§ããçŽ100åã®ãšã³ãžãã¢ãåå ããããããªã®ã§ãæ¬å®¶ã®ã«ã³ãã¡ã¬ã³ã¹ã§80åãšãããã£ãã·ãã£ã¯å°ãªãã®ã§ã¯ãšæåã¯æã£ãŠããã®ã§ãããå®éãã®éãã ã£ãããã§ãã±ããã¯äžç¬ã«ããŠå£²ãåããããã§ããåå è
ã¯ã¯ã©ãŠããµãŒãã¹ã掻çšããã€ã³ãã©ãšã³ãžãã¢ãSREãšãã£ãããžã·ã§ã³ã®æ¹ãå€ãã£ãããã§ãã äŒè©±ããéãã§ã¯ãã¯ããšãŒãããããã®åå è
ãå€ãããã€ã以å€ã§ã¯ã€ã®ãªã¹ãã¢ã€ã«ã©ã³ããã¹ãã€ã³ããã©ã³ã¹ãã¹ãŠã§ãŒãã³ãšãã£ãåœãããã¢ãžã¢ã§ã¯æ¥æ¬ãé€ããšã¿ã€ãã€ã³ããã·ã¢ããåå ããŠããæ¹ãããŸãããäž»å¬è
ã®æ¹ãé ãã¢ãžã¢ãŸã§PrometheusãåºãŸã£ãŠããããšã«é©ããšåã³ãæããŠããããã§ãããç§ã¯4ææ«ã«CFP(Call for Papers)ãåºãããããacceptãããã®ã§speakerãšããŠåå ã§ããŸããã ç§ã®çºè¡š ç§ã®çºè¡šè³æã¯ä»¥äžãåèã«ããŠãã ããã çºè¡šæã®åçãšåæã¯ãã¡ãã§ãã ç§ã¯Fluentdã§ãã°åéããŠHadoopã«èç©ãããšããããšããã£ãŠããã®ã§ããã®ã·ã¹ãã ã®ã¢ãã¿ãªã³ã°ã«Prometheus, Grafanaã䜿ã£ãŠãã話ãšãOSSãšããŠå
¬éããpromgenã玹ä»ããŸããã promgenã¯Rubyã§å®è£
ãããWebã¢ããªã±ãŒã·ã§ã³ã§äžèšïŒã€ã®æ©èœãæã£ãŠããŸãã Prometheusã®èšå®ãã¡ã€ã«ã®èªåçæããã³Prometheusã®reload ã¢ã©ãŒãéç¥å
ã®å¶åŸ¡ ç§ã®çºè¡šã«éããåå è
ã¯ã¢ããããŒã ãšãããããŒããŠã©ãŒãã³ã°ã«çºè¡šãèããŠããããšãŠããããããé°å²æ°ã§ãããçºè¡šåŸã«ãNice Talk!ããšèšã£ãŠããã人ãããŠããšãŠãå¬ããã£ãã§ãã å°è±¡æ·±ãã£ããããšããšç§ã®çµéš ç§ä»¥å€ã®ã»ãã·ã§ã³ã§ã¯ãPrometheuséçºè
ã«ããã¹ãã¬ãŒãžãã¢ã©ãŒãåšãã®çºè¡šãPrometheusèªçç§è©±ãkubernatesã®ã¢ãã¿ãªã³ã°ãªã©Prometheusã®ãŠãŒã¹ã±ãŒã¹çŽ¹ä»ãGrafanaã®è©±ãPrometheusã掻çšããŠã¢ãã¿ãªã³ã°ãµãŒãã¹ãå±éãã話ããªã©ãã©ãšãã£ã«å¯ãã ã»ãã·ã§ã³ã沢山ãããŸããã ã»ãã·ã§ã³ã®ãªãã§å人çã«æ°ã«ãªã£ãã®ã¯ãå°å³ã ãã©éèŠãªã¢ã©ãŒãåšãã®è©±ã§ããæ©æ¢°åŠç¿ã®ç°åžžæ€ç¥ã«ããã¢ã©ãŒãã®è©±é¡ãåºãŠå人çã«ã¯é¢çœããšæããŸãããéçšãå°ãé£ãããã§ãã PromQLã䜿ã£ãäŸã¯åºãŠããŸããããã¯ãšãªãå°ãè€éã§åã®ç°å¢ã§åãå
¥ããã®ã¯å
ã«ãªãããã§ãã ã¢ã©ãŒãã®unit testã£ãŠã©ãããã®ïŒãšãã話é¡ãåºãŠãçŸç¶ã ãšããã°ããŒãã£ã³ã°ãããªããããããªããšèããŠãã¯ããŸã ãããªã®ããšæã£ã次第ã§ããã¢ã©ãŒããã¡ãããšåããŠããã確èªããã®ã¯å®è·µã§ãããããªãéšåããããŸãããé害ããããªã«é »ç¹ã«èµ·ããããã§ããªãã®ã§ãã¢ã©ãŒããæ¥ãªããã°ãšããã®ã¯æ°ä»ãã¥ããåŸåã«ãããŸããå®éã«ç§èªèº«ãæè¿ãããçµéšããŸããã Prometheusã®Alertmanagerã®ãçŽ¹ä» Prometheusã®äžçã§ã¯ã¢ã©ãŒãã¯Alertmanagerãæ
åœããŸããã¢ã©ãŒããçºçãããšAlertmanagerãmailãªãhipchatãªãslackãªãã«ãããéç¥ããŸãããç§ã®ç°å¢ã§ã¯ãŸãpromgenãã¢ã©ãŒããåãåã£ãŠåŠçããããšããæµãã§ããPrometheus â Alertmanager â promgen â hipcaht/mail ãšããçµè·¯ã§ããããããããšã«ãã£ãŠAlertmanagerã®reloadãããªããŠãã¢ã©ãŒãéç¥å
ãæè»ã«å€æŽããããšãã§ããŸããpromgenã¯åœåCSRFã®åé¡ããã£ãããRack::ProtectionãçšããŠãªãã¡ã©ãŒãç¡ããªã¯ãšã¹ãã¯ã¯ããããã«å€æŽãå
¥ãããšãããAlertmanagerããã®ã¢ã©ãŒãéç¥ãæåŠããŠããŸãçµæçã«ã¢ã©ãŒããæ¥ãªããšããç¶æ³ã«ãªã£ãŠããŸããŸããã ãã®ãããªçµç·¯ããããçŸåšã§ã¯äžèšã®ããã«ã¢ã©ãŒãéç¥ã«å€±æããå Žåã¯é害ã«ãªãããã«ã¢ã©ãŒãã«ãŒã«ãè¿œå ããŸããã ALERT AlertDeliveryError IF rate(alertmanager_notifications_failed_total[5m]) > 0 FOR 5m LABELS {severity="critical"} ANNOTATIONS {summary="notification through promgen failed."} ãã®ã¢ã©ãŒãã«ãŒã«ã«åŒã£ããã£ãŠãpromgenã«åé¡ããã£ãŠéç¥ã§ããªãã®ã§ã¯å°ãã®ã§ãAlertmanagerã«é¢ãããã®ã¯promgen以å€ã®çµè·¯ã§äžèšã®ããã«mailéç¥ããããã«ããŠããŸãã global: smtp_smarthost: '... smtp_from: '... route: receiver: 'promgen-webhook' routes: - receiver: 'promgen-mail' match: job: alertmanager receivers: - name: "promgen-webhook" webhook_configs: - url: 'http://promgen:password@localhost:9092/alert' - name: "promgen-mail" email_configs: - to: '...' require_tls: false Alertmanagerã®HAã®Lightning Talks ã¢ã©ãŒãåšãã®ä»ã®çºè¡šã§ã¯Alertmanagerã®HA(High Availability)ã®Lightning TalkããããŸãããLightning Talkã¯åå è
ãäŒå Žã§äžèšã®ããã«ãã¯ã€ãããŒãã«æžããŠsign upããæ¹åŒã§ããã Prometheusã¯pullåã®ã¢ãŒããã¯ãã£ãªã®ã§HAã¯ç°¡åã«çµããŸããåãèšå®ãã¡ã€ã«ã§2ã€ã®Prometheusãåããã ãã§ãããããAlertmanagerã¯çŸç¶SPOF(Single Point of Failure)ãªã®ã§ãHAã¯å¿
èŠã ãšæããŸããç§ã®ãããªHadoopãšã³ãžãã¢ã ãšHAãšèããšZooKeeperãå¿
èŠãªã®ããªïŒãšæã£ãŠããŸããŸãããAlertmanagerã®HAã¯ZooKeeperã®ãããªå€éšã®ããã«ãŠã§ã¢ãå¿
èŠãšããŸããããããªãã»ããã¢ããã楜ããã§ããã å
éšçã«ã¯Cassandraã®ããã«Gossipãããã³ã«ã§ããŒãééä¿¡ãè¡ãCAPå®çã®APåã·ã¹ãã ã®ããã§ãããŸãAlertmanagerãè€æ°ãã£ãŠãåãã¢ã©ãŒããè€æ°åãåãããšã«ãªã£ãŠã¯æå³ããªãã®ã§ããã«ã€ããŠã®èª¬æããããŸããã Alertmanager HAã®å®è£
ã¯çµãã£ãŠãããã®ã®ãã¹ãã足ããªãããã§ãŸã ãªãªãŒã¹ãããŠããŸããããªãªãŒã¹ããããç§ããã§ãã¯ããããšæã£ãŠããŸãã äŒå Žã§æäŸãããé£ã¹ç©ã飲ã¿ç©ãTã·ã£ããããã° ã€ãã³ãåœæ¥ã¯é£ã¹ç©ãéåžžã«å
å®ããŠããŸãããæé£ãšæŒé£¯ãšããŠã¯ãšãŒããããšã¢ãžã¢ãåºåããæ§ã
ãªæçãã§ãŸãããããªã³ã¯ãã³ãŒããŒãå«ãæ§ã
ãªçš®é¡ãæäŸãããŠããŠããã¶ãŒãã«Prometheusã±ãŒãããããŸãããã«ããã±ãŒãã®äžã«Prometheusã®ããŒã¯ãä¹ã£ãŠããã®ãå°è±¡çã§ãã ããã«ãåç£ã«Prometheusããã°ãšTã·ã£ããããããŸããã ããã«ã€ãã³ãåæ¥ã®å€ã«ã¯æ芪äŒãéå¬ãã掻çºãªè°è«ãå±éãããŸããã (âŠ)
â§
â§
LINE Developer DayããŒã¯ã®èŠæãäžéšã玹ä»ããŸã
9æ29æ¥(æš) ã«æžè°·ãã«ãªãšããŒã«ã«ãŠéå¬ããLINE DEVELOPER DAY 2016 ã§ã¯ã17ã®ããŒã¯ããå±ãããäºå®ã§ããä»åã¯ã17ã®ããŒã¯ã®ãã¡ãïŒã€ã®ããŒã¯ã«ã€ããŠã玹ä»ããããšæããŸãã åå ç»é²ã¯å
¬åŒãµã€ããããå¿åç· åã¯9æ15æ¥(æš)ã§ãã LINE Developer Day 2016 â HALL A 11:00 â 11:40 ãKeynote / New world by the LINE BOTã LINE Developer Day 2016 ã®ããŒããŒãã¹ããŒã«ãŒã®ãæ
åœããæŸéã§ãã ä»å¹Žã® keynote 㯠LINE ã® BOT ãã©ãããã©ãŒã ãããŒãã§ããä»å¹Žã®æ¥ããå§ãŸã£ã LINE ã® Bot ããè©Šãã§äœãã Trial Bot ã®çŸç¶ããããŠä»åŸãBot Platform ã®æ°æ©èœãBot é¢é£ã®æ°ãµãŒãã¹ãªã©ãªã©ãåå
¬éã®æ
å ±ãªã©çãã ãããã§ãå±ãããŸãã®ã§ä¹ããæåŸ
ïŒ â HALL A 14:20 â 15:00 ãSecurity x LINE Platformã Security x LINE Platformãšããã¿ã€ãã«ã§ã話ããããŠããã ãæç²ã§ãã LINEã§ã¯ãµãŒãã¹ãå©çšãããŠãŒã¶ãŒã®å®å
šã第äžã«èããæ§ã
ãªã»ãã¥ãªãã£å¯Ÿçãè¡ã£ãŠããŸããåœã»ãã·ã§ã³ã§ã¯ãLINEã®ã¡ãã»ãŒãžã³ã°ã«ãããŠäœ¿çšãããæå·ãç¹ã«ãLetter Sealingãã«ã€ããŠè§£èª¬ããŸããLINEã§ã¯ã2016/08/31ããéä¿¡å
容ã®æå·åã®æç¡ãæå³ãããéµããŒã¯ãã衚瀺ããããã«ãªããŸãããããã®ããŒã¯ã®è£åŽã§å®éã«è¡ãããŠããæå·éä¿¡ã«ã€ããŠèª¬æããããŸãããŸããLINEãæäŸããWebãµãŒãã¹ãã²ãŒã ã«ãããŠãããŠãŒã¶ãŒãå®å¿ããŠå©çšã§ããããããªãªãŒã¹åã«ã»ãã¥ãªãã£èšºæãå®æœããŸããããã¯LINEãæäŸãããã¹ãŠã®ãµãŒãã¹ã«å¯ŸããŠäŸå€ãªãè¡ãããŸãããã®ã»ãã¥ãªãã£èšºæã«ã€ããŠãã©ã®ãããªèª¿æ»ã察çãè¡ã£ãŠããã®ãã«ã€ããŠèª¬æããããŸãã â HALL B 14:20 â 15:00 ãLINE Bot Live Codingã éçº3ã»ã³ã¿ãŒãµãŒãã¹éçº1宀ã®æµ·æŽ¥ã§ããLINE Bot Live Codingã®ã»ãã·ã§ã³ã§ã¯ãLINE Botã«æèŒãããæ°æ©èœãæãæ©ãäœæåºæ¥ãã»ãã·ã§ã³ã«ãªããŸãã å
容ã«ã€ããŠã¯æ¯èŒçåå¿è
åããªè©±ãå€ããªããŸãããLINE Botã䜿ãã°ãããªæ©èœãäœãããã ããšããäºãã©ãªãã§ãç解åºæ¥ããããªã»ãã·ã§ã³ã«ããäºå®ã§ãããŸã LINE Botãäœã£ãäºã®ç¡ãæ¹ãä»åŸã®LINE Botã®å±æã«æåŸ
ããŠããæ¹ã«ã¯ãæ¯é足ãéãã§èŠã«æ¥ãŠé ããããšæããŸãã40åã§åãŸããªãã£ããããããªããã â HALL A 13:00 â 13:30 ãLINEãä¹ãè¶ããŠããå°é£ãªåé¡ã ããã«ã¡ã¯ãLINEãä¹ãè¶ããŠããå°é£ãªåé¡ããšããããŒãã§è©±ãããnasuã§ãã æšå¹Žã®DevDayã§ã¯ãã¡ãã»ãŒãžã³ã°åºç€ã®è©±ãšããŠããã€ãLINEã®ã¢ãŒããã¯ãã£ããã€ã¯ããµãŒãã¹ã®çŽ¹ä»ãšæ¹åã®è©±ãããŸããããå¥ã®åŽé¢ãšããŠãé害ãçºçããçµææ§ã
ãªèª²é¡ãèŠããŠããŠLINEã¯ããã«ã¢ãŒããã¯ãã£ããã€ã¯ããµãŒãã¹ãæ¹åããŠããŠããŸãã ãããŸã§å€ãã®é害ãçºçããŠã¿ãªããã«ãè¿·æããããããŠããéšåã«ã€ããŠã¯ãTwitterãFacebookãéããŠçããã«å
±æãããŠããŸãããä»åã¯ä»å¹Ž3/11ã«çºçããé害ã®ããã¯ã°ã©ãŠã³ãã玹ä»ãã€ã€ããªãé害ãçºçããã®ããçºçæã«éçºè
ãã©ã®ããã«é害ã解決ã»å¯Ÿå¿ããã®ããšããéçšã話ããããšæããŸãã ããŒã¯ãŒããšããŠã¯4ã€ãã¯ãªãšã€ã¿ãŒãºçããããå
±éããŒã¿ã®æŽæ°ã®ä»çµã¿ãèªèšŒããªã¯ãšã¹ãããŒã¹ãã§ãã åœæ¥ã¯ãæ¥å Žè
éå®ã§å
¥æå¯èœãªãåç£ãªã©ããçšæããŠãããŸããåå ç»é²ã¯å
¬åŒãµã€ããããé¡ãããããŸããå¿åç· åã¯9æ15æ¥(æš)ã§ãã LINE Developer Day 2016 çæ§ã®ãæ¥å ŽããåŸ
ã¡ããŠãããŸãïŒ Twitter å
¬åŒããã·ã¥ã¿ã° #linedevday
â§
LINE LIVE ãã£ããæ©èœãæ¯ããã¢ãŒããã¯ãã£
LINEæ ªåŒäŒç€Ÿã®Oklahomerã§ãã æ¬èšäºã§ã¯ãLINE LIVEãšããåç»é
ä¿¡ãµãŒãã¹ã®ãã£ããæ©èœããã©ã®ãããªæ§æã§æãç«ã£ãŠããã®ã玹ä»ããŸãã ãã£ããã®çŽ¹ä» LINE LIVEã®iOS/Android ã¢ããªã§ã¯ãé
ä¿¡äžã®åç»ãèŠèŽããªãããªã¢ã«ã¿ã€ã ã«ã³ã¡ã³ãæçš¿ã§ãããã£ããæ©èœãæäŸããŠããŸãããã®æ©èœã®åœ¹å²ã¯ãèŠèŽè
å士ã察話ã楜ããã ãã«ãšã©ãŸããŸãããé
ä¿¡è
ãèŠèŽè
ã®ã³ã¡ã³ãã«è¿çãããšãã圢ã§é
ä¿¡è
ãšèŠèŽè
ã®æ¥ç¹ãšããŠæ©èœãããããŸãé
ä¿¡è
ãã³ã¡ã³ãå
容ã«åŸã£ãŠäŒç»ãé²ãããªã©ãé
ä¿¡è
ãšèŠèŽè
ãäžäœãšãªã£ãŠé
ä¿¡ãäœãäžããŠããäžã§ãéèŠãªæ©èœãšãªã£ãŠããŸãã ãããæå人ã«ããé
ä¿¡ãšãªãã°åœç¶èŠèŽè
æ°ãå€ããªããŸããããã®é
ä¿¡äžã«èŠèŽè
ããã®ã³ã¡ã³ããåãã°ç¬çºçã«çžåœéã®ã³ã¡ã³ãæµå
¥ãããããšã¯å®¹æã«æ³åã§ããã§ãããããã¡ããã³ã¡ã³ãæµå
¥ãå¢ãããšããããšã¯ãå
šèŠèŽè
ãžãšäžç¶ãã¹ãã³ã¡ã³ãã®éãå¢ããŸããããããããããã«é«éã«æãããåžžã«èª²é¡ãšãªããŸããå®éãäžé
ä¿¡ã®ã¿ã§åé1äžä»¶ãè¶
ããã³ã¡ã³ããæçš¿ããããããªããšããããŸãã ãã®ãããã£ããã§ã¯ãæ»ã®ããã«æµããã³ã¡ã³ãã«èããããšãåæã«éçºãé²ããããä»ã§ã¯100å°ä»¥äžã®ãµãŒãã€ã³ã¹ã¿ã³ã¹äžã§çšŒåããŠããŸãã 以äžããã®æ§æã説æããããŸãã ãµãŒãæ§æã®å
šäœå ãŸãã¯å
šäœåãšããŠã以äžã®ç»åãã芧ãã ããã 詳现ãªèª¬æã¯ä»¥éã®é
ç®ã«è²ããšããŠãããã§ã¯ãã£ããæ©èœãå®è£
ããã«ããã£ãŠéèŠãªããã£ããã«ãŒã ãã®æŠå¿µãç解é ããããChat Server1ã«æ¥ç¶ãããClient 1ãã³ã¡ã³ããéä¿¡ãããããChat Server2ã«æ¥ç¶ããŠããClient 2ã«éãå±ããããŠããç¹ã«æ³šç®ãã ããã å
è¿°ã®éãã人æ°é
ä¿¡è
ã«ããé
ä¿¡ãšãªããšæµå
¥ããã³ã¡ã³ãéã¯çžåœãªãã®ã§ãèªã¿åããªãã»ã©ã®ã³ã¡ã³ããæµããã®ã¯çãäžãããäœæããäžã§ãšãŠãéèŠãªèŠçŽ ãšãªããŸããããããŸãã«ãå€ããããšãã³ã¡ã³ããæããµãŒãåŽã«ãšã£ãŠããããã衚瀺ããã¯ã©ã€ã¢ã³ãã«ãšã£ãŠãè² æ
ãšãªã£ãŠããŸããŸãããã®ãããç§ãã¡ã¯ããã£ããã«ãŒã ããšããæŠå¿µãæ¡çšããèŠèŽè
ãå¢ããã«é£ããŠãã£ããã«ãŒã ãåå²ããåäžãã£ããã«ãŒã ã«å±ãããŠãŒã¶å士ã§ã®ã¿å¯Ÿè©±ãè¡ããããã«ããŸããããã®ãã£ããã«ãŒã ã¯è€æ°ã®ãµãŒãããŸããã§åæ£ããããããåäžãã£ããã«ãŒã ã«å±ãããŠãŒã¶å士ã§ãããã®æ¥ç¶ã¯ç°ãªããµãŒããžãšãã©ã³ã·ã³ã°ãããŸãã ãããå®çŸããããã®æ§æãšããŠããã£ãããµãŒãã®æ§æã®ç¹åŸŽã«ã¯ä»¥äžã®3ã€ãæããããŸãã WebSocket: ã¯ã©ã€ã¢ã³ããšãµãŒãéã®çé Akka toolkitã«ããé«éãªäžŠè¡åŠç Redisãå©çšãããµãŒãéã®ã³ã¡ã³ãåæ 以éã®é
ç®ã§ã¯ãããã3ã€ã®é
ç®ã«ã€ããŠããããçŠç¹ãåœãŠãŠèª¬æããŸãã WebSocket WebSocketãæ¡çšããããšã§ã匵ãç¶ããããåäžã®ã³ãã¯ã·ã§ã³äžã§ãäœãã¬ã€ãã³ã·ã§åæ¹åã®ã³ãã¥ãã±ãŒã·ã§ã³ãè¡ãããšãã§ããŸããããã«ãããé«éã«æµããã³ã¡ã³ãããªã¢ã«ã¿ã€ã ã«ãŠãŒã¶ãžéãå±ããããšã¯å¿è«ããŠãŒã¶ããã®ã³ã¡ã³ãæçš¿ã«é¢ããŠãéœåºŠHTTPãªã¯ãšã¹ããéä¿¡ããå¿
èŠããªããªããªã©ããµãŒããªãœãŒã¹ãæå¹ã«äœ¿ããå©ç¹ããããŸãã ãã ããåäžã®ã³ãã¯ã·ã§ã³äžã§ã¡ãã»ãŒãžã³ã°ãè¡ããšããããšã¯ãæ
£ã芪ããã Web APIã®ããã«ãšã³ããã€ã³ãã«ãã£ãŠã¬ã¹ãã³ã¹åœ¢åŒãåããããšãã§ããããµãŒãã»ã¯ã©ã€ã¢ã³ãå
±ã«åãåã£ããã€ããŒããé©åã«èå¥ããŠãã³ããªã³ã°ãã工倫ãå¿
èŠã«ãªããŸãããã£ããã®å®è£
ã§ã¯JSON圢åŒã®ãã€ããŒããéãåãã®ã§ãããå
šãŠã®ãã€ããŒãã«å
±éãããã£ãŒã«ããäžã€æããããã®å€ãèå¥ããããšã«ãã£ãŠãã€ããŒããäœãè¡šããèå¥ãã察å¿ããã¯ã©ã¹ã«ãããã³ã°ã§ããããã«ããŠããŸãããã®æ¹æ³ã®ãããã§ãææã®ããã®å®è£
ãªã©ã§æ°ããªãã€ããŒãå®çŸ©ãå¿
èŠã«ãªããããªå Žåã§ãæè»ãªå¯Ÿå¿ãå¯èœãšãªããŸãã ããã§æ³šæãããã®ã¯ãã¢ãã€ã«ç«¯æ«ãšã®æ¥ç¶ãšããããšããããé·æé匵ãç¶ããã³ãã¯ã·ã§ã³ãäžå®å®ã«ãªãã±ãŒã¹ãç®ç«ã€ãšããããšã§ãããããåé¿ããããããã€ããŒãã®éä¿¡ç¶æ
ãç£èŠããã³ãã¯ã·ã§ã³ãäžå®å®ã ãšå€æã§ããå Žåã¯äžåºŠã³ãã¯ã·ã§ã³ãåæããŠåæ¥ç¶ãä¿ããªã©ã®å¯Ÿå¿ãåãããŠããŸãã Akka toolkit Akkaã¢ã¯ã¿ãŒã·ã¹ãã ãæ§æããéèŠãªèŠçŽ ãšããŠãäœãããŸãactorãšããã®supervisorã®ä»çµã¿ãæããããã§ãããããã£ãããµãŒãã®ã¢ã¯ã¿ãŒã·ã¹ãã æ§æã®åã«ãåæãšãªãç¹åŸŽãæããŠã¿ãŸããã¢ã¯ã¿ãŒã¢ãã«å
šè¬ã«ã€ããŠã®æŠèŠã¯ãããã§ã¯å²æããŸãã Actor ãŸããããããã®actorã¯å
éšã«ç¶æ
ãšæ¯ãèããæã¡ãmailboxãšåŒã°ãããã¥ãŒãå²ãåœãŠãããŸããactorãæã€ç¶æ
ã¯é èœãããŠããŠå€ããã¯ããããç¥ããªããããactorå士ã¯äºãã«ã¡ãã»ãŒãžãéãåãã€ã€ãåãåã£ãã¡ãã»ãŒãžã«å¯ŸããŠåã
å®çŸ©ãããæ¯ãèãããããŸã次ã®actorã«ã¡ãã»ãŒãžãéããŸãã ãã®ã¡ãã»ãŒãžããã·ã³ã°ã¯éåæã«è¡ããããããã¡ãã»ãŒãžãéã£ãactorã¯ããããŸèªåã®mailboxãã次ã®ã¡ãã»ãŒãžãåãåãã次ã®åŠçãžãšç§»ãããšãã§ããŸãããã®ãããããããã®actorã«ã¯å€§ããªã¿ã¹ã¯ãæãããã现ååãããã¿ã¹ã¯ãå°ããã€åŠçããªããäºãã«ã¡ãã»ãŒãžããã·ã³ã°ããããšããã¢ã¯ã¿ãŒã·ã¹ãã å
šäœãšããŠå¹çãã䞊è¡åŠçãè¡ãäžã§èèŠãšãªããŸãã ãã®èšèšã誀ããšãããããã³ã°ãªåŠçãactorã®æ¯ãèãã«çµã¿èŸŒãŸããŠããŸããã¡ãã»ãŒãžãç©ãã£ãŠmailboxã溢ããŠããŸãããšã«ãªããããŸãããç¹ã«æ³šæãããã®ã¯ããµãŒãããŒãã£ã®ã©ã€ãã©ãªãå©çšããéãªã©ããã£ããããããã³ã°ãªAPIãåŒãã§ããŸããããªã±ãŒã¹ã§ããææªãªã®ã¯åŠçãå®å
šã«ãããã¯ãããã±ãŒã¹ã§ããã®å Žåã該åœactorã®å®è¡ãæ
ãã¹ã¬ãããå æããç¶ããŠããŸããã²ããŠã¯ã¹ã¬ããã®æ¯æžã«ç¹ãããŸãã ããã§ãakkaã¢ã¯ã¿ãŒã·ã¹ãã ãæ¡çšããå©ç¹ãšããŠã¯ããåactorã軜éã¹ã¬ãããå²ãåœãŠãããŠããŠããã®ã¹ã¬ããäžã§ã®ã¿å®è¡ãããããšããã³ã³ã»ããã§å®è£
ã§ãããããä»»æã®actorãåæã«è€æ°ã¹ã¬ããããåŒã³åºãããããšãç¡ãç¹ãæããããŸãããã®ãããactorå
ã®ç¶æ
ã管çããéãªã©ã¯ãã¹ã¬ããã»ãŒãã§ããããšãæèããªããŠãè¯ããªããŸãããŸãã察é害æ§ãé«ããäžã§éèŠãªsupervisorã®ä»çµã¿ãå©ç¹ãšãããã§ãããã Supervisor actorã®ã©ã€ããµã€ã¯ã«ãææ¡ããäžã§éèŠãšãªãã®ã¯ãactorã¯ä»ã®actorã«ãã£ãŠã®ã¿çæããããšããããšã§ããããã«ãããactoréã«ã¯å¿
ã芪åé¢ä¿ãçãŸããŸãããã®çæããactorïŒèŠªïŒããçæãããactorïŒåïŒã®suprevisorïŒç£èŠè
ïŒãšããŠã®åœ¹å²ãæ
ããŸãã®ã§ãã©ã®actorã«ãå¿
ãsupervisorãååšããããšãä¿èšŒãããŸããAkkaã¢ã¯ã¿ãŒã¢ãã«ã«ã¯let-it-crashã®èãããããåactorå
ã§åŠçãäŸå€ãæããå Žåã¯å³åº§ã«ãããsupervisorã§ãã芪actorãžãšäŒæããããšã©ãŒãã³ããªã³ã°ã¯èŠªactorã®è²¬åãšãªããŸãã芪actorã¯åãåã£ãäŸå€ãèå¥ããå¿
èŠã«å¿ããŠä»¥äžã®4ã€ã®directiveããæé©ãªå¯Ÿå¿ãéžæããŸãã Restart: actorã®åèµ·åãactorã€ã³ã¹ã¿ã³ã¹ãæ°ãã«äœããmailboxã«æºãŸã£ã次ã®ã¡ãã»ãŒãžããåŠçãç¶ç¶ããŸãã Resume: mailboxã«æºãŸã£ã次ã®ã¡ãã»ãŒãžããåŠçãç¶ç¶ããŸããRestartãactorã€ã³ã¹ã¿ã³ã¹ãå床çæããã®ã«å¯ŸããResumeã§ã¯æ¢åã®actorããã®ãŸãŸå©çšãããŸããactorå
ã®ç¶æ
ãæ£ããä¿ãŠãªããªã£ãå Žåãªã©ã«Restartãå©çšããåŠçãç¶ç¶ã§ããå Žåãªãã°Resumeãå©çšãããªã©ã®äœ¿ãåããèããããŸãã Stop: actorã®åæ¢ããã®æç¹ã§mailboxã«æºãŸã£ãæ®ãã®ã¡ãã»ãŒãžã¯åŠçãããŸããã Escalate: åactorã®äŸå€ã«ã€ããŠèŠªèªèº«ããã³ããªã³ã°ãã§ããªããããªã±ãŒã¹ã§ã¯ãEscalateã§ããã«äžäœã®supervisorã«äŸå€ãäŒæããŠå¯Ÿå¿ãããŸãã actorãåèµ·åãããåæ¢ããããããšãªããšããã®actorãåç
§ããŠããã¢ããªã±ãŒã·ã§ã³ã®å®è£
ã§ãactorã®ã©ã€ããµã€ã¯ã«ãæèããªããŠã¯ãªããªãããã«æããŸããããå®éã®æãactorãçæããéã«è¿ãããã®ã¯actorã®å®äœã§ã¯ãªããActorRefãšåŒã°ããactorãžã®åç
§ã®ã¿ãè¿ãããŸããã¢ããªã±ãŒã·ã§ã³å
ã§ã¯ããã®ActorRefã«å¯ŸããŠã¡ãã»ãŒãžãéãããšã«ãªãããããã®äžã«ããactorã®å®äœãåèµ·åããŠããæäžã§ãã£ããåæ¢ããéçšã§ãããªã©ã®ç¶æ
ã«ã€ããŠæèããå¿
èŠããªããå®è£
ãã·ã³ãã«ã«ä¿ãŠãŸãããŸãããã®æœè±¡åã«ãã£ãŠã¢ããªã±ãŒã·ã§ã³ã³ãŒãã¯actorã®æåšãç¥ãå¿
èŠããªããªããããè€æ°ãµãŒãããŸããã§ã¢ã¯ã¿ãŒã·ã¹ãã ãæ§ç¯ããéã«ãæè»ã«å¯Ÿå¿ã§ããŸãã ãã£ãããµãŒãã®ã¢ã¯ã¿ãŒã·ã¹ãã æ§æ å
ã»ã©ã®å
šäœåãããããå°ãactorã«çŠç¹ãåœãŠãç°¡ç¥ãªå³ãèŠãŠã¿ãŸãããã äžã®å³ã®ããã«ãäž»ã«ChatSupervisorãChatRoomActorãUserActorã®3çš®é¡ã®actorãé£æºããã£ãŠãŠãŒã¶ã®ã³ã¡ã³ããå±ããŠããŸããããããã®åœ¹å²ã¯ä»¥äžã®éãã§ãã ChatSupervisor: JVMäžã«äžã€ã®ã¿ååšããactorã§ãactorã®çæãšç£èŠãè¡ã£ãããå€éšããæµå
¥ããã¡ãã»ãŒãžã察å¿ããactorãžãšã«ãŒãã£ã³ã°ãã圹å²ãæã¡ãŸããç§éã®å®çŸ©ããactor矀ã®æäžäœã«äœçœ®ãããã®ã§ãããžãã¯ã¯æãããã¡ãã»ãŒãžããšã®å®éã®åŠçã¯è¡ããŸããã ChatRoomActor: åãã£ããã«ãŒã æ¯ã«çæããããã®ã§ããã£ããã«ãŒã å
ã§ã®ã³ã¡ã³ãéä¿¡ãé
ä¿¡çµäºãªã©ã®ã€ãã³ããè¡šãåçš®ã¡ãã»ãŒãžã¯äžåºŠãããžãšäŒããããŸãã詳ããã¯åŸè¿°ããŸããããµãŒãéã®ã³ã¡ã³ãåæã®ããã«RedisãžpublishããããRedisãžã®ã³ã¡ã³ãä¿åãªã©ãããã§è¡ããã¯ã©ã€ã¢ã³ããžå±ããã¹ãã¡ãã»ãŒãžã¯UserActorãžãšããã·ã³ã°ãããŸãã UserActor: ãŠãŒã¶ããšã«çæãããactorã§ãChatRoomActorããã¡ãã»ãŒãžãåãåããèªåãæ
åœããã¯ã©ã€ã¢ã³ãã®WebSocketã³ãã¯ã·ã§ã³ã«å¯ŸããŠãã€ããŒãã®éä¿¡ãåœããŸãã ãããŸã§ã®èª¬æã§ãChatRoomå
ã§ã®Redisé£æºãUserActorã§ã®WebSocketã³ãã¯ã·ã§ã³è¶ãã®ãã€ããŒãéä¿¡ã«ã€ããŠèšåããŸãããå
è¿°ã®éããactorå
ã§ã¯ããããã³ã°ãªåŠçãè¡ããªãããã«ããããšãéèŠã§ãããã®ããããããã®åŠçã§ãå¯èœãªéãéåæã¡ãœãããå©çšããAkkaã¢ã¯ã¿ãŒã·ã¹ãã ã«å²ãåœãŠãããå®è¡ã¹ã¬ããã®å æãé²ãã§ããŸãã Reids Clusterãšpub/subã®å©çš ãã£ããã§ã¯ããµãŒãéã®ã³ã¡ã³ãåæãšãã³ã¡ã³ããåçš®æ°å€ã®äžæçãªä¿åç®çã®ããã«Redis Clusterãå©çšããŠããŸãã ã³ã¡ã³ãã®åæ ãŠãŒã¶æ°ã«å¿ããŠãã£ããã«ãŒã ãåå²ãããããšãåäžãã£ããã«ãŒã ã§ãã£ãŠãè€æ°ãµãŒãã«åæ£ãããããšã¯æ¢ã«è¿°ã¹ãŸãããã§ããããã£ããã«ãŒã ãè€æ°ãµãŒãã«ãŸãããå ŽåããµãŒãéã§ããã«ã³ã¡ã³ããåæããããéèŠã«ãªããŸããakka toolkitã¯è±å¯ãªæ©èœãæäŸããŠããŠãAkka clusterãevent busãªã©ã®éžæè¢ãããã®ã§ãããakka clusterãæ¡çšããå Žåã®nodeã®åæ£ããevent busãå©çšããå Žåã®ãããã€æã®ç
©éããèæ
®ããŠãéçšã»å®è£
å
±ã«å®¹æãªredis pub/subæ©èœãå©çšããŠããŸãã以äžã®å³ãèŠãŠããã ããšã€ã¡ãŒãžã湧ããããã§ããããåäžã®ã«ãŒã ãè€æ°ãµãŒãã«ãŸããã£ãŠååšããããšãåäžã«ãŒã å
ã§ã®ã³ã¡ã³ããredisã®pub/subã«ãã£ãŠåæãããŠããããšãäŒããããšæããŸãã é«éãªKVSãšããŠã®å©çš ãŸããé
ä¿¡äžã®ã³ã¡ã³ããäžæçã«redisäžã«ä¿åããçšéãã«ãŠã³ã¿ãšããŠã®å©çšç®çã§ãé«ãå¯çšæ§ãšã¹ã±ãŒã©ããªãã£ãæã€Redis Clusterãæ¡çšããŠããŸããã³ã¡ã³ãã®æµéãå€ããªãããšãªã©ãèæ
®ããé
ä¿¡äžã®ã³ã¡ã³ããã®ããéä¿¡æ
å ±ãªã©ã®ã€ãã³ãã¯ãŸãé«éãªread/writeãå¯èœãªã€ã³ã¡ã¢ãªKVSãšããŠã®Redis Clusterã«ä¿åããé
ä¿¡çµäºåŸã«ãæä¹
çãªã¹ãã¬ãŒãžãšããŠã®MySQLãžãã€ã°ã¬ãŒãããŠããŸããRedisã«ä¿åãããæç¹ã§ã¯ããããã®åçš®ã€ãã³ãã¯é
ä¿¡çµéæéãåºæºãšããäžã€ã®ãœãŒãæžã¿ã»ããã«çŽããããããããã£ããå
¥å®€æã«çŽè¿ã®ã€ãã³ããæ°å件æç³»åã«è¡šç€ºãããªã©ã®çšéã§ãéå®ããŠããŸãããããã®ã€ãã³ãã¯MySQLãžãã€ã°ã¬ãŒããã段éã§æ£èŠåããã該åœããããŒãã«ãžãšä¿åãããŸãã Redisã¯ã©ã€ã¢ã³ã Javaã®Redisã¯ã©ã€ã¢ã³ãã©ã€ãã©ãªã¯æ§ã
ãªãã®ããããæ¬å®¶ããã¥ã¡ã³ãã§æšå¥šãããŠãããã®ã ãšJedisãlettuceãRedissonãªã©ããããŸãããã£ããã§ã¯ä»¥äžã®çç±ããlettuceãæ¡çšããŠããŸãã Redis ClusterããµããŒãããŠãã master/slaveãã§ã€ã«ãªãŒããŒãMOVED, ASKãªãã€ã¬ã¯ãã«å¯Ÿå¿ããnodeãhash slotæ
å ±ã®ãã£ãã·ã¥ãææ°ã«ä¿ã£ãŠããã éåæAPIãæäŸãããŠãã pub/subã§ã®subscribeçšã³ãã¯ã·ã§ã³ã§ããã§ã€ã«ãªãŒããŒã«å¯Ÿå¿ããŠãã 掻çºã«éçºãè¡ãããŠãã å
è¿°ã®éããAkka actorå
ã§ã¯ããããã³ã°ãªåŠçã極åé¿ããå¿
èŠããããããéåæAPIãæäŸãããŠããã®ã¯ãšãŠãéèŠã§ãããŸãChatRoomActorã§ã®pub/subå©çšã§ã¯ãæé·ã§é
ä¿¡éå§ããçµäºãŸã§ã®æéã«ããã£ãŠsubscribeãç¶ããå¿
èŠãããããããã®subscribeçšã³ãã¯ã·ã§ã³ã®æ»æŽ»ç£èŠãã§ããããšãéèŠã«ãªããŸããlettuceã§ã¯ClusterClientOptionsãé©åã«èšå®ããããšã«ãããnode downãæ€ç¥ãããã°subscribeçšã³ãã¯ã·ã§ã³ãé©å®åŒµãçŽããŠããããšããæ©èœããããŸãããŸããsubscribeã®éãæ¥ç¶ã¯ã©ã€ã¢ã³ããæãå°ãªãããŒãã«å¯ŸããŠsubscribeçšã®ã³ãã¯ã·ã§ã³ãçæããŠãããã®ã倧ããªå©ç¹ã§ãã ãŸãšã 以äžãLINE LIVEã®ãã£ããæ©èœãæ¯ããæ§æã«ã€ããŠçŽ¹ä»ããããŸããã WebSocketãçšããŠãµãŒãã»ã¯ã©ã€ã¢ã³ãéã®ãªã¢ã«ã¿ã€ã ãªåæ¹åã¡ãã»ãŒãžã³ã°ã«å¯Ÿå¿ããŠããããš ãµãŒãå
ã§ã¯akka toolkitãå©çšããããšã§é«éãªäžŠè¡åŠçãè¡ã£ãŠããããš Redis ClusterããäžæçãªããŒã¿ã®ä¿åçšéãšãpub/subã«ãããµãŒãéã®ã³ã¡ã³ãæ
å ±åæã§çšããŠããããš ãããã®3ç¹ãç解ããã ããã°å¹žãã§ãã æåŸã«ãªããŸãããåé ã§è¿°ã¹ãéãããã®æ©èœã¯100å°ãè¶ãããµãŒãã€ã³ã¹ã¿ã³ã¹äžã§çšŒåããŠããŸããããã§å€§éã®ã³ã¡ã³ããæããŠãããšãåœç¶ãªãããµãŒãããŒãã£ã©ã€ãã©ãªã®ãšããžã±ãŒã¹ãšãèšããissueã«è¡ãåœããããšããããŸããããããéã«ã¯ããã®éçºã³ãã¥ããã£ã§ãã£ããgithub issueãªã©ãéããŠéçºè
ãšã³ãã¥ãã±ãŒã·ã§ã³ãåããªããä¿®æ£ããããã¯ãŒã¯ã¢ã©ãŠã³ããæ¡çšããããšãå¿
èŠã«ãªããŸããããšãã°æè¿ã§ã¯ãRedis Clusterã«nodeãè¿œå ããéã«è€æ°ãµãŒãã§lettuceã®æåãäžå®å®ã«ãªããgithubã§issueå ±åãããŠå¯Ÿå¿ããŠããã£ãäŸãªã©ããããŸãã 詳ããã¯9/29ã®LINE Developers Day 2016ã«ãŠã話ãããŠããã ããŸãã ãªãLINEã§ã¯ã次ã®ååéã®ãšã³ãžãã¢ãåéããŠããŸããå€ãã®ãå¿åããåŸ
ã¡ããŠãããŸãã ãµãŒããµã€ããšã³ãžãã¢ãLINE GAMEãããã¡ããªãŒã¢ããªããLINE Payã
â§
LINE DEVELOPER DAY 2016 ã® LINE LIVEé ä¿¡ã決å®ããŸãã
LINE DEVELOPER DAY 2016 éå¬ã®ãç¥ããã§éå¬åç¥ããããŠããã ããŸããããåœæ¥ã¯LINEãæäŸããã©ã€ãé
ä¿¡ãã©ãããã©ãŒã ãLINE LIVEãã«ãŠãªã¢ã«ã¿ã€ã é
ä¿¡ãè¡ããŸãã ïŒã€ã®ããŒã«ããããã以äžã®ãã£ã³ãã«ã§é
ä¿¡ããããŸããããã©ããŒããèšå®ãããšé
ä¿¡éå§æã«éç¥ãå±ããŸãã®ã§ãæ¯éãç»é²ãã ããã HALL-A https://live.line.me/r/channels/31960 HALL-B https://live.line.me/r/channels/31959 â»äŒå Žã§ã¯åæéèš³ãçšæãããŠãããŸãããLINE LIVEã®é
ä¿¡ã§ã¯äŒå Žã§æµããé³å£°ã®ã¿ããéãããŸããããããããäºæ¿ãã ããã ãªããåã»ãã·ã§ã³ã¯ãæ¥æ¬èªãããã¯è±èªïŒã»ãã·ã§ã³çªå·ïŒã§è¡ããŸãã ã¿ã€ã ããŒãã«ã¯LINE DEVELOPER DAY 2016 å
¬åŒãµã€ããã芧ãã ããã
â§
â§
LINE Developer Day 2016 çµæå ±å
ããã°ãã¯ãLINE DEVELOPER DAYéå¶æ
åœã®Momokiã§ãã æ¬æ¥ãåœç€Ÿãéå¶ãããµãŒãã¹ã«ã€ããŠãæè¡é åã®åŽé¢ããæ§ã
ãªçµéšãåœå
å€ã§ã®æè¡çãªãã£ã¬ã³ãžãææ°ã®å±éçã玹ä»ããæè¡ã«ã³ãã¡ã¬ã³ã¹ãLINE DEVELOPER DAY 2016ããéå¬ããããŸããã å¿åè
å€æ°ã®ããæœéžãšãªããŸãããã瀟å
å€ã®ãšã³ãžãã¢ãäžå¿ã«1,000åãè¶
ããçããŸã«ãæ¥å Žããã ããçæ³ãšãªããŸãããããããšãããããŸããïŒ ãLINE DEVELOPER DAY 2016ãã§ã¯ãLINEã®chatbotæŠç¥ããã®äžç°ã§ãããLINE BOT AWARDSãéå¬ã®çºè¡šãLive CodingãLINEã®æå·åéä¿¡æ¹åŒãLetter Sealingãã®ä»çµã¿ããLINE LIVEããLINEã®ã°ã«ãŒãé話æ©èœãªã©ã®å€§ééä¿¡ã®åŠçæ§é ãLINEã®é害察å¿äºäŸãªã©ãLINEã®æè¡ã«ãŸã€ããå€å²ã«ãããããŒãã§ãåèš17ã»ãã·ã§ã³ãè¡ããŸããã æ©éãLINE LIVEã§é
ä¿¡ãããã¬ãŒã³åç»ã®ã¢ãŒã«ã€ããšæ圱è³æãå
¬éããŠãããŸãã®ã§ãæ¯éãã¡ãããã芧ãã ããã â»åå¹å
¥ãã®ãã¬ãŒã³åç»ã¯åŸæ¥å
¬éããŸãã HALL AïŒhttps://live.line.me/r/channels/31960 HALL BïŒhttps://live.line.me/r/channels/31959 ãA-1ãOpening & Introduction ãA-2ãNew World by the LINE Bot ãA-3ãDifficult Challenges That LINE has Overcome ãA-4ãLINE Login â LINE Platform ãA-5ãSecurity x LINE Platform ãA-6ãGroup App Platform ãA-7ãArchitecture Sustaining LINE LIVE ãA-8ãLINE Group Call ãA-9ãLINE Shop Powered by Armeria ãA-10ãWorking Environment and Culture for LINE Engineers ãB-1ãRinna and rinna ãB-2ãLINE Game Cloud â Our Personal EC2 ãB-3ãLINE Bot Live Coding ãB-4ãGravty: A Graph Database for LINE Timeline ãB-5ãStellite: Apply Chromium Open-Source to LINE Game ãB-6ãNew Stream Processing Platform with Apache Flink ãB-7ãA True Agile Team â (âŠ)
â§
ã³ãã³ãã©ã€ã³ãã LINE ã«ã¡ãã»ãŒãžãéãã LINE Notify
ã¯ããã« LINE Notifyã®éçºãããŠãã枡蟺ã§ããéçºè
åãã«LINE Notifyã䜿ã£ãŠã³ãã³ãã©ã€ã³ããã¡ãã»ãŒãžãéããšããæ¹æ³ã玹ä»ããããŸãã ãããŸã§ã·ã¹ãã çã«LINEã«ã¡ãã»ãŒãžãéãããã«ã¯Bot API TrialãŸãã¯Business Connectã䜿çšããå¿
èŠããããŸããããããã®æ©èœã¯Messaging APIãšããŠããæŽç·ŽãããŸããããMessaging APIã¯é«æ©èœãªäžæ¹ã§ãAPIåŒã³åºãã®ããã«ã¯å€å°é«åºŠãªå®è£
ãå¿
èŠã«ãªããŸãã LINE Notifyã§ã¯ã¡ãã»ãŒãžéä¿¡ã«æ©èœãçµãã極ããŠçãã¹ãããã§LINEã«ã¡ãã»ãŒãžãéããAPIãçšæããŠããŸãã curl ã䜿ã£ãŠã¡ãã»ãŒãžãéã£ãŠã¿ã LINE Notifyã§çºè¡ã§ãããããŒãœãã«ã¢ã¯ã»ã¹ããŒã¯ã³ãã䜿ããAPIã®ãšã³ããã€ã³ãã«HTTP POSTãªã¯ãšã¹ããéãã ãã§ã¡ãã»ãŒãžãéãããšãã§ããŸããHTTPãªã¯ãšã¹ããã§ããã°ã©ããªæ¹æ³ã§ã䜿ãããšãã§ããŸãããããã§ã¯ã³ãã³ãã©ã€ã³ã§äœ¿ããHTTPã¯ã©ã€ã¢ã³ãã§ããcurlã䜿ã£ãŠã¿ãããšã«ããŸãã ããŒãœãã«ã¢ã¯ã»ã¹ããŒã¯ã³ãçºè¡ãã LINE Notifyã®ãã€ããŒãž(LINE IDã§ã®ãã°ã€ã³ãå¿
èŠ)ã«ã¢ã¯ã»ã¹ãããšãããŒã¯ã³ãçºè¡ããããã¿ã³ããããŸãã ãããã¯ãªãã¯ãããšãããŒã¯ã³åãšããã®ããŒã¯ã³ã䜿ã£ãå Žåã®ã¡ãã»ãŒãžã®éç¥å
ãéžæããç»é¢ãçŸããŸãã ããŒã¯ã³åã¯ä»»æã®åãããããååãå
¥åããŠãããŸããéç¥å
ã«1:1ãéžæããå Žåã«ã¯ãLINE Notifyå
¬åŒã¢ã«ãŠã³ããšã®ããŒã¯ã«ã¡ãã»ãŒãžãéä¿¡ãããŸããããŒã¯ã«ãŒã ãéžæããå Žåã«ã¯ããã®ããŒã¯ã«ãŒã ã«LINE Notifyå
¬åŒã¢ã«ãŠã³ãããã¡ãã»ãŒãžãéä¿¡ãããŸãã éç¥å
ã¯ããŒã¯ã³ããšã«å€ããããšãã§ããŸããå¥ã
ã®ããŒã¯ã«ãŒã ã«ã¡ãã»ãŒãžãæçš¿ãããå Žåã«ã¯ããããã§ããŒã¯ã³ãçºè¡ã§ããŸãã ããã§çºè¡ããã¢ã¯ã»ã¹ããŒã¯ã³ã¯äžåºŠãã衚瀺ãããªãã®ã§ãã©ããã«ã¡ã¢ããŠãããŸãããšãã£ãŠããããããªããªã£ãŠããŸã£ãããåé€ããŠçºè¡ããªããã°ããã ãã§ãã éç¥ãéã£ãŠã¿ã ååŸããããŒãœãã«ã¢ã¯ã»ã¹ããŒã¯ã³ã§LINEã«ã¡ãã»ãŒãžãéã£ãŠã¿ãŸããcurlã³ãã³ãã以äžã®ããã«åŒã¶ããšã§ãã¡ãã»ãŒãžã®éä¿¡ãã§ããŸãã[access_token]ã®éšåãååŸããããŒãœãã«ã¢ã¯ã»ã¹ããŒã¯ã³ã«çœ®ãæããŠãã ããã curl -X POST -H 'Authorization: Bearer [access_token]' -F 'message=foobar' https:// notify-api.line.me/api/notify -X ã¯ãªã¯ãšã¹ãã¡ãœããã®æå® -H ã¯ãªã¯ãšã¹ããããã®æå® -F ã¯ãã©ãŒã ããŒã¿ã®éä¿¡ ãšãªã£ãŠããŸããURLã¯LINE Notifyã®éç¥çšãšã³ããã€ã³ãã§ãã 以äžã®ããã«ãšãŠãç°¡åã§ãã å¿çšäŸ curlã§ç°¡åã«éããããšã¯ãåããããã ããããšæããŸããããããå°ãå¿çšäŸã玹ä»ããŸãã äŸ1: Jenkinsã®ãã«ãçµæãéã Jenkinsã®ãã«ãçµæãLINEã«éç¥ããŠã¿ãäŸã玹ä»ããŸãã ãã£ããã§ãã®ã§ãJenkins2.0ããæ£åŒã«å°å
¥ãããJenkinsfileã䜿ã£ãŠã¿ãŸãã以äžã®ãããªspecã§äœã£ãŠã¿ãŸãããã 1.Jenkinsã®ãã«ãçµæãã以äžã®åœ¢åŒã§éããŸãã Build {branch}, result is {result}. {buildUrl} 2.ãŸããããããã«ãçµæã倱æã ã£ãå Žåã¯ã ãŒã³ãå°éŠ¬é¹¿ã«ããŠããç»åãéã£ãŠã¿ãŸã(å®éã«ãã®ãããªç»åãéãããšã¯ãããŸãããâŠä»åã®äŸã¯ããããŸã§ãžã§ãŒã¯ã§ã)ã ãããã·ã³ãã«ãªJenkinsfileã«ã¯ãªããŸããããã®ããã«æžãã°å®çŸããããšãã§ããŸã(ä»åã¯Java projectãæ³å®ããŠããã®ã§ãgradleã§ãã«ããšãã¹ãã®å®è¡ãããŠããŸã)ã #!groovy node { try { stage 'Checkout' checkout scm stage 'Build and test' sh './gradlew clean check' currentBuild.result = 'SUCCESS' } catch (err) { currentBuild.result = 'FAILURE' } stage 'Notify' notifyLINE('YOUR_LINE_NOTIFY_TOKEN', currentBuild.result) } def notifyLINE(token, result) { def isFailure = result == 'FAILURE' def url (âŠ)
â§
LINE Beacon [LINE DEVELOPER DAY 2016 Edition]ã®ä»æ§
ããã«ã¡ã¯ãLINE Beaconé¢é£ã®æ
åœãããŠããsotaroã§ãã LINE DEVELOPER DAY 2016 ã§ã¯ãã€ãã³ãéå®ãšã㊠LINE Beaconãäœæãæ¥å Žè
ã®çæ§ã«ãæž¡ãããŸãããä»åã¯ãã®LINE Beacon [LINE DEVELOPER DAY 2016 Edition]ããã³ä»å±åã«ã€ããŠå°ã説æããããŠããã ããŸãããªãããã¡ãã«èšèŒãããŠããå
容ã¯2016幎10æçŸåšã®ãã®ã§ãã ããŒã³ã³ã€ãã³ããåä¿¡ããæ¡ä»¶ ãŸãåæãšããŠãçŸåšDeveloper Trial Accountã®ã¿ããŒã³ã³ãåä¿¡å¯èœã§ããããªãŒãã©ã³ãããŒã·ãã¯ãã©ã³ããããã©ã³ã§ã¯ããŒã³ã³ãšã®é£æºã¯åºæ¥ãªãã®ã§ã泚æäžããã é»æºãå
¥ãããšLEDã30ç§çšç¹æ»
ããç¹æ»
ãåæ¢ãããšé»æ³¢ãçºä¿¡ãããŸãã ããŒã³ã³ããçºä¿¡ãããé»æ³¢ã®åºåé»åã¯0dBmã«èšå®ãããŠããŸããç®å®ãšããŠãé害ç©ã®ãªãç°å¢ã§10mã»ã©ã®è·é¢åä¿¡å¯èœãªåºå匷床ãšãªããŸãã äžèšã®æ¡ä»¶ãæºãããäžã§ãé»æ³¢ã®åä¿¡åå
ã«å
¥ã£ãã¿ã€ãã³ã°ã§ã€ãã³ããçºç«ãããŸãã äžåºŠåä¿¡åå€ã«åºãŠå
¥ãçŽããªãéãã¯ãã€ãã³ãã¯å床çºç«ãããŸããã ããŒã³ã³ãšé£æºããŠããã¢ã«ãŠã³ããåã ã¡è¿œå ããŠãã(ããŒã³ã³ãšã¢ã«ãŠã³ãã®é£æºã¯ãã¡ããã)ã LINEã¢ããªã®LINE Beaconã®å©çšãONã«ãªã£ãŠãã(ãã®ä» > èšå® > ãã©ã€ãã·ãŒç®¡ç > LINE Beaconãå©çš)ã 端æ«ã®BluetoothãONã«ãªã£ãŠããã é»æ± ã®èçšå¹Žæ° ç®å®ãšããŠãé»æºãå
¥ãã£ã±ãªãã®ç¶æ
ã§æ°ã¶æããïŒå¹Žã»ã©æã¡ãŸãã iOS10åé¡ äžéšã®iOS端æ«ãšiOS10ã®çµã¿åããã«ãããŠããŒã³ã³ãæ€ç¥ãã¥ãããšããäºè±¡ãçºçããŠããŸããäž»ã«iPhone5,5sã«ãããŠçºçãããšããåãåãããããã ããŠããŸãã 察çã«ã€ããŠã¯çŸåšèª¿æ»äžã§ããã端æ«ã®BluetoothãON/OFFããããšã§äžæçã«ããŒã³ã³ãæ€ç¥ãããããªãå ŽåããããŸãããè©Šããã ããã ãã®ä»ã®æ³šæç¹ ãLINE DEVELOPER DAY 2016ãã§é
åžããããŒã³ã³ç«¯æ«ãæ¥æ¬ä»¥å€ã®å°åã§ãå©çšã«ãªãéã¯ã該åœå°åã®é»æ³¢æ³ä»€ãéµå®ããŠäžããã
â§
GitHub Universeã«ç»å£ããŸãã
ããã«ã¡ã¯ãLINEã§iOSãšã³ãžãã¢ãæ
åœããŠããInami (@inamiy) ã§ãã GitHub Universe 2016ã€ãã³ãã®çŽ¹ä» å
æ¥ã2016幎9æ13æ¥ã15æ¥ã®3æ¥éããGitHub Universe 2016ããšããã€ãã³ãããã¢ã¡ãªã«ã»ãµã³ãã©ã³ã·ã¹ã³ã®Pier 70ã«ãŠéå¬ãããŸããã 海蟺ã®ã¬ã¬ãŒãžãæ¹ç¯ããäŒå Žã«ãç·å¢1500人ã®éçºè
ãããã¯ãªãŒããããžãã¹ãªãŒããŒããæ¥å ŽããGitHub瀟ã»å
±ååµæ¥è
ã§CEOã®Chris Wanstrathæ°ã«ããåºèª¿è¬æŒãã¯ãããäžçååœããæåŸ
ãããçŽ40åã®ã¹ããŒã«ãŒã«ããæ§ã
ãªãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã»äŒæ¥ã®åãçµã¿ã玹ä»ãããŸããã ç§ã¯ä»åãæ¥æ¬ããå¯äžã®ã¹ããŒã«ãŒãšããŠãããã«ãã£ã¹ã«ãã·ã§ã³ã«ç»å£ãããŠããã ããŸããã 以äžãæ°æã®åçã§ã€ãã³ãçŸå Žã®é°å²æ°ããäŒãããããŸãã Pier 70ã«ãããŠã§ã¢ããŠã¹(å庫)ã®äŒå Žãšå±äžããèŠäžããOctocatã§ãã äŒå Žå
ã®é°å²æ°ãåçã«åããŠã¿ãŸããïŒHerokuãTravisãCircle CIãIBMã®ããŒã¹ããããŸããïŒã 豪è¯ãªæé£ãšã©ã³ãã«ãç¡éã¿ããªã«ãžã¥ãŒã¹ãå®åãããŠããŸããããŸããç倧奜ããGitHub ShopãåºåºããŠããŸããã Chris Wanstrathæ°ã«ããåºèª¿è¬æŒã®æ§åã§ãã ãã®åºèª¿è¬æŒã®äžã§ãåæ°ã¯ãéå»æ倧ã®ã¢ããããŒãããšè¿°ã¹ã以äžã®6ã€ã®æ°æ©èœã«ã€ããŠçŽ¹ä»ããŸããã 1. Integeration: GraphQL APIã®æäŸãããã®ä»ã®æ©èœæ¡åŒµãµãŒãã¹ãžã®Early Access 2. Businesses: 2段éèªèšŒã®å¿
é åãSAMLã䜿ã£ãã¢ã«ãŠã³ã管çïŒæ¥å¹Žäºå®ïŒ 3. Workflow: ããã°ãæ¹åŒã«ããã¿ã¹ã¯ç®¡çãProjectsãã®å°å
¥ (åèãªã³ã¯) 4. Reviews: ãã¬ãã¥ãŒéå§ãããæ¿èªãããä¿®æ£èŠæããªã©ã®ãã¿ã³ãè¿œå ãããã³ãŒãã¬ãã¥ãŒããããŒãžãŸã§ã®äœæ¥ãèœçè¯ãçµ±åïŒåèãªã³ã¯ïŒ 5. Profile: ãŠãŒã¶ãŒã®éå»ã®æŽ»åãèŠæž¡ããã¿ã€ã ã©ã€ã³ãè¿œå 6. Forums: ãŠãŒã¶ãŒå士ã§ã³ãã¥ãã±ãŒã·ã§ã³ãåããæ²ç€ºæ¿ãæè²çšããã©ãããã©ãŒã çšãGitHubã³ãã¥ããã£çšïŒæ¥å¹Žäºå®ïŒãªã©ã ãããŸã§ãGitHub瀟ã§ã¯æ°æ©èœã®ãªãªãŒã¹ãå°åºãã«è¡ã£ãŠããå°è±¡ããã£ãã ãã«ãä»åã®çºè¡šã¯äºæ³ä»¥äžã®ãµãã©ã€ãºã§ããšãŠãè奮ããŸããã ç¹ã«ãProjectsããšãReviewsãã¯ããŠãŒã¶ãŒãåŸ
ã¡æãã æ©èœã§ã¯ãªãã§ããããã ä»åŸã®ãããžã§ã¯ãéå¶ãæ¥åã«ãããŠãå¹
åºã掻çšãæåŸ
ã§ãããã§ãã åŒç€Ÿã®ã€ã³ããŒãœãŒã¹ã®åãçµã¿ ç§ã¯ä»åããã€ã³ããŒãœãŒã¹ïŒäŒæ¥å
ã«ããããªãŒãã³ãœãŒã¹å¿åã®åãçµã¿ïŒããšããããŒãã§ãããã«ãã£ã¹ã«ãã·ã§ã³ã«ç»å£ãã貎éãªæ©äŒãããã ããŸãããGitHub瀟ã®Kakul Srivastavaæ°ãåžäŒã«ãJeff Jagodaæ° (IBM)ãJoan Watsonæ° (Hewlett-Packard)ãJeremy Kingæ° (Walmart)ãPanna Pavangadkaræ° (Bloomberg)ãšäžŠãã§ãåŒç€Ÿã®åãçµã¿ãã€ã³ããŒãœãŒã¹ã®èª²é¡ãªã©ã«ã€ããŠè©±ããŸããã Launch â InnerSource: Reaping the Benefits of Open Source, Behind Your FirewallïŒåç»ïŒ ãã£ã¹ã«ãã·ã§ã³ã®å
容ã«ã€ããŠãåçš®ã¡ãã£ã¢ã«åãäžããŠããã ããŸããã®ã§ãã芧ãã ããã [GitHub Universe 2016]LINEã®ãšã³ãžãã¢ãšGitHubå¹¹éšã«GitHubã®æ°æ©èœã«ã€ããŠèããŠã¿ã (1) LINEãšGitHubã掻çšããŠããLINEã®iPhoneã¢ããªéçºããŒã | ãã€ãããã¥ãŒã¹ ãŠã©ã«ããŒããLINEãæ¡çšâ泚ç®ãããâã€ã³ããŒãœãŒã¹éçºâã®åæ â ZDNet Japan ASCII.jpïŒGitHub Universe 2016ïŒããããããŒã®åãæ¹ãäžè¬ã«åºãã (1/2)ïœæŸæ倪éã®ã西海岞ããèŠãâitâãã¬ã³ãã GitHubã®åãæ¹é©åœã¯äœãã¹ãŽãã®ãïŒ | ã¯ãŒã¯ã¹ã¿ã€ã« | æ±æŽçµæžãªã³ã©ã€ã³ | çµæžãã¥ãŒã¹ã®æ°åºæº ãªããLINEã§ã¯ã2012幎ããGitHub Enterpriseã掻çšãããããžã§ã¯ã管çãè¡ã£ãŠããŸãã å°å
¥ã®çµç·¯ããéçºãããŒãªã©ã«ã€ããŠã¯ãäžèšã®ããã°èšäºãåãããŠãåç
§ãã ããã LINEã§ã¯Github Enterprise ãå°å
¥ããŠããŸã « LINE HR Blog LINE Serverã®éçºãšãªãªãŒã¹ããã»ã¹ « LINE Engineersâ Blog LINE (âŠ)
â§
â§
ã¢ãžã£ã€ã«éçºææ³ã掻çšããLINE TODAYãµãŒãã¹
ã¯ããã« ä»åã®èšäºã§ã¯ãã¢ãžã£ã€ã«éçºææ³ã䜿ã£ãŠLINE TODAYãµãŒãã¹ãéçºããçµç·¯ãã玹ä»ããŸããLINE TODAYã¯ã2016幎åãã«å°æ¹Ÿãã¿ã€ãã€ã³ããã·ã¢ããã£ã³ããŒãç±³åœã§ãªãªãŒã¹ããã¢ãã€ã«ãã¥ãŒã¹ãµãŒãã¹ã§ã2016幎7æ30æ¥çŸåš1æ¥3åäžããŒãžãã¥ãŒ(Page ViewïŒPV)ãèšé²ããŠããŸããã¡ãªã¿ã«ãæ¥æ¬ã§ã¯ç¬èªã®ãã¥ãŒã¹ãµãŒãã¹ãšããŠLINE NEWSãå±éããŠããŸãã LINE TODAYéçºãããžã§ã¯ãã¯ããŠãŒã¶ãŒã顧客ãéçºè
ãäŒç»è
ãè€æ°ã®åœã«ãŸãããå€åœç±ãããžã§ã¯ãã§ããå€æ°ã®éçºè
ãäŒç»è
ãQAãšã³ãžãã¢ãUITãšã³ãžãã¢ããã¶ã€ããŒãããžãã¹æ
åœè
ã§æ§æãããã¡ã³ããŒã¯å°æ¹Ÿãäžåœ(倧é£)ãéåœã®3ãµåœã®ãªãã£ã¹ã«åæ£ããŠããŸãããããããLINE TODAYéçºãããžã§ã¯ãããŒã ã¯ãæ°èšãããã°ããã®ããŒã ã§ãããéçºè
ã®ã»ãšãã©ãLINEã®éçºç°å¢ãšæè¡ã«æ
£ããŠããªãæ°ç±³ãšã³ãžãã¢ã§ããããã¯ããéçºããå
šäœçãªããã»ã¹ã«è©³ããã¡ã³ããŒãããŸããã§ããã ãŸãããã®ãµãŒãã¹ã¯å°æ¹Ÿãã¿ã€ãã€ã³ããã·ã¢ãªã©è€æ°ã®åœã§ãªãªãŒã¹ããäºå®ã ã£ããããååœã®æ§ã
ãªèŠæãèæ
®ããªããã°ãªããŸããã§ãããäŸãã°ãCP(Content Provider)ã«ãã£ãŠåžæããã³ã³ãã³ããã£ãŒãã¡ã«ããºã ãç°ãªãããšãæèããå¿
èŠããããŸãããå°æ¹Ÿã®CPã¯FTPã奜ã¿ãã¿ã€ãšã€ã³ããã·ã¢ã®CPã¯RSSã奜ãã§ããŸããã ãã®ãããžã§ã¯ãã¯ãšãŠãã¿ã€ããªã¹ã±ãžã¥ãŒã«ã§é²ããããŸãããLINE TODAYãµãŒãã¹ã¯ãFastTrackãRegularTrackã®2åã«åããŠãªãªãŒã¹ãããŸãããFastTrackã§ã¯ããžãã¹ã®åçæ§ãè©äŸ¡ããProof of Concept(æŠå¿µå®èšŒ)ãè¡ãããããèžãŸããŠç¶ç¶çã«ãµãŒãã¹ãéå¶ããããã«RegularTrackããªãªãŒã¹ããŸãããFastTrackã¯èšèšãéçºããã¹ãããªãªãŒã¹ããã£ãã®6é±éã§å®äºããªããã°ãããŸããã§ãããããã«ããããã3ãµæ以å
ã«RegularTrackããªãªãŒã¹ããããšãæ±ããããŸããã å¯äžã®ãœãªã¥ãŒã·ã§ã³ã¯ä¿æãªå¯Ÿå¿ãã€ãŸããã¢ãžã£ã€ã«ã ã¹ã¯ã©ã (Scrum)ã¯ãè€éãªãããžã§ã¯ãã«é©ãããœãªã¥ãŒã·ã§ã³ãšããŠç¥ãããŠããŸãããã®ããããã®ãããžã§ã¯ãã«ã¹ã¯ã©ã ãæ¡çšãã以äžã®4ååãå®è·µããŸããã ããŒã ã¹ããªãã(team spirit) èªå·±ç®¡çãšèªå·±åçº(self-management and self-development) ã³ãã¥ãã±ãŒã·ã§ã³æ¹æ³è« éçºæ¹æ³è« ã§ã¯ãLINE TODAYéçºãããžã§ã¯ãã§ã¢ãžã£ã€ã«éçºããã»ã¹ãšã¹ã¯ã©ã ãé©çšããæ¹æ³ãã玹ä»ããŸã(ç解ãå©ããããã«ãã¹ã¯ã©ã çšèªã¯äžç·ä»ãã§è¡šç€ºããŸãããäŸ: daily stand-up meeting)ã ããŒã ã¹ããªãã(Team Spirit) çã®ãã¢ãžã£ã€ã«ããªããŒã ã«ãªãã«ã¯ã匷ãããŒã ã¹ããªãããå¿
èŠã§ããéçºãããžã§ã¯ãã®äž»èŠãªæåèŠå ã¯ãã¹ã¯ã©ã ãã©ã¯ãã£ã¹ãå®è¡ããããã§åžžã«ããŒã ã¹ããªãããæã¡ç¶ããããšã§ãã ä¿¡é ŒãšçŽæ(Trust and Commitment) ã¹ã¯ã©ã ãã¹ã¿ãŒã¯ãéçºè
å士ãéçºè
ãšäŒç»è
ãäŒç»è
ãšããžãã¹æ
åœè
éã§ä¿¡é Œãæ§ç¯ã§ããããã«æåã®åªå泚ããªããã°ãªããŸããããã®ãããéçºè
ã¯ã¹ã±ãžã¥ãŒã«ã®ç®åºãšå®è¡èšç»ã®çå®ã«ç©æ¥µçã«åå ããŸããããããžã¡ã³ãããŒã ãäžæ¹çã«ææ決å®ãè¡ãããšã¯ãããŸããã§ãããéçºè
ã¯ãèªåã§çŽæããã¹ã±ãžã¥ãŒã«ãå®ãããã«æåãå°œãããŸãããéçºè
ãçŽæããæéã«åãããŠäœæ¥ãå®äºããããšã§ãäŒç»è
ã¯éçºè
ãããããŠäž»èŠæ
åœè
ã¯äŒç»è
ãä¿¡é Œãããšããé¢ä¿ãæ§ç¯ãããŸããã æ¹åæ§ã®æ瀺ïŒã€ãããŒã·ã§ã³ãšã¯ãªãšã€ãã£ã éçºè
ãã¯ãªãšã€ãã£ããªã¢ã€ãã¢ãåºããããã«ã€ãããŒã·ã§ã³ã奚å±ããPros/Consåæã䜿ã£ãŠçã§ã¢ã€ãã¢ãæ€èšããŸããããã®ããã»ã¹ã¯ãplanning meetingã§å®è¡èšç»ãè°è«ããã¿ã¹ã¯ãåå²ãããšãã«è¡ãããŸãããäŸãã°ãããŒã¿ããŒã¹ã®ãã¬ãŒã ã¯ãŒã¯ãéžæãããšããããŒã¿ã®ã¹ããŒãã決å®ãããšãã«ãéçºè
å
šå¡ãPros/Consåæã«åå ããæèŠãåºãåããŸããã WhyãWhatãHowãWhen ãŸããäŒç»è
ã¯ãplanning meetingãbacklog groomingã§ãWhat To Do(ããã¹ãããš)ããšãWhy To Do(ããã¹ãçç±)ããéçºè
ã«èª¬æããŸãããããã§å€§äºãªã®ã¯ãéçºè
ãuser storyã®éèŠæ§ãç解ããããšã§ãã次ã«ãéçºè
ã¯ãplanning meetingã§ãHow To Do(ã©ãããã¹ãã)ããšãWhen To Do(ãã€ãŸã§ããã¹ãã)ããäŒç»è
ã«äŒããŸãããéçºè
ã¯ãã®user storyã®å®è£
ã«ã©ããããã®æéãå¿
èŠãã説æã(complexity estimation)ãäŒç»è
ã¯ã³ã¹ãããã©ãŒãã³ã¹ãåæããŠåªå
é äœã調æŽããŸãããæåŸã«ãäŒç»è
ãšéçºè
ãšãäºãã«åæããåªå
é äœã«åºã¥ããéçºè
ã¯ãã®ã¹ããªã³ãå
ã§ã©ã®user storyãå®äºããããäŒããå®è£
æ¹æ³ã決ããŸãã(task breakdownïŒã¿ã¹ã¯åå²)ã èªå·±ç®¡çãšèªå·±åçº(self-management and self-development) LINE TODAYããŒã ã«ã¯ãã°ãããããŒã ã¹ããªããããã£ããããããŒã ãªãŒããŒã¯æ¯èŒç容æã«èªå·±ç®¡çãšèªå·±åçºãã§ããã¹ã¯ã©ã ããŒã ãäœãäžããããšãã§ããŸããã Planning Meeting Planning meetingã¯ãéåžžplanning meeting 1ãšplanning meeting 2ã®2段éã«åãããŸããPlanning meeting 1ã®äž»ãªæŽ»åã¯ãäŒç»è
ãProduct backlogã«ããuser storyãšepicãéçºè
ã«èª¬æããããšã§ãããŸããPlanning meeting 2ã®äž»ãªæŽ»åã¯ãéçºè
ãuser storyãéžæããŠã¿ã¹ã¯ãåå²ããããšã§ãã LINE TODAYã¹ã¯ã©ã ããŒã ã¯ããã®1段éãš2段éãæ確ã«åºåããŠããŸããã§ããããã®ä»£ãããããŒã³ã³ã»ãããã€ãŸããäŒç»è
åŽã§æ§æ³äžã®user storyãéçºè
ãæ©æã«ææ¡ããç解ã§ããããã«åªããŸããããŸããéçºè
ããã®å Žã§åããŠèããuser storyããã®ã¹ããªã³ãã§ããã«å®äºããããã«æ±ããããšã¯ãããŸããã§ãããå¿
èŠã§ããã°ãbacklog groomingãããŒãã£ã³ã°ãéå¬ããäŒç»è
ã倧ãŸããªuser storyãepicã詳现ã«èª¬æããæéãèšå®ããŸããããªããäŒç»è
ã¯daily stand-up meetingã«ãããŠã30åãè¶
ããªãç¯å²å
ã§çŽ°ããuser storyã説æããŸããã User storyãå®çŸããããã®æŽ»åã«ã¯ãKing and Servantãã¢ãã«ã掻çšããŸãããäžäººã®éçºè
ããã®ã¹ããªã³ãã§kingã®åœ¹å²ãæ
åœããŠuser storyãéžæããon-time-deliveryãå質ãblockerã®é€å»ãªã©ããã¹ãŠè²¬ä»»ãåããŸãããä»ã®éçºè
ã¯servantãšããŠkingããµããŒãããŠuser storyãå®äºããŸããã Daily Stand-up Meeting Daily stand-up meetingã¯ãçŽ15åãã30åãããŠåèªã®é²æç¶æ³ãå
±æããæéã§ãã ã¹ã¯ã©ã ãã¹ã¿ãŒã¯ãdaily stand-up meetingã§éåžžã«éèŠãªåœ¹å²ãæ
ã£ãŠããŸããã¡ã³ããŒã®é²æç¶æ³ãå
±æããã ãã§ãªããããŒã ã®éå¶ã¢ãã«ãçå®ããé¢ä¿ãæ§ç¯ããªããã°ãªããŸããããã®ãããªåœ¹å²ã¯ãæ°èŠã®ã¹ã¯ã©ã ããŒã ã«ãšã£ãŠç¹ã«éèŠã§ããæ°ããããŒã ã¯ååããæ¹æ³ãèªã暡玢ããæçãããŠããå¿
èŠããããŸãããªãŒããŒã¯ããããããŠã³ã§åœä»€ãäžãåžä»€å®ã§ã¯ãªããææ¡ãšã¢ããã€ã¹ãããŠã¡ã³ããŒãèªåã§éå¶ã¢ãã«ã確ç«ã§ããããã«ãµããŒãããã®ã圹å²ã§ããçŽïŒãµæã»ã©çµéããããLINE TODAYã¹ã¯ã©ã ããŒã ã¯ãããŒã ã¯ãŒã¯ãçºæ®ããŠéçºã«åãçµãèªäž»çãªçµç¹ãžãšæé·ããŸããã Live Demo äŒç»è
ãšäž»ãªæ
åœè
ã«ãããŸã§ã®äœæ¥ã®ææã説æããã®ã¯éèŠãªããšã§ãããã®ãããã¹ããªã³ããçµäºãã床ã«live demoãè¡ããŸãããéåžžãlive demoã§ã¯ãŠãŒã¶ãŒã®èŠ³ç¹ããuser storyã説æããŸããããããç§ãã¡éçºè
ã¯ãlive demoã§APIãŸãã¯ãã¹ãèªååãšãã£ããšã³ãžãã¢ãªã³ã°ã¿ã¹ã¯ã«é¢ããuser storyã説æããŸãããUser (âŠ)
â§
LINE Ad SDKãå©çšãããã¹ãèªåå
ãã®èšäºã§ã¯ãLINEãã©ãããã©ãŒã ã§æäŸããŠããåºåã¯ã©ã€ã¢ã³ãã¢ãžã¥ãŒã«ããã¹ãããæ¹æ³ãã玹ä»ããŸããLINEã®åºåã¯ã©ã€ã¢ã³ãã¢ãžã¥ãŒã«ã¯ãã¢ãã€ã«ãšWebã§äœ¿çšã§ããŸãããããã§ã¯ã¢ãã€ã«ã¯ã©ã€ã¢ã³ãã®ãã¹ãæ¹æ³ã ãã説æããããšæããŸãã LINE Ads Platformã®æŠèŠ LINE Ads Platformã¯ãäžå³ã®ããã«ã·ã³ãã«ãªæ§é ã«ãªã£ãŠããŸãããµãŒããšã¯ã©ã€ã¢ã³ãéã®éä¿¡ã«ã¯å€æ§ãªãããã³ã«ã䜿çšã§ããŸãããä»åã®ãã¹ãã¯HTTPãããã³ã«ã察象ã«ããŠããŸãã ãã¹ãç°å¢ã®æŠèŠ LINE Ads Platformã¯ãµãŒã-ã¯ã©ã€ã¢ã³ãæ§é ã®ã·ã¹ãã ã§ããããã®ãããªç°å¢ã§ã¯ã©ã€ã¢ã³ãã®å€æ§ãªåäœããã¹ãããå Žåã¯ãé害ã«ãªãèŠçŽ ãããå¯èœæ§ããããŸãããã¹ããè¡ãäž»äœ(人éãŸãã¯èªååãããã·ã¹ãã )ã¯ãåãã¹ããå®æœãã床ã«ç¹å®ã®åäœããµãŒãã«æåŸ
ããŸãã ããããæ¯åãµãŒããä¿®æ£ããŠæåŸ
éãã®åäœãèªå°ããããšã¯å¹ççã§ã¯ãããŸãããç¹ã«ããµãŒãã®å€±æç¶æ
ããã¹ãããããã®ç°å¢ãæ§æããã®ã¯ç°¡åãªããšã§ã¯ãããŸããã ãã®ãããªå°é£ã解決ãããã¹ãããã容æã«ããããã«ãå®éã®ãµãŒãã®åäœãæš¡å£ããããŒã«ã䜿çšããŸãããHTTPãããŒã¹ã«ããå€æ§ãªã¢ãã¯ãµãŒã(mock server)ããŒã«ããããŸãããLINEã®åºåã¯ã©ã€ã¢ã³ãã¢ãžã¥ãŒã«ã®ãã¹ãã«ã¯WireMockãšããããŒã«ã䜿çšããŸãããäžå³ã¯ãWireMockãçšãããã¹ãç°å¢ããã€ã¢ã°ã©ã ã§è¡šãããã®ã§ãã äžå³ã«ããåèŠçŽ ã®åœ¹å²ã¯ä»¥äžã®ãšããã§ãã Mobile Device : ãã¹ã察象ã®ã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ãããã®ã¢ããªã±ãŒã·ã§ã³ããã¹ãããããã®ã³ãŒããåäœããå®éã®ã¹ããŒããã©ã³ããšãã¥ã¬ãŒã¿ãŸãã¯ã·ãã¥ã¬ãŒã¿ã Client App : LINEåºåã¯ã©ã€ã¢ã³ãã¢ãžã¥ãŒã«ã䜿ãããã¢ããªã±ãŒã·ã§ã³ããã¹ãã³ãŒãã¯ãã®ã¢ããªã±ãŒã·ã§ã³ã®UIãæäœããŠåºåã¯ã©ã€ã¢ã³ãã¢ãžã¥ãŒã«SDKãåäœãããããšã§ãå€æ§ãªã·ããªãªã®ãã¹ããå®æœã§ããã SDK : LINEåºåã¯ã©ã€ã¢ã³ãã¢ãžã¥ãŒã«ã Testing App : ãã¹ãã³ãŒããå«ãã§ãããã€ããªã Testing Helper: ãã¹ãã³ãŒãã§äœ¿çšããã¢ãžã¥ãŒã«ããã¹ãã§æåŸ
ãããåäœããµãŒãã«èšå®ããåãªã¯ãšã¹ãã«å¯Ÿããæå¹æ§ãæ€èšŒããããã«æ
å ±ããµãŒãã«äŸé Œããæ©èœãæäŸããã Server PC : ã¢ãã¯ãµãŒããåäœããŠããPCã Server App : ã¯ã©ã€ã¢ã³ãã®ãã¹ãã«å¿
èŠãªãµãŒãã®åäœãå®è£
ãããµãŒãã¢ããªã±ãŒã·ã§ã³ã§ãJavaã§äœæãããŠãããåºæ¬çã«ã¯WireMockã®HTTP Mockæ©èœã䜿çšããèªååããããã¹ããå®æœããããã«å¿
èŠãªäžéšã®æ©èœãè¿œå ããããšãããã WireMock : HTTPããŒã¹ã®ãµãŒãAPIãç°¡åã«å®çŸ©ã䜿çšã§ããããã«ãµããŒããããªãŒãã³ãœãŒã¹ããŒã«ã Mappings : ç¹å®ã®ãªã¯ãšã¹ãã«å¯Ÿããã¬ã¹ãã³ã¹ãå®çŸ©ããŠãããã¡ã€ã«ãWireMockã§äœ¿çšããJSON圢åŒã§äœæãããã Response files : Mappingsã«å®çŸ©ãããäžéšã®ã¬ã¹ãã³ã¹ãå€éšãã¡ã€ã«ãšããŠæäŸãããšãã«äœ¿çšãããWireMockã§äœ¿çšããããã¹ããã¡ã€ã«ã§äœæããããLINEåºåã¯ã©ã€ã¢ã³ãã¢ãžã¥ãŒã«ã§ã¯JSON圢åŒã§äœæããããã¡ã€ã«ã®ã¿äœ¿çšããã WireMockã®çŽ¹ä» WireMockã®å
¬åŒWebãµã€ãã§ã¯ãWireMockã¯ãHTTPããŒã¹ã®APIã®ããã®ã·ãã¥ã¬ãŒã¿ã§ããããµãŒãã¹ä»®æ³åããŒã«ãŸãã¯ã¢ãã¯ãµãŒããšããŠèæ
®ãã䟡å€ããããšçŽ¹ä»ããŠããŸãã WireMockãæäŸããæ©èœã¯ä»¥äžã®ãšããã§ãã Stubbing : äºåã«å®çŸ©ãããããã³ã°æ
å ±ãåºã«ãªã¯ãšã¹ãã«å¯ŸããHTTPã¬ã¹ãã³ã¹ãå®çŸ©ããé©åãªã¬ã¹ãã³ã¹ãè¿ãæ©èœãæäŸããã Verifying : WireMockã¯åä¿¡ãããã¹ãŠã®ãªã¯ãšã¹ãæ
å ±ãèšæ¶ããç¹å®ã®ãªã¯ãšã¹ãã®åä¿¡æç¡ããã³è©³çŽ°æ
å ±ã確èªã§ããæ©èœãæäŸããã Request Matching : URLãHTTPã¡ãœãããHeadersãªã©å€æ§ãªå±æ§æ
å ±ãå©çšããŠãªã¯ãšã¹ããèå¥ããæ©èœãæäŸããã Proxying : ç¹å®ã®ãªã¯ãšã¹ããå¥ã®ãã¹ãã«è»¢éã§ãããããã·æ©èœãæäŸããã Record and Playback : 転éããããªã¯ãšã¹ããšã¬ã¹ãã³ã¹ãèšé²ãããã¡ã€ã«ã§ä¿åããæ©èœãæäŸããã Simulating Faults : ãšã©ãŒã³ãŒããå«ãHTTPã¬ã¹ãã³ã¹ãŸãã¯ééã£ã圢åŒã®ã¬ã¹ãã³ã¹ãéä¿¡ããããã¬ã¹ãã³ã¹ãé
延ããããããæ©èœãæäŸããã Stateful Behaviour : ç¶æ
ãå®çŸ©ããç¶æ
ã«ãã£ãŠç°ãªãã¬ã¹ãã³ã¹ãå®çŸ©ã§ããæ©èœãæäŸããã HTTPS : WireMockã¯ãå¿
èŠã«å¿ããHTTPSã§ããªã¯ãšã¹ããéä¿¡ã§ããæ©èœãæäŸããã WireMockã®äœ¿ãæ¹ WireMockæ©èœã䜿çšããã¢ããªã±ãŒã·ã§ã³ãäœæããããã«ã¯ãWireMockã«å¯ŸããäŸåæ§ãè¿œå ããå¿
èŠããããŸãã Mavenãã«ãã䜿çšãããããžã§ã¯ãã§ã¯ã以äžã®ãšããè¿œå ããŸãã Maven <dependency> <groupId>com.github.tomakehurst</groupId> <artifactId>wiremock</artifactId> <version>x.x.x</version> </dependency> Gradleãã«ãã䜿çšãããããžã§ã¯ãã§ã¯ã以äžã®ãšããè¿œå ããŸãã Gradle testCompile "com.github.tomakehurst:wiremock:x.x.x" ã³ãŒãäœæäžã«WireMockã®APIã䜿çšããããã«ã以äžã®æ§æãimportããŸãã import static com.github.tomakehurst.wiremock.client.WireMock.*; å¥éã®ã¢ããªã±ãŒã·ã§ã³ãäœæãããJavaã³ãã³ãã䜿ã£ãŠWireMockãå®è¡ã§ããŸãã ãªããžããªããåžæããããŒãžã§ã³ã®jarãã¡ã€ã«ãããŠã³ããŒããã以äžã®ã³ãã³ããå®è¡ããŸããã³ãã³ãã«å¯Ÿããä»å ãªãã·ã§ã³ã«ã€ããŠã¯ããã«ããåèã«ããŠãã ããã $ java -jar wiremock-standalone-x.x.x.jar User Interface Testing (âŠ)
â§
LINE Notifyã«Stickeréä¿¡æ©èœãšç»åã¢ããããŒãæ©èœãè¿œå ãããŸãã
ããã«ã¡ã¯ãLINE Notifyã®éçºãããŠããé·è°·éšã§ãã å
æ¥ã®blogã§ãã³ãã³ãã©ã€ã³ããLINE Notifyãå©çšããŠLINEã«ã¡ãã»ãŒãžãéä¿¡ããæ¹æ³ã«ã€ããŠã玹ä»ããŸããããã®åºŠãLINE Notifyã®APIã«ç»åã¢ããããŒãæ©èœãšstickeréä¿¡æ©èœãè¿œå ãããŸããã®ã§ã玹ä»ããŸãã Stickeréä¿¡æ©èœ å
æ¥ã®blogã§ãJenkinsã®ãã«ãçµæãLINE Notifyã§éç¥ããäŸã玹ä»ããŸããã ãã®ãšãã«ã倱ææã«ã ãŒã³ãå°éŠ¬é¹¿ã«ããŠããç»åãéä¿¡ããããã§ãããããã°ãæžããŠãããšãã«æã
ã¯æ°ã¥ããŠããŸã£ãã®ã§ãã ãâŠStickerãéããããã«ããã°è¯ãã®ã§ã¯ïŒãããšã StickerãéãããšãLINEãããããã£ãŠè¯ãããã§ãããšããããã§ãStickeréä¿¡æ©èœãè¿œå ããŸããã ã³ãã³ãã©ã€ã³ããStickerãéä¿¡ãã curlã³ãã³ããå©çšããŠstickerãéä¿¡ããŠã¿ãŸãã $ curl -X POST https://notify-api.line.me/api/notify -H 'Authorization: Bearer YOUR_PERSONAL_ACCESS_TOKEN' -F 'message=test' -F 'stickerPackageId=1' -F 'stickerId=113' ãšãã£ãå
·åã«ãStickerãéä¿¡ã§ããããã«ãªããŸããã â»éä¿¡ã§ããStickerã¯ãdocumentã«ãèšèŒããŠãããŸããMessaging APIãšåããã®ã«ãªã£ãŠããŸãã ç»åã¢ããããŒãæ©èœ ãããŸã§ã¯ãLINE Notifyã§ç»åãéä¿¡ããçºã«ã¯ç»åãURLã§æå®ããå¿
èŠããã£ãããããªãããã®æ¹æ³ã§ç»åãpublicãµãŒããŒã«çœ®ãå¿
èŠããããå°ã
é¢åãããããããŸããã LINE Notifyã¯ãŠãŒã¶ãŒã®ã¿ãªãããæ軜ã«äœ¿ããããšã第äžã«èããŠããŸãã ãªã®ã§ãç»åã¢ããããŒãæ©èœãè¿œå ããããšã«ãã£ãŠãŠãŒã¶ãŒã®ã¿ãªãããç°¡åã«ç»åãéä¿¡ã§ããããã«ããŸããã Privateãªãããã¯ãŒã¯ã«ãããµãŒããŒãããæ軜ã«ç»åãéä¿¡ããäºãå¯èœã«ãªããŸãïŒ å¯Ÿå¿ããŠããç»å圢åŒãã¢ããããŒãå¯èœãªåæ°çãšãã£ã詳ããä»æ§ã¯ãdocumentãã芧ãã ããã ã³ãã³ãã©ã€ã³ããç»åãã¢ããããŒããã curlã³ãã³ããå©çšããŠç»åãéä¿¡ããŠã¿ãŸããç»åã¯multipart/form-dataã§éä¿¡ããŸãã $ curl -X POST https://notify-api.line.me/api/notify -H 'Authorization: Bearer YOUR_PERSONAL_ACCESS_TOKEN' \ -F 'message=test' \ -F 'imageFile=@/PATH/TO/IMAGE/cony.jpg' ãšãã£ãå
·åã«ãç»åãã¢ããããŒãããŠéä¿¡ããããšãã§ããããã«ãªããŸããã ãã£ããã§ãã®ã§ãä»ã«ãç»åã¢ããããŒãæ©èœã«é¢ããŠããå°ãã ãå®çšç(?)ãªäŸã玹ä»ããããšæããŸãã Raspberry Piãå©çšããŠãåäœæ€ç¥ç£èŠã«ã¡ã©botãäœã èªå®
ã®ãããã¯ãŒã¯å
ã«èšçœ®ããRaspberry PiãããMotionãšããOSSãå©çšããŠæ軜ã«åäœæ€ç¥ç£èŠã«ã¡ã©botãäœãäŸãã玹ä»ããŸãã çšæãããã® Hardware Raspberry Pi 3 Raspberry Pi camera module v2 OS RASPBIAN Jessie Lite 2016-09-23 æ軜ã«æã«å
¥ãå°åãµãŒããŒãšããŠãRaspberry Piãšå
¬åŒã®ã«ã¡ã©ã¢ãžã¥ãŒã«ãå©çšããŸããOSã¯10/25çŸåšã§ææ°ã®Raspbianãå©çšããŠããŸãã èšå® ãããã¯ãŒã¯èšå®çãæšæºçãªèšå®ã«ã€ããŠã¯ããããã®ç°å¢ã«åãããŠè¡ã£ãŠãã ãããMotionã§ã«ã¡ã©ã¢ãžã¥ãŒã«ãå©çšããããã«ãã«ã¡ã©ã®æå¹åãškernel moduleã®èªã¿èŸŒã¿ãè¡ããŸãã # ã«ã¡ã©ãå©çšã§ããããã«ã«ã¡ã©ã¢ãžã¥ãŒã«ãæå¹å $ sudo raspi-config # V4l2çµç±ã§ã«ã¡ã©ã¢ãžã¥ãŒã«ãæ±ããããã«kernel moduleèªã¿èŸŒã¿ $ sudo modprobe bcm2835-v4l2 $ echo "bcm2835-v4l2" | sudo tee -a /etc/modules Motionæ¬äœã¯ãapt-getã§installããŸãã $ sudo apt-get install motion # daemonãšããŠèµ·åãããšãã«æžã蟌ããããã«ownerãä¿®æ£ (âŠ)
â§
LINE Advent Calendar 2016ã®ãç¥ãã
ããã«ã¡ã¯ãLINEã§æè¡é¢é£ã®PRãæ
åœããŠããäžæšã§ãããšã³ãžãã¢ã®æŽ»åããµããŒãããä»çµã¿ããã€ãã³ãã®äŒç»ãªã©ãæ
åœããŠããŸãã ããŠãã¿ã€ãã«ã®éããLINE Engineersâ Blogã«ãŠAdvent Calendarãå®æœããããšã«ãªããŸããã®ã§ãç¥ããããŸããAdvent Calendarã®å®æœã¯ãæ¬ããã°éèšä»¥æ¥ãåããŠãšãªããŸãã æ¬ããã°ã§ã¯éåžžãLINEã®ãµãŒãã¹ã«é¢ããæè¡èšäºãé¢é£éšéã®ãšã³ãžãã¢ãå·çããŠããŸãããAdvent Calendarã¯äžçš®ã®ããç¥ãããšããããšããããä»åããŒãã«ã¯ç¹ã«å¶çŽãèšãããèªèº«ã®é¢å¿ãé«ãæè¡é åã«ã€ããŠæãååæžããŠãã ããããšããèŠä»¶ã§å·çè
ãåéããŸãããçµæã16åã®ãšã³ãžãã¢ãæãæããŠãããŸããã å¹³æ¥æ ã®ã¿ã®å
¬éãšãªããŸããïŒæçµå
¬éæ¥ïŒ12/22ïŒãå幎床ã®éå¬ãšããããšã§ã容赊ããã ããã°å¹žãã§ãããªããæ¬ããã°ã§ã¯åºæ¬çã«ã¯èšäºãæ¥æ¬èªã»éåœèªã»è±èªã§å
¬éããŠãããŸãããAdvent Calendarã®èšäºã¯æ¥æ¬èªçã®ã¿ã®å
¬éãšãªããŸãããšããäºæ¿ãã ããã èªè
ã®æ¹ãžã®ãã¬ãŒã³ãã«ã€ã㊠Advent Calendarã¯ã¯ãªã¹ãã¹ã·ãŒãºã³ã®ã楜ãã¿ã€ãã³ãã§ããããŸãã®ã§ãæ¬ããã°ãã芧é ããŠããçæ§ã«ãããããããªãã¬ãŒã³ãããçšæããŸããã 12æäžã«LINE Advent Calendarã®èšäºãTweetïŒããã·ã¥ã¿ã°#line_advãã€ããŠãã ããïŒé ããæ¹ããæœéžã§1åæ§ã«ãLINEã®ãã£ã©ã¯ã¿ãŒããã©ãŠã³ã®åéããéãããããŸãïŒâ»ïŒãä»å¹Žã®å¬ã¯ã©ããŒãã£çŸè±¡ã§å³ããå¯ãã«ãªããšäºæ³ãããŠããŸããããã®éãã掻çšé ããäœãæž©ããããšã§ä¹ãåã£ãŠé ããã°ãšæããŸãã ïŒâ»ïŒå²ãç©ã«ã€ãçºéã®é¢ä¿äžãåœå
ã«ãäœãã®æ¹ã®ã¿ã察象ãšãããŠé ããŸãããŸãåœéžããæ¹ãžã®ãé£çµ¡ã¯ã察象ã®Twitterã¢ã«ãŠã³ãã«@LINE_DEVãããã€ã¬ã¯ãã¡ãã»ãŒãžã«ãŠè¡ããŸãïŒ2017/1é äºå®ïŒãããããããèšå®ãã®ãã»ãã¥ãªãã£ãšãã©ã€ãã·ãŒãã®ããã¹ãŠã®ãŠãŒã¶ãŒãããã€ã¬ã¯ãã¡ãã»ãŒãžãåä¿¡ãããã«ãã§ãã¯ãå
¥ã£ãŠããããšãã確èªãã ããã å·çã¹ã±ãžã¥ãŒã« æ¥ä» èè
ã¿ã€ãã« 12/01(æš) äžæš LINE Advent Calendar 2016 ã®ãç¥ãã 12/02(é) munetoshi git 㧠reviewer ãæ¢ãã¹ã¯ãªãããäœããŸãã 12/05(æ) @dxhuy ãšã³ãžãã¢ã®å¹çãåäžããããã« 12/06(ç«) Masakuni toLowerCase ã®èœãšãç©Žãš NFKC_Casefold ã®è©± 12/07(æ°Ž) Shoji Androidã§æ¥ä»è¡šç€ºããæ軜ã«åœéåãã 12/08(æš) å·ç° æ°å㧠LINE Shop ããŒã ã«å
¥ã£ãŠ Elasticserach ãããã£ã話 12/09(é) @inamiy Swiftã§Elmãäœã 12/12(æ) Neil Comprehensive security for Enterprise Hadoop(ä»®) 12/13(ç«) è¶ HBase Cross Row, Cross Tableãã©ã³ã¶ã¯ã·ã§ã³åŠçæ©èœãå®è£
ããŠã¿ãŸããïŒä»®ïŒ 12/14(æ°Ž) ããŸãã¡ CMakeã䜿ã£ãã¯ãã¹ãã©ãããã©ãŒã éçºç°å¢ 12/15(æš) Kagaya Project Creation Tool: Lazybones 12/16(é) tkengo ãªã¢ã«ã¿ã€ã ç»é¢šå€æãšãã®æªæ¥ 12/19(æ) @Yappo YAPC::Hokkaido 2016 ãš Fukuoka Perl Workshop #27 ã®ç»å£å ±å 12/20(ç«) ä¹
ä¿ Sparkãšæ©æ¢°åŠç¿ïŒä»®ïŒ 12/21(æ°Ž) @overlast mecab-ipadic-NEologd ã䜿ã£ãŠææ°ã®ãã¥ãŒã¹èšäºãã«ããŽãªåé¡ããŠã¿ã (ä»®) 12/22(æš) æç² Unity Gameã®åæïŒä»®ïŒ
â§
â§
git 㧠reviewer ãæ¢ãã¹ã¯ãªãããäœããŸãã
ããã«ã¡ã¯ãLINE ã® Android Client ãéçºããŠãã munetoshi ã§ãã ãã®èšäºã¯ LINE Advent Calendar2016 ã® 2 æ¥ç®ã®èšäºã§ãã ã¬ãã¥ã¢ãŒãæ¢ãã¹ã¯ãªãããäœããŸãã çãããå
æ°ã«ã³ãŒãã¬ãã¥ãŒãããŠããŸããïŒã¬ãã¥ãŒã¯ãã£ããè¡ããããã®ã§ãããé©ããã¬ãã¥ã¢ãŒãèŠã€ããã®ã£ãŠé¢åã§ãããã ç¹ã«ããŒã ã®äººæ°ãå€ãå Žåãç§ã¿ãããªåŒããããç³»ãšã³ãžãã¢ã«ã¯ã誰ãäœãæ
åœããŠããã®ããå®å
šã«ææ¡ããã®ã¯é£ããã§ãããã®å²ã«ãç§ã¯åºãæµ
ãã³ãŒãã«è§Šããããšãå€ãã®ã§ãâããã£ãŠèª°ã«ã¬ãã¥ãŒããŠãããã°ããã®ããªãŒâ ãšéæ¹ã«æ®ããããšããããŸããåŒç€Ÿã§ã¯ã³ãŒã管çã« git/GitHub ã䜿ã£ãŠããã®ã§ãgit history ã blame ãèŠãã°ããã®ã§ãããããã©ããã«ãªã¯ãšã¹ããäœããã³ã«ãã®äœæ¥ãããã®ã¯éªšãæããŸãã ããã§ã git history ããã©ã£ãŠã¬ãã¥ã¢ãŒã«é©ãã人ãæ¢ãåºãã¹ã¯ãªããâsuggest_reviewerâ ãäœãããšã«ããŸããã ã§ãã©ããã£ãŠã¬ãã¥ã¢ãŒãæ¢ãã®ã åºæ¬çã«ã¯ãgit history ã䜿ã£ãŠã¬ãã¥ã¢ãŒæ¢ãã®ã§ããããã®ãšã以äžã®æ¡ä»¶ãæºããããã«ããŸãã å€æŽããããã¡ã€ã«ã«è©³ãã人ããã¬ãã¥ã¢ãŒãšããŠéžåºãããã å€æŽããããã¹ãŠã®ãã¡ã€ã«ã§ãã¬ãã¥ã¢ãŒã®èª°ããã¬ãã¥ãŒã§ããã ç¡é§ã«ã¬ãã¥ã¢ãŒãå¢ãããªãã ãããå®çŸããæ¹æ³ã倧éæã«èª¬æããŸãããŸã 1 ãæºããããããã¡ã€ã«ããšã«ã³ãããæ°ãå€ã人ãäœäººãéžã³ããã®äººãã¬ãã¥ã¢ãŒåè£ãšããŸãã次㫠2 ãæºãããããåãã¡ã€ã«ã®ã¬ãã¥ã¢ãŒåè£ããäžäººãã€ã¬ãã¥ã¢ãŒãšããŠéžåºããŸãããã®ãšã 3 ãæºããããã«ãå€ãã®ãã¡ã€ã«ã«è©³ãã人ãåªå
çã«éžåºããŸãã äŸãã°ã file1 ãš file2 ãå€æŽãããå Žåãæ³å®ããŸããããã§ãA ãããäž¡æ¹ã®ãã¡ã€ã«ã«ããããã³ãããããŠãããªãã A ãããã¬ãã¥ã¢ãŒãšããŠéžåºãããã°ååã§ããããã file1 㯠A ããã ããã file2 㯠B ããã ããã³ãããããŠããå ŽåãA ãããš B ããã®äž¡æ¹ãã¬ãã¥ã¢ãŒãšããŠéžåºãããå¿
èŠããããŸãã ããããããŸãæéããããã«ãµã¯ããšäœãããã®ã§ãgit ã®ä»ãruby ãåºæ¬ç㪠UNIX ã³ãã³ãã¯äœ¿ããããšãåæã«ããŸãããã ããã¯ããµã¯ããšä»ã®äºº (å«ã Jenkins) ã«äœ¿ã£ãŠãããããã RubyGems ãšãã¯äœ¿ããªãããã«ããŸãã ã§ããµã¯ããšäœããŸãã ããã« ruby ã¹ã¯ãªããããããŠãããŸããããªããªããµããããµã¯ãµã¯ã«ä»äžãã£ããšæããŸãã䜿ãæ¹ã¯ suggest_reviewer --help ãèŠãŠãã ããâŠã§ã¯ãããŸããªã®ã§ã軜ã説æããŸãã ãŸãã git ã®ã¬ããžããªã«ç§»åããŸããããã§ã HEAD~3 ãã HEAD ã®å·®åã«å¯Ÿå¿ããã¬ãã¥ã¢ãŒãæ¢ãããå Žåã suggest_reviewer HEAD~3 HEAD ãšããã°ã author1@example.com dir1/file1 dir1/file2 author2@example.com dir2/file3 ãšãåºåãããã¯ãã§ããããã®æå³ãããšããã¯ã author1 㯠file1 ãš file2 ãã¬ãã¥ãŒå¯èœã§ã author2 㯠file3 ãã¬ãã¥ãŒå¯èœãšããããšã§ãã ãã®ã¹ã¯ãªããã¯å
éšçã« git diff ã䜿ã£ãŠããã®ã§ã (âŠ)
â§
LINEã®ãšã³ãžãã¢ãªã³ã°ãæ¯ãã瀟å ããŒã«
ãã®èšäºã¯ LINE Advent Calendar2016 ã® 3 æ¥ç®ã®èšäºã§ãã ã¯ããã« ã¯ãããŸããŠãLINEã®@huydxã§ããçŸåšãEngineering Efficiencyããšãããã£ãããååã®ããŒã ã«é
å±ãããŠããŸããæ¥åžžã®ä»äºã§ã¯ã瀟å
ã®ã¢ãã¿ãªã³ã°ããã«ãŠã§ã¢ãèªååããŒã«ã®éçºãªã©ã«ãããŠãäž»ã«ããã¯ãšã³ãåŽãæ
åœããŠããŸãããšã³ãžãã¢ãªã³ã°ã§çµç¹å
šäœã®çç£æ§ãšå¹žããåäžããããšã§ãããã®èšäºã§ã¯ãããŒã ã®åãçµã¿ããããŠå人çãªæ°ã¥ããªã©ã玹ä»ãããŠããã ããŸãã èæ¯ çŸåšç§ãæå±ããŠããéšçœ²ã¯LINEã¡ãã»ãŒãžã®ããã¯ãšã³ãåŽãæ
åœããŠããŸããã·ã¹ãã ã®èŠæš¡ã倧ãããªããšãšãã«ãçµç¹å
šäœã倧ãããªãäžæ¹ã§ãããœãããŠã§ã¢ã®ã¹ã±ãŒã«ã¯ãã¡ããé£ããã§ãããçµç¹ã®ã¹ã±ãŒã«ãç°¡åãªããšã§ã¯ãããŸããã ãã¡ãããäœå¶ããããŒãžã¡ã³ããªã©ã§é 匵ã£ãŠãçµç¹ãå°ããåå²ãããªã©ã®æ¹åã§é²ããšããããããŸããã§ãããLINEã¡ãã»ãŒãžãã©ãããã©ãŒã ã®ç¹åŸŽãšããŠãã¢ããªã·ãã¯ãªãTalk-serverããšãã巚倧ãªJavaã¢ããªãäžå¿ã«ååšããããããã®éçºè
ãããã«æ¯æ¥ã³ã³ããªãã¥ãŒãããŠããŸããããã§ãå¹çè¯ãå®å
šã«LINEã¡ãã»ãŒãžåºç€ãæäŸããããã©ãããŠããããŒãžã¡ã³ãã ãã§ã¯ç¡çãªãšããããã£ãŠãããã§ã¡ãããšãšã³ãžãã¢ãªã³ã°ã§è§£æ±ºã§ãããã®ã解決ãããšã³ãžãã¢ãã¡ãå®å¿ããŠå¹çããããã©ãŒãã³ã¹ãåºãããã«ããã®ãç§ã®ããŒã ã®ããã·ã§ã³ã®ã²ãšã€ã§ãã åºæ¬ã®è§£æ±ºæ¹éãšããŠã¯ Painful PointãçºèŠããŠãèªååã§ããïŒãŸãèªååãã¹ãïŒãšãããèªååãã æ°ããæè¡ããã¹ããã©ã¯ãã£ã¹ãå°å
¥ããããšã«ããããã»ã¹ãæ¹åãã è¯ãã¢ãã¿ãªã³ã°ã·ã¹ãã ãšè¯ããããã€ã·ã¹ãã ãæäŸããããšã§ãããæ©ããå®å
šã§ãœãããŠã§ã¢ãéçºãé²ãããšãå¯èœã«ãã ãã®æ¹éã«æ²¿ã£ãŠãæè¿ã®åãçµã¿ãæ°ã¥ããç°¡åã«çŽ¹ä»ããŸãã ããã»ã¹ãã³ãŒãã§è¡šçŸ çŸåšã®éšçœ²ã§ã¯å€ãã®äººã
ãããã€ãã®ã¡ã€ã³ãªããžããªã§æ¯æ¥éçºãé²ããŠããŸãã倧人æ°ã®ãšã³ãžãã¢ããäºãã«äœãããŠããããææ¡ããªããšæ··ä¹±ãçºçããŠããŸãã®ã§ãã¡ãããšå®çŸ©ããããã»ã¹ãšã³ã³ãã³ã·ã§ã³ã«åŸããªããšãããªãããã®ããã»ã¹ã¯äžæšå¹Žã®ããã°ã§çŽ¹ä»ãããŠããŸãã®ã§ãæ¯éã芧ãã ãããèšäºãèªãã§ã¿ããšåãããšæããŸããããã©ããŒããã®ã¯ãªããªã倧å€ã§ãããã 倧å€ãšã¯ãããLINEã®ãããªãã©ãããã©ãŒã ã§ã¯ãå®å
šã«ãœãããŠã§ã¢ããªãªãŒã¹ããããã«æ¬ ãããªãããã»ã¹ãšãªããŸãã ãã®å€§å€ããã©ããã£ãŠè§£æ¶ããã工倫ããŠããŠãæè¿ã®åãçµã¿ã®ã²ãšã€ãšããŠãProcess As A CodeããšããæŠå¿µãç§ãç¬èªã«å®çŸ©ããŸãããã€ãŸããããã»ã¹ãã®ãã®ãå
šéšã³ãŒãã§è¡šçŸããŠãè¡šçŸãããã®ãããŒã«ãšããŠå®è£
ããã°ããšã³ãžãã¢ãæ軜ã«ããã»ã¹ããã©ããŒããããšãã§ããã¹ãã¬ã¹ã解æ¶ã§ãããšèããŸããããŒã«ã¯ãããç°¡åãªã³ã³ãã³ãã©ã€ã³ããŒã«ã§ã䜿ãæ¹ãæ¥åžžãã䜿ãããŠããã³ã³ã»ããã«åºã¥ããŠæ°è»œã«äœ¿ããŸãã $lineflow talk-server Usage: lineflow talk-server new-develop-branch <BTS-ID> lineflow talk-server develop-pull-request [--skip-mvn-test] lineflow talk-server commit [--add-all] [--no-issue] [--squash] <message> lineflow talk-server release-cherry-pick lineflow talk-server release-pull-request [--skip-mvn-test] lineflow talk-server rc-create [--push-new] lineflow talk-server version-commit ããããããããã[--increase-patch] [--increase-minor] [--increase-major] <version> ããŒã«ã®äžã§JIRA, GitHub Enterprise, 瀟å
ã®ãããã€ã·ã¹ãã ãå
šéšé£æºããŠãèªååã§ãããšãããå
šéšèªååãããŸããéå»ã®ã³ãã³ãããã¹ããªãŒãã¡ã€ã«ã«ä¿åããŠãã次ã«ã©ã®ã³ãã³ããæãŠã°è¯ããããæšèŠããæ©èœãªã©ãéçºããŠããŸããæ°ããããã»ã¹ãè¿œå ãããšãããŸãã¯ã³ã³ãã³ã·ã§ã³ãå€ãããšãã«ã¯ãã³ãŒãã«ãããåæ ããŠãããŒã å
šå¡ãããŒã«ã®ææ°ããŒãžã§ã³ãæŽæ°ããã°åãã³ã³ãã³ã·ã§ã³ããã©ããŒã§ããŸããããæ°ããã¡ã³ããŒãå
¥ããšãã«ããããããããã»ã¹ã«éªéããããããã«éçºãé²ããããšãæåŸ
ã§ããŸãã 瀟å
ããŒã«ãäœããšãã®èãæ¹ çŸåšãããŒã ãéçºããŠãããœãããŠã§ã¢ã¯ã瀟å
ããŒã«ããšåŒã°ããŠããŸãããã瀟å
ããŒã«ãã«ã¯ç¹ã«APIãšãèªèšŒãšããããªããªãšããã€ã¡ãŒãžãæã£ãŠããæ¹ãå€ããšæããŸããããããªãããç§ãã¡ã®èãã¯ç€Ÿå
ããŒã«ã ãããã以äžã®æ§è³ªãæããªããšãããªããšèããŠããŸãã 䜿ããããAPIãæäŸãã èªèšŒãã§ããç£æ»ãããããç¶æ
ã«ãã ã³ãŒãå質ãšãããã¯ãã®æ¹éãæ確ã«å®çŸ©ãã ããã¥ã¡ã³ããå
å®ããã ãŸãAPIããããã°ãããŒã å
ã®ã³ã©ãã¬ãŒã·ã§ã³ãããããããªãããŠãŒã¶ïŒéçºè
ïŒèªèº«ã«ããèªçºçãªããŒã«éçºãã§ããŸããéã« APIããªããšãçŽæ¥DBãæ¥ç¶ããŠå€æŽãããããããšã«ãªãããã®ã§çµå床ãå¯ã«ãªã£ãŠå€æŽãã¥ãããªã£ãŠããŸããã·ã¹ãã ãæŽæ°ã§ããªããªããŸããAPIã¯åºæ¬çãªHTTPã®RESTã§èšèšããããã®ã§ç°¡åã«curlã䜿ã£ãŠãã¹ããã§ãããŸããæ軜ã«swaggerãªã©ã䜿ã£ãŠãŠã§ãUIã§äœ¿ãæ¹ãªã©ã確èªã§ããŸãã èªèšŒã«ã€ããŠã§ããã倧人æ°ãåããªããžããªã觊ã£ãŠããŠãåããµãŒãã¯ã©ã¹ã¿ãŒã«ãããã€ããã®ã§ãå®å
šæ§ãä¿ã€ããã«ã¯ãã誰ãäœãã§ãããããã¡ãããšèªå¯(Authorize)ã§ããããšãèŠæ±ãããŸããããã§ãçŸåšã®ããŒã ã§ã¯OAuthããŒã¹ã®èªèšŒã·ã¹ãã ãéçºããŠãããåºæ¬çãªæäœã¯ãŠã§ãUIããããã¯ããŒã¯ã³ããŒã¹èªèšŒã®APIãéããŠæäœããã®ã§ãå
šéšã®æäœã¯ãã°ã§æ®ããŠããŠããªã«ãããå Žåã¯ãã©ãã«ã·ã¥ãŒãã£ã³ã°ãããããã§ãã 瀟å
ããŒã«ãšããã®ã¯ãçæçãªç®çã«å¯ŸããŠã®ç°¡åãªããã¯ãã¹ã¯ãªããã«ãªããã¡ã§ãããããã ãããªããšã倧ããçµç¹å
šäœã«ã¯ã¹ã±ãŒã«ã§ãããèŠæ±ã®å€æŽã«ããã¡ã³ããã³ã¹ããã¥ããã®ã§ãè²»çšå¯Ÿå¹æã¯è¯ããããŸããããªã®ã§ãæåããããŒã«ã®ç®çã䜿ããã¹ã³ãŒããå©çšã·ããªãªãªã©ãã¡ãããšèæ
®ããŠéçºããªããšãããŸããããŸãããªãŒãã³ãœãŒã¹ã«åããŠéçºãé²ããã®ãäžçªãªã¹ã¹ã¡ã§ãã æåŸã«ã瀟å
ããŒã«ã ããããããã¥ã¡ã³ãã¯ãšã³ããŠãŒã¶åãã®ã¢ããªã±ãŒã·ã§ã³ãããå
å®ããªããšãããªããŸãããããã¥ã¡ã³ãã足ããªããšã誰ã䜿ã£ãŠãããŸããããéã«ããã¥ã¡ã³ããå
å®ããŠããã°ãŠãŒã¶ããç©æ¥µçã«ã³ã³ããªãã¥ãŒãããŠãããã§ããããè¯ãããã¥ã¡ã³ãã§ããããã«ã¯ãã¡ãããšä»¥äžã®é
ç®ãååšããã°è¯ããšæããŸãã ããŒã«ãäœã£ãèæ¯ ããŒã«ã®ã¢ãŒããã¯ã㣠ã©ããã£ãŠã³ã³ããªãã¥ãŒãããã®ããæ確ã«æžã 瀟å
éçºããããããããã¯ãªãŒãã³ãœãŒã¹ãå©çšããã®ã çŸåšã®ããŒã ã§ã¯ãã¢ãã¿ãªã³ã°ããŒã«ããããã€ããŒã«ãªã©ãå
šéšèªç€Ÿã§éçºããŠããŸãããªããªãŒãã³ãœãŒã¹ã䜿ãããŠããªããããšããçåãæã£ãŠããæ¹ããããšæããŸãããã¡ããããªãŒãã³ãœãŒã¹ã§äœ¿ãããšããã§ã¯ç©æ¥µçã«Jenkinsãªã©ã®ãªãŒãã³ãœãŒã¹ã䜿ã£ãŠããŸãããLINEã®ã¹ã±ãŒã«ã«åããªããéå»ã®çµç·¯ãã€ã³ãã©ã¹ãã©ã¯ãã£ãŒã®æ§æã«åããªãããŸãã¯ã»ãã¥ãªãã£ãªã©è²ã
ãªåé¡ã«å²ãŸããŠããªãŒãã³ãœãŒã¹ããã£ããããªãå Žé¢ããããŸãã ãã®æã¯ã¡ãããšéçºãªãœãŒã¹ã確ä¿ããŠéçºããªããšLINEæ¬äœã®ã·ã¹ãã ã«åœ±é¿ãã§ãŠããŸãããšããããŸããäžæ¹ã§ã瀟å
ã®éçºã ãã«é ŒããšãçŸåšã®æè¡ãã¬ã³ãããã¹ããã©ã¯ãã£ã¹ã«è¿œãã€ãã®ã倧å€ã§ãã®ã§ãäž¡æ¹ãããŸãçµã¿åãããã®ããã¹ãã§ãã æè¿ã®åãçµã¿ã®ã²ãšã€ã玹ä»ããŸããçŸåšç€Ÿå
ã®ã¢ãã¿ãªã³ã°ã·ã¹ãã ãèªç€Ÿã§éçºãããŠãIMONãšããã·ã¹ãã ãæ
åœããŠããŸããIMONã¯ããŒã¿åéããã£ãŒãã®è¡šç€ºãã¢ã©ãŒãã»ããŒãã£ãã£ã±ãŒã·ã§ã³ç®¡çãªã©ãå
šéšå«ããAll-In-Oneã®ã·ã¹ãã ã§çµæ§äŸ¿å©ã«äœ¿ããã·ã¹ãã ã§ãã ã§ãããããŸãŸã§ã®ãŠãŒã¶ãæ¯æ¥èŠãªããšãããªãIMONã®ãã£ãŒã衚瀺æ©èœã¯ç°¡åãªãã£ãŒããã衚瀺ã§ããŠããŸãããè±ããªããã·ã¥ããŒããäœããããã¢ãããŒã·ã§ã³æ©èœã»ããããã³ãã¬ãŒãæ©èœã»ãããªã©æ§ã
ãªãŠãŒã¶ããããããã®èŠæ±ãããããã®æ©èœãå
šéšã¡ãããšãµããŒãããã®ã¯ããªãæéããããããå·¥æ°ãããããããèŠèŸŒã¿ãªã®ã§Grafanaãå©çšããããšãéžæããŸããã IMONã®ããŒã¿ãœãŒã¹ãéçºããGrafanaã«ã°ã©ã衚瀺ãšããã·ã¥ããŒãäœæãªã©ãä»»ããããšã«ããŸãããããã«ãããGrafanaã«æ
£ããŠããå€ãã®éçºè
ã«ãšã£ãŠäœ¿ãããããªããGrafanaã®ããããã®æ©èœãæµçšããããšãå¯èœã«ãªã£ãŠãå·¥æ°ã®åæžãã§ããŠãšãŠãããã£ããšæããŠããŸãããä»åŸç§ãã¡ã®ããŒã ããã£ãããããšãããæ¢ããŠç©æ¥µçã«ãªãŒãã³ãœãŒã¹ãªã©ãå°å
¥ããæ¹éãé²ããŠãããŸãã çµè« 話ãé·ããªã£ãŠããŸããŸããããçŸåšã®ããŒã ã§ã¯ããšã³ãžãã¢ã®ããã®ãã®ã¥ããã§æ¯æ¥æ¥œãããœãããŠã§ã¢éçºãã§ããŠããŸããã°ãããŒã«ãµãŒãã¹ã§äœ¿ãããŠããæé«ã®ã¢ãã¿ãªã³ã°ã·ã¹ãã ã䟿å©ãªãããã€ã·ã¹ãã ããããŠãšã³ãžãã¢ã®å¹žããåäžããããŸããŸãªã·ã¹ãã ãéçºãããšã³ãžãã¢ãç©æ¥µçã«åéããŠããŸãã https://linecorp.com/ja/career/position/664 ææ¥ã¯Masakuniããã«ãããtoLowerCaseã®èœãšãç©ŽãšCase Foldingã®è©±ãã«ã€ããŠã®èšäºã§ããã楜ãã¿ã«ïŒ
â§
toLowerCaseã®èœãšãç©ŽãšCase Foldingã®è©±
ããã«ã¡ã¯ãLINEã§Android ClientãéçºããŠããMasakuniã§ãã ããã¯LINE Advent Calendar 2016ã®4æ¥ç®ã®èšäºãšãªããŸãã LINEã®ã¢ããªã»ãµãŒãã¹ã¯å€ãã®åœã§äœ¿ãããŠãããããåœéåãå€èšèªåã¯ãµãŒãã¹éçºæã«ãããé倧ãªããŒãã®äžã€ã§ãã ä»åã¯ããã®äžã§ãã倧æåã»å°æåå€æãã«ã€ããŠè©±ãããŸãã Javaã«ããã String#toLowerCase() / toUpperCase() ã®æå ãŸãã¯äžã€ãåé¡ãåºããŠã¿ãŸãããã Q. 以äžã®Javaãã¹ãã³ãŒãã¯åžžã«passããããšãä¿èšŒãããŠããã§ãããã? A. No. äžèŠåçŽãªãã¹ãã³ãŒãã§ãããããã¯Javaã®å®è¡ç°å¢ã«ãã£ãŠã¯å€±æããããšããããŸããäœæ
ããšèšããšã "I".toLowerCase() 㯠"I".toLowerCase(Locale.getDefault()) ãšç䟡ã§ãããå®è¡ç°å¢ã®ããã©ã«ããã±ãŒã«ã«ãã£ãŠåäœãå€ããããã§ãã å
·äœçã«ã¯ããã±ãŒã«ããã«ã³èª(âtrâ)ã®ãšãã«äžèšã®ãã¹ãã¯å€±æããŸãããã«ã³èªã§ã¯ãããä»ãã®Iãšãããç¡ãã®Iãåºå¥ãããŠãããâIâã«å¯Ÿå¿ããå°æå㯠âıâ (U+0131, LATIN SMALL LETTER DOTLESS I) ã§ãâiâã«å¯Ÿå¿ãã倧æå㯠âÄ°â (U+0130, LATIN CAPITAL LETTER I WITH DOT ABOVE) ãšãªããŸãã ã€ãŸããJavaã®ãã¹ãã³ãŒãã§æžããšä»¥äžã®ããã«ãªãããã§ãã å¥ã®äŸãæããŸããããGrave accentãä»ããŠãã âÃâ (U+00CC, LATIN CAPITAL LETTER I WITH GRAVE) ã«å¯Ÿå¿ããå°æåã¯ãå€ãã®ãã±ãŒã«ã«ãããŠã¯ âìâ (U+00EC, LATIN SMALL LETTER I WITH GRAVE) ã«ãªããŸããããããªãã¢ãã¢èª(âltâ)ã«ãããŠã¯ãâiâ (U+0069, LATIN SMALL LETTER I, æ®éã®i) ã«çµåæå U+0307 (COMBINING DOT ABOVE) ãš U+0300 (COMBINING GRAVE ACCENT) ãç¶ãã âiÌÌâ (U+0069 U+0307 U+0300) ãšãªããŸããã€ãŸããJavaãã¹ãã³ãŒãã§ã¯ä»¥äžã®ããã«ãªããŸãã ãã®ããã«Unicodeã§ã®ãã£ã©ã¯ã¿ãŒæ°ãå¢å ããå€æã¯ä»ã«ããããŸããããšãã°ããã€ãèªã® à (U+00DF, LATIN SMALL LETTER SHARP S) ãããããšã¹ãã§ãã(Eszett)ã¯å€§æåã«å€æãããš âSSâ ã«ãªããŸãã ãã£ãšåä»ãªäŸãšããŠã¯ãã®ãªã·ã¢æåã®å°æåã·ã°ãããããŸããããã¯éåžž Ï (U+03C3, GREEK SMALL LETTER SIGMA) ã§è¡šãããŸãããåèªã®æ«å°Ÿã§ã¯å圢ãå€åãã Ï (U+03C2, GREEK SMALL LETTER FINAL (âŠ)
â§
Androidã§æ¥ä»è¡šèšããæ軜ã«åœéåãã
ããã«ã¡ã¯ãLINEã§Android clientãéçºããŠããShojiã§ããäœæ
ãäžéšããã¯ãã«ãçåãšåŒã°ããŠããŸãããã®èšäºã¯LINE Advent Calendar2016ã®5æ¥ç®ã®èšäºã§ãã Androidã¢ããªã®æ¥ä»è¡šèšã®åœéå ãã£ããé 匵ã£ãŠã³ãŒããæžããŠããã¹ãããAndroidã¢ããªãªãæµ·å€å«ããŠæ²¢å±±ã®äººã«äœ¿ã£ãŠæ¬²ããã§ãããïŒ LINEã¯æµ·å€ã§ã䜿ãããŠããã®ã§UIããã¹ãã®ç¿»èš³ãããã®ã¯å¿è«ã§ãããã¢ããªã®åœéåã¯UIã®ç¿»èš³ã«éããŸãããç¹ã«LINEã¯ã¢ããªã®æ§æ Œäžæ¥ä»è¡šç€ºãUIäžã«å€ãããã®ãã©ãŒããããåèšèªæåã«ãã£ã圢ã§è¡šç€ºããå¿
èŠããããŸãã åãè±èªã§ããçãããäžåŠæ ¡ã®è±èªã®ææ¥ã§ãã£ãšç¿ã£ãããã«ã ã€ã®ãªã¹åŒ: Fri, 18 Nov 2016 ã¢ã¡ãªã«åŒ: Fri, Nov 18, 2016 ãšææ¥ã®é åºãéã£ããããŸãã ã¢ã¡ãªã«è±èªãšã€ã®ãªã¹è±èªããããªãåèšèªçšã®ãã©ãŒããããçšæããŠããããªé¢šã«Rã¯ã©ã¹çµç±ã§ 察å¿ããããšãåºæ¥ãªãã¯ç¡ãã§ããã察å¿èšèªãå¢ãããšæãããŠåºåãããããã¹ãããã€ãã£ãŽã«ãšã£ãŠèªç¶ãã®æ€èšŒã埮åŠãªæãã§ããæµ·å€è£œã¢ããªã ãšæåã©ããã§ãæ¥æ¬èªèšå®ã§ã11æ 16, 2016ããšè¡šç€ºãããŠããŸã£ãããããããã¶ã€ã³ãè¯ãæã颚ãªAndroid Wearã®Watch faceã ã£ãããããšããæ®å¿µæããã³ããªãã§ãããã£ããMoto 360 2nd genè²·ã£ãã®ã«ã»ã»ã»ïŒ android.text.format.DateUtils ããã§android.text.format.DateUtilsã®åºçªã§ãã https://developer.android.com/reference/android/text/format/DateUtils.html ã§ãAndroid端æ«ã®èšèªèšå®ãåãæ¿ãããš ã€ã®ãªã¹è±èª: Fri, 18 Nov 2016 ã¢ã¡ãªã«è±èª: Fri, Nov 18, 2016 æ¥æ¬èª: 2016幎11æ18æ¥(é) ãšè¯ãæãã«åºåããŠãããŸããã2016/11/18ãã®ãããªè¡šèšã欲ããå Žåã¯ã ãšFORMAT_NUMERIC_DATEãæå®ããã° ã€ã®ãªã¹è±èª: 18/11/2016 ã¢ã¡ãªã«è±èª: 11/18/2016 æ¥æ¬èª: 2016/11/18 ãšããã¡ããã¡ãããšã€ã®ãªã¹è±èªãšã¢ã¡ãªã«è±èªã®æ
£ç¿ã®éããåæ ããŠãããŸãã ãã ããAndroid APIãªã®ã§OS versionãã£ãŠåŸ®åŠã«åäœãç°ãªãäºããããäŸãã°ã ã§ã Android 6.0: 2016幎11æ18æ¥(é) Android 4.1: 2016/11/18 (é) ã§ã Android 6.0: 2016幎11æ18æ¥éææ¥ Android 4.1: 2016幎11æ18æ¥ (é) ãšæåã«ã¶ãããããŸãïŒãšãã¥ã¬ãŒã¿ã«ãŠåäœç¢ºèªïŒãå°ããTextViewã«è¡šç€ºããéã«ã¯OS versionã«ãã£ãŠèŠåããŠããŸã£ãŠããªãããªã©ã®æ€èšŒãããŸãããã DateUtilsã«ã¯formatDateTime以å€ã«ãã5ååããã3æ¥åããªã©ãåèšèªã§åºåãããSNSã®FeedåããªgetRelativeTimeSpanStringãªã©ããããŸãã ã§åºåãããšã æ¥æ¬èª: 3 æ¥å è±èª: 3 days ago ãã©ã³ã¹èª: Il y a 3 jours ãšæ¥æ¬äººããã°ã©ããã€ãå¿ããã¡ãªè€æ°åœ¢ãèªåçã«åŠçã§ããŸãã ããã«æããã°ãæ¥æ¬èªã§ã¯ã2016幎ã«ããããéææ¥ã«ãããã9æã«ãããåããã«ãã§ãããè±èªã§ã¯ããããâin 2016â³ãâon Fridayâãâat 9â³ãšå眮è©ãç°ãªããŸããïŒäžåŠæ ¡ã§ãããŸãããïŒïŒ ãšwithPrepositionãtrueã«ãããšé©åãªå眮è©ä»ãã§åºåããŠãããŸãã æ¥æ¬èª: 11æ18æ¥ è±èª: on Nov 18 ãã©ã³ã¹èª: le 18 nov. åçããŒã¿ã®æ³šéãšããŠããéå»ã®ã€ãã³ãã衚瀺ããUIãªã©ã§äŸ¿å©ã ãšæããŸãã ãããã®APIãOS versionéã§ã®æåå·®åããããžãã¹äžã¢ããªã§å¿
èŠãªèšèªãAPIã察å¿ããŠããããã®æ€èšŒã¯å¿
èŠã§ããããã¶ã€ã³çãªå¶çŽãå°ãªãç®æã§ããã°ãæ軜ãªæ¥ä»è¡šç€ºã®åœéåãšããŠãªã¹ã¹ã¡ã§ãã Android 7.0 (âŠ)
â§
â§
Elasticsearch ãæ€çŽ¢ãšã³ãžã³ãšããŠå©çšããéã®ãã€ã³ã
ããã«ã¡ã¯ãLINE ã§ã¹ã¿ã³ãã»çãããã·ã§ããã®ããã¯ãšã³ãéçºãããŠããå·ç° (@hktechno) ã§ãã ãã®èšäºã¯ãLINE Advent Calendar 2016 ã® 6 æ¥ç®ã®èšäºã§ãã ä»å¹Žã®4æã«ãJava ã Elasticsearch ããŸãšãã«ç¥ããªãã£ãæ°åãšã³ãžãã¢ã Elasticsearch ã¯ã©ã¹ã¿ã®ç®¡çãçªç¶ä»»ãããŠèŠåŽãã話ãããããšæããŸãã Elasticsearch ãšã¯ Elasticsearch ã¯ãElastic 瀟ãéçºããŠããæ€çŽ¢ã»åæãšã³ãžã³ããã³ãã®ã¹ãã¬ãŒãžãæ
ããœãããŠã§ã¢ã§ããç°¡åã«èšãã°ãæ€çŽ¢ã«ç¹åããã¯ãšãªãæããããšãã§ããããŒã¿ããŒã¹ã®ãããªãã®ã§ããNo-SQL åã® DB ãšãã£ãŠãè¯ããšæããŸãã Elasticsearch ã®ããããšããã¯ã倧éã®ããã¥ã¡ã³ãã®äžãã圢æ
çŽ è§£æã n-gram ãªã©èªç¶èšèªçãªè§£æãè¡ã£ãäžã§ãçŽ æ©ãæ€çŽ¢ã¯ãšãªãåŠçã§ãããã€ããŒããå¢ããããšã§ç°¡åã«ã¹ã±ãŒã«ã¢ãŠãããããšãã§ããããšã§ããæè¿ã§ã¯ãElasticsearch ã¯æ§ã
ãªãã°ã®åéã»åæã«ã䜿ãããããã«ãªã£ãŠããŠãã©ã¡ãããšèšããšãã°åéã§èŠåŽãã話ãå€ããšæããŸããã¡ãªã¿ã«ãç§ã®æå±ããŠããããŒã ã§ã¯ããã°åéã»ã¡ããªãã¯åæããŒã«ãšããŠã Elasticsearch ãå©çšããŠããŸãã ããããä»åã¯ãã°åéã§ã¯ãªããå®éã«ãããã¯ã·ã§ã³ç°å¢ã§æ€çŽ¢ãšã³ãžã³ããã³ããŒã¿ããŒã¹ãšããŠå©çšããå Žåã® Elasticsearch ã®èŠåŽããç¹ã«ã€ããŠæžãããšæããŸãããã®ãããªæ
å ±ã¯ããŸãå€ããªãã®ã§ãåèã«ãªãã°å¹žãã§ãã LINE Shop ãšã¯ ãšããã§ãç§éã®ããŒã 㯠LINE Shop ãšåŒã°ããŠããŠã䞻㫠LINE å
ã®ã¹ã¿ã³ããçããããæ
åœããéšçœ²ãšãªã£ãŠããŸããLINE ãå©çšããããšã®ããæ¹ã§ããã°ãææã¹ã¿ã³ããçãããã販売ããŠãã LINE å
ã®ã·ã§ãããèŠãããšã®ããæ¹ãå€ããšæããŸãã ãã®2ã€ã®ã·ã§ãããšãWeb äžã§ã¹ã¿ã³ããçãããã賌å
¥ããããšãã§ãã LINE STORE ã¯å
±éã®ããã¯ãšã³ããå
±æããŠããŸããLINE Shop ã§ã¯ãElasticsearch ãåºç¯å²ã«å©çšããŠããŠãå®éã«ã¿ãªãããã¹ã¿ã³ãã·ã§ãããªã©ãžã¢ã¯ã»ã¹ããéã®æ®ã©ã®ã¬ã¹ãã³ã¹ã¯ Elasticsearch ãå©çšãããã®ãšãªã£ãŠããŸãã å
·äœçã«ã©ã®éšåããšãããšâŠ ã¹ã¿ã³ãã»çãããæ€çŽ¢ 人æ°ã©ã³ãã³ã°ã»æ°çãªã©ã®ãªã¹ãçæ ã«ããŽãªãŒãªã¹ãçæ ããªããžã®ãããã ãªã©ããã ã®ããŒã¯ãŒãæ€çŽ¢çšéã ãã§ã¯ãªããã»ãŒãã¹ãŠã®ãªã¹ã衚瀺系ã®ããŒã¿ããŒã¹çšéãšããŠå©çšããŠããŸãã LINE Shop å
éšã¯ãArmeria ã䜿ã£ããã€ã¯ããµãŒãã¹ãšãªã£ãŠããŠã倧å¹
ã«åçŽåããŠèª¬æãããšä»¥äžã®ãããªæ§é ã«ãªã£ãŠããŸã(Armeria ã«ã€ããŠè©³ãã㯠LINE Developer Day ã®çºè¡šã¹ã©ã€ã LINE Shop powered by Armeria ãã芧ãã ãã)ã å
éšã«SearchFe ãšãããµãŒãã¹ãååšãããã®ãµãŒãã¹ã Elasticsearch ãžã®ãªã¯ãšã¹ãã®ããã³ããšã³ããšãªã£ãŠãªã¯ãšã¹ãã®å€æãã¯ãšãªçæåã³ãã£ãã·ã¥ãæ
åœããŠããŸãã ãŸããã¹ã¿ã³ãåãã® MySQL ãšçãããåãã® MongoDB ãå
éšã§ã¯å©çšããŠããã詳现衚瀺ã賌å
¥ç³»ãªã©ã®ãªã¯ãšã¹ãã¯ãã¡ãã®ããŒã¿ããŒã¹ãæ
åœããŠããŸãã ãªã Elasticsearch ã䜿ãã®ã LINE Shop 㧠Elasticsearch ãå©çšããã¢ãããŒã·ã§ã³ãšããŠã¯ãæ§ã
ã§ã¯ãããŸãã代衚çãªãã®ã¯ä»¥äžã®2ç¹ã§ãã å
éšçã«ã¹ã¿ã³ããšçãããã§å©çšããŠããããŒã¿ããŒã¹ã®çš®é¡ãç°ãªã (MySQL ãš MongoDB) ã®ã§ããããã®ã¯ãšãªãå
±éåãããã LINE Shop ã§è¡šç€ºãããªã¹ãã®æ²èŒã»ãœãŒãæ¡ä»¶ã¯ãåœãããã€ã¹ã¿ã€ãããã®ä»å±æ§ã«ããè€éãªãããæè»ãªã¯ãšãªãåŠçã§ããå¿
èŠããã LINE Shop ã®å Žåã¯ãããã»ã©ããã¥ã¡ã³ãæ°ãå€ããªã (ååæ
å ±ã¯ 500,000 çšåºŠ) ããšããããElasticsearch (âŠ)
â§
Swiftã§Elmãäœã
ãã®èšäºã¯ãLINE Advent Calendar 2016ã® 6æ¥ç®ã®èšäºã§ã ããã«ã¡ã¯ãéçº1ã»ã³ã¿ãŒã»éçº2å®€ã® çš²èŠ (@inamiy) ã§ãã æ®æ®µã¯iOSãšã³ãžãã¢ãšããŠSwiftãæžããŠããŸãããæè¿ã¯ãã£ã±ãé¢æ°åããã°ã©ãã³ã°å
šè¬ã«èå³ããããŸãã ä»æ¥ã¯ããSwiftã§ElmãäœãããšããããŒãã§ãã話ããããŠããã ããŸãã Elmã£ãŠäœïŒ Webåãã®éçåä»ãã»é¢æ°åããã°ã©ãã³ã°èšèªã§ãã詳ãã㯠http://elm-lang.org ããåç
§ãã ããã ç°¡åã«èšããšããHaskell + React.js + Reduxãã§ããã³ã³ãã€ã«æã«ãJavaScriptã«å€æãããŸãã ãã£ãããç°¡åãªãã¿ã³ã«ãŠã³ã¿ãŒã®äŸãèŠãŠã¿ãŸãããã import Html exposing (beginnerProgram, div, button, text) import Html.Events exposing (onClick) -- `main`é¢æ° = ããã°ã©ã ã®å§ãŸãã -- åæç¶æ
(model)ã«`0`ãã»ãã ïŒ ä»¥äžã«ããviewé¢æ°ãupdateé¢æ°ãã»ããã main = beginnerProgram { model = 0, view = view, update = update } -- `view`é¢æ° = ã¢ãã«(ç¶æ
)ãããã¥ãŒ(Virtual DOM)ãçæã -- ããã°ã©ã ãã¡ãã»ãŒãžãåãåã床ã«åŒã°ããã -- ãŠãŒã¶ãŒå
¥å(onClick)çã®åºŠã«ãããã°ã©ã ã«ã¡ãã»ãŒãžãéãããã view model = div [] [ button [ onClick Decrement ] [ text "-" ] , div [] [ text (toString model) ] , button [ onClick Increment ] [ text "+" ] ] -- `Msg` = ã¡ãã»ãŒãžåãä»åã¯2ã€ã®ãã¿ãŒã³ã ãå®çŸ©ã type Msg = Increment | Decrement -- `update`é¢æ° = (âŠ)
â§
Comprehensive Security for Hadoop
(This is the 8th article of LINE Advent Calendar 2016) Hello everyone, this is Neil Tu from Data Labs. I am in charge of Hadoop architecture at Line Corp. I construct and manage Hadoop clusters and their ecosystems, and supply a high availability, and high performance platform for the engineers and data analysts in our group. Today, the topic we are going to talk about is âComprehensive Security for Hadoopâ. Abstract Nowadays, Hadoop has become a popular platform for data storage, data analysis, reporting, and distributed calculations. Basically, Hadoop cluster is an open platform that supplies users with the required resources and HDFS capacity to execute queries. But as you (âŠ)
â§