ããã«ã¡ã¯ãwest-cã§ãã æºãã£ãŠããæ°èŠãµãŒãã¹ã«ãŠ ãã¡ã€ã³ é§åèšèšïŒä»¥äžãDDDïŒãåãå
¥ããéçºãè¡ã£ãŠããããšãããå»å¹Žã®ç§é ããDDDã®åŠç¿ãã¯ãããŸããã ä»åã¯ãç§ãåŠç¿ã«ãããèªãã ããããæžç±ã玹ä»ããŸãã ç®æ¬¡ ç®æ¬¡ ãã¡ã€ã³é§åèšèšãšã¯ ããããæžç± çŸå Žã§åœ¹ç«ã€ã·ã¹ãã èšèšã®åå ã倿Žã楜ã§å®å
šã«ãããªããžã§ã¯ãæåã®å®è·µææ³ ãã¡ã€ã³é§åèšèš ã¢ããªã³ã°/å®è£
ã¬ã€ã ãã¡ã€ã³é§åèšèšå
¥é ããã ã¢ããã§ããã! ãã¡ã€ã³é§åèšèšã®åºæ¬ Domain Driven DesignïŒãã¡ã€ã³é§åèšèšïŒ Quickly æ¥æ¬èªç å®è·µãã¡ã€ã³é§åèšèš ãšãªãã¯ã»ãšãŽã¡ã³ã¹ã®ãã¡ã€ã³é§åèšèš ãããã« ãã¡ã€ã³ é§åèšèšãšã¯ æ¬é¡ãžå
¥ãåã«ããããããDDDã£ãŠäœïŒããšããæ¹ãž3è¡ã§ãšãŠããã£ãããšèª¬æããŸãã DDDãšã¯ããœãããŠã§ã¢ã§åé¡è§£æ±ºããããšããé åïŒ ãã¡ã€ã³ ïŒãäžå¿ã«æ®ããŠéçºãè¡ããœãããŠã§ã¢éçºææ³ã®ããš DDDãå®è·µããããšã§ã ãã¡ã€ã³ ç¥èããã®ãŸãŸã³ãŒããžåæ ãããããã«ãªã ãã¡ã€ã³ ç¥èãšã³ãŒããå°ç¶ãã«ãªãããšã«ãã£ãŠã å€åã«åŒ·ããœãããŠã§ã¢ãæ§ç¯ã§ãã ãå€åã«åŒ·ãïŒä¿å®æ§ã®é«ãïŒãœãããŠã§ã¢ããšèããŠèå³ãæã£ãæ¹ã¯ãããããã玹ä»ããæžç±ãèªãã§ã¿ãŠã¯ãããã§ããããã ããããæžç± ååŠè
ãDDDãåŠã¶å Žåã¯ãã®é çªã§èªãã®ãããã®ã§ã¯ãšæã£ãé çªã«ç޹ä»ããŸãã ãªããåŠç¿åã®ç§ã®ç¶æ³ã¯ä»¥äžã®ãšããã§ãã Java ã§ã®ããã°ã©ãã³ã°çµéšããïŒãµã³ãã«ã³ãŒãã®èªè§£ã«ã¯èŠåŽããªãïŒ ãªããžã§ã¯ãæå çãªããã°ã©ãã³ã°ã¯èŠæ DDDã¯ãŸã£ããç¥ããªã çŸå Žã§åœ¹ç«ã€ã·ã¹ãã èšèšã®åå ã倿Žã楜ã§å®å
šã«ãã ãªããžã§ã¯ãæå ã®å®è·µææ³ çŸå Žã§åœ¹ç«ã€ã·ã¹ãã èšèšã®åå ã倿Žã楜ã§å®å
šã«ãããªããžã§ã¯ãæåã®å®è·µææ³ äœè
: å¢ç° 亚 æè¡è©è«ç€Ÿ Amazon æ¥åã¢ããªã±ãŒã·ã§ã³ã®ä¿å®æ§ãé«ããããã®èšèšææ³ã«ã€ããŠèª¬æãããŠããæžç±ã§ãã DDDåŠç¿ã®å段éã«ããããã§ãã ã ãªãã¡ã¯ã¿ãªã³ã° ãã®å
容ã«ãéããã³ãŒãã®èŠéãã®è¯ãã®è©±ãã ãªããžã§ã¯ãæåèšèš ã«ãã ã¢ããªã³ã° æ¹æ³ãŸã§ãæ¥åã¢ããªã±ãŒã·ã§ã³ã«ãããã³ãŒããããããããããããã®ææ³ã説æãããŠããŸãã ã¿ã€ãã«ã ããèŠããšDDDãšã¯é¢ä¿ç¡ãããã«ãèŠããŸãããæ¬æäžã«ã¯ãæ¥åçãªé¢å¿äºã ãã¡ã€ã³ ã¢ãã«ãšããŠè¡šçŸãããèãæ¹ãDDDã§èŠãããå®è£
ãã¿ãŒã³ãå°å
¥ãããŠããããšãDDDã®ãšãã»ã³ã¹ãèŠæã«è©°ãŸã£ãŠããŸãã ãã®æžç±ãèªãã åœåã®ç§ã¯ ãªããžã§ã¯ãæå çãªããã°ã©ãã³ã°ã«æ
£ããŠããªãã£ããããæç¶ãåã®èšèšããã®çºæ³ã®åãæ¿ãã«åœ¹ç«ã¡ãŸããã ãDDDããã³ ãªããžã§ã¯ãæåèšèš ãåãå
¥ãããä¿å®æ§ã®é«ãã³ãŒãã«ãªãããããšæããã£ããã«ããªããåŠç¿ã®ã¢ãããŒã·ã§ã³ã«ãç¹ãããŸããã ãã¡ã€ã³ é§åèšèš ã¢ããªã³ã° /å®è£
ã¬ã€ã little-hands.booth.pm DDDã® ã¢ããªã³ã° ããå®è£
ãŸã§ã®äžé£ã®æµãã玹ä»ãããŠããæžç±ã§ãã å
š100ããŒãžã»ã©ã§DDDã®å
šäœåãã³ã³ãã¯ãã«ãŸãšãŸã£ãŠããŸãã ååŠè
ããDDDãšã¯ããçè§£ããã«ã¯ããŸãã¯ãã®æžç±ãäžèªãããšããã®ã§ã¯ãšæããŸãã èè
ã®æ¹ã® YouTube ãã£ã³ãã«ã«æžç±ã®è§£èª¬åç»ãæçš¿ãããŠããŸãã®ã§ããŸãã¯ãã¡ãã芳ãŠã¿ãã®ãã¢ãªããšæããŸãã åç»åŸåã®è³ªååçã³ãŒããŒã§ã¯èŠèŽè
ã®æ¹ããã®çåãå€ãå¯ããããŠããããã¡ããããã«ãªããŸãã little_hand_s DDD Channel - YouTube ã¡ãªã¿ã«ãåŒç€Ÿã§ã¯çŸåšãã¡ãã®æžç±ã®èªæžäŒãè¡ã£ãŠããŸãã DDDåå¿è
ããå®éã«DDDã«åãçµãã§ããã»åãçµãããšããŠãããµãŒãã¹ã®ã¡ã³ããŒãŸã§ãå¹
åºãå±€ãåå ããäŒãšãªã£ãŠããŸãã æžç±ãèªãäžã§æ¹§ãäžããçŽ æŽãªçåã«å¯ŸããŠããã¡ã®ãµãŒãã¹ã§ã¯ãã®ãããªæ¹éã«ããŠããããšãã£ããªã¢ã«ãªå®æ
ãèãããšãã§ããæŽ»çºã«æèŠäº€æãè¡ãããŠããŸãã ãã¡ã€ã³ é§åèšèšå
¥é ããã ã¢ãã ã§ããã! ãã¡ã€ã³ é§åèšèšã®åºæ¬ ãã¡ã€ã³é§åèšèšå
¥é ããã ã¢ããã§ããã! ãã¡ã€ã³é§åèšèšã®åºæ¬ äœè
: æç¬ å
宣 ç¿æ³³ç€Ÿ Amazon DDDã«ãããå®è£
ãã¿ãŒã³ïŒæŠè¡çèšèšãšåŒã°ããŠããŸãïŒãäžå¿ã«ç޹ä»ãããŠããæžç±ã§ãã æŠè¡çèšèšã®åãã¿ãŒã³ã«ã€ããŠè©³ãã解説ãšå®è£
æéã瀺ãããŠããŸãã æŠè¡çèšèšã®çè§£ã®ããã«äžèªããã®ã¯ãã¡ãããå®è£
æã«ãªãã¡ã¬ã³ã¹çãªçšéã§çºããŠãåèã«ãªããŸãã ç§ãDDDãå®è·µãã¯ãããé ã¯ãŸã åè¡ãããŠããªãã£ãããããã®æžç±ã®å身ã§ããã ããã ã¢ãããã¡ã€ã³é§åèšèš ãã«ãããäžè©±ã«ãªããŸããã DDDã«æ
£ããªãåœåã¯ã©ã®ããã«å®è£
ããã®ãé©åãªã®ãè¿·ãããšãå€ã
ãããŸãããããµã€ãã«èšèŒãããŠãã詳现ãªèª¬æã倿ææãšãªãå©ããããããšãå€ãã£ãã§ãã ããã ã¢ãããã¡ã€ã³é§åèšèš â nrslib ããã ã¢ãããã¡ã€ã³é§åèšèš åŸç·š â nrslib Domain Driven DesignïŒ ãã¡ã€ã³ é§åèšèšïŒ Quickly æ¥æ¬èªç Domain Driven DesignïŒãã¡ã€ã³é§åèšèšïŒ Quickly æ¥æ¬èªç åŸã»ã©ç޹ä»ããããšãªãã¯ã» ãšãŽã¡ ã³ã¹ã® ãã¡ã€ã³ é§åèšèšããéç§°ã ãšãŽã¡ ã³ã¹æ¬ããã³ã³ãã¯ãã«èŠçŽããæžç±ã§ãã éå㪠ãšãŽã¡ ã³ã¹æ¬ã®èŠç¹ãæŽãããšãã§ããŸãã ãã®æžç±ã§ã¯ããããŸã§ç޹ä»ããŠããæžç±ã§ã¯ããŸã詳现ã«ã¯è§ŠããããŠããŠããªãã£ããå¢çã¥ããããã³ã³ããã¹ãããªã©ã®æŠç¥çèšèšã«é¢ãã解説ãå«ãŸããŠããŸãã ãããã玹ä»ãã2åã¯æŠç¥çèšèšã«é¢ãã話ãç»å Žãé£æåºŠãé«ããªãããããã®æžç±ãå
ã«èªããšãã®åŸã®çè§£ãã¹ã ãŒãºã«é²ãã®ã§ã¯ãšæããŸãã å®è·µ ãã¡ã€ã³ é§åèšèš å®è·µãã¡ã€ã³é§åèšèš (Object Oriented SELECTION) äœè
: ãŽã©ãŒã³ã»ãŽã¡ãŒãã³ ç¿æ³³ç€Ÿ Amazon ãšãŽã¡ ã³ã¹æ¬ã®å
容ãã³ãŒãã亀ããŠå
·äœçã«èª¬æããŠããæžç±ã§ãã DDDãåãå
¥ããæ¶ç©ºã®ãããžã§ã¯ãã顿ãšããŠããããå®éã®ãããžã§ã¯ãã§ã¯ã©ã®ããã«å®çŸããã®ã ããïŒããšæãéšåãå®è£
äŸã€ãã§è§£èª¬ãããŠããŸãã ãµã³ãã«ãããžã§ã¯ãã¯è€æ°ã¢ããªã±ãŒã·ã§ã³ïŒïŒå¢çã¥ããããã³ã³ããã¹ãïŒã«åå²ãããŠããããããŸã§ç޹ä»ããæžç±ã§ã®ãµã³ãã«ãããžã§ã¯ãã®äžã§ãå€§èŠæš¡ãªãã®ãšãªã£ãŠããŸãã ã ãã¡ã€ã³ ã€ãã³ãããªã©ãDDDã«ãããã³ã³ããã¹ãå
å€ãšã®æ
å ±é£æºã®ææ®µã«é¢ããŠè©³çްã«è¿°ã¹ãããŠããããŸãã«DDDãå®è·µããéã®å
·äœäŸãè©°ãŸã£ãŠããŸãã ãšãŽã¡ ã³ã¹æ¬ã®èª¬æã¯æœè±¡çãªãããå
ã«ãã¡ããèªãã§ãããš ãšãŽã¡ ã³ã¹æ¬ã§èšã£ãŠããããšã®ã€ã¡ãŒãžãä»ããããå°è±¡ã§ãã ãã ãã©ã¡ãã®æžç±ãé£ããããçè§£ãå®çãããããã«ã¯ããããèªã¿è¿ãå¿
èŠããããšæããŸãã ãªãããã®æžç±ã®ç« ããšã®èŠçŽãã IDDDæ¬ããçè§£ãããã¡ã€ã³é§åèšèš ããšããŠé£èŒãããŠãããç« ãèªãã åŸã®åãã£ãããã§åãã£ãŠããªãè³å
ãæŽçããã®ã«åœ¹ç«ã¡ãŸãããã ãå®è·µãã¡ã€ã³é§åèšèšãããåŠã¶DDDã®å®è£
å
¥é ããšããŠæžç±åããããŠããããã§ãã®ã§ãè¿ããã¡ã«ãã¡ããçæã«åèªããããšæã£ãŠããŸãã ãå®è·µãã¡ã€ã³é§åèšèšãããåŠã¶DDDã®å®è£
å
¥é äœè
: éæš 淳倫 ç¿æ³³ç€Ÿ Amazon ãšãªãã¯ã» ãšãŽã¡ ã³ã¹ã® ãã¡ã€ã³ é§åèšèš ãšãªãã¯ã»ãšãŽã¡ã³ã¹ã®ãã¡ã€ã³é§åèšèš (IT ArchitectsâArchive ãœãããŠã§ã¢éçºã®å®è·µ) äœè
: ãšãªãã¯ã»ãšãŽã¡ã³ã¹ ç¿æ³³ç€Ÿ Amazon ãã¡ã€ã³ é§åèšèšã®åå
žãšãåŒã°ããæžç±ã§ãã åå
žã§ããïŒåå
žãããã«ïŒïŒæžããŠããå
容ãé£ãããç§ã¯ã²ãšãšããèªäºããããŸãããçè§£ã§ããæèŠã¯ãããŸããã§ããâŠâŠã 察象ãšãªã ãã¡ã€ã³ ãã©ã®ããã« ã¢ããªã³ã° ãæ·±ãã¢ãã«ãžå°éãããŠããããæŠç¥çèšèšã«ã€ããŠè©³çްã«è¿°ã¹ãããŠããæžç±ã¯å°ãªãããããã®ç¹ã¯äžèªããŠã¿ã䟡å€ã¯ãããšæããŸãã æ¬æäžã§äŸãšããŠæããããŠããã¢ããªã±ãŒã·ã§ã³ã¯ãçè
ãå®éã«æºãã£ãæ¥åã¢ããªã±ãŒã·ã§ã³ãåºã«ãªã£ãŠãããããäŸç€ºããã ãã¡ã€ã³ ç¥èã«ãªã¢ãªãã£ãããç¹ããã®æžç±ãªãã§ã¯ã ãšæããŸãã ãªã¢ãªãã£ã®ããè€é㪠ãã¡ã€ã³ ã察象ã«ããŠãããããã«çè§£ãé£ããç¹ãç¡ãã«ããããããªã®ã§ããã察象åéãéãã ãã§æ¥åã¢ããªã±ãŒã·ã§ã³ã«ããã ãã¡ã€ã³ ç¥èã¯å
æ¥è€éãªãã®ã®ã¯ãã§ãã®ã§ããã®å
容ãçè§£ã§ããã°DDDã«å¯Ÿããæ±çšçãªç¥èã身ã«ã€ãããšããããšãªã®ããªãšå人çã«æã£ãŠããŸãã ãªããåè¿°ã®ã ãã¡ã€ã³ é§åèšèš ã¢ããªã³ã° /å®è£
ã¬ã€ããã®èªæžäŒã®åã¯ããã¡ãã®æžç±ã®èªæžäŒãåŒç€Ÿå
ã§éå¬ãããŠããŸããã ç§ã¯ãã®èªæžäŒã§ã¯ãã㊠ãšãŽã¡ ã³ã¹æ¬ã«è§Šããã®ã§ããããããããªãããåå è
ã®éã§å
±æã§ããåã
ã®è§£éãèªãåãããšã§ã¢ãããŒã·ã§ã³ã®ç¶æã«å€§ãã«ç¹ãããŸããïŒäžäººã§èªãã§ãããæ«æããŠãããšæããŸãïŒã ã ãšãŽã¡ ã³ã¹æ¬ã¯é£ããããšããåè©å€ã«è
°ãåŒããŠãªããªãæãåºããã«ããæ¹ïŒéå»ã®ç§ã§ãïŒã¯ã身è¿ãªæ¹ãèªã£ãŠäžç·ã«èªã¿ã¯ãããŠã¿ãã®ãã¢ãªã ãšæããŸãã ãããã« ãã¡ã€ã³ é§åèšèšãšèããšååã ãã§å
容ãã€ã¡ãŒãžã§ããé£ããå°è±¡ãåããŸãããããæè¿ã¯å
¥éè
åãã®æžç±ãã¹ã©ã€ãããããäžã®èšäºãªã©ãå€ãèŠãããããã«ãªãåŠç¿ã®ããŒãã«ã¯äžãã£ãã®ã§ã¯ãšæããŸãã ããããç§ã¯DDDæŽ1å¹Žæªæºã®æ°åè
ã§ããâå®å
šã«çè§£ããâã®åã«ããŸã å°éã§ããŠããªããšã¯æãã®ã§ãããã ãã¡ã€ã³ ç¥èããã®ãŸãŸã³ãŒãã«èœãšã蟌ãããšã§ã³ãŒãã®èŠéããè¯ããªãããä»ã®äººãæžããã³ãŒããã©ãã«äœãæžããŠããã®ãçè§£ããããããªã©ã®æ©æµã¯çŸæç¹ã§ãæããŠããŸãã ãŸã æŠç¥çèšèšã«é¢ããç¥èŠã¯æµ
ããšæããŠããŸãã®ã§ãä»åŸãåšèŸºç¥èã®ç¿åŸå«ãåŠç¿ãç¶ããŠãããŸãã ã¿ãªããããã²ãã®æ©äŒã«DDDãåŠãã§ã¿ãŠã¯ãããã§ããããã ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã 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
ã¯ããã« ããã«ã¡ã¯ããChatDealerãã®éçºã«æºãã£ãŠããy_kwmtã§ãã Excel ãã¡ã€ã«ãããã°ã©ã ã§æ¥œã«æžãåºãæ¹æ³ã調ã¹ãŠããã PHP ã®ã©ã€ãã©ãªãçšã㊠Excel ãã¡ã€ã«ãæžãåºãæ¹æ³ãèŠã€ããŸããã ã¯ããã« PhpSpreadsheetãšã¯ PhpSpreadsheetã®ã€ã³ã¹ããŒã« ã³ãŒãã£ã³ã° PHPãã¡ã€ã«å®è¡ æåŸã« åèã«ãããµã€ã PhpSpreadsheetãšã¯ PhpSpreadsheetã¯ã Excel ãªã©ã®æ§ã
㪠ã¹ãã¬ããã·ãŒã ãã¡ã€ã«åœ¢åŒãèªã¿æžãã§ããã©ã€ãã©ãªã§ãã ä»åã¯ãã® PHP ã®ã©ã€ãã©ãªãPhpSpreadsheetãã«ã€ããŠç޹ä»ããŸãã PhpSpreadsheetã®ã€ã³ã¹ããŒã« Composer ã䜿çšããŠãããžã§ã¯ãã«ãPhpSpreadsheetããã€ã³ã¹ããŒã«ããŸãã PHP ããŒãžã§ã³ã¯ 7.2 以éãå¿
é ãšãªããŸãã composer require phpoffice/phpspreadsheet ã³ãŒãã£ã³ã° Excel ãã¡ã€ã«äœæããã°ã©ã ãindex. php ããäœæããŸãã äžèšã®ã³ãŒãã§ç°¡åãªç¹æ°è¡šãäœæããŸãã <?php require 'vendor/autoload.php' ; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; // ã¹ãã¬ããã·ãŒãäœæ $ spreadsheet = new Spreadsheet () ; $ sheet = $ spreadsheet -> getActiveSheet () ; // å€ãšã»ã«ãæå® $ sheet -> setCellValue ( 'B1' , 'è±èª' ) ; $ sheet -> setCellValue ( 'C1' , 'æ°åŠ' ) ; $ sheet -> setCellValue ( 'A2' , 'Aãã' ) ; $ sheet -> setCellValue ( 'A3' , 'Bãã' ) ; $ sheet -> setCellValue ( 'B2' , '90' ) ; $ sheet -> setCellValue ( 'B3' , '80' ) ; $ sheet -> setCellValue ( 'C2' , '70' ) ; $ sheet -> setCellValue ( 'C3' , '95' ) ; // Excelãã¡ã€ã«æžãåºã $ writer = new Xlsx ( $ spreadsheet ) ; $ writer -> save ( 'score.xlsx' ) ; PHP ãã¡ã€ã«å®è¡ php ã³ãã³ãã§å
çšäœæãããindex. php ããå®è¡ããŸãã php index.php Excel ãã¡ã€ã«ãscore.xlsxããäœæãããŸãã æåŸã« ä»åã¯ãPhpSpreadsheetããçšããŠç°¡åãªç¹æ°è¡šãäœæããŸããã ãã®èšäºã PHP ãŠãŒã¶ãŒã®åèã«ãªãã°å¹žãã§ãã ä»åŸãäœæããã³ãŒãã®æ¹è¯ãè¡ããè€é㪠Excel ãã¡ã€ã«ãã³ãã³ãäžçºã§äœæã§ããããã«ããããšæããŸãã åèã«ãããµã€ã phpspreadsheet.readthedocs.io blitzgate.co.jp blitzgate.co.jp ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã 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
ããã«ã¡ã¯ãYSã§ãã 2020幎7æ9æ¥ã«ã·ã¥ãŒãã€ãã³ãã¥ããã£ã«ãŠéå¬ããã Laravel ã®å匷äŒã«åå ããŠããŸããã shuuu-mai.connpass.com æ®æ®µã®ãããã¯ãéçºã§ãé¢ãã£ãŠãã Laravelã ãã®æ©äŒã«ç€Ÿå€ã®ãããããªç¥èŠã«ãè§ŠããŠã¿ãããšæã£ãã®ããåå ã®ãã£ããã§ãã 以äžãç°¡åã§ããã€ãã³ãå
å®¹ãšææ³ãã¬ããŒãããŸãã çºè¡šå
容 Laravel x Herokuã«ããéçºã»éçš Laravelã®ã³ã³ããéçšã®ãã¹ããã©ã¯ãã£ã¹ãèããŠã¿ã 埪ç°çè€é床80è¶
ãã®çŸè¡ã·ã¹ãã ã« Laravel à ãªããªã³ã¢ãŒããã¯ã㣠ã§ç«ã¡åãã£ã話 Laravelã§å°èп𡿥åã·ã¹ãã ãäœãæã®èŠç¹ ææ³ Laravel ã®å°å
¥ãããã Laravel ã®è±å¯ãªæ©èœäŸ ãããã« ã çºè¡šå
容 CTOããªãŒããšã³ãžãã¢ãšããŠã掻èºãããŠããæ¹ã
ã æ¥åã§å®éã«éçšã»éçºãããŠãã Laravel ã«ã€ããŠèªã£ãŠäžãããŸããã Laravel x Herokuã«ããéçºã»éçš æ ªåŒäŒç€Ÿã¿ã³ããªã³ CTOãç©é è£ä»ãã speakerdeck.com Heroku ã䜿çšãããµãŒãã¹ã®èšå®/éçšã«ã€ããŠèªã£ãŠäžãããŸããã ã¹ã±ãŒã«ã¢ãŠããèšå®ç»é¢ã§ã¹ã©ã€ããŒãåããã ãã§è¡ããã Git merge ã§èªåãããã€ããããã¿ã³ãæŒãã ãæ¬çªãªãªãŒã¹ãè¡ããç Heroku ã§ã¯ããšãŠãç°¡åã«ãµãŒãã¹ã®èšå®ã»éçšãè¡ããããã§ãã èªåãããã€ããã® Laravel ã® Migration ã®é£æºã¯ãŸã 宿œã§ããŠããªããšã®ããšã 工倫ãå¿
èŠãªç®æãããããã§ãã ã Laravelã®ã³ã³ããéçšã®ãã¹ãã ã©ã¯ ãã£ã¹ãèããŠã¿ã æ ªåŒäŒç€ŸROXX CTOãæŸæ¬ å®å€ªãã slides.com Amazon ECS ã䜿çšããã³ã³ããéçšã«ã€ããŠèªã£ãŠäžãããŸããã ã³ã³ããã®äœ¿ãåããããã®ã³ã°ã®èšå®çã«ã€ã㊠å®éã®èšå®å€ããã€ã³ããªã©ãæžãããŠããããã²åèã«ãããæ
å ±ã°ããã§ããã ã 埪ç°çè€é床80è¶
ãã®çŸè¡ã·ã¹ãã ã« Laravel à ãªããªã³ ã¢ãŒããã¯ã㣠ã§ç«ã¡åãã£ã話 æ ªåŒäŒç€Ÿããããæ å 岿ãã speakerdeck.com ãªããªã³ ã¢ãŒããã¯ãã£ ãæ¡çšããããã« Laravel ãå°å
¥ããã話ã«ã€ããŠã®çºè¡šã§ããã ãªããªã³ ã¢ãŒããã¯ã㣠æšé²ã®ããæé©ãª ãã¬ãŒã ã¯ãŒã¯ ãšããŠããªã Laravel ãéžãã ã®ãã å®éã«å°å
¥ããŠã¿ãŠã©ãã ã£ãã®ããªã©ã詳现ãªäºäŸãè峿·±ãã£ãã§ãã ã Laravelã§å°èп𡿥åã·ã¹ãã ãäœãæã®èŠç¹ æ ªåŒäŒç€Ÿã ã©ã ã¶ ãšã³ãžã㢠ãªã³ã°ã ããŒãžã£ãèç§ æ ãã speakerdeck.com é·ã Laravel ã§ã®éçºã«æºãã£ãŠããèç§ããã«ããçºè¡šã§ãã å°èŠæš¡ã·ã¹ãã ã®å®çŸ©ãšãLaravel ã®æ©èœãçšéããšã«ãããããã説æãããŠããããšãŠãåèã«ãªãå
容ã§ããã ã ææ³ ä»åã®ã€ãã³ãã§ã¯å€§ããåããŠãéçšåãããéçºåããã®2çš®é¡ã®LTãããã ç§ã«ã¯ãæ¥ããæºãã£ãŠãããããã¯ãéçºã«é¢ä¿ãããéçºåããã®çºè¡šãåºãããŸããã ç§ãèå³ãæã£ããéçºåããLT ã¯2ã€ãããŸãã Laravel ã®å°å
¥ãããã 1ã€ç®ã¯ããªããªã³ ã¢ãŒããã¯ãã£ ãæ¡çšããããã« Laravel ãå°å
¥ãã話ã§ãã Laravel ãæ¡çšãã芳ç¹ã¯ããèªç±åºŠã®é«ãããDI ãµããŒããã ãã©ãã«ã·ã¥ãŒãã£ã³ã° ãããããããšãã3ç¹ããšã®ããšã§ããã ãèªç±åºŠã®é«ããã ãã©ãã«ã·ã¥ãŒãã£ã³ã° ãããããããšãã2ç¹ã¯ã ç§ãéçºã«æºãã£ãŠãã補åããã£ãããã£ãŒã©ãŒãã§ãLaravel ãæ¡çšããæ¡ä»¶ãšé¡äŒŒããŠãããèŠªè¿æããããŸããã ç¹ã«èгç¹ã ãã©ãã«ã·ã¥ãŒãã£ã³ã° ããããããã®äžã§èª¬æãããŠãã ãå©çšè
ã®å€ãããšããç¹ã¯ã ãã¬ãŒã ã¯ãŒã¯ ã®å¯¿åœã«ãé¢ãããã ãã¬ãŒã ã¯ãŒã¯ éžå®æã®éèŠãªèŠçŽ ã ãšæããŠããŸãã ãŸãã ããžãã¹ããžã㯠ã®åé¢ã«ã€ããŠã解説ãããŠããŸããã ããã£ãããã£ãŒã©ãŒãã®éçºã§ã ããžãã¹ããžã㯠ã®åé¢ãæèããã¬ã€ã€ãŒèšèšãåãå
¥ããŠããŸããã ããæ¬æ Œçã«é²ããããŠããå°è±¡ãäŒãã£ãŠããŸããã Laravel ã®è±å¯ãªæ©èœäŸ 2ã€ç®ã¯ãLaravel ã§ã®éçºã«é·ãæºãã£ãŠããæ¹ãªãã§ã¯ã®è©³çŽ°ãªæ©èœèª¬æã§ããã ãããã Laravel ã§éçºããæ¹åãã®çºè¡šãšã®ããšã§ããã ãã§ã«èŠç¥ã£ãæ©èœä»¥å€ã«ãã䜿çšããããšã®ãªãæ©èœã®èª¬æããããŸããã ä»åŸã®éçºã§æŽ»ãããããªæ©èœãå«ãŸããŠããããLaravel ã£ãŠäŸ¿å©ã ãªããšæ¹ããŠæã£ã次第ã§ãã ä»å玹ä»ã®ãã£ãæ©èœä»¥å€ãå«ããŠã äžåºŠãLaravel ã®å
¬åŒãªãã¡ã¬ã³ã¹ã«ããã£ãŠãå
šæ©èœã確èªããŠããå¿
èŠãããããã§ãã ã ãããã« å®ã¯ Zoom ã§ã®ãªã³ã©ã€ã³å匷äŒåå ã¯äººçåã®çµéšã§ããã 話ããŠããæ¹ã®ãéããæ®æ®µã®å匷äŒãšã¯ãŸãéã£ããéããããããšãŠãæ°é®®ã§ããã ä»åã®åå ããå匷äŒã¯ãæ®æ®µã¯æ±äº¬ã§éå¬ãããŠããããã§ãã 倧éªåšäœã®ç§ãšããŠã¯ãåå ãé£ããå匷äŒã«åå ããããšãã§ããã®ãããªã³ã©ã€ã³éå¬ãªãã§ã¯è¯ãçµéšã§ããã ã æåŸã«å®£äŒãšãªããŸããã æ ªåŒäŒç€Ÿã©ã¯ã¹ ã§ã PHP ãã¯ãããšããåçš®å匷äŒãéå¬ããŠããŸãã ãªã³ã©ã€ã³äžå¿ãšãªããŸãã®ã§ãåå ããããããšæããŸãããããããã°ãã²ãåå ãã ããã 詳ããã¯ãã¡ããã芧ãã ããã https://rakus.connpass.com/ rakus.connpass.com
ããã«ã¡ã¯ããšã³ãžãã¢ã® id:eichisanden ã§ãã CentOS6ããCentOS7ã«ããŒãžã§ã³ã¢ããããæã«è¬ã®æ§èœå£åã«èŠãããããããšããããŸããã 仿ŽCentOS7ãšããæãããããŸãããæããCentOS8ã«ãéãã話ãªã®ãšã CentOS6ã®ãµããŒãã2020/11/30ã«åããã®ã§ããŒãžã§ã³ã¢ããããæ¹ããããšæãèšäºã«ããŠã¿ãŸããã åãæ¡ä»¶ã§æ§èœãæ¯èŒããŠã¿ã ç¹å®ã®åŠçãé¡èã«æ§èœå£åãã ããããOSåäœã®æ§èœã¯ã©ããªã®ã ã¿ãŒãã»ããŒã¹ããæå¹ã«ãªã£ãŠãããã®ç¢ºèª ã¿ãŒãã»ããŒã¹ãã¯æå¹ã ã£ã CPUã¬ãããŒãperformanceã«å€æŽããŠã¿ã tunedã®èšå®ã倿Žãã CPUã®è匱æ§ãããã®ååšã«æ°ã¥ã 詊ãã«è匱æ§ããããç¡å¹ã«ããŠã¿ã ãããã« åãæ¡ä»¶ã§æ§èœãæ¯èŒããŠã¿ã ãŸããã»ãŒåãã¹ããã¯ã®ç©çãµãŒãã2å°çšæããŠãåãã¢ããªãåãããŒã¿ãåãåŠçãæµããŠæ§èœæ¯èŒãè¡ããŸããã ç¹å®ã®åŠçãé¡èã«æ§èœå£åãã ãã ãããåŠç ã¯CentOS6ã§ã¯148ç§ã§çµãã£ãŠããã®ã«CentOS7ã§ã¯168ç§ããããçµæã«ãªããŸããã ã¡ãã£ãšååŸã¿ã€ãã³ã°ãããã¡ãã£ãŠãŸããvmstatãã°ã©ãåããŠèŠãŠã¿ãŸãã CentOS7 CentOS6 ããã«CPUã®sysïŒ Linux ã«ãŒãã« ã䜿ã£ãŠããCPU䜿çšçïŒã®èµ€ãç®ç«ã€ã®ãšè¥å¹² ã³ã³ããã¹ãã¹ã€ãã ãå€ãããšãç®ã«ã€ããã®ã§CPUåšããçãããšã«ããŸããã ããããOSåäœã®æ§èœã¯ã©ããªã®ã OSåäœã®æ§èœã¯ã©ããªã®ããšããããšã§UnixBenchãååŸããŸããã çµæãã¿ããšã Dhrystone 2 using register variables ãšããæŽæ°æŒç®ä»¥å€ã¯CentOS6ã®å§åãšããçµæã«ã 枬å®ããã¢ããªã«éãã¯ãªãããç°å¢èªäœã®åé¡ãšçã£ãŠããŸããã®ã§äºæ³éãã®çµæã«ãªããŸããã ãšèšãããšã§ãç¶ããŠOSã®èšå®ã«ãã¹ããªãããèŠãŠãããŸãã ã¿ãŒãã»ããŒã¹ããæå¹ã«ãªã£ãŠãããã®ç¢ºèª ã¿ãŒãã»ããŒã¹ã ãšããã®ã¯è² è·ãããã£ãŠããã³ã¢ã«å¯ŸããŠå®æ Œã®åäœåšæ³¢æ°ãããé«ãåšæ³¢æ°ã§åãã ã€ã³ãã« ã®CPUã®ä»çµã¿ã§ãã æ€èšŒã«äœ¿çšããã®ã¯ã¿ãŒãã»ããŒã¹ãã«å¯Ÿå¿ãã Xeon ã§ããããããç¡å¹ã«ãªã£ãŠããªãã®ã§ã¯ïŒãšçã£ãŠã¿ãŸããã ã¿ãŒãã»ããŒã¹ãã¯æå¹ã ã£ã cpupowerã³ãã³ãèŠããšã boost state support ã Active: yes ã«ãªã£ãŠããã®ã§æå¹ã«ãªã£ãŠããããã§ãã # cpupower frequency-info analyzing CPU 0: driver: intel_pstate CPUs which run at the same hardware frequency: 0 CPUs which need to have their frequency coordinated by software: 0 maximum transition latency: Cannot determine or is not supported. hardware limits: 800 MHz - 3.50 GHz available cpufreq governors: performance powersave current policy: frequency should be within 800 MHz and 3.50 GHz. The governor "powersave" may decide which speed to use within this range. current CPU frequency: 1.20 GHz (asserted by call to hardware) boost state support: Supported: yes Active: yes åæã«ããã®CPUã®åšæ³¢æ°ã¯3GHzã§ããã800MHzãã3.5GHzã®ç¯å²ã§åãããšã ãã®ã³ãã³ããå©ããç¬éã¯1.2GHzã®åšæ³¢æ°ã§åããŠããããšãã³ãã³ãã®çµæããåãããŸãã äœãåšæ³¢æ°ã§åäœããŠããã®ã¯CPUã¬ãããŒã powersave ã«ãªã£ãŠããããšãåå ãªããã§ãã powersave ã¯æ äœåšæ³¢ æ°ã«åºå®ããŠåäœãããšããèšäºããã£ãã®ã§ããã UnixBenchäžã®è² è·ãæãã£ãç¶æ
ã§èŠãŠã¿ããšè² è·ãæããã°æå€§åšæ³¢æ°ã§åäœããããã§ããã # cpupower frequency-info analyzing CPU 0: driver: intel_pstate CPUs which run at the same hardware frequency: 0 CPUs which need to have their frequency coordinated by software: 0 maximum transition latency: Cannot determine or is not supported. hardware limits: 800 MHz - 3.50 GHz available cpufreq governors: performance powersave current policy: frequency should be within 800 MHz and 3.50 GHz. The governor "powersave" may decide which speed to use within this range. current CPU frequency: 3.50 GHz (asserted by call to hardware) boost state support: Supported: yes Active: yes æ€èšŒã«äœ¿çšãããµãŒããŒã®CPU㯠performance ãš powersave ãããµããŒãããŠããŸãããã powersave 㯠ondemand ãéžãã æã®ããã«å¿
èŠã«å¿ããŠåšæ³¢æ°ãäžãããããªåããããããšãåãããŸããã CPUã¬ãããŒãperformanceã«å€æŽããŠã¿ã è² è·ãæããã°åšæ³¢æ°ãæå€§ãŸã§äžããã®ã§æå³ããªããããšæãã€ã€ performance ã«å€æŽããŠã¿ãŸã # cpupower frequency-set --governor performance Setting cpu: 0 Setting cpu: 1 Setting cpu: 2 Setting cpu: 3 å床æ§èœæž¬å®ãããšããã168ç§æãã£ãŠããã®ãã159ç§ã«ãŸã§äžæ°ã«æ©ããªããŸããïŒïŒ powersaveã§ãæçµçã«ã¯ããŒã¹ããå¹ãã®ã§ãããŸã§å·®ãåºããšã¯æã£ãŠãããæå€ãªçµæã§ããã ãã ããŸã æã£ãæ§èœãåºãŠããªãã®ã§æ€èšŒãç¶ããŸãã tunedã®èšå®ã倿Žãã CPUã¬ãããŒã ããèšå®ããŠãããã®ã§ãããCentOS7ããå°å
¥ãããtunedãšããåçš®ãã©ã¡ãŒã¿ã䟿å©ã«èšå®ã§ããä»çµãããã®ã§ããã䜿çšããŠèšå®ããŸãã æ€èšŒã«äœ¿çšãããµãŒããŒã¯ balanced ãããã©ã«ãã§èšå®ãããŠããã®ã§ã throughput-performance ã«å€æŽããŸããã # ããã©ã«ãã®èšå® # tuned-adm recommend balanced # çŸåšã®èšå®ãç¢ºèª # tuned-adm active Current active profile: balanced # throughput-performanceã«å€æŽ # tuned-adm profile throughput-performance CPUã¬ãããŒãperformanceã«ãªã以å€ã«ãããã€ãã®ãã©ã¡ãŒã¿ãããã©ãŒãã³ã¹å¯ãã®èšå®ã«ãªããŸãããã©ããªèšå®ã«ãªããã¯èšå®ãã¡ã€ã«ã§ç¢ºèªã§ããŸãã # cat /lib/tuned/throughput-performance/tuned.conf |grep -e "^[^#]" [main] summary=Broadly applicable tuning that provides excellent performance across a variety of common server workloads [cpu] governor=performance energy_perf_bias=performance min_perf_pct=100 [disk] readahead=>4096 [sysctl] kernel.sched_min_granularity_ns = 10000000 kernel.sched_wakeup_granularity_ns = 15000000 vm.dirty_ratio = 40 vm.dirty_background_ratio = 10 vm.swappiness=10 CPUã® èåŒ±æ§ ãããã®ååšã«æ°ã¥ã ãŸã CentOS6ã®æ§èœã«åã°ãªãã®ã§è²ã
調ã¹ãŠãããšã2018幎ã¯ããã«åé¡ã«ãªã£ãSpectreãšMeltdown察çã®ãããã§æ§èœå£åãããšããèšäºãèŠã€ããŸããã IntelがSpectreとMeltdown修正による0〜21パーセントのパフォーマンス低下を公表 ãã®èгç¹ã§èŠãŠãããšCentOS6ã®æ€èšŒã«äœ¿ã£ããµãŒãã® ã«ãŒãã« ã¯ã¢ããããŒããããŠãããã 察ããŠCentOS7㯠èåŒ±æ§ ãããããã£ããåœãã£ãŠããã®ã§ã ãããé床ã®éãã®èŠå ã ãšããããããšãèŠããŠããŸããã 詊ãã« èåŒ±æ§ ããããç¡å¹ã«ããŠã¿ã æ¬çªç°å¢ã® èåŒ±æ§ ã®ããããç¡å¹ã«ããã€ããã¯ãããŸãããã Meltdownã®ããããç¡å¹ã«ããããšãèšå®ãã¡ã€ã«ã®æžãæãã ãã§åºæ¥ãã®ã§è©Šãã«ãã£ãŠã¿ãŸããã # cat /sys/kernel/debug/x86/pti_enabled 1 # cat /sys/kernel/debug/x86/retp_enabled 1 # cat /sys/kernel/debug/x86/ibrs_enabled 0 # echo 0 > /sys/kernel/debug/x86/pti_enabled # echo 0 > /sys/kernel/debug/x86/retp_enabled ç¡å¹ã«ã㊠ãã³ãããŒã¯ ãåããšå
ãã§ããæ§èœåäžããŠããŸããã CentOS7ã®æ¹ã¯ä»ã«ããã€ãCPUé¢é£ã® èåŒ±æ§ ããããåœãã£ãŠããã å
šãŠã®ããããç¡å¹ã«ããŠã®æ€èšŒãåºæ¥ãªãããæ³åã«ãªããŸãããæ§èœå£åã®åå ã¯ãã®ããããšããçµè«ã«èªåã®äžã§ã¯èœã¡çããŸããã ããããå
ã¯ãã¥ãŒãã³ã°ã§è£ãæ¹åã«æ¹éãåãæ¿ãã調æ»ãšããŠã¯äžæŠå®äºãšããŸããã ããã㫠倧ããªæ§æå€æŽãããæã«ã¯ååŸã®æ§èœæ¯èŒãããããšãéåžžã«å€§äºã ãšæ¹ããŠæããŸããã æ§èœæž¬å®ããç°å¢ã®æ¡ä»¶ã¯æ¥µåæãããšããã®ãæèšã«ãªããŸããã åå ãåããã°å¯Ÿçã®ããããããã®ã§ããã€ãã調ã¹ãç²æããããŸããã 以äžã«ãªããŸããæåŸãŸã§èªãã§ããã ãããããšãããããŸããã ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã forms.gle ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ rakus.connpass.com
ããã«ã¡ã¯ãtakaramã§ãã æè¿æ¥åã§ PHPUnit ã䜿ã£ããã¹ããæžãæ©äŒãå¢ããŠããŸãããåã㯠assertEquals ããç¥ããªãã£ãããã§ãããæè¿ã¯é©å㪠ã¢ãµãŒã·ã§ã³ ã¡ãœãããéžæã§ããããã«ãªã£ãŠããŸãããããã§ä»åã¯æ°ãã PHPUnit ã® ã¢ãµãŒã·ã§ã³ ã¡ãœããã®äžãããäžè¬çã«ãã䜿ããããªãã®ãç¬æãšåèŠã§éžãã§ã玹ä»ããŸãïŒ ãªãã以äžã®å
容ã¯å·çæç¹ã®ææ°çã® PHPUnit (v9.2.6) ã«åºã¥ããŠããŸãã PHPUnitã®ã¢ãµãŒã·ã§ã³ã¡ãœãã assertEquals assertSame assertTrue, assertFalse, assertNull assertCount assertStringStartsWith, assertStringEndsWith, assertStringContainsString assertRegExp assertIsXXX, assertInstanceOf æåŸã« PHPUnit ã® ã¢ãµãŒã·ã§ã³ ã¡ãœãã assertEquals ããå€ãæåŸ
ããå€ãšçãããã©ãããå€å®ããŸãã PHPUnit ã®åå¿è
åãè³æã«ãããåºãŠããããªãã¿ã®ã¡ãœããã§ããã åºæ¬çã«ã¯ã»ãŒäœ¿ããŸãã ããšããã®ãããã㯠æé»ã®å倿ãè¡ããã ããã§ã *1 ãããšãã°ã以äžã® ã¢ãµãŒã·ã§ã³ ã¯å
šãŠæåããŸãã $this- > assertEquals(1, '1'); $this- > assertEquals(null, ''); $this- > assertEquals(null, false); $this- > assertEquals(null, 0); $this- > assertEquals('1', true); ãã¹ãã«ãããŠã¯ãããããå倿ã¯å¬ããå Žé¢ãããå°ãå Žé¢ã®ã»ããå€ãã®ã§ã¯ãªãã§ãããããåŒæ°ã®å
容ã«ãã£ãŠã¯å倿ãèµ·ãããªãã±ãŒã¹ããããŸãããç¹ã«çç±ããªãéãã¯äœ¿ããªããšæã£ãŠããã§ãããã assertSame ã§ã¯ assertEquals ã®ä»£ããã«äœã䜿ãããšãããšããã® assertSame ã§ããåãå«ããæ¯èŒãè¡ãããŸãã PHPUnit åå¿è
ãªãããšããããããããç¥ã£ãŠããã°äœãšããªããŸãã $this- > assertSame('hoge', 'hoge'); // OK $this- > assertSame(0, 0); // OK $this- > assertSame(false, false); // OK $this- > assertSame('hoge', 'fuga'); // NG $this- > assertSame(0, false); // NG $this- > assertSame(7, '7'); // NG assertTrue, assertFalse, assertNull ãããã true , false , null ãšçããããšãå€å®ããŸããå倿ã¯è¡ãããŸãããã€ãŸãã以äžã®2ã€ã¯ã»ãŒåçã§ãã $this- > assertTrue($actualValue); $this- > assertSame(true, $actualValue); ã©ã¡ãã§ããã¹ãã®æåã»å€±æã¯å€ãããŸãããã倱ææã®ã¡ãã»ãŒãžã assertTrue ãªã©ã®æ¹ãå€å°åããããããªããŸãã # assertSame(true, false) ã®ã¡ãã»ãŒãž Failed asserting that false is identical to true. # assertTrue(false) ã®ã¡ãã»ãŒãž Failed asserting that false is true. assertCount é
åã countable ãªãªããžã§ã¯ãã®èŠ çŽ æ° ãæ€æ»ããŸãã assertSame ã®åŒæ°ã« count() ã®çµæãæž¡ãããšã§ãåããã¹ãã¯ã§ããŸãããããããã¯ã倱ææã¡ãã»ãŒãžã assertCount ã®æ¹ãåããããããªã£ãŠããŸãã # assertSame(1, count([])) ã®ã¡ãã»ãŒãž Failed asserting that 0 is identical to 1. # assertCount(1, []) ã®ã¡ãã»ãŒãž Failed asserting that actual size 0 matches expected size 1. assertStringStartsWith, assertStringEndsWith, assertStringContainsString æååã®å
容ãéšåäžèŽã§æ€æ»ãã ã¢ãµãŒã·ã§ã³ ã§ããåãããšã assertSame ã§ããããšæããš strpos() ã substr() ã䜿ãããšã«ãªããŸããããããã® ã¢ãµãŒã·ã§ã³ ã¡ãœãããå©çšããã»ãããã¹ãã³ãŒãäžãæå³ããããããããªããŸããã // 以äž2ã€ã¯åãå
容ã®ãã¹ã $this- > assertStringStartsWith('foo', $string); $this- > assertSame(0, strpos($string, 'foo')); // äœããã¹ããããã®ãããçè§£ãã«ãã // 以äž2ã€ã¯åãå
容ã®ãã¹ã $this- > assertStringEndsWith('bar', $string); $this- > assertSame('bar', substr($string, -3)); // ãããçè§£ãã«ãã assertRegExp æååã æ£èŠè¡šçŸ ã«ããããããæ€æ»ããŸããäžèšã® assertStringContainsString ãªã©ãããæ¡ä»¶ãè€éãªå Žåã«äœ¿ããŸãã assertIsXXX, assertInstanceOf å€ãé
åãã©ãããæ€æ»ããããã«ã assertTrue(is_array($value)) ãšãã代ããã« assertIsArray($value) ãšæžãããšãã§ããŸãã is_array 以å€ã«ã is_int , is_numeric , is_string , is_bool , is_callable , is_object ãªã©ã is_xxx ã®é¢æ°ã«å¯Ÿå¿ãã ã¢ãµãŒã·ã§ã³ ã¡ãœããã¯äžéãçšæãããŠããŸãã ãŸãããªããžã§ã¯ãã®åãæ€æ»ãããå Žå㯠assertInstanceOf(SomeClass::class, $value) ã䜿ããŸãã æåŸã« ä»å玹ä»ãã ã¢ãµãŒã·ã§ã³ ã¡ãœããã¯ããäžéšã§ãã ã¢ãµãŒã·ã§ã³ã¡ãœããã®äžèЧ ãããã¥ã¢ã«ã«ããã®ã§ãã©ããªã¡ãœãããçšæãããŠããã®ãããã²äžåºŠèŠãŠã¿ãŠãã ããïŒ ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã rakus.hubspotpagebuilder.com ã©ã¯ ã¹Developersç»é²ãã©ãŒã https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ âTECH PLAY techplay.jp âconnpass rakus.connpass.com *1 : PHP ã®== æŒç®å ã«äŒŒãŠããŸããã以äžã®èšäºã§è§£èª¬ãããŠããããã«ãå³å¯ã«ã¯ç°ãªããŸãã https://qiita.com/aminevsky/items/238b7ed77766a3d3023d
ã¯ããã« åããŸããŠãntthuatãšç³ããŸãã ã©ã¯ ã¹ã«å
¥ç€ŸããŠ3幎ç®ã«ãªããŸãããæéãéããã®ã¯æ©ãã§ããã ããŠã2020幎12ææ«ã« Flash ã®ãµããŒããçµäºãããšãã話ã¯çããããåç¥ããšæããŸãã ä»åãç§ãéçºæ
åœããŠãããæ¥œæ¥œç²Ÿç®ãã§ã Flash ã®ä»£ããã« WebUSB ãšããæè¡ãçšããŠã ICã«ãŒã å±¥æŽãåãèŸŒãæ©èœããªãªãŒã¹ããããšã«ãªããŸããã ãã®èšäºã§ã¯ãã® WebUSB ã«ã€ããŠè©Šããããšãäžéšã玹ä»ãããŠããã ããŸãã ã¯ããã« åäœç¢ºèªç°å¢ WebUSBãšã¯ PaSoRi RC-S380/Sã®ãã©ã€ããŒãã€ã³ã¹ããŒã«ãã WebUSBã®åäœç¢ºèª ãããã« åäœç¢ºèªç°å¢ 以äžã®ç°å¢ã§ WebUSB ã®åäœã確èªããŸãã Windows 10 Google Chrome 83 PaSoRi RC-S380/S WebUSB ãšã¯ ç°¡åã«èšããšã WebUSB 㯠javascript ã§æžãããŠãã API ã§ãã WebUSB ã¯PCã«æ¥ç¶ãããUSBã ãã€ã¹ ã« Chromium ç³»ãã©ãŠã¶ïŒ Chrome ãªã©ïŒããçŽæ¥ã¢ã¯ã»ã¹ããããšãã§ããæè¡ã§ãã USBã ãã€ã¹ ã®èªèãèªã¿åºããªã©ãè¡ãããšãã§ããŸãã Edge㯠Chromium ããŒã¹ã§éçºããŠããŸãã®ã§Edgeã§ã WebUSB ã䜿çšã§ããŸãã Chrome ã®Developer Toolsã§ WebUSB ã® API ãå®è¡ããŠã¿ãŸãããã await navigator.usb.requestDevice( { 'filters' : []} ) ãã©ã€ããŒãã€ã³ã¹ããŒã«ããã«ãã©ãŠã¶èªäœã®ã¿ã§USBã ãã€ã¹ ãèªèã§ããŸãã ä»å㯠PaSoRi RC-S380/Sçµç±ã§ WebUSB ã®åäœã確èªããŸãã®ã§ PaSoRi RC-S380/Sã®ãã©ã€ããŒã®ãã©ã€ããŒãå¿
èŠã§ãã PaSoRi RC-S380/Sã®ãã©ã€ããŒãã€ã³ã¹ããŒã«ãã ソニー株式会社 | FeliCa | 法人のお客様 | 製品情報 |ソフトウェア開発環境 |ICS-DCWE9 SDK for NFC Web Client | 個人情報取得同意説明 ã§è©äŸ¡çãããŠã³ããŒãã§ããŸãã Sony ãµã€ãã§ã®ããã¥ã¢ã«ã®ãšããå®è¡ããŸãã ã³ãã³ãããã³ãã çã§ã NFC ããŒããœãããŠã§ã¢ã以äžã®ãªãã·ã§ã³ãæå®ããŠã€ã³ã¹ããŒã«ããŠãã ããã NFCPortWithDriver.exe /WinUSBã æ³šæç¹ïŒ NFCPortWithDriver.exeãããã«ã¯ãªãã¯ãããšãWinUSBãå«ããªããã©ã€ããŒãã€ã³ã¹ããŒã«ããŠããŸããŸãã®ã§ãWinUSBã«ä»ããŠå®è¡ããŠãã ããã ãã©ã€ããŒã€ã³ã¹ããŒã«ãå®äºãããã NFC ããŒãèªå·±èšºæ(ãã©ã€ãåãæã)ã§WinUSBãã©ã€ããŒã«åãæããã§ããŸãã WinUSBã«åãæ¿ãããŠãã ããã WebUSB ã®åäœç¢ºèª PaSoRi RC-S380/Sçµç±ã§ ICã«ãŒã ãåã蟌ã¿ã確èªããŸãããã ãœã㌠ã®ãµããŒããµã€ãã§æäŸãããŠãããµã³ãã«ããã°ã©ã ãå®è¡ããŠã¿ãŸãã ãµã³ãã«ããã°ã©ã ã® ãœãŒã¹ã³ãŒã ã«ã€ããŸããŠã¯ã詳ãã㯠Sony ãµã€ãã§ã芧ãã ããã PaSoRi RC-S380/SãPCã«ç¹ããŠExecuteãã¿ã³ãã¯ãªãã¯ãããšãã ãã€ã¹ ãéžæãããã€ã¢ãã°ãåºãŠãRC-S380/Sãèªèã㊠ICã«ãŒã å±¥æŽãèªã¿åãã§ããŸãã å®è¡çµæã¯ä»¥äžã®ããã§ãã ã¬ã¹ãã³ã¹ã®ããŒã¿ã¯hexã®ãã©ãŒãããã§ãããåæããŠæ¥ä»ãè·é¢ãéé¡ãªã©ãååŸã§ããŸãã ãããã« Flash ã®ãã¢ãŒãéãŸããš WebUSB ã®ãã¢ãŒãéãããŸããã(^_^) WebUSB ã§ãã©ãŠã¶ããUSBã ãã€ã¹ ãèªåãã§ããŠçŽ æŽãããã£ãã§ãã ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã 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
ã¯ãããŸããŠãæ°èŠãµãŒãã¹ã®éçºããŒã ã«æå±ããŠããkarabishã§ãã åããæ°ã«ãªã£ãŠãã Grafana Loki ãããŒã«ã«ã§è©ŠããŠã¿ãŸããã Grafana Lokiã¯ãã°éçŽã·ã¹ãã ã§ã䌌ããã®ãšããŠã¯ Elasticsearch ã Splunk ã«ãªãã®ããšæããŸãã å
¬åŒããã¥ã¡ã³ãã§ã Elasticsearch ãšã® æ¯èŒ ãèšèŒãããŠããŸãã ç°å¢æ§ç¯ 1. ãã®ã³ã°ãã©ã°ã€ã³ã®ã€ã³ã¹ããŒã« 2. docker-compose.ymlã«Lokiã远å 3. docker-composeã®èµ·å ãã°ã®é²èŠ§ãšæ€çŽ¢ åæèšå® ãã°ã®é²èЧ æåŸã« ç°å¢æ§ç¯ ä»åã¯ã docker-compose ã§ããŒã«ã«ã«Lokiãæ§ç¯ããæé ã«ãªããŸãã PostgreSQL ã®ãã°ã転éãããããã«ããŠããŸãã 1. ãã®ã³ã° ãã©ã°ã€ã³ ã®ã€ã³ã¹ããŒã« PostgreSQL ã®ãã°ãLokiã«çŽæ¥è»¢éããããã«docker pluginãã€ã³ã¹ããŒã«ããŸãã docker pluginã«ã€ããŠã¯ Docker Driver Client ã«èšèŒãããŠããŸãã $ docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions latest: Pulling from grafana/loki-docker-driver 0974501310e6: Download complete Digest: sha256:436fb0e17e7dde023398b539b03d91d902d5293da199a6ef6bb0b8262b8801e7 Status: Downloaded newer image for grafana/loki-docker-driver:latest Installed plugin grafana/loki-docker-driver:latest $ 2. docker-compose.ymlã«Lokiã远å ããã¥ã¡ã³ã ã«ç޹ä»ãããŠããdocker-compose.ymlãåèã«èšèŒãããã®ã§ãã PostgreSQL ã®ãã°ãLokiã«è»¢éããããã«loggingããããã£ã§Lokiã®æ¥ç¶æ
å ±ãèšèŒããŠããŸãã version: "3.8" networks: loki: services: postgres: image: postgres:12.3 container_name: postgresql ports: - 5432:5432 environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres - POSTGRES_DB=sample restart: always logging: driver: loki options: loki-url: http://localhost:3100/loki/api/v1/push volumes: - postgresdata:/var/lib/postgresql/data loki: image: grafana/loki:1.5.0 container_name: loki ports: - 3100:3100 command: -config.file=/etc/loki/local-config.yaml networks: - loki grafana: image: grafana/grafana:master container_name: grafana ports: - 3000:3000 networks: - loki volumes: postgresdata: driver: local 3. docker-composeã®èµ·å $ docker-compose up -d Creating network "grafana-loki_default" with the default driver Creating network "grafana-loki_loki" with the default driver Creating volume "grafana-loki_postgresdata" with local driver Creating loki ... done Creating grafana ... done Creating postgresql ... done $ ãã°ã®é²èŠ§ãšæ€çŽ¢ åæèšå® Grafanaã«ãã°ã€ã³ããŸãã URL㯠http://localhost:3000/ ã§ãã ååã¯Email or username: admin ãPassword: admin ã§ãã°ã€ã³ã§ããŸãã Add your first data sourceããLokiãéžæããŠãURLæ¬ã« http://loki:3100 ãå
¥åã®äžã[SaveïŒTest]ãã¿ã³ãæŒãã°åæèšå®ã¯å®äºã§ãã ãã°ã®é²èЧ ãµã€ãã¡ãã¥ãŒããExploreã«ã¢ã¯ã»ã¹ããŸããããšã¯ãLog lablesãèšå®ãããšãã°ãé²èЧã§ããŸãã äžã®ç»å㯠container_name ã©ãã«ã§ postgresql ã³ã³ããã®ãã°ãé²èЧããçµæã§ãã æåŸã« æ¯èŒçå°ãªãäœæ¥ã§ PostgreSQL ã®ãã°ãLokiã§éçŽããŠGrafanaã§é²èЧãããŸã§ã®æ§ç¯ã¯ã§ããŸããã PostgreSQL ã®ãã°ãèŠãã ãã§ããã° docker logs ã§åé¡ãªãã®ã§ãããä»ã®ãã°ãããããŠã¿ããæãããã®ã§ä»åŸã¯éçŽãããã°ãå¢ãããŠãããã°ãšæããŸãã ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã forms.gle ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ rakus.connpass.com
çããããã«ã¡ã¯ã ã©ã¯ ã¹ã®ããžãµã¯ã§ãã 以åãTypeScriptãå§ããå㯠ãåŠç¿ã³ã¹ããé«ããããä»åããŠãããµãŒãã¹ã«å°å
¥ããã®ã¯é£ãããã ãããªãã ãšããã€ã¡ãŒãžã匷ãã£ãã®ã§ããããªããŠããšã¯ãªããã¿ã€ãã«ã«ããéãã ãTypeScript䜿ããªããšããéžæè¢ãªããïŒãããã¬ã¬ã·ãŒãªã¢ããªã±ãŒã·ã§ã³ããã䜿ã£ãŠããã¹ããããïŒã ãšæã®ã²ããã°ãªã³ã°ãªã³å転ããã®ã§ããã²çããã«ç޹ä»ãããŠããããããšæãããã®èšäºãæžãããšã«ããŸããã TypeScriptãšã¯ Microsoft 補ã®AltJS( JavaScript ã®ä»£æ¿ãšãªããã®ïŒã§ã OSS ã§éçºãããŠãã éçåä»ãèšèªã§ãçŽæçã«ããã°ã JavaScript ïŒåã TypeScript ã³ã³ãã€ã© ããwebpackãBabelãªã©ã§ JavaScript ã«ãã©ã³ã¹ãã€ã«ããŠäœ¿çšãã ããã³ããšã³ãïŒãã©ãŠã¶ïŒãããã¯ãšã³ãïŒNode.jsïŒåæ¹ã®éçºã§æŽ»çšã§ãã çç±â ãTypeScript㯠JavaScript ã®ã¹ãŒããŒã»ããã§ããã ããã¯ã å
¬åŒãµã€ã ã®åé ã«åºãŠããèšèãªã®ã§ãããã¡ãã£ãšäœèšã£ãŠããåãããªãã§ãããã ç°¡åã«ãããšã ãTypeScript㯠JavaScript ã®äžäœäºæã§ããã JavaScript ã®ææ³ã»ç¥èããã®ãŸãŸé©çšã§ãããã ãšããããšãèšã£ãŠããŸãã ãã¡ãããTypeScriptåºæã®èšèªä»æ§ãã䟿å©ãªäœ¿ãæ¹ãªã©ã¯ååšããã®ã§ããããããç¿åŸããŠããªããŠãTypeScriptãå©çšããããšãã§ããŸãã ãã£ãšèšãã°ãã JavaScript ãšæã£ãŠäœ¿ãããšãã§ããããå¿
èŠã«å¿ããŠTypeScriptãªãã§ã¯ã®æ©èœã䜿ãããšãã§ããããšè¡šçŸã§ããŸãã çç±â¡ã åæšè« ã®æ©æµã«ããåã«å¯Ÿããå®å
šæ§ãç²åŸã§ãã åæšè« ãšã¯ã倿°ã颿° ã·ã°ãã㣠ã®åãæç€ºçã«å®£èšããªããŠããåæåã®éã«ä»£å
¥ããå€ãã颿°åŒã³åºãã®å®åŒæ°ãªã©ã®æ
å ±ãæèãããèªåçã«åãæšæž¬ããŠæ±ºå®ããä»çµã¿ã®ããšãèšããŸãã ããã«ããããã¡ãã¡åãæžããšåé·ãªèšè¿°ã«ãªããã¡ãªåã·ã¹ãã ã«ããå®å
šæ§ã享åããªãããåé·ããåé¿ããã·ã³ãã«ãªèšè¿°ãã§ãããšèšãããŠããŸãã â»ãªãã åæšè« ã«ã€ããŠã¯è³åŠãããã åæšè« ãæŽ»ãããã³ãŒãã¯ãæç€ºçã«åã衚çŸãããªãã®ã§ãäºæ³å€ã®æšè«çµæã«ãªã£ãããéã«ãããã«ãããªã£ãŠããŸããšããæèŠããããŸãã TypeScriptã® åæšè« ããªãã¬ã¬ã·ãŒã³ãŒãã«ãšã£ãŠéèŠãªã®ãïŒ åè¿°ã®éããTypeScriptã® åæšè« ã®æ©èœã«ãã£ãŠãæ¢åã® JavaScript ã³ãŒããå宣èšãè¡ã£ãŠããªããŠããåãæšæž¬ãã ã³ã³ãã€ã« æã«é©åã«ãã§ãã¯ãè¡ã£ãŠãããããã«ãªããŸãã ããã¯ããããšããšåã®æŠå¿µãååšããŠããªãã³ãŒããã§ãã£ããšããŠããéšåçã«åå®å
šãä¿ã£ãŠããããšãã§ãããšããããšãæå³ããŠããŸãã ã³ãŒãã®å
·äœäŸãããã€ãæããªãããã©ã®ããã« åæšè« ãè¡ããã ã³ã³ãã€ã« æã®åãã§ãã¯ã«å©çšããããã玹ä»ããŸãã TypeScriptã«ããã åæšè« ã®äŸ äŸ1 : let/const let foo = 'hello' ; // æç€ºçã«æå®ããŠããªãããfooã¯stringã§ãããšèªèããã foo = 1; // ã³ã³ãã€ã«ãšã©ãŒ console.log(foo); 1è¡ç®ã§foo㯠string ã§ããããšãããã£ãŠããã®ã§ã2è¡ç®ã® number åã®å€ã代å
¥ããããšãããšãšã©ãŒã«ãªã äŸ2 : returnå€â function someFunc() { return 100; // æç€ºçã«æå®ããŠããªãããè¿åŽå€ã¯numberã§ãããšèªèããã } let message: string = someFunc(); // ã³ã³ãã€ã«ãšã©ãŒ someFuncã®æ»ãå€ã number ã§ããããšãåãã£ãŠããã®ã§ã string åã®å€ãžã®ä»£å
¥ã ã³ã³ãã€ã« ãšã©ãŒã«ãªã äŸ3 : returnå€â¡ function multi(a: number, b:number) { return a * b; //number * number = number } åŒæ°ã number ãªã®ã§ãæŒç®çµæã number ã§ãããšæšè«ããã äŸ4 : é
å let foo = [ 0, 1, 2 ] // foo: number[]ãšæšè« let bar = [ 0, 1, 'aaa' ] // bar: (number | string)ãšæšè« äŸ5 : Object const user = { name: 'Taro' , // name: stringãšæšè« age: 20 // age: numberãšæšè« } /* 以äžã®åãæã€ãªããžã§ã¯ãã§ããããšãæšæž¬ããã const user: { name: string; age: number; } */ JSON let data = [ { "id" : 100, "name" : "Taro" } , { "id" : 101, "name" : "Hanako" } ] /* 以äžã®åãæã€ãªããžã§ã¯ãã§ããããšãæšæž¬ããã let data: { id: number; name: string; }[] */ ã¬ã¬ã·ãŒã³ãŒãããTypeScriptã®å°å
¥ã«ãã£ãŠæ©æµãåŸããµã³ãã« äžèšã®ãããªã³ãŒãããã§ã«ã·ã¹ãã äžã«å®è£
ãããŠããã³ãŒãã ãšããŸãã function someFunc(foo) { if (foo > 0) { return foo * 2; } } var bar = someFunc(1); console.log(bar.toString()); ãã¡ããããã® JavaScript ã¯åé¡ãªãåäœããŸããããã®ã³ãŒãã«ã¯äžã€ã®åé¡ãæœãã§ããŸãã ãã©ã¡ãŒã¿ã«è² å€ãæž¡ããšã©ããªãã§ããããã var baz = someFunc(-1); // è² ã®å€ãæž¡ããšundefinedãåž°ã£ãŠãã console.log(baz.toString()); baz.toString() ã¯ã baz ã undefined ãªã®ã§ãã©ã³ã¿ã€ã ãšã©ãŒãçºçããŸãã ããããããã¯å®è¡ããªããã°æ€åºããããšãã§ããŸããã ã§ã¯ããããTypeScriptç°å¢ã§ ã³ã³ãã€ã« ãããšã©ããªãã§ããããïŒ ã³ã³ãã€ã« ãšã©ãŒãçºçãã var baz = someFunc(-1); console.log(baz.toString()); // ã³ã³ãã€ã«ãšã©ãŒïŒObject is possibly 'undefined'. ã³ã³ãã€ã© ãã³ãŒããè§£æããŠ åæšè« ããçµæã¯æ¬¡ã®éããšãªãã number ãŸã㯠undefined ãè¿ãã¡ãœããã§ãããšèªèãããŸãã function someFunc(foo: any): number | undefined someFunc 㯠undefined ãè¿ãå¯èœæ§ãããããããã®è¿åŽå€ã代å
¥ããŠãã baz ã«å¯Ÿããæäœãå±éºã§ããããšãã ã³ã³ãã€ã© ãæããŠãããããã«ãªããŸãã someFuncãå®å
šã«äœ¿çšããã«ã¯ã次ã®ãããªã³ãŒãã«ä¿®æ£ããå¿
èŠããããŸãã var bar = someFunc(-1); if (bar === undefined ) { ã // undefinedã®ãã§ã㯠bar = 0; } console.log(bar.toString()); äžèšã®ããã«èšè¿°ããã°ã ã³ã³ãã€ã« ãšã©ãŒã¯èµ·ããªããªããŸãã bar === undefined ã®ãã§ãã¯ãããããšã§ã toString ãå®è¡ãããã¿ã€ãã³ã°ã§ã¯ number ããå°éããªãããšãTypeScriptãçè§£ããããã«ãªãããã§ãã â»ãªãããã®ãããªåã®çµã蟌ã¿åŠçããåã¬ãŒãããšåŒã³ãŸãã å
çšã¯ someFunc ã䜿ãåŽã®ã³ãŒãã®åé¡ãTypeScriptãæ€åºããŠãããäŸãèŠãŸããããå®ã¯ someFunc èªäœã«ãåé¡ãæœãã§ããŸãã ã³ã³ãã€ã« æã®ãªãã·ã§ã³ noImplicitReturns ãæå¹ã«ãããšã次ã®ãã㪠ã³ã³ãã€ã« ãšã©ãŒãçºçãã function someFunc(foo) { // ã³ã³ãã€ã«ãšã©ãŒïŒNot all code paths return a value. if (foo > 0) { return foo * 2; } } someFunc ããã¹ãŠã®ãã¹ã§è¿åŽå€ãè¿ããŠããããæå³ããªãundefinedãè¿ãå¯èœæ§ãæããŠãããããã«ãªããŸãã ãã®ããã«ãæ¢åã³ãŒãã«å宣èšãªã©ãåã®æ
å ±ãäžããŠããªãã«ããããããã åæšè« ã«ãã£ãŠæªç¶ã«äžå
·åãæ€åºããããšãã§ããããã«ãªã£ãã®ãåããããšæããŸãã çç±â¢ã JavaScript ã©ã€ãã©ãªãšã®é£æºã容æã§ãã ã¬ã¬ã·ãŒãªã·ã¹ãã ã«ã¯ãã§ã«ããããã® JavaScript ã§èšè¿°ãããã©ã€ãã©ãªã䜿çšãããŠããŸãã TypeScriptã«ã¯ããããã JavaScript ã©ã€ãã©ãªãšããŸã飿ºããä»çµã¿ãåãã£ãŠããŸãã JavaScript ã§èšè¿°ãããã©ã€ãã©ãªãTypeScriptã«å°å
¥ããæ¹æ³ã¯ããã€ãååšããŸãã å宣èšãã¡ã€ã«ãèªäœãã DefinitelyTypedã§å
¬éãããŠããåå®çŸ©ãã¡ã€ã«ã䜿çšãã allowJSãªãã·ã§ã³ã掻çšãã å宣èšãã¡ã€ã«ïŒd.tsãã¡ã€ã«ïŒãèªäœããæ¹æ³ ãå宣èšãã¡ã€ã«ããäœæããTypeScriptã«ã©ã€ãã©ãªã®åæ
å ±ãäŒããããšã§å®çŸããæ¹æ³ã§ãã äŸãã°ã次ã®ãã㪠JavaScript ã§èšè¿°ãããã©ã€ãã©ãª calc.js ããããšããŸãã // calc.js exports.sub = function (a, b) { return a - b; } ãã®ã©ã€ãã©ãªãå©çšããã«ã¯ã次ã®ãããªå宣èšãã¡ã€ã«ãäœæããŠé
眮ããããšã§å®çŸå¯èœã§ãã â»ä»åã®äŸã§ã¯ãtsãã¡ã€ã«ãšåã ãã£ã¬ã¯ã ãªã«é
眮ããããã«ããŠããŸãã // calc.d.ts export function sub(a: number, b: number): number; ããã«ããã exec.ts 㯠calc.d.ts ãéã㊠sub 颿°ãèªèããããšãã§ãã ã³ã³ãã€ã« ãéãããã«ãªããŸãã // exec.ts import { sub } from "./calc" ; console.log(sub(100, 1)); å宣èšãã¡ã€ã«ã®å®çŸ©ã«åºã¥ãã ã³ã³ãã€ã« æã« åæšè« ãåãã§ãã¯ãè¡ãããããã«ãªããŸãã ãã¡ããã IDE ã«ãèªèãããã®ã§ã³ãŒãè£å®ãªã©ãæå¹ã«ãªããŸãã DefinitelyTypedïŒ@typesïŒã§å
¬éãããŠããåå®çŸ©ãã¡ã€ã«ã䜿çšããæ¹æ³ jQuery ãChart.jsãšãã£ãã©ã€ãã©ãªãTypeScriptã«å°å
¥ããéã«ãããã®ãå宣èšãã¡ã€ã«ããå¿
èŠã«ãªããŸãã ããããèŠæš¡ã®å€§ããªã©ã€ãã©ãªã«å¯ŸããŠãå
ã»ã©ã®äŸã®ããã«ãããèªåã§äœæããã®ã¯éªšãæããäœæ¥ã§ãã ããã«å¯ŸããDefinitelyTyped( http://definitelytyped.org/ )ãšããã³ãã¥ããã£ãããžã§ã¯ããååšããŠãããããã«ã¯ JavaScript ã§èšè¿°ãããã©ã€ãã©ãªã®å宣èšãã¡ã€ã«ãéãŸã£ãŠããŸãã â»ãããŸã§ã³ãã¥ããã£ã«ãã OSS ãªã®ã§ãææ°ããŒãžã§ã³ã«è¿œåŸããŠããªããæ£ãããªããšããå Žåãç¡ãã¯ãªãã®ã§æ³šæãå¿
èŠã§ãã DefinitelyTypedã«å¯Ÿè±¡ã®ã©ã€ãã©ãªã®å宣èšãã¡ã€ã«ãååšãããã¯ãTypeSearchïŒ https://microsoft.github.io/TypeSearch/ ïŒ ã§æ€çŽ¢ããããšãã§ããŸãã DefinitelyTypedã«ç»é²ãããŠããå宣èšãã¡ã€ã«ã¯ãnpmã³ãã³ãã§ãããžã§ã¯ãã«åã蟌ãããšãã§ããŸãã npm install --save @types/jquery jQuery ã®åå®çŸ©ãå°å
¥ãããç¶æ
ã§ã jQuery ã® addClass ã¡ãœãããèšè¿°ããŠã¿ãŸãããã $( function () { $( '#foo' ).addClass( 'bar' ); } ); TypeScriptã jQuery ã®ã¡ãœãããèªèããŠããã®ã§ãäžèšã®ã³ãŒã㯠ã³ã³ãã€ã« ãšã©ãŒã«ã¯ãªããŸããã ã§ã¯ãããã§ã addClass ã®åŒæ°ã«æ°å€ãæž¡ããŠã¿ãŸãããã $( function () { $( '#foo' ).addClass(1); } ); ãããšãäžèšã®ãã㪠ã³ã³ãã€ã« ãšã©ãŒãçºçããããã«ãªããŸãã Argument of type '1' is not assignable to parameter of type 'string | string[] | ((this: HTMLElement, index: number, currentClassName: string) => string)'. äžèšããã jQuery ãæäŸãã颿°ã®åå®çŸ©ãæ£ããèªèãããŠããããšãããããŸãã allowJSãªãã·ã§ã³ã䜿çšããæ¹æ³ JavaScript ã§èšè¿°ãããã©ã€ãã©ãªãTypeScriptã«å°å
¥ããã«ã¯ã allowJS ãªãã·ã§ã³ãæå¹ã«ããæ¹æ³ããããŸãã â»éåžžã¯.tsæ¡åŒµåã®ã¿ ã³ã³ãã€ã« ããã.jsæ¡åŒµåã®ãã¡ã€ã«ã¯ ã³ã³ãã€ã« ã®å¯Ÿè±¡ã«ã¯ãªããŸãããããã®ãªãã·ã§ã³ãæå¹ã«ããããšã§ã.jsãã¡ã€ã«ã ã³ã³ãã€ã« ã®å¯Ÿè±¡ã«ããããšãã§ããŸãã $ tsc --allowJS calc.js exec.ts ãã ããçŽ ã®ç¶æ
ã® JavaScript ã¯åã®æ
å ±ãäžããããŠããªããããããªãç·©ã åæšè« çµæã«ãªãããšã«æ³šæããŠãã ããã // calc.js exports.sub = function (a, b) { return a - b; } /* æšè«ãããã·ã°ãã㣠sub(a: any, b: any): number */ ããããªãããããšããšåã®æŠå¿µãæã£ãŠããªãã£ãã¬ã¬ã·ãŒãªã©ã€ãã©ãªããããã èªã¿èŸŒãŸããã ããã§ãå€å°ãªããšãåã«ããå®å
šæ§ã®èœåãæã«å
¥ããããšãã§ããŠããããšã泚ç®ãã¹ããã€ã³ãã§ãã JSDocã«ãã£ãŠåå®çŸ©ãããããšãå¯èœ äžèšã®ããã«JSDocãèšè¿°ãããšã詳现ã«åã®å®çŸ©ãè¡ãããšãã§ããŸãã /** * @param {number} a * @param {number} b * @return number */ exports.sub = function (a, b) { return a - b; } /* æšè«ãããã·ã°ãã㣠sub(a: number, b: number): number */ ãã èªã¿èŸŒãŸããã ãã§ åæšè« ã®æ©æµãåŸãããšãã§ãããã ãã§ãååã§ããããšã¯ãã§ã«è¿°ã¹ãéãã§ãããæ¢åãããžã§ã¯ãããã£ã¡ããšJSDocãèšè¿°ããŠããç°å¢ã§ããã°ãTypeScriptãžã®ç§»è¡ã¯ãªãããæ©æµãåŸããããšèšããã§ãããã ã©ã®æ¹æ³ãæ¡çšããã°è¯ãã®ãïŒ ãããŸã§ç޹ä»ãããæ¢åã®JSã©ã€ãã©ãªãTypeScriptç°å¢ã«å°å
¥ããæ¹æ³ã¯ãããããã«ã¡ãªããã»ãã¡ãªãããããã®ã§ããããžã§ã¯ãã®ç¶æ³ã«å¿ããŠäœ¿ãåããã®ãè¯ããšæããŸãã å宣èšãã¡ã€ã«ã«ã€ããŠã¯ãã©ã€ãã©ãªèªèº«ãå宣èšãã¡ã€ã«ãå
¬éããŠããå ŽåããããŸãã ãŸãã¯ã©ã€ãã©ãªå
¬åŒããããã¯DefinitelyTypedäžã®ãã®ãæ¢ããååšããŠããªãå Žåã¯allowJSãªãã·ã§ã³ã䜿çšããŠãåŸã
ã«å宣èšãã¡ã€ã«ãäœãããããã¯ã©ã€ãã©ãªåŽãTypeScript仿§ã«å€ããããšããã¢ãããŒããè¯ãã®ã§ã¯ãªãã§ããããã çç±â£ã段éçãªTypeScriptåãå©ãã ã³ã³ãã€ã« ãªãã·ã§ã³ããã TypeScriptã«ã¯ã ã³ã³ãã€ã« æã®ãã§ãã¯å
容ãæè»ã«å€ããããšãã§ãããªãã·ã§ã³ãåãã£ãŠããŸãã ãããã䜿çšããããšã§ããããžã§ã¯ãã®ç¶æ³ã«åãããTypeScriptå°å
¥ãè¡ãããšãã§ããŸãã noImplicitAny æé»çã« åæšè« ã®çµæ any åãšãªã£ãå Žåã« ã³ã³ãã€ã« ãšã©ãŒã«ãããªãã·ã§ã³ OFFã«ããããšã§ãæé»ç㪠any ã蚱容ã§ãã æç€ºçã«åæå®ãè¡ããªãå Žåãã¡ãœããã®åŒæ°ãªã©ã¯ any åã«ãªã any åã¯ããã®ååã®éãããªãã§ããããã®åãªã®ã§ãããŸãè¯ããã®ã§ã¯ãªãã any åãé¿ããã®ãæãŸãã ãã ããããšããš JavaScript ã§èšè¿°ãããŠããã³ãŒãã«ã€ããŠã¯ãäžæŠãã®ãªãã·ã§ã³ãOFFã«ããŠãããŠã ã³ã³ãã€ã« ãšã©ãŒãç®å°ã«ãåŸã
ã«åæå®ãå¢ãããŠããã®ãè¯ããšæããã strictNullChecks nullåãundefinedåã«ã®ã¿ã null ã undefined ã®ä»£å
¥ãèš±å¯ããèšå® nullåïŒ null ã®ã¿ã蚱容ããç¹æ®ãªå undefinedåïŒ undefined ã®ã¿ã蚱容ããç¹æ®ãªå T | null åãš null åã¯å¥ç©ãšæ±ãããT | null åã«ã¯ null ã代å
¥ã§ããªã ããã«ãããæå³ããªã undefined ããæå³ããªã null ãé²ãããšãã§ãã noImplicitAnyåæ§ãæåã¯ãªãã·ã§ã³ãOFFã«ããŠãããONã«ããæã«èŠã€ãã ã³ã³ãã€ã« ãšã©ãŒãåŸã
ã«ä¿®æ£ãããšè¯ããšæããã ããããªã³ãŒãã®åããæ€åºããŠããã䟿å©ãª ã³ã³ãã€ã« ãªãã·ã§ã³ noUnusedLocals æªäœ¿çšã®ããŒã«ã«å€æ°ããããšãšã©ãŒã«ãªã noUnusedParameters æªäœ¿çšã®åŒæ°ããããšãšã©ãŒã«ãªã noImplicitReturns æ¢åºãã¡ãœããå
ã®å
šãŠã®ãã¹ã§returnæãç¡ãå Žåãšã©ãŒã«ãªã noFallthroughCasesInSwitch Switchæå
ã«ãããbreakæŒãããšã©ãŒã«ãªã ãŸãšãïŒTypeScriptã¯ã JavaScript ãããžã§ã¯ãããããŸãç§»è¡ããç°å¢ãæŽã£ãŠãã TypeScript㯠JavaScript ã®ã¹ãŒããŒã»ãããªã®ã§ãæ¢åã®ã³ãŒãããã®ãŸãŸäœ¿ãããšãã§ãã åæšè« ã«ãã£ãŠããã ã® JavaScript ãåã®åãæã«å
¥ããããšãã§ãã JavaScript ã§èšè¿°ãããæ¢åè³ç£ãæè»ã«çµã¿å
¥ããä»çµã¿ããããæ¯ããã³ãã¥ããã£ãååšãã æè»ãª ã³ã³ãã€ã« ãªãã·ã§ã³ã«ãã£ãŠãã¬ã¬ã·ãŒãªã³ãŒããæ®µéçã«å³å¯ãªã³ãŒãã«å€ããŠããããšãã§ãã ãããã« TypeScriptã®å°å
¥ãããã«å®¹æã§ããã€ã©ãã ãã¡ãªããããããããã®èšäºã§ç޹ä»ãããŠé ããŸããã ãã®èšäºãã芧ã«ãªã£ãæ¹ã§ãTypeScriptå°å
¥ã«åã³è
°ã®æ¹ãããã£ããããŸãããããã²ãã©ã€ããŠã¿ãŠé ããã°å¹žãã§ãïŒ åèæç® æ¬èšäºå·çã«ããããç§ãåŠç¿ã«äœ¿çšããæžç±ãäžèšã«ç޹ä»ããŸãã éç¿TypeScript ãŸãTypeScriptããå®å
šã«çè§£ãããç¶æ
ã«ããã®ã«ãããã éç¿TypeScript: altJSã®ããã¡ã¯ãã¹ã¿ã³ããŒããçŽ æ©ãåŠã¶ïŒ éç¿ã·ãªãŒãº äœè
: å±±ç°ç¥¥å¯ WINGSãããžã§ã¯ã Amazon å®è·µTypeScript åãTypeScriptã®äŸ¿å©ãªæ©èœã«ã€ããŠè©³ããæžãããŠããã®ã§ããå®å
šã«çè§£ãããç¶æ
ãããè²ã
ããã£ãŠãªãããšã«æ°ã¥ããã§ãŒãºãã«ã¡ããã©ãã åŸåã«ReactãVueãNode.jsã«å°å
¥ããéã®å®è·µäŸã®èšèŒãããã®ã§ãååã®éãå®è·µåã å®è·µTypeScript äœè
: åäº å¥æ ãã€ããåºç Amazon TypeScriptå®è·µããã°ã©ãã³ã° äžèšïŒåããåºãåéã®è©±ãæžãããŠãããç¥èã®è£å®ã«äŸ¿å©ã§ãã TypeScriptå®è·µããã°ã©ãã³ã° (Programmer's SELECTION) äœè
: ã¹ãã£ãŒãã»ãã§ã³ãã³ ç¿æ³³ç€Ÿ Amazon ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã forms.gle ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ rakus.connpass.com
ã¯ããã« ããã«ã¡ã¯ã @rs_tukki ã§ãã æ°åã³ãããŠã€ã«ã¹ ã®åœ±é¿ã§å€§åãã¿ãã¿ããŠããŸããããåŒç€Ÿã§ã¯ãããã瀟å¡ç ä¿®ãçµããæ°å瀟å¡ã®é
å±ã®è©±ãæ¬æ ŒåããŠããŸããã æ°ããéçºã¡ã³ããŒãåãå
¥ãããšãããŸããã£ãŠãããã®ã¯éšçœ²ããšã®éçºãããŒãšãå®éã«éçºãããããã¯ãã®äžèº«ãåŠãã§ãããããšããšæããŸãã ããã§ä»åã¯ããã®2ç¹ãäžæ°ã«è§£æ±ºã§ãããå®è£
éå»åãã«ã€ããŠè©±ããŠãããããšæããŸãã ã¯ããã« å®è£
éå»åãšã¯ å®è£
éå»åã®å®æœæé åé¡éããåãçµãåé¡ã決ãã ãããžã§ã¯ãã®gitãã©ã³ããããåé¡ãä¿®æ£ããåã®ãã©ã³ããcheckoutãã åé¡ãè§£ãããã¹ãé
ç®æžã«æ²¿ã£ãŠãã¹ããè¡ã ã¬ãã¥ãŒæ
åœè
ãã¬ãã¥ãŒãè¡ã éå»åãè¡ãã¡ãªãã ãŸãšã ããŸã å®è£
éå»åãšã¯ å®è£
éå»åãšã¯ãç§ãã¡ã®éšçœ²ã§æ¡çšããŠããåŠç¿ããã°ã©ã ã®1ã€ã§ã ç°¡åã«èšããšããã®ãããã¯ãã§å®è£
ãããæ©èœãåŠç¿ã®ããã«åŸè¿œãã§å®è£
ããŠã¿ãããšãããã®ã§ãã äžè¬çã«éå»åãšãããšãå
¥åŠè©Šéšãè³æ Œè©Šéšã§éå»ã«åºé¡ãããåé¡ãéãããã®ã§ããã ãã®åŠç¿ããã°ã©ã ããéå»ã«éçºãããå
容ãããããã€ãæç²ããŠããç·Žç¿ã®ããã«ããã£ãŠã¿ããšããç¹ãããéå»åãšããååãã€ããŠããŸãã å®è£
éå»åã®å®æœæé ã§ã¯ãå®éã«éå»åãè¡ãæé ã玹ä»ããŸãã åé¡éããåãçµãåé¡ã決ãã ãŸãã¯ããããããããã¥ã¡ã³ãåãããŠããéå»åã®äžãããã©ã®åé¡ã«åãçµãããæ±ºããŸãã åé¡ã¯çŸæç¹ã§27åçšæãããŠãããååé¡ã«å¯ŸããŠâ1ïœâ5ãŸã§ã®é£æåºŠãæ¯ãããŠããŸãã â1ãâ2ã®åé¡ã¯ç°¡åãªUIãUXãã°ã®ä¿®æ£ã§ãããâ5ã¯å®è£
æ¹æ³ããæ©ãŸããããããªé£åã ãã®é£æåºŠã¯æåã¯åé¡äœæè
ã®äž»èгã«ãããã®ã§ãããéå»åã«åãçµãã äººã®ææ³æ¬¡ç¬¬ã§ä¿®æ£ããããããŸãã äžã«ã¯åœåâ3ã ã£ããã®ãâ5ã«åŒãäžããããäºäŸã⊠æ°èŠã¡ã³ããŒã¯â3ã®åé¡ããåãçµãã§ããããåæ Œ(åŸè¿°)ãªãâ4ã®åé¡ãžãäžåæ Œãªãåãâ3ãŸãã¯â2ã®åé¡ãžç§»ããŸãã ããããŠãâ4ã®åé¡ã«åæ Œããã®ãã²ãšãŸãã®ç®æšã§ãã ãããžã§ã¯ãã®gitãã©ã³ããããåé¡ãä¿®æ£ããåã®ãã©ã³ããcheckoutãã ååé¡ã®ããã¥ã¡ã³ãã«ã¯ãå®è£
å
容ã»èšèšæžã®ãªã³ã¯ã»æŽŸçå
ã®ãã©ã³ãã»å¶éæéãªã©ãèšèŒãããŠããŸãã ç§ãã¡ã®éšçœ²ãéçºããŠããããã¯ãã¯ãgitã§ãªãªãŒã¹ããŒãžã§ã³ããšã«ãã©ã³ããäœæããŠããã®ã§ã ãã®æ©èœãå®è£
ãããçŽåã®ãªãªãŒã¹ãã©ã³ããcheckoutããããšã§ãä¿®æ£åŸã®å®è£
ãèŠãããšãªãåŸè¿œãã®å®è£
ãå¯èœã«ãªã£ãŠããŸãã åé¡ãè§£ãããã¹ãé
ç®æžã«æ²¿ã£ãŠãã¹ããè¡ã ããšã¯ãèšèšæžã®éããcheckoutãããã©ã³ãã«å®è£
ãããŠããã ãã§ãã ãã®ãšã泚æç¹ãšããŠã以äžã®å¶éããããŸããèŠããã« ã«ã³ãã³ã° ã¯NG ãšããããšã§ãã ãªãªãŒã¹æžã¿ã®æ¢åã³ãŒããåç
§ããããšã¯çŠæ¢ æ¢åã³ãŒãããã¹ãç°å¢ã§åãããŠã¿ãŠåäœç¢ºèªããã®ã¯OK 誰ãã«ã¢ã ãã€ã¹ ãæ±ããããšã¯OKã ããå®è£
æ¹æ³ãçŽæ¥å°ããããšã¯çŠæ¢ èšèšæžãªã©ã®ããã¥ã¡ã³ããåç
§ããããšã¯OKã ããå®éã®PRãåç
§ããããšã¯çŠæ¢ å
šãŠå®è£
ãçµãã£ãããå®è£
ãã人æ¬äººããã¹ãé
ç®æžãèŠãªãããã¹ãã宿œããŸãã å
šãŠã®é
ç®ããã¹ãããå¿
èŠã¯ãããŸããããåœç¶ãã®åŸã¬ãã¥ãŒããããŸãã®ã§ãããã§ãã¹ãåºãªããããã¹ãã¯ãã£ããè¡ãå¿
èŠããããŸãã ã¬ãã¥ãŒæ
åœè
ãã¬ãã¥ãŒãè¡ã å®è£
ãšãã¹ããçµãã£ããããã®å
容ãgitã«pushããŠPRãäœæããã¬ãã¥ãŒãäŸé ŒããŸãã ãã®ãšãã®ã¬ãã¥ãŒæ
åœè
ã¯ããã®éå»åãè§£ããããšãããã¡ã³ããŒã宿œããããšãå€ãã§ãã éå»åããšã«ã¬ãã¥ãŒã®èгç¹ãããã¥ã¡ã³ãåãããŠãããPRã®å
容ããã®èгç¹ãæºãããŠããã°æŽããŠåæ ŒãšãªããŸãã éå»åãè¡ãã¡ãªãã éå»åãè¡ãã¡ãªããã§ããã Wikipedia ã® éå»åé¡é ãšããããŒãžã«ã¯ä»¥äžã®ããã«èšèŒãããŠããŸãã ãã詊éšãåããã«ããã£ãŠéå»åãè§£ãããšã¯ãæ¬¡ã®æå³ã§å©ç¹ãããã 詊éšã®ååŠã©ã€ã³ãšæ¯èŒãã圢ã§ãèªåã®åãæž¬ãããšãã§ããã å®éã®è©Šéšåé¡ãè§£ãæ¹æ³ãçŽæ¥çã«èº«ã«ä»ããããšãã§ããã è³æ Œè©Šéšã®å Žåã¯éå»ã«åºé¡ãããåé¡ããã®ãŸãŸåºé¡ãããããšãããã å
¥åŠè©Šéšã®å Žåã¯å
šãåãåé¡ã¯åºé¡ãããªããã®ã®ããã䌌ãåé¡ãåºé¡ããããïŒãŸãã«åºé¡åŸåãäžå®ã§ãªãåŠæ ¡ãããïŒ æ©ãææã«è§£ããŠãããšãèªåã®äžè¶³ããŠããéšåãææ¡ãããã®åŸã®ååŒ·ã®æ¹éãç«ãŠãããšãã§ããã 詊éšåé¡ã¯æ¯èŒçè¯ãåé¡ã§ããããšãå€ããããä»ã®åé¡ãè§£ãå Žåã«æ¯ã¹ãŠå¹ççã«ãèªåã®çè§£ãç¥èãæ·±ããããšãã§ããã å€ãã®å Žåãåé¡ã®åºé¡ç¯å²ãå¹
åºãã°ãããŠãããããå
šäœã®ç解床ãå°é床ã«ã€ããŠãéãããæéã§ææ¡ããããšãã§ããã å
¥è©Šãè³æ Œè©Šéšã®éå»åãšéããå®è£
éå»åã§ã¯åœç¶å
šãŠãåœãŠã¯ãŸãããã§ã¯ãããŸãããã å®éã®éçºæ¥åã§ããããšã«ãªãåé¡ã«åãçµãããšã§èªåã®åãæž¬ãã æ¬çªã®ãããŒã«åã£ãŠåãçµãã®ã§éçºã®ç·Žç¿ã«ãªã æ§ã
ãªåŸåã®åé¡ããããããå®éã®æ¥åã§å¿
èŠãšãªãç¥èãå¹çããçè§£ããããšãã§ãã ãšãã£ãç¹ã¯å
±éããŠããããšæããŸãã ãŸãšã ä»åã¯ãæ°èŠã¡ã³ããŒã®åãå
¥ãã«æé©ãªãå®è£
éå»åãã«ã€ããŠè§£èª¬ããŸããã ã¡ã³ããŒãå
¥ãæ¿ããªããé·ãéçºãšæ¹ä¿®ãç¶ããŠãããããžã§ã¯ãã§ã¯å¿
ã圹ã«ç«ã€ãšæããŸãã®ã§ããã²åãå
¥ããŠã¿ãŠã¯ãããã§ããããã ããŸã å
æ¥ãåŒç€Ÿã®ãªã³ã©ã€ã³ã€ãã³ãã§çºè¡šããæ©äŒããããŸããã SaaS ã®éçºååã§ãããTwelve-Factor Appãã«ã€ããŠèªã£ãå
容ã§ãè³æãã¢ããããŒãããŠããŸãã®ã§ãã²ã芧ã«ãªã£ãŠã¿ãŠãã ããã rakus.connpass.com speakerdeck.com
ã¯ããã« æè¡åºå ±ã®itoken1013ã§ããããã«ã¡ã¯ã 宿éå¬ãããŠããã ããŠããŸã ã©ã¯ ã¹Meetupã2æã«å€§éªã§çæ³ã§ãã ã SaaS ãæ¯ããéçºåå/DDDã å¿çç å®å
šæ§ãTwelve-Factorã ãããŒãã«ãç»å£è
ãšçºè¡šå
å®¹ãæ°ãã«å·æ°ããŠ6/24(æ°Ž)ã«éå¬ããŸããã ä»åã§2åç®ã®ãªã³ã©ã€ã³éå¬ãšãªããŸãããã60åã®æ¹ã«ãåå ããã ãïŒæºå¡ïŒïŒã Twitter ã Zoomäžã«ã¯ã³ã¡ã³ããæº¢ããçæ³ã®ã€ãã³ããšãªããŸããã ä»åã¯åœæ¥ã®çºè¡šãã玹ä»ãããŠããã ããŸãïŒ rakus.connpass.com ã€ãã³ãããŒãæŠèŠ ãœãããŠã§ã¢éçºã«ã¯æ§ã
ãªååã»æ³åãååšããŸãã ãããã®éçºååã ã©ã¯ ã¹ã® SaaS éçºã§ã©ã®ããã«æŽ»ããããŠããããéçºããŒã ã§äž»èŠãªåœ¹å²ãæ
ãè¥æã»äžå
ã»ããã©ã³ã®3åã®ãšã³ãžãã¢ãã玹ä»ãããŠããã ããŸããã SaaS éçºãªãã§ã¯ã®ååãæ¡å€§ããéçºèŠæš¡ãä¹ãè¶ããããã®ååãæ°ããªãµãŒãã¹éçºã§ ãã¡ã€ã³ ã€ãã³ããæŽ»çšããããã®åãçµã¿ãªã©ãå¹
åºãå
容ãšãªããŸããã çºè¡šã®çŽ¹ä» Twelve-Factor Appã§èªã¿è§£ããã¢ãã³ãªã¢ããªã®çæ³ãšã¬ã¬ã·ãŒãªã¢ããªã®çŸå® å€ãã®æ¹ã
ã« ã©ã¯ ã¹ãç¥ã£ãŠããã ããã£ãããšãªããŸãã æ¥œæ¥œç²Ÿç® ã ãã®æ¥œæ¥œç²Ÿç®ã®éçºããŒã ã§æŽ»èºããç¢é ããã Twelve-Factor App ã«ååšãã4ã€ã®ååã玹ä»ãããŠããã ããŸããã 2009幎ã«ãªãªãŒã¹ãããæ¥œæ¥œç²Ÿç®ã¯ Twelve-Factor App ãããé·ãæŽå²ãæã€ãµãŒãã¹ã§ãããTwelve-Factor Appã«ååšããååãšã®å
±éç¹ãšçŸç¶ã®ã®ã£ããã«è§Šãã€ã€ãçæ³çãªWebã¢ããªã±ãŒã·ã§ã³ã®å§¿ã解説ããŠããŸãã speakerdeck.com éçºã°ã«ãŒããéçºããŒã ã«ãªããŸã§ã®æ©ã¿ åããæ¥œæ¥œç²Ÿç®ã«ãããŠPMãåããçŽäºã玹ä»ããã®ã¯ã以äžã®3ã€ã®ååã§ãã 2幎éã§æ¥éã«èŠæš¡ãæ¡å€§ããæ¥œæ¥œç²Ÿç®ã®éçºããŒã ãè»éã«ä¹ããããã«ãçŽäºãææŠããåãçµã¿ã玹ä»ãããŠããã ããŸããã OODAã«ãŒã å¿ççå®å
šæ§ éã®åŒŸãªã©ãªã çºè¡šã§ã¯å€§ãã3ã¹ããŒãžã«æž¡ã課é¡ãåãäžããããŸããããã©ã®ã¹ããŒãžã§ã®ææŠãåå è
ã®çæ§ã«å
±æããã ããç»å£ãšãªããŸããã speakerdeck.com çŽäºã®ç»å£ã«ã€ããŠã¯ãå¥élogmiã§ã玹ä»ããŠãããŸãã ãã²åœæ¥ã®çºè¡šå
容ãã芧ããã ããã°ãšæããŸãã logmi.jp çµææŽåæ§ãã§ããªãéçºè
ã® ãã¡ã€ã³ ã€ãã³ã掻çšäŸ ã©ã¯ ã¹ã®æ°ã
ã®ãµãŒãã¹ãæåã«å°ããŠããå³°æã玹ä»ããŸããã®ã¯ã DDD ïŒ ãã¡ã€ã³ ã€ãã³ããéçŽïŒãš çµææŽåæ§ ã§ãã ãã¡ã€ã³ ã€ãã³ããšã¯ã ãã¡ã€ã³ å
ã§çºçãããââãããÃÃã«ãªãããšãã£ãåºæ¥äºã衚çŸãã ãã¡ã€ã³ ã¢ãã«ã§ãã ä»åã¯å³°æããªãŒããšã³ãžãã¢ãšããŠåãçµãæ°èŠãµãŒãã¹ã®éçºã§ ãã¡ã€ã³ ã€ãã³ããæŽ»çšããç¥èŠããå®äŸã亀ããŠç޹ä»ãããŠããã ããŸããã ãã¡ã€ã³ ã€ãã³ããå°å
¥ããããšã§åŸãããã¡ãªããã®ä»ãå°å
¥ã®ããã®å°é£ããããŠããŒã ã« ãã¡ã€ã³ ã€ãã³ããå®çãããããã®åãçµã¿ã玹ä»ãããŠããã ããŠããŸãã speakerdeck.com ãããã« å€ãã®æ¹ã«æ°ã
ã®å
±æãããã ããŸãã ã©ã¯ ã¹Meetupããåå ããã ããŸããçæ§ãããããšãããããŸããã ã©ã¯ ã¹ã§ã¯7æã»8æãMeetupãLTã»å匷äŒãéå¬äºå®ã§ãã ä»åŸããšã³ãžãã¢ã®çæ§ãžæçãªæ
å ±ãçºä¿¡ããå Žã«ããŠãããã°ãšæããŸãã®ã§ã ã©ããåŒãç¶ããããããé¡ãããããŸãïŒ rakus.connpass.com rakus.connpass.com
ã¯ããã« ããã«ã¡ã¯ãMasaKuã§ãã æšä»ã ã³ãããŠã€ã«ã¹ ã®åœ±é¿ã«ããããªãã©ã€ã³ã§éå¬ãããå匷äŒãèªç²ã®æµãã«ãªã£ãŠãããéã«ãªã³ã©ã€ã³éå¬ãããå匷äŒãå¢ããŠããŠãããšæããŸãã ããã§å
æ¥ã以äžã®ã€ãã³ãã«åå ããŸããã®ã§ãåå ããææ³ã«ã€ããŠè¿°ã¹ãŠãããããšæããŸãã nrs-seminar.connpass.com YouTube Live ã®ã¢ãŒã«ã€ãã¯ãã¡ã ã¯ããã« åå ããã€ãã³ã åå åæ© ææ³ ã³ãŒãçè§£ã¯ãŸãå
šå®¹ææ¡ãã å³è§£ã¯ãã¯ã匷å ã³ãŒãã®ãããããããéèŠã ããã£ã¬ã¯ããªæ§é ã¯ãã£ãšéèŠ PHPã®ããžãã¯ã¡ãœããã¯ã³ãŒããªãŒãã£ã³ã°ã«ãããŠããªãæ²è
ã«ãªã åå è
ã®ã³ã¡ã³ããã€ã³ãããã«ãªã ãããã« åå ããã€ãã³ã ãã¡ã€ã³é§åèšèšå
¥é ããã ã¢ããã§ãããïŒãã¡ã€ã³é§åèšèšã®åºæ¬ ã®èè
æç¬å
宣ããäž»å¬ã®ãªã³ã©ã€ã³å匷äŒãšããããšã§ã ä»äººãã©ããªé¢šã«ã³ãŒããèªãã§ããã ãç¥ãããšãç®çãšããå匷äŒã§ãã ä»åã¯ã PHP ãã¬ãŒã ã¯ãŒã¯ ã® Laravel ã®å
éšãèŠãŠããããšããè¶£æšã®ã³ãŒããªãŒãã£ã³ã°ã§ããã ãªããä»åã® ãã¬ãŒã ã¯ãŒã¯ èªè§£ã®ç®æšãšããŠã¯ ãèªäœ ãã¬ãŒã ã¯ãŒã¯ ãäœãããã«åèã«ããã ãšããäœã§é²ããããŠããŸããã www.shoeisha.co.jp åå åæ© ããããããªãç§ããã®å匷äŒã«åå ããããšæã£ãã®ããã説æããããšæããŸãã ã»ãã®äººãã©ã®ããã«ããŠã³ãŒããèªãã§ããã®ãåçŽã«èå³ããã 人æ°ã® ãã¬ãŒã ã¯ãŒã¯ ã®äžèº«ãèªãã§ã¿ãããã©ãäžäººã§èªãã§ãããšè¡ãè©°ã£ãŠããŸã Eloquent (Laravel ã®æšæºORM)ã®ãœãŒã¹ã軜ãèªãã ããšã¯ãããã ãã¬ãŒã ã¯ãŒã¯ ã®å
šå®¹ãæèããŠèªãã ããšã¯ãªãã£ã ãã¬ãŒã ã¯ãŒã¯ ãèªã¿é²ããäžã§ã®ãã¯ããã¯ãåžåããã å®ç³ãã¿ãŒã³ãªã©ãããã°ä»åŸãœãŒã¹ã®èªã¿æžããããäžã§ãåèã«ãªããã ã¡ãªã¿ã«ãäž»å¬ã®æç¬ããã«ã€ããŠã§ããã2019幎ã®PHPerKaigiã®éã«ã¢ã³ã«ã³ãã¡ã¬ã³ã¹ã«ãŠçºè¡šãããŠããå
容ãéåžžã«è峿·±ãã£ãããšãèŠããŠããŸãã ãã®ããšããã£ããã§ãŸãã話ã䌺ããããªãšæã£ãããšãåæ©ã®äžã€ã§ãã ïŒ2019幎ã®PHPerKaigi ã®ã€ãã³ãã¬ããŒãã¯ä»¥äžïŒ tech-blog.rakus.co.jp ææ³ ã³ãŒãçè§£ã¯ãŸãå
šå®¹ææ¡ãã ã³ãŒãã远ããããã¹ããŒãã¯ããããšãªãããã³ãŒããèªããã¯ããã¯ã«ã€ããŠãå匷ãããŠããã ããŸããã äŸãã°ã ãã¬ãŒã ã¯ãŒã¯ ã®æ§ãªå
šå®¹ã®å€§ããããã°ã©ã ã¯ãäžåºŠã«ãã¹ãŠãäžå¯§ã«èªã¿èŸŒãã§ããããšããã®ã§ã¯ãªãã ãŸãã¯å
šäœãçºãã ããšã倧äºã§ãã ããã®å€æ°ã«ã¯ã©ãããå€ãå
¥ã£ãŠããŠãã©ãããã¡ãœããã«æž¡ãããŠãããã§ãªããžã§ã¯ãã«æ ŒçŽãããŠããããããã£ãååŸããŠã»ã»ã»ããªã©ãšããããšããã¹ãŠé ã«å
¥ããªããèªã¿é²ããŠãããšãééããªããªãŒããŒãããŒãèµ·ãããŠæèã忢ããŠããŸããŸãã ãªã®ã§ããŸãã¯ãã£ãããšå
šäœã®æµããææ¡ããŠããããããæ°ã«ãªããšãããèªã¿è¿ããŠããããšããèªã¿æ¹ãè¯ãããã§ãã ãã®ç¹ã«é¢ããŠã¯ãç§ãæ¥åã§éçºããŠããããã°ã©ã ãèªã¿é²ããŠããéã«æ°ãä»ããŠãããã€ã³ãã ã£ãã®ã§ãèªåã®é²ãæ¹ã倧ããééã£ãŠããªãããšã«å®å¿ããŸããã ããã€ãã®æ¥åããžãã¯ãé¢é£ãããããªåŠçãèªã¿èŸŒãã§ããéã¯ãæåãã现ãã«åŠçã远ããããã®ã§ã¯ãªãããã£ãšåŠçã®æµããææ¡ããŠãã现ãã仿§ã確èªããããã«ããŠããŸãã å
šå®¹ãããã£ãŠããã°ååŠçã®çްãã仿§ããªããããªã£ãŠããã®ããçŽã¥ããŠèãããããšæããŸãã å³è§£ã¯ãã¯ã匷å ãŸãã ãã¬ãŒã ã¯ãŒã¯ ã®å
šå®¹çè§£ãé²ããäžã§ã¯ã å³è§£ããã®ãäžçªè¯ã ãšæããŸããã Laravelã«ã¯ãªã¯ ãšã¹ ãæ
å ±ãã³ã³ãããŒã©ã«æž¡ãåãViewã«è¿ãåã« Middleware ãšããåŠçã远å ã§ããŸãã ãã®ä»æ§ã«ã€ããŠã¯ææ¡ããŠããã®ã§ãããäœãšãªãææ¡ããŠããããšãå³è§£ããŠããããã ãã§ãMiddleware ã ãã¬ãŒã ã¯ãŒã¯ ã®ã©ã®ãããªäœçœ®ã§ã©ã®ãããªåŠçãããŠãã®ããããã詳ããçè§£ã§ãããããªæ°ãããŸããã èªåã®çè§£ãæ¯ãè¿ãããã«ããå³è§£ããŠããããšã¯åŒ·åãªçè§£ä¿é²ã«ã€ãªãããšæããŸãã ã³ãŒãã®ãããããããéèŠã ã ãã£ã¬ã¯ã ãªæ§é ã¯ãã£ãšéèŠ ãã¬ãŒã ã¯ãŒã¯ ã§ã¯ã¢ããªã±ãŒã·ã§ã³éçºã§å¿
èŠã«ãªãæ§ã
ãªåŠçãå®çŸããããã«ãåæ©èœãé©åãªç²åºŠã§ã°ã«ãŒãã³ã°ã㊠ãã£ã¬ã¯ã ãªãåã£ãŠç®¡çããŠããŸãã é
眮ããããã°ã©ã ããã¡ããšã°ã«ãŒãã³ã°ããã ãã£ã¬ã¯ã ãªã«ç®¡çãããŠãããšããšããåŠçã远ããããŠããéã«ããŸããŸèŠã€ããç¹å®åŠçã«é¢é£ããããŒããã©ãã§ç®¡çãããŠããããåããããããªããŸãã ãã¡ãããã³ãŒãå
ãããžã£ã³ãããŠã åç
§å
ãžã©ãã©ããã©ã£ãŠããããšãã§ããŸãããé¢é£ããåŠçãã©ãã«ããã®ããããã£ãŠãããšããªãã¡ã¬ã³ã¹ãèªãŸãªããŠã ãã¬ãŒã ã¯ãŒã¯ ãè¡ã£ãŠãããã®ä»ã®åŠçãç¥ããã£ããã«ããªããŸãã éã«ã ãã£ã¬ã¯ã ãªæ§æãæ¯é¢æ»
è£ã§ã©ãã«äœãé
眮ãããŠããã®ãããããã«ããç¶æ
ã«ãªã£ãŠãããšåŠçã远ããããéã®å¯èªæ§ãäžããŠããŸãã°ããã§ãªãã管çãç
©éã«ãªã£ãŠããŸã£ãŠä¿å®æ§ãäœäžããŠããŸãã§ãããã PHP ã®ããžãã¯ã¡ãœããã¯ã³ãŒããªãŒãã£ã³ã°ã«ãããŠããªãæ²è
ã«ãªã PHP ã«ã¯ ããžãã¯ã¡ãœãã ãšããç¹æ®ãªã¡ãœããããããŸãã äžã§ã __call() ã __callStatic() ã¯ã³ãŒããªãŒãã£ã³ã°ãé£è§£ã«ãããããžãã¯ã¡ãœããã®äžã€ã§ãã äŸãã° __callStatic() ã¯ããªããžã§ã¯ãå
ã®éçã¡ãœãããåŒã³åºãããšããéã«ãã¢ã¯ã»ã¹ äžèœ ãªå Žåã«å®è¡ãããã¡ãœããã§ãã <?php // 以äžãµã³ãã«ã³ãŒã class MagicMethodTest { public static function __callStatic ( $ name , $ arguments ) { echo "ããªããåŒã³åºããã¡ãœãã㯠' $ name ' " . implode ( ', ' , $ arguments ) . " \n " ; } } MagicMethodTest :: runMethod ( 'åŒæ°ïŒ' , 'åŒæ°ïŒ' ) ; // å®è¡çµæ // ãããªãåŒã³åºããã¡ãœãã㯠'runMethod' åŒæ°ïŒ, åŒæ°ïŒ ãã¬ãŒã ã¯ãŒã¯ ã§ã¯ããããã¡ãœãããé »ç¹ã«ç»å Žãããããªã®ã§ãããæ®æ®µã®ã¢ããªã±ãŒã·ã§ã³éçºæã¯ããŸãç®ã«ããæ©äŒãå°ãªãã ãã«ãäžç¬æèãæ¢ãŸã£ãŠãããŸããŸãã ããããäž»å¬è
ã®æ¹ãåå è
ã®æ¹ã
ãšããŸãã§ ãã¢ãã ããŠãããã®ããã«èªã¿é²ããŠããããšã§ãããžãã¯ã¡ãœããã®æå³ãå·éã«èããªããèªã¿é²ããŠããããšãã§ããŸãã åå è
ã®ã³ã¡ã³ããã€ã³ãããã«ãªã ä»åã®ã€ãã³ã㯠YouTube Live ã§å
¬éãããŠãããããä»ã®åå è
ã®æ¹ã®ã³ã¡ã³ããèªãããšãã§ããŸããã ã³ã¡ã³ãã®äžã«ã¯èªåãšåããããªããšãæããªããã³ãŒããèªã¿é²ããŠããæ¹ãããã£ããã£ãããå¥èŠç¹ã®æ·±ãå
容ã®ããšãã³ã¡ã³ããããŠããæ¹ãããŠãã³ãŒããªãŒãã£ã³ã°ã®ã¢ãããŒã·ã§ã³ãé«ããªããåå ããããšãã§ããŸããã ïŒåå è
ã®äžã«ã¯Laravelã«éåžžã«ã詳ããæ¹ãåå ãããŠããããã§ãéãã³ã¡ã³ãããããæ¹ãããã£ããããŸãããïŒ åå è
éã®ã³ãã¥ãã±ãŒã·ã§ã³ã掻çºã§ãã£ãããšãéåžžã«å°è±¡çã§ãçµå§éåããããšãªãã³ã¡ã³ããæµããŠããŸããã ãããã« ä»åããªã³ã©ã€ã³ã®ã³ãŒããªãŒãã£ã³ã°ã«åå ãããŠããã ããä»ã®äººãã©ã®ããã«ã³ãŒããèªã¿é²ããŠããã®ããæèŠããããšãã§ããŸããã ãã¬ãŒã ã¯ãŒã¯ ã®ãããªå·šå€§ãªã³ãŒããèªãäžã§ã¯ããŸãã¯ãã£ãšå
šå®¹ãææ¡ããŠããã现ãããã€ã³ããæ¯ãè¿ã£ãŠçè§£ããªããèªã¿é²ããŠããã¹ãã ãšæããŸããã æ¯ãè¿ã£ãŠãããšãã®ãã€ã³ããšããŠããšããåŠçã§å©çšãããã¯ã©ã¹ã«ã¯ä»ã«ã©ã®ãããªã¡ãœãããããã®ãããšãããšãããŸã§èŠéãåºããããšã§ã ãã¬ãŒã ã¯ãŒã¯ ãå®çŸã§ããä»ã®åŠçãç¥ããã£ããã«ããªãããšãçè§£ããŸããã ããããã¹ããŒãã«é²ããããã«ãã ãã£ã¬ã¯ã ãªæ§æããã£ãããšã«ãŒã«ä»ãããŠãæ£ãã管çããŠããããšãéèŠã§ãã ãããã®ããŠããŠã¯æ¥åã§éçºããŠããããã°ã©ã ãèªã¿èŸŒãéã«ã䜿ãããã¯ããã¯ã ãšæããŸããã äŸãã°ããããã«ã¯ãŸã£ãŠããŸã£ãŠãåããšãããã°ã«ã°ã«èªã¿è¿ããŠããŸãããªããŠããšãèµ·ããªãããã«ããããã®æ¹æ³ãšããŠããããããšåèã«ãªãããšãåŸãããããªãšæããŸããã æ¬¡åã®éå¬ã楜ãã¿ã§ãïŒ ãªããåŒç€Ÿ ã©ã¯ ã¹ã§ããªã³ã©ã€ã³ã§ PHP ã®å匷äŒãéå¬ããŠããŸãã Laravelã«ã€ããŠãLTãªã©ã§éå»ã«äœåºŠã話é¡ã«ãªã£ãŠããŸãã®ã§ããåå ããã ãããšå¹žãã§ãã rakus.connpass.com
ã¯ããã« æè¡åºå ±ã®itoken1013ã§ããããã«ã¡ã¯ã ä»å㯠Scrum Fest Osaka 2020 ã«ç»å£ããŸããæ°åãšã³ãžãã¢ã® æšå£ïŒ@YokoHiguchi1ïŒ ããã®ç»å£ã¬ããŒãã玹ä»ãããŠããã ããŸãïŒ confengine.com ãµãããããéèŠã§ã¯ãªãïŒïŒ~ãµããããã®æŽ»çšæ¹æ³ã«ã€ããŠ~ from ssusera3f4f9 www.slideshare.net ã¯ããã« Scrum Fest Osaka 2020ã«ã€ã㊠æšå£ã®ã€ãã³ãåŸèš ä»åã®ã€ãã³ãã«ç»å£ããããšèãããã£ãã çºè¡šããŒãããµãããããéèŠã§ã¯ãªãïŒïŒãµããããã®æŽ»çšæ¹æ³ã«ã€ããŠããéžãã çç± åããŠã®ãªã³ã©ã€ã³ç»å£ ä»åã®ç»å£ãéããåŠã³ã»çºèŠ çµããã« Scrum Fest Osaka 2020ã«ã€ã㊠ã¹ã¯ã©ã ã®åå¿è
ãããšãã¹ããŒãããŠãŒã¶ãŒäŒæ¥ããéçºäŒæ¥ãç«å Žã®ç°ãªãæ§ã
ãªäººã
ãéãŸãåŠã³ã®å Ž ãšããŠæ¯å¹Žéå¬ãããŠããScrum Festãä»å¹Žã¯åã®ãªã³ã©ã€ã³éå¬ãšãªããŸããã åœæ¥ã¯Discordäžã§éå¶ãè¡ãããç»å£è
ã¯Zoomããçºè¡šãè¡ã圢åŒã§ããã www.scrumosaka.org ã€ãã³ã詳现ã¯ãã¡ãã§ç޹ä»ããŠããŸãã®ã§ãåèã«ããŠããã ããã°ãšæããŸãã ã¡ãªã¿ã« ã©ã¯ ã¹ãã¹ãã³ãµãŒãšããŠãã€ãã³ãåè³ããããŠããã ããŠãããŸããã tech-blog.rakus.co.jp æšå£ã®ã€ãã³ãåŸèš ä»åã®ã€ãã³ãã«ç»å£ããããšèãããã£ãã ä»åScrum Fest ã«ç»å£ããããšãã"ãã£ãã"㯠èªåã§åŸããã®ãã¢ãŠããããããããšã§ãæ©ãã§ãã人ã§ããäœããæããŠã»ãã ãšæã£ãããã§ãã 以åã®ç§ã¯ ã¹ã¯ã©ã ã«é¢ããããããµããããããšåŒã¹ããã®å
šãŠã«å¯ŸããŠäœæ
å¿
èŠãªã®ããããããããµããããããäœãªã®ãåãããªãç¶æ
ã§ããã ã§ããåãããªããšæã£ããã®ã¯èªåã®äžã«èœãšã蟌ãããšã倧äºãšèããæ§ã
ãªäººãšäŒè©±ããŠã¢ãŠããããã»ã€ã³ããããç¹°ãè¿ããèªåã«ãšã£ãŠãµãããããšã¯äœããèããŠããŸããã ãã®éã«åŸããã®ã¯ãã£ãšèªåã ãã®ãã®ã§ã¯ãªãããç§ã®ããã«æ©ãã§ãã人ãããã®ãªããç§ãçºä¿¡ããããšã§äœããæãåã£ãŠããããã®ã§ã¯ãªããã ããæããç»å£ã決æããŸããã çºè¡šããŒãããµãããããéèŠã§ã¯ãªãïŒïŒãµããããã®æŽ»çšæ¹æ³ã«ã€ããŠããéžãã çç± ããµãããããéèŠã§ã¯ãªãããšããæåããä»åã®ç»å£ã«è³ããã£ããã§ããã ç§ã¯å宿ã€ãã³ã LED-Camp ã®éå¶ã«æºãã£ãŠããŸãã ããã§ã¯åå è
ã«ãµãããããéç¹çã«æããã®ã§ãããLED-Camp ãçµãã£ãåŸã®åå è
ã¢ã³ã±ãŒãã®äžã«ããµããããã¯éèŠã§ã¯ãªããšèããŠããããšåçããããŸããã ãã®åçãç§ã®äžã«æ®ãããäœæ
ããµããããã¯éèŠã§ã¯ãªãã®ã ããïŒããšèããŠãããããµããããã¯äœæ
å¿
èŠãããµããããã¯ããããäœã§ãããããç§èªèº«ãå
šãåãããªããªã£ãŠããŸããŸããã ãã®ããµãããããéèŠã§ã¯ãªããšèããŠããããšããèšèã ãµãããããšã¯äœããæ¹ããŠèããæ©äŒãšãªãããã®ã¿ã€ãã«ãéžãŒããšæ±ºããŸããã åããŠã®ãªã³ã©ã€ã³ç»å£ åããŠã®ãªã³ã©ã€ã³ç»å£ã¯ãã²ãšããšã§èšããšâ楜ããã£ãïŒâã§ãã ãªãã©ã€ã³ã§ã¯çžæã®é¡ãèŠãããšãã§ããããããã®å Žã®ç©ºæ°æã«ãã£ãŠè©±ãã¹ããŒãçã調æŽããããšãã§ããŸããããªã³ã©ã€ã³ã ãšïŒäººã§åã£ãŠããæèŠããããæ¬åœã«çžæã«äŒãã£ãŠããã®ãïŒãšããçåããã£ãšä»ããŸãšããåããŠã®æèŠã§æåã¯äžå®ãšç·åŒµããŸãããã ãšãŠãæ°é®®ã§ããçµéšãã§ããŸããã ãŸãçºè¡šäžã«åå è
ã®æ¹ã
ããã®æèŠããã£ããã§èŠããããã£ãŒãããã¯ããã®å Žã§åãããšããæãã¯ãããé¢çœãããã®é㯠ãªãã©ã€ã³ãããåå è
ãšè·é¢ãè¿ãã«æãåãã ã®ããšãŠãè¯ãã£ãã§ãã ä»åã®ç»å£ãéããåŠã³ã»çºèŠ ããããã®åŠã³ããã£ãåãçµã¿ã§ããã ãŸãç»å£ã決ãŸã£ãŠãããç§ã«ãšã£ãŠã®ãµããããã¯äœããããäžå±€èãããã£ããã«ããªããè³æãäœæããªããããµããããã«ã€ããŠèããããšãã§ããŠããã£ããæ¥œããã£ãã§ãïŒ ç»å£åŸã¯åå è
ã®äººéã«Jamboardã®ä»ç®ã§ã¢ãŠããããããŠããã ããã®ã§ãããä»ç®ã«ã¯ã³ã£ããç§ã®è©±ããåŠãã ããšãçåã«æã£ãããšãæžãããŠããŸããã ãããèŠãŠãçºè¡šããŠæ¬åœã«ããã£ããªã£ãŠã ã¢ãŠããããããããšã®å€§åããæ¹ããŠå®æã§ããã€ãã³ãã§ããïŒ çµããã« å
¥ç€Ÿéããªãã¿ã€ãã³ã°ã§Scrum FestãžææŠããæšå£ã®åãçµã¿ããããã§ããã§ããããïŒ ä»åæšå£ãçºè¡šããŸããå
容ã«ã€ããŠã¯ã7/13(æ)ã«éå¬ããã以äžã®ã€ãã³ãã§åæŒãããäºå®ãšãªã£ãŠããŸãã ãèå³ã®ããæ¹ã¯ãæ¯éã€ãã³ããžãåå ããã ããŸããšå¹žãã§ãã retrospective.connpass.com åœç€Ÿã¯ãããããã€ãã³ãç»å£ãããã°çºä¿¡ãªã©ããšã³ãžãã¢ã®ã¢ãŠããããæŽ»åãæŽ»çºã«è¡ã£ãŠãããŸãïŒ
id:radiocat ã§ãã6/26ã27ã«éå¬ãããScrum Fest Osaka 2020ã«åå ããç»å£ãããŠé ããŸãããã€ãã³ããã¬ããŒãããŸãã Scrum Fest Osaka 2020ãšã¯ïŒ ã©ããªã€ãã³ãïŒ äŒå Žã¯Discord ã»ã·ã§ã³ã¯Zoom æ°ã
ã®äŒæ¥ã»å£äœã¹ãã³ãµãŒãæ¯æŽ åºèª¿è¬æŒ ã¡ãã£ãšããããã£ãã¯æé·ã®ãã£ã³ã¹ ç»å£ã¬ããŒã ã¹ã¯ã©ã ã¡ããããªãšèšãããŠããã£ãŠã¿ãã²ãïŒ ãµãããããéèŠã§ã¯ãªãïŒïŒãµããããã®æŽ»çšæ¹æ³ã«ã€ã㊠éç§©åºãä¹ãããªãã¢ãžã£ã€ã«ãªã€ãã³ãã§ãã Scrum Fest Osaka 2020ãšã¯ïŒ www.scrumosaka.org å
¬åŒãµã€ãã«ã¯æ¬¡ã®ããã«æžãããŠããŸãã Scrum Fest Osaka㯠ã¹ã¯ã©ã ã®åå¿è
ãããšãã¹ããŒãããŠãŒã¶ãŒäŒæ¥ããéçºäŒæ¥ãç«å Žã®ç°ãªãæ§ã
ãªäººã
ãéãŸãåŠã³ã®å Žã§ãã æšå¹Žãåéå¬ã§ãä»åã2åç®ãšãªãã€ãã³ãã§ããååã¯2ãã©ãã¯ã§20以äžã®ã»ãã·ã§ã³ãè¡ãããé¢è¥¿ãšããŠã¯ ã¹ã¯ã©ã ã«éãããšã³ãžãã¢åãã€ãã³ããšããŠæå€§çŽã®ã€ãã³ãã§ããå
šåœããæ§ã
ãªå¢éãç«å Žã®äººãéãŸã£ãŠãããããã®åãçµã¿ãç¥èŠãå
±æããããåå è
å
šå¡ã®åŠã³ã®å Žã§ãã ã¡ãªã¿ã«ãæšå¹Žãšä»åãªã³ã©ã€ã³éå¬ã«å€æŽãããåãŸã§äŒå Žãšãªãäºå®ã ã£ã é¢è¥¿å€§åŠ æ¢
ç°ãã£ã³ãã¹ KANDAI MeRISE ã¯åŒç€Ÿã®å€§éªãªãã£ã¹ã®ããé£ã§ãã ã©ããªã€ãã³ãïŒ ç»å£è
ã¯æšå¹Žããå
¬åãããæ¢ã«æ±ºãŸã£ãŠããŸããããã³ããã®åœ±é¿ã§ãªã³ã©ã€ã³éå¬ã«å€æŽãšãªããå
šåœ19ã³ãã¥ã ãã£ãŒ ãéããŠåãã©ãã¯äžŠè¡ã§éå¬ããããšããç°äŸã®å
容ã»èŠæš¡ãšãªããŸããã19ãã©ãã¯ãšããªããšãã芧ã®ãšããäžèЧã§èŠãããšãã§ããªãèŠæš¡ã§ãã 19ãã©ãã¯ã®ã€ãã³ãäžèЧ ãªã³ã©ã€ã³éå¬ãšããããšã§ãåå è
㯠Discord ãš Zoom ã®å©çšãå¿
é ãšãªããŸããã äŒå Žã¯Discord åå ã®ç³èŸŒã¿ãè¡ã£ãŠéå¶åŽãžDiscordã®ã¢ã«ãŠã³ããé£çµ¡ãããšã€ãã³ãå°çšã®DiscordãµãŒããžæåŸ
ãããŸããDiscordã«ã¯ã€ãã³ãã®ãç¥ããããåçš®é£çµ¡ãåœæ¥ã®ãªãŒããã³ã°ãåºèª¿è¬æŒã§äœ¿ãããã¡ã€ã³ãã£ã³ãã«ãåã³ãã¥ã ãã£ãŒ ã®ãã£ã³ãã«ã«å ããéè«ããã€ã¬ïŒã2次äŒãªã©ãåå è
ãæãæãã«åå ã§ããç¡æ°ã®ãã£ã³ãã«ããããŸãã Discordã®ç»é¢ ã€ãã³ãã®ç³ã蟌ã¿ãçµãããšã€ãã³ãéå¬ã®æ°æ¥åããDiscordã«æåŸ
ãããåœæ¥ã ãã§ãªãæºåäžã®ç¶æ³ãªã©ã確èªã§ããããã«ãªã£ãŠããŸããããã¡ãããéå¬åããåå è
å士ã§äº€æµããããšãã§ããŸãããããŠãéå¬åŸã®çŸåšãç¶ç¶ããŠäº€æµå¯èœã§ããéå¬åœæ¥ã軞ãšãã€ã€ãããã®ååŸã®æéã䜿ã£ãŠåå è
å
šå¡ã§ã€ãã³ããäœãäžããŠãã圢ããã€ãã³ãã®æ°ããã¹ã¿ã€ã«ãšããŠããªã³ã©ã€ã³ã€ãã³ãã®å¯èœæ§ãæããããšãã§ããŸãã ã»ã·ã§ã³ã¯Zoom éå¬åœæ¥ã¯ãã»ãã·ã§ã³éå¬ã®æéã«ãªããšDiscordã®ãã£ã³ãã«ã«Zoomã®URLãæµããŠããŸããããããZoomäžã§ç»å£è
ã®çºè¡šãèããšããæµãã§ãã ã»ãã·ã§ã³ã®æ§å ç»å£è
ããèŽè¬è
ãžã®äžæ¹åã®ã»ãã·ã§ã³ã ãã§ãªãããªã³ã©ã€ã³ã®èŠèŽè
ãå·»ã蟌ãã ããã£ããããŒã«ã䜿ã£ãŠãã£ã¹ã«ãã·ã§ã³ãããªã©ããªã³ã©ã€ã³ã§ã®æ°ããªè©Šã¿ãè¡ã£ãŠããã»ãã·ã§ã³ããããŸããã æ°ã
ã®äŒæ¥ã»å£äœã¹ãã³ãµãŒãæ¯æŽ ã¢ãžã£ã€ã« ãå®è·µäžã®æ§ã
ãªäŒæ¥ã»å£äœãã¹ãã³ãµãŒãšããŠã€ãã³ããæ¯æŽããŠããŸããåŒç€Ÿãã·ã«ããŒã¹ãã³ãµãŒãšããŠåå ãããŠé ããŸããã ã¹ãã³ãµãŒã®çŽ¹ä» ãªãŒããã³ã°ã€ãã³ãã§ãã£ãã玹ä»ããŠé ããŠããŸãããåå ããã€ãã³ãã®ã¹ãã³ãµãŒã«èªç€Ÿãåãé£ããŠããã®ã¯ãã€èŠãŠãå¬ãããã®ã§ãã åºèª¿è¬æŒ åºèª¿è¬æŒã¯ ã¢ãžã£ã€ã« ã³ãŒãã§ããããSCRUM BOOT CAMP THE BOOKãã®å
±èè
ãšããŠãããªãã¿ã®æ ªåŒäŒç€Ÿã¢ã ã©ã¯ ã¿ã®æ°žç¬ããã«ãããä»ãããŠã® ã¹ã¯ã©ã ãã§ããã çãäžã空ããã瞊æžãã®ãå€ãã£ãã¹ã©ã€ãã«ãªã£ãŠããã®ã¯çç±ããããŸãããªããšãç»é¢å
±æã§ã¹ã©ã€ããæåœ±ããã®ã§ã¯ãªãããæ¬äººãçãäžã«æ ããªããããŒãã£ã«èæ¯ã«ã¹ã©ã€ããæåœ±ãããšããã¹ã¿ã€ã«ã§çºè¡šãããã®ã§ãïŒ ãã®æ§åã¯åå è
ã ãã®ã楜ãã¿ãªã®ã§ã玹ä»ã§ããªããŠæ®å¿µã§ãããèæ¯ã«äœ¿ãããã¹ã©ã€ããèŠãªãããªããšãªãæ³åããŠããã ããã°ãšæããŸãã ã¡ãã£ãšããããã£ãã¯æé·ã®ãã£ã³ã¹ ä»åã®ç»å£ã«ããããã€ãã³ãããªã³ã©ã€ã³éå¬ã«å€æŽãããããšã§æåã¯ããã£ããšæããããšã®ããšã§ããããã¯ç§ãç»å£ãããŠé ããã®ã§ããããŸãããªã³ã©ã€ã³ãšãã圢ã§åæãå€ãã£ãŠãã©ã®ãããªã»ãã·ã§ã³ãè¡ããããšæžæããŸããããããããã®ãããªç¶æ³ã«ãã£ã¬ã³ãžããããšã¯æé·ã®ãã£ã³ã¹ã§ããããšããããšã§ãã ã¹ã¯ã©ã ã¯éç§©åºãªç¶æ³ãä¹ãããªãããšã«é©ãã ãã¬ãŒã ã¯ãŒã¯ ã§ãã æã¿ä»ããè¡åã®çã§ãäºèŠã§ããç¯å²ã§ã¹ããªã³ããåããŠããªããïŒ ãµããããã§ãããã¬ã ã«å¯Ÿãããã©ã€ã°ããããŠããªããïŒ è¡åããåã«æ¢åã®äŸ¡å€èгã§å€æããŠããŸã£ãŠããªããïŒ å€åã®æä»£ã ãããããã£ã¬ã³ãžããŠã¿ããããã£ãŠã¿ãŠã倱æããŠãåŠç¿ããããããããå
容ã®ã»ãã·ã§ã³ã§ããããããŠãåè¿°ã®ããã«èæ¯ã«ã¹ã©ã€ããæåœ±ãããšããçºè¡šã«ãã£ã¬ã³ãžããããšã§ããããäŒããŠããã ããå
容ã ã£ããšæããŸãããã®çºè¡šãèãã ãã§ãã€ãã³ãã«åå ãã䟡å€ã®ããå
容ã§ããã ç»å£ã¬ããŒã 2æ¥ç®ã¯19ãã©ãã¯ã«åãããŠåã»ãã·ã§ã³ãè¡ãããŸãããã»ãã·ã§ã³ã ãã§ãªããåã³ãã¥ã ãã£ãŒ ã®Discordãã£ã³ãã«ã§ã¯æ§ã
ãªæ
å ±äº€æããããŠããŠãšãŠãè³ãã£ãŠããŸããã ã¡ãªã¿ã«ãã»ãã·ã§ã³ã¯é²ç»ããïŒç»å£è
ãæ¿è«Ÿããå ŽåïŒãåœæ¥ã®åå è
ã«ã¯çŽ1ã¶æéå
¬éãããŠããã®ã§ã19ãã©ãã¯ã®çºè¡šãåŸæ¥ãã£ããèŠãããšãã§ããŸããã¢ãã¿ãŒã€ãã³ããšããŠãé²ç»è©ŠèŽäŒãªã©ãéå¬ãããŠããŸããããããªã³ã©ã€ã³ã€ãã³ãã®æ°ããªã¹ã¿ã€ã«ã§ãã æåŸã«ãåŒç€Ÿããç»å£ãããŠé ããå
容ã«ã€ããŠã¬ããŒããããŠãã ããã ã¹ã¯ã©ã ã¡ããããªãšèšãããŠããã£ãŠã¿ãã²ãïŒ ã¹ã¯ã©ã ã¯çè§£ã¯å®¹æã§ãããç¿åŸã¯å°é£ã ãšèšãããŠããŸããå®éã«ããããšãããšãæã£ããšããã§ããªããšæããããšãå€ã
ãããŸããç¹ã«æã
ã®ãããªäžå°äŒæ¥ã®éçºã®çŸå Žã§ã¯å¶çŽãå€ããé·å¹Žãã£ãŠããåŸæ¥åã® éçºããã»ã¹ ãå
šãŠå·æ°ããŠå
åç°å¢ãæŽããŠãã ã¹ã¯ã©ã ãå°å
¥ã§ããã±ãŒã¹ã¯çšã§ãïŒãã¡ããäžå°äŒæ¥ã§ã¯ãªããŠãæ§ã
ãªå¶çŽã¯ãããšæããŸãããä»åã®çºè¡šã¯æã
ã®å¢éã«èŠç¹ãããŠãå
容ã«ãªã£ãŠããŸãïŒãåãå¢éã®æ¹ã
ã«æã
ã®åãçµã¿ãåèã«ãªãã°ãšã®æãã§çºè¡šãããŠããã ããŸããã ã¹ã¯ã©ã ã¡ããããªåé¡ å°ãã〠ã«ã€ãŒã³ ãã ã«ã€ãŒã³ æåãã€ããã«ã¯ããŸã ã¹ã¯ã©ã ã®ããŒã¹ãšãèšãã PDCA ãåãç¶æ
ãã€ããããšã§ãã課é¡ãå±±ç©ããŠããŠããããšã¯èªèããŠããŠããèšç»ãç«ãŠãŠãå®è¡åŸã«æ¯ãè¿ãæµããç¿æ
£åããŠããªããã° ã«ã€ãŒã³ ã¯é²ã¿ãŸããã ãããã§ãããããŒã ã§éçºããŠããç¶æ
ãã€ããããšã«çæããŸããåŸæ¥åã® éçºããã»ã¹ ã§ãããã課é¡ãã瞊å²ãã§æ
åœè
ã«æ¥åã ã¢ãµã€ ã³ãããé£ã®äººãäœããã£ãŠããããããããªãç¶æ
ã§ä»äºãããŠããç¶æ
ã§ããã¹ã±ãžã¥ãŒã«ãããžã¡ã³ãããã£ããè¡ããããŒã ãšããŠææãåºããç¶æ
ãã€ããããšã§ãåã®æŽ»åããããŒã ã®æŽ»åã«ãªãã ã«ã€ãŒã³ ãããŒã ã®æåã«ããåå°ãã§ããŸãã å°ãã〠ã«ã€ãŒã³ ããïŒç§ãã¡ã®å ŽåïŒ ããããå§¿ãæ¢ã ã«ã€ãŒã³ ã¯é²ã¿ãŸããããã〠ã¹ã¯ã©ã ã«ãªããã®ãŽãŒã«ãèŠããŸããã§ãããããã§ããŒã ãšããŠãäžå°äŒæ¥ã®ãšã³ãžãã¢ããŒã ãæ¥œã«ããã¢ãã«ãã€ããããšããããžã§ã³ãèšå®ããããã«å°éãããŸã§ã®ããŒãããããã€ãããŸãããããŒããããã®æ®µéãèžãã§ããããšã§ ã¹ã¯ã©ã ã«è¿ã¥ããããŒã ã®ããã¹ãå§¿ã«å°éãããã®ã§ãã ããŒã ã®ããŒãããã ååãåå°ã«ãã ããŒã ã®ããŒãããããã€ãã£ãŠé²ããŠãããã®ã®ãèªåãã¡ã®èŠç¹ã«åã£ãŠããŠé¡§å®¢èŠç¹ãæãŠãŠããªãããšã«æ°ã¥ããŸãããèªåãã¡ã® ã«ã€ãŒã³ ãé²ããŠããŒã ãã¢ããããŒãããŠã顧客ã«äŸ¡å€ãå±ããããªããã°æå³ããããŸããã ã¢ãžã£ã€ã« ã®ååã«ç«ã¡è¿ãã°åœããåã®ããšãã§ããŠããªããšæ°ã¥ããã®ã§ãã ååã«ãããªãã çµéšããåŠã¶ ãããã®åãçµã¿ããã ã«ã€ãŒã³ ãšããããå§¿ãååã®åå°ã3ã€ã®æ±ãšããŠçµéšããªããåŠã¶ããšã§ ã¹ã¯ã©ã ã«è¿ã¥ããšèããŸãããããã¯çµéšåŠç¿ãšããã¢ãã«ãããŒã¹ã«ããŠããŸãã çµéšããåŠã¶ããŒã ã§ ã¹ã¯ã©ã ã«è¿ã¥ã ã ã¹ã¯ã©ã ã¡ããããªãããå§ãŸã çµéšããåŠã¶ã¢ãã«ã®äžå¿ã«ã¯ãææ¬²ãšä¿¡é ŒãããããŸããç§ãã¡ã¯ã ã¹ã¯ã©ã ã¡ããããªããšæããŠæ©ãã ãšããäœããå€ããããšããææ¬²ãæã£ãŠããŸããã€ãŸãã ã¹ã¯ã©ã ã¡ããããªããšæããããšã¯çµéšããåŠãã§ ã¹ã¯ã©ã ã«è¿ã¥ãã¹ã¿ãŒãå°ç¹ãªã®ã§ãã ã¹ã¯ã©ã ã¡ããããªããå§ãŸã ãªã³ã©ã€ã³ãªãã§ã¯ã®ãã£ã¬ã³ãž ã¹ã©ã€ãã§ã¯ããããŸããããã€ãã³ãåœæ¥ã¯éäžã§ãã³ãåãã®æãããã³ããå
¥ããéšåãããããããé²é³ããŠãããåæé³å£°ãæµãããšã§èªåèªçããé°å²æ°ãæŒåºããŠã¿ãŸããããããç§ãªãã®ãªã³ã©ã€ã³ãªãã§ã¯ã®ãã£ã¬ã³ãžã§ãã ãã³ã«ããããã³ã ãµãããããéèŠã§ã¯ãªãïŒïŒãµããããã®æŽ»çšæ¹æ³ã«ã€ã㊠åŒç€Ÿãããã1åããµããããã«ã€ããŠçºè¡šãããŠé ããŸãããçºè¡šã¯åå è
ãšäžç·ã«ãµããããã«ã€ããŠèããã¹ã¿ã€ã«ã«ãªã£ãŠãããDiscordã®ãã£ã³ãã«ã§æ§ã
ãªæèŠãå
±æãããŠããŸãããããããŸããªã³ã©ã€ã³ãªãã§ã¯ã®ã¹ã¿ã€ã«ã§ãã retrospective.connpass.com ãã®çºè¡šã¯ãåæŒã€ãã³ããäŒç»ãããŠããŸãã®ã§å
容ã®ç޹ä»ã¯å²æãããŠé ããŸããèå³ã®ããããã¯ãã²ã€ãã³ãã«ãåå ãã ããã éç§©åºãä¹ãããªã ã¢ãžã£ã€ã« ãªã€ãã³ãã§ãã ã€ãã³ãå
šäœãéããŠãåå è
å
šå¡ã§å€åã«åãåã£ãŠé©å¿ããããšåãçµã¿ãã¿ããªã§ã€ãã³ãã®æ°ãã圢ãã€ãããããŠãã空æ°ã«æº¢ããŠããŸãããã€ãã³ãèªäœã ã¢ãžã£ã€ã« ãªäœéšã ã£ããšèšããŸãã ãªã³ã©ã€ã³ã§ã®ãã®ãããªã€ãã³ãã¯äžçã¬ãã«ã§ã¿ãŠããŸã äºäŸãå°ãªãã®ã§ã¯ãªãããšæããŸãããããªäžã§æçµçã«500人以äžãDiscordã«éãŸãå€§çæ³ã®ã€ãã³ããšãªã£ãããã§ãããããªã€ãã³ããäœãäžããå®è¡å§å¡ã®ã¿ãªããã®ã³ã¡ã³ããè£è©±ã Youtube ã§å
¬éãããŠããŸãã®ã§åãããŠã芧ãã ããã ã¹ã¯ã©ã ãã§ã¹å€§éª éå¬äžã«å®è¡å§å¡ãææ
šãèªã Discordã®ãã£ã³ãã«ã§ã¯çŸåšãæ§ã
ãªæ
å ±äº€æãè¡ãããŠããããã®åºæ¿ãåããŠåå è
ãããããã®çŸå Žã§æ¬¡ã®Scrum Festã«åããåãçµã¿ãã¹ã¿ãŒããããŠããŸããç§ãã¡ããŸã次åã®ã€ãã³ãã§æ¡æãããããã«ãã£ã¬ã³ãžãç¶ããããšæã£ãŠããŸãã åŒç€Ÿã§ãæ§ã
ãªãªã³ã©ã€ã³ã€ãã³ããäŒç»ãããŠãããåãçµã¿å
容ãå
±æããŠããŸãã7ææ«ã«ã¯æ¥œæ¥œæçްéçºããŒã ã® ã¹ã¯ã©ã äºäŸã®çºè¡šãäºå®ãããŠããŸãããããããã°ãã²ãåå ãã ããã rakus.connpass.com
ã¯ããã« ãããã«ã¡ã¯ãtuq376sã§ããä»åã¯æè¿è§Šãå§ããE2Eãã¹ãã® ãã¬ãŒã ã¯ãŒã¯ ã TestCafe ã§ã®åæ©çãªç»é¢æäœã«ã€ããŠãŸãšããããšæããŸãã ããšããã®ããTestCafeã¯TypeScriptãçšããŠèšè¿°ããã®ã§ããã ããããèªåãTypeScriptãåããŠãã€ã JavaScript ãèªä¿¡ãæã£ãŠããããæžããïŒããšã¯èšããªãã¬ãã«ãªã®ã§ã ãŸãã¯ãããæžãã°ãšããããåäœãããããèŠããŠããããšããæ¬¡ç¬¬ã§ãã ã ã¯ããã« ã¢ã¯ã»ã¹å
ãšãã¹ãã±ãŒã¹ èŠçŽ ãååŸ ã¯ãªã㯠ããã¹ããã£ãŒã«ããžã®å
¥å ãã¡ã€ã«ã¢ããããŒã ãããã« ã¢ã¯ã»ã¹å
ãšãã¹ãã±ãŒã¹ ããŸãã¯ã¢ã¯ã»ã¹å
ã®æå®ãšãã¹ãã±ãŒã¹ã®æžãæ¹ããã fixture("ãµã³ãã«").page("https://hogehoge/"); test("ãã¹ãã±ãŒã¹1" , async (t) => { //ãã¹ãå
容 }); test("ãã¹ãã±ãŒã¹2" , async (t) => { //ãã¹ãå
容 }); ã fixture ã¯è€æ°ã®ãã¹ãã±ãŒã¹ããŸãšããã«ããŽãªã®åœ¹å²ãæãããŸãã ãããŠç¶ã .page ã¯å§ãã«ã¢ã¯ã»ã¹ããURLãæå®ããŠããŸãã .beforeEach ã .afterEach ã§äºåã»äºåŸåŠçãèšè¿°ããããšãã§ããããã§ãã ãå®éã®ãã¹ãã±ãŒã¹ã¯ test ã§å®£èšããŸããå®è¡çµæã§ã¯ãã®ãã¹ãã±ãŒã¹ããšã«æåãšå€±æãè¿ããã圢ã«ãªããŸãã èŠçŽ ãååŸ ãããããã®å
容ã¯ã test ã®äžã§æžããŠãããŸãã ãŸãã¯ç»é¢ãæäœããŠããããã«ãããŒãžäžã®èŠçŽ ã倿°ã«ååŸããŠãããŸãã const button = Selector('input').withAttribute("value","ãã¿ã³").nth(0); ã Selector ã¯æå®ããèŠçŽ ãååŸããŸããããã«ã¯ã¿ã°åã ãã§ã¯ãªããclass ã id ãæå®ããããšãã§ããŸãã ã WithAttribute ã¯ã屿§ã®ååãšå€ã§èŠçŽ ãçµã蟌ã¿ãŸãããªã³ã¯ããã¿ã³ãªã©ã§ããã°ãã ãããããã§äžæã«çµããã®ã§ã¯ãªãããšæããŸãã ãããã§ãäžæã«ãªããªãæïŒèªåã¯åã屿§ãæã£ãèŠçŽ ã䞊ã¶äžèЧç»é¢ã§ã€ãŸã¥ããŸããïŒã䟿å©ãªã®ã nth ã§ããããã¯æ¡ä»¶ã«äžèŽããèŠçŽ ã®ãã¡ãäžããäœçªç®ã®èŠçŽ ãååŸããããæå®ã§ããŸãããããçŽ æµãªã®ã¯ãHTMLäžã§äœçªç®ã«ãªãããåãã§ããã°ããã屿§ã®å€ã倿ŽããããšããŠããã¹ãã³ãŒããæžãçŽããã«æžããšããã§ãã ã¯ãªã㯠ãããŠãããããç»é¢èªäœã®æäœã§ãã await t.click('#nextLink'); ãã¯ãªãã¯æäœã¯ click ã§è¡ããŸããèŠçŽ ã®æå®ã¯äžèšã®ããã«idãçŽæ¥æžããããå
ã»ã©ã®Selectorã§ååŸãããã®ãæž¡ãããããŸãã ãããã§æå®ãããã®ãè€æ°ã«è©²åœããŠããŸã£ãŠãããšããšã©ãŒã«ãªã£ãŠããŸããŸãã®ã§æ³šæã§ããïŒäŸãã°äžã€ãããã¿ã³ããªããšæã£ãŠããããå®ã¯hiddenç¶æ
ã®åããã¿ã³ãããäžã€ååšããŠãããšãâŠâŠãããŸããïŒ ããã¹ããã£ãŒã«ããžã®å
¥å ãç¶ããŠãããã¹ããã£ãŒã«ããžã®å
¥åæäœã«ã€ããŠã§ãã const textArea = Selector('input').withAttribute("name","å
¥åå Žæ"); await t.typeText(textArea, "å
¥åãããå€"); ã typeText ãçšããŸããSelectorã§ååŸããããã¹ããšãªã¢èŠçŽ ãšãå
¥åããå€ãæå®ããŸãã ãã©ãããæå®ããèŠçŽ ãã¯ãªãã¯ããŠãã©ãŒã«ã¹ããŠããå
¥åãè¡ã£ãŠããããã§ãã¯ãªãã¯ããæ®µéã§æ£ãããã©ãŒã«ã¹ã§ããªãã£ãå Žåãæžã蟌ã¿ã¯è¡ãããªãããã§ãã ãã¡ã€ã«ã¢ããããŒã ãæåŸã«ããã¡ã€ã«ãã¢ããããŒãããæäœã§ãã await t.setFilesToUpload(linkInputFile, "ãã¡ã€ã«ãã¹"); ã setFilesToUpload ã䜿ã£ãŠããã¡ã€ã«ãèšå®ããèŠçŽ ãšãã¡ã€ã«ãã¹ãèšè¿°ããŸãããã¡ã€ã«ãã¹ã¯ [ 'ãã¡ã€ã«1', 'ãã¡ã€ã«2', 'ãã¡ã€ã«3' ] ãšãã£ãããã«è€æ°ãæå®ããããšãå¯èœã§ãã ãããã« ããšããããã§ããããããããã°æäœéãã¹ãã±ãŒã¹ãäœã£ãŠç»é¢æäœããŠã¿ãããšããããšã¯ã§ããã¯ãã§ãã ããã¹ããšèšãã€ã€ ã¢ãµãŒã·ã§ã³ ã«ã¯è§ŠããããŠããŸãããããã¡ãã¯ãŸãããå°ãçè§£ã§ãããããããèšäºã«ããŠã¿ãããªãšæããŸãã
ã¯ããã« æè¡åºå ±ã®itoken1013ã§ããããã«ã¡ã¯ã å
æ¥6/17(æ°Ž) ãåœç€Ÿäž»å¬ã®Meetup ãSaaSãæ¯ããå質æ
ä¿è¡/ã¬ã¬ã·ãŒã³ãŒããã¢ãŒããã¯ãã£ãEOLã ãéå¬ããããŸããã ä»ã ã©ã¯ ã¹ã®æäŸè¡äºãšãªããŸããMeetupã§ãããä»åã¯åã®ãªã³ã©ã€ã³éå¬ãšãªãã 40åè¶
ã®ã客æ§ã«ãåå ããã ããŸããã ä»åã¯åœæ¥ã®çºè¡šå
容ã«ã€ããŠãç°¡åã«ã玹ä»ããããŠããã ããã°ãšæããŸãã ã€ãã³ãããŒãæŠèŠ ã©ã¯ ã¹ã§ã¯æ°å€ãã® to B åã SaaS ã®éçºãè¡ã£ãŠããŸãã ãµãŒãã¹ã«ã¯ããããæ°ãã«ãªãªãŒã¹äºå®ã®ãã®ãããã°ã ã¯ã©ãŠã ãµãŒãã¹ã®é»ææããååšããæŽå²ã®æ·±ããµãŒãã¹ãŸã§ãå€ãã®ã客æ§ã®ãæ¯æã«ãã£ãŠå¹
åºãå±éãããŠããã ããŠããŸãã ä»åã¯ãããªãµãŒãã¹ã®äžãã代衚ãã以äžã®3ã€ã®ãµãŒãã¹ãã©ã®ãããªå質æ
ä¿ãè¡ã£ãŠãããããšã³ãžãã¢ãã玹ä»ãããŠããã ããŸããã ã¡ãŒã«ãã£ãŒã©ãŒ ãã£ãããã£ãŒã©ãŒ 楜楜åŽå çºè¡šã®çŽ¹ä» ç€Ÿå
æé·èã®ã·ã¹ãã ã« PHPUnit ã§ç«ã¡åããæ¹æ³ ãªãªãŒã¹ãã18幎ã»ã©çšŒåããŠããã¡ãŒã«ãã£ãŒã©ãŒãæ
åœäžã®æ³ç¬ããã EOLãè¿ãã PHP ãããŒãžã§ã³ã¢ããããéã®çµéšã玹ä»ãããŠããã ããŸããã åœæ PHP æŽ3ã«æã ã£ãæ³ç¬ãçŽé¢ããçªç¶ã®å
šæ©èœãã¹ããä¹ãè¶ããäºäŸã«ã€ããŠãèªãããŠããŸãã speakerdeck.com æ£æ»æ³ã¯ããã®ã !? æ³¥èãæŠã£ã Node.js ããŒãžã§ã³ã¢ããäžéšå§çµ 次ã¯åããEOLãè¿ããNode.jsã 6ç³» â 10ç³»ã«ããŒãžã§ã³ã¢ããããããšãšãªã£ããã£ãããã£ãŒã©ãŒã§ã®æ¿å¯ãªæŠããã西åãçºè¡šãããŠããã ããŸããã 調æ»ã»ãã¹ãïŒÃ 3åïŒã»ãªãªãŒã¹åŸã®ãã©ãã«å¯Ÿå¿ãããããåŸãåŠã³ã瀺ãããŠããŸãã ã¿ã€ãã«ã®éããæ³¥èãããŒãžã§ã³ã¢ãããã«ãã³ãšæ¥ãæ¹ã«ã¯ãå
±æãããã ããã¯ãã§ãã Rakus MeetUp æ£æ»æ³ã¯ããã®ã!?æ³¥èãæŠã£ãNode.jsããŒãžã§ã³ã¢ããäžéšå§çµ from masatonishihara www.slideshare.net ArchUnit ã§ Java / Kotlin ã¢ããªã±ãŒã·ã§ã³ã® ã¢ãŒããã¯ã㣠ã CI ãã æåŸã¯åœç€Ÿã®ãªãŒããšã³ãžãã¢ã§ããå·äžŠã§ãã éçºããã»ã¹ ã®äžã§ã³ãŒãã¬ãã¥ãŒã¯åãå
¥ããããŠããŠãã ã¢ãŒããã¯ã㣠芳ç¹ã§ã®ã¬ãã¥ãŒãå
šå¡ãåãèšèšã¬ãã«ã§éçºãè¡ãã®ã¯ãé£æåºŠãé«ãããšããšæããŸãã å·äžŠãæ
åœããæ¥œæ¥œ åŽå ã§ã¯ãããªåé¡ã«å¯Ÿãã ArchUnit ã䜿ã£ã ã¢ãŒããã¯ã㣠芳ç¹ã§ã®å質æ
ä¿ã«åãçµãã§ããŸãã speakerdeck.com çµããã« åã®ãªã³ã©ã€ã³éå¬ãšãªããŸããMeetupã§ããããåå ããã ããŸããçæ§ã®ãããã§ã é«ãæºè¶³åºŠãããã ãããšãã§ããŸããã Meetupã¯æ¥æã»åæ¥æãéå¬ãäºå®ããŠãããŸãã®ã§ããèå³ã®ããæ¹ã¯ãç³èŸŒã¿ããã ããŸããšå¹žãã§ãã 詳ããã€ãã³ãæ
å ±ã«ã€ããŠã¯ãConnpassãã確èªãã ããã ããããšãããããŸããïŒ rakus.connpass.com
ä»åŸã®æ°ãµãŒãã¹ã®ç«ã¡äžãã«åããŠæè¡æ€èšŒãè¡ãæè¡æšé²èª²ã«æå±ããŠããéŽæšïŒ @moomooya ïŒã§ããä»å¹ŽåºŠããæ°èšã®éšçœ²ã«ïŒèª²é·ãšãµãããŒã£ã¡ã§ïŒç°åãšãªããŸããã æè¿ãã€ã¯ããµãŒãã¹ãšé¢é£ã㊠ãªããžã§ã¯ãæå ã«ã€ããŠåãçµãã§ããã®ã§ã ãã¡ãã« ã®æ³åã«é¢ããèšäºãæžããŠã¿ãããšæããŸããã¿ã€ãã«ã¯1床ãããç
œãã¿ã€ãã«ãã€ããŠã¿ããã£ãã®ã§åºæ¥å¿ã§ãã ãã¡ãã« ã®æ³åã£ãŠïŒ ãã¡ãã« ã®æ³å(LoD: Law of Demeter)㯠ããŒã¹ã€ãŒã¹ã¿ã³å€§åŠã§äœæãããã¬ã€ãã©ã€ã³ ãåå
žãšãªãã é人ããã°ã©ã㌠ã§ãïŒããŸã詳ããã¯æžãããŠããŸãããïŒç޹ä»ãããŠããŸãã ã¡ãªã¿ã«ã¿ããªå€§å¥œã Wikipedia ã§ã¯ãã®ããã«èª¬æãããŠããŸãã ç°¡æœã«èšããšãçŽæ¥ã®åéãšã ã話ãããšããšèŠçŽã§ãããåºæ¬çãªèãæ¹ã¯ãä»»æã®ãªããžã§ã¯ããèªå以å€ïŒãµã ã³ã³ããŒãã³ã å«ãïŒã®æ§é ãããããã£ã«å¯ŸããŠæã£ãŠããä»®å®ãæå°éã«ãã¹ãã§ãããšããç¹ã«ããã ââ Wikipedia - ãã¡ãã«ã®æ³å ããæç² ãªããšãªãããããŸãããå®è£
ã¬ãã«ã§ã©ãããã°ããã®ãçè§£ããã«ã¯ããå°ã説æãã»ãããšããã§ããå
·äœçãªå¯Ÿå¿æ¹æ³ãšããŠã¯ ãã¡ã³ããçŽæ¥åç
§ããã«ã¢ã¯ã»ããµïŒgetter/setterïŒçµç±ã§åç
§ããã°ããã ãšã ããªããžã§ã¯ãã®ã¡ã³ããçŽæ¥åç
§ããªãã ããªããžã§ã¯ãã®ã¡ã³ãã®ã¡ã³ããçŽæ¥åç
§ããªãã ãšããèšãããŠããŸãã Java ã®ãµã³ãã«ã³ãŒãã§èŠãŠã¿ãŸãããããé¡ã¯ä¹ãç©ã§ãã // Demeter1.java class Engine { // ãšã³ãžã³ã¯ã©ã¹ String status; } class Vehicle { // ä¹ãç©ã¯ã©ã¹ Engine engine; Vehicle() { engine = new Engine(); } } public class Demeter { public static void main(String[] args) { Vehicle vehicle = new Vehicle(); vehicle.engine.status = "çºé²" ; // ÃÃÃãªããžã§ã¯ãã®å
éšãçŽæ¥æäœããªãÃÃà System.out.println(vehicle.engine.status); } } ãã㯠vehicle.engine.status ã§çŽæ¥åç
§ããŠãããã ãã¡ãã« ã®æ³åã«éåããŠããäŸã§ãã ãã¡ã³ããçŽæ¥åç
§ããã«ã¢ã¯ã»ããµïŒgetter/setterïŒçµç±ã§åç
§ããã°ããããã§ããïŒ // Demeter2.java class Engine { protected String status; // â
getter/setteräœã£ã String getStatus() { return status; } void setStatus(String status) { this .status = status; } } class Vehicle { protected Engine engine; Vehicle() { engine = new Engine(); } // â
getteräœã£ã Engine getEngine() { return engine; } } public class Demeter { public static void main(String[] args) { Vehicle vehicle = new Vehicle(); vehicle.getEngine().setStatus( "çºé²" ); // â
getter/setter䜿ã£ãп޿° System.out.println(vehicle.getEngine().getStatus()); } } ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã坿ãããšâŠâŠ ã¡ã³ã倿°åã«ãã®ãŸãŸget/setãã€ããã¡ãœãããçšæãããšããã§æ¬è³ªçã«ã¯äœãå€ãã£ãŠããŸããã ãã ã®çŽ çŽãïŒ ã¡ã³ãã protected (ãŸã㯠private ã§ã)ã«ããŠããã®ã§ãªãŒããªã³ãªãŒïŒã©ã€ããªã³ãªãŒãªã©ã®å¶åŸ¡ã¯å¯èœã§ãã ççµå ã«ã¯ãªããŸããã ãã®ãžã㯠IDE ã®å眪 ãšãããgetter/setterã®èªåçæã«ãã£ãŠæŽè³ãããŠããŸã£ãŠãã人ãçµæ§ããæ°ãããŸãã ããã«èšãã° vehicle.getEngine().setStatus("çºé²"); ã®éšåããªããžã§ã¯ãã®å
éšæ§é (Vehicleå
ã®Engineã®æ§é )ãæèããŠããŸã£ãŠããŸãã ããªããžã§ã¯ãã®ã¡ã³ãã®ã¡ã³ããçŽæ¥åç
§ããªããããã«ããã°ããã®ïŒ // Demeter3.java class Engine { protected String status; String getStatus() { return status; } void setStatus(String status) { this .status = status; } } class Vehicle { protected Engine engine; Vehicle() { engine = new Engine(); } Engine getEngine() { return engine; } // â
engineçšã®getter/setteräœã£ã String getEngineStatus() { return engine.getStatus(); } void setEngineStatus(String status) { engine.setStatus(status); } } public class Demeter { public static void main(String[] args) { Vehicle vehicle = new Vehicle(); vehicle.setEngineStatus( "çºé²" ); // â
Engineã®ã¡ãœãããå©çš System.out.println(vehicle.getEngineStatus()); } } ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ` ïŸ|㥠_äº,ãããã''''ïŒã _äº,ã | ãœãœ_ã_ã_ã_|ã:/ãïŸ å
¥å ã _ã ããï¿£ïŒï¿£ã _ãã |__äž¿ã} .-'ãïŸ ãã{_,,ã.| ãïœï¿£ãããããããã ïœ ããã,,...-=ããããïŸãœïœ€ ãã/ã////////////ïŸ ã./ã;;;;;:////////////} ã{:::ïŸããïœãŸ/////////ïŸ ã.{;;;;:ããã: :.////////ïŸ ãrïŸ_,,,,,;;;::://////â, ã{iïŸãi77777ïŸ77777!ã:/ ããœ.ã___ãã::ã_;;;;//ïŸ ã ã ',ãã::i ,//////{ãããããããã, ãã ã',ã ,圡//////ïŒïœ€ïŒ¿ïŒ¿ïŒ¿__//ã ãããããœÂŽï¿£;///////////////////-=ïœ â''"{: : :._;;;/////////////////////// : : : |: : : :. /ã//: : /ã..:::".:://///////ïŸ : ïŸ: :.|: : : : :{'ãã ïœ/: :ïŒ...:....::////////////ïŸ ïœ€: :ãœ:{: : : : :.}ãã /ïŒ: ::://////////////ïŸ : : :{: : : : :.}ã ïŒ:::: : : : ://///////////ïŸ : : : ãœïŸ: : : :.!ïŒ: :::::::::..: : : : :.ãœ////////////} : : : : : ,'": : :.::::::::::::::.: : : ïŒ////////////ïŸ : : : :ïŒ'i: :::.:.:.: :::::::::::::::::: :///////////////// : ://:./:âª:::::::: ::::::::::::::::://///////////////// :ïŒ;': /::: : ::::::::: ::::::::::::://///////////â ////// : ïŒ:::: : : :::::: ::::::://///////////'''`ãã:ãœ://// .: : : : : :::: :::ïŒ///////////ã: : :::::.: :::::///// ã /ãœ; : : : ïŒ////////-'''":{::::.: : : :::::::::::///// . /: r.äºïœ€:{: : : ïŒ':::::: : : ::: : :ã: ::.:.::::::::////ïŒ /: : ã-ãïœãœ-{: : : : : : : :::::.:.:.:.:::::://////ïŒ {: : :._ïŒããããâš: : : ::::: : : : :.///////ïŒ Vehicle ãš Engine ã®é¢é£ã Vehicle å
ã«ç§»è²ããŠããã®ã§ã ãã¶è¯ããªã£ãŠã¯ããŸããããã ãš Engine ïŒååæ©ïŒã Human ïŒäººåïŒã«å€ãã£ããšããŠã Vehicle ã®ä¿®æ£ã ãã§æžã¿ãmainã¡ãœããã¯å
éšæ§é ïŒååïŒãæèããªããŠãããªããŸããã ããã Engine ã®ã¹ããŒã¿ã¹ã "çºé²" ãªã®ã 1 ãªã®ãã¯mainã¡ãœããåŽã§ã¯æèããå¿
èŠããªããã®ã§ãã ããã«çŸå®çãªå®è£
ãšããŠæäœå
ã®ãªããžã§ã¯ããæºåå®äºãã©ãããå€å®ããŠããã¹ããŒã¿ã¹æŽæ°ãè¡ããšæããŸãã // Demeter4.java class Engine { // ...ç¥... } class Vehicle { // ...ç¥... // â
ååããããè¿ã boolean isReady() { return engine != null ; } } public class Demeter { public static void main(String[] args) { Vehicle vehicle = new Vehicle(); if (vehicle.isReady()) { // â
ååãããããã§ã㯠vehicle.setEngineStatus( "çºé²" ); } System.out.println(vehicle.getEngineStatus()); } } ãããªæãã å°ãããªãåœãã (Tell, Don't Ask) ã§ãçµå±ã©ããããã ããšãã話ã§ãããããããã®ãè¯ããšãããŠããŸãã // Demeter.java class Engine { // ...ç¥... } class Vehicle { protected Engine engine; Vehicle() { engine = new Engine(); } // â
é²ãããã®åŠç // engineãžã®æäœã¯ããã§è¡ã void start() throws Exception { if (engine != null ) { engine.setStatus( "çºé²" ); } else { throw new Exception( "ãšã³ãžã³çãŸãã" ); } } // â
Vehicleã®ç¶æ
ãšããŠè¿ã String getStatus() { // å¿
èŠã«å¿ããŠæŽåœ¢ïŒããã§ã¯ãã®ãŸãŸè¿ãïŒ return engine.getStatus(); } } public class Demeter { public static void main(String[] args) { Vehicle vehicle = new Vehicle(); try { vehicle.start(); // â
ãã ãé²ãããšåœãã System.out.println(vehicle.getStatus()); // â
vehicleã®ç¶æ
ãšããŠååŸ } catch (Exception e) { System.out.println(e); // â
ãã¡ãªãäŸå€åŠçïŒå Žåã«ãã£ãŠãšã©ãŒã³ãŒãåŠçã§ãïŒ } } } ããããããšã§mainã¡ãœãããã㯠Vehicle ã®ã¿ãæèããã°ããã Engine ãšã®ããšã¯ãã¹ãŠ Vehicle å
ã«éããããšã«ãªããŸãã ãããã°ãªã ããã¶ãæã«æå±ããŠããããŒã ã§ãgetter/setterãçµç±ããªããã°ãªããªããDA!!ããšããã坿ãã³ãŒãã䞻匵ããæ¹ãããã®ã§ãã int getA() { if (A == null ) { return B; } return A; } ãšãã£ãã³ãŒãæžããŠãã®ãçºèŠãããšãã«ãã[æ€é²åé€]ãã[æ€é²åé€]ãã[æ€é²åé€]ããšãã£ãããšãå¿ã®äžã§å«ãã èšæ¶ãèããŸããã ãŸãšã ã€ã±ãŠãã€ã³ã¿ãã§ãŒã¹èšèšãå¿ãããŸãããã ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã rakus.hubspotpagebuilder.com ã©ã¯ ã¹Developersç»é²ãã©ãŒã https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ âTECH PLAY techplay.jp âconnpass rakus.connpass.com
ã¯ããã« ããã«ã¡ã¯ã id:FM_Harmony ã§ãã Rakus Developers Blogã§ã¯çŽäžå¹Žæ¯ãã®æçš¿ã«ãªããŸãã ããŠãä»å¹Žããæ¥œæ¥œç²Ÿç®ã® ã¹ããŒããã©ã³ ã¢ããªéçº ã«æºããããšãšãªããæ¥åç¥èãšããŠSwiftãåŠç¿ããŠããŸãã ããã§ãä»åã¯Swiftã®ãããªãšæã£ãç®æã«ã€ããŠãç°¡åã«ãŸãšããŠã¿ãŸããã ããããSwiftã®åŠç¿ãå§ããæ¹ã«ãSwiftã®è¯ããäŒããããã°å¹žãã§ãã ã¯ããã« ãããšããâ ïŒåæšè« ãããšããâ¡ïŒnullã®åãæ±ã ãããšããâ¢ïŒæååè£å® ãããã« åèæç® ãããšããâ ïŒ åæšè« Swiftã¯éçåä»ãèšèªã§ããã åæšè« ãæã£ãŠããŸãã ãã®ããã倿°å®£èšæã¯å®æ°ãã©ããã®ã¿ãæèããã°ãããç°¡æœãªã³ãŒããæžãããšãã§ããŸãã var n = 1 print(type(of : n )) // â Int ãããšããâ¡ïŒnullã®åãæ±ã Swiftã§ã¯ã倿°ã«nullïŒ nil ïŒã代å
¥ããããã«ã¯ãOptionalåãšããŠå®£èšããå¿
èŠããããŸãã // var m = nil â ã³ã³ãã€ã«ãšã©ãŒ var n : Int ? = nil print(type(of : n )) // Optional<Int> Optionalåã¯ã¢ã³ã©ããããªããã°å©çšã§ããªããããnullãããããªãå€ãå®å
šã«å©çšããããšãã§ããŸãã ã¢ã³ã©ããããæ¹æ³ã®äžã€ã«ã if - let æ§æããããŸãã var n : Int ? = 1 print(n) // Optional(1) // n += 1 â ã³ã³ãã€ã«ãšã©ãŒ if let m = n { print(m) // 1 m += 1 } ãŸãã guard - else æ§æã«ãããOptionalã®å€ãnullã ã£ãå Žåã¯ãªã¿ãŒã³ããããã§ãªãå Žåã¯ã¢ã³ã©ããããå€ã倿°ã«ä»£å
¥ããããšãã£ãããšãã§ããŸãã guard let n = hoge() else { return } print(n) // â hoge()ã®æ»ãå€ãnilã§ãªããã°ããã®æ»ãå€ã衚瀺ãã guard - else æ§æã§ã¯ãè€æ°ã®å€æ°ã«ä»£å
¥ããããšãã§ããŸãã guard let m = hoge(), let n = fuga() else { return } print(m) print(n) // â hoge()ãfuga()ã®æ»ãå€ãnilã§ãªããã°ããã®æ»ãå€ã衚瀺ãã ãããšããâ¢ïŒæååè£å® æåå ãªãã©ã« ã«ã \(倿°) ãšãã圢ã§å€æ°ã®å€ãåã蟌ãããšãã§ããŸãã 倿°ã®å€ãšæåå ãªãã©ã« ã®çµåãã§ããã®ã§ãããæååè£å®ãå©çšããæ¹ãç°¡æœãªã³ãŒããæžãããšãã§ããŸãã let year = 2020 let month = 6 let day = 24 print( " \(year) 幎 \(month) æ \(day) æ¥" ) // 2020幎6æ24æ¥ ãããã« ãããã§ããã§ããããã Swiftã䜿ãããšã§ãç°¡æœãã€å®å
šãªã³ãŒããæžãããšããããšãäŒããããŠããã°å¹žãã§ãã ä»ã«ããextensionãprotocolã ã¯ããŒãžã£ ãšããããã«ãéå»ã®èšäºã§ç޹ä»ãããŠããææ³ããããŸãã tech-blog.rakus.co.jp tech-blog.rakus.co.jp ãããã£ããã®ã«ã€ããŠãä»åŸçè§£ãæ·±ããŠããã ã¹ããŒããã©ã³ ã¢ããªã®æ©èœéçºã«æŽ»ãããã°ãšæããŸãã åèæç® 詳现ïŒSwift 4 iPhoneã¢ããªéçº å
¥éããŒã Swift 4+Xcode 9å¯Ÿå¿ äœè
: 倧é çŸå¹ž ã¡ãã£ã¢: Kindle ç
ã¯ããã« ããã«ã¡ã¯ãitoken1013ã§ãã ä»å㯠Markdown ïŒããŒã¯ããŠã³ïŒ ã®è¶
å
¥éãšããŠãå©çšåºŠãé«ãèšæ³10éžã玹ä»ããŸãã å
¥ç€Ÿç ä¿®ãçµãã£ãŠé
å±å
ã®äžåžãå
茩ãšã³ãã¥ãã±ãŒã·ã§ã³ããšãããŠããæ°å
¥ç€Ÿå¡ã®æ¹ããåšå®
å€åã§ä»¥åããããªã³ã©ã€ã³ã³ãã¥ãã±ãŒã·ã§ã³ã®æ©äŒãå¢ããæ¹ã«ã¯æ¯éãšãèŠããŠããã ãããèšæ³ã°ããã§ãã çæ§ã®æ¥ã
ã®ã³ãã¥ãã±ãŒã·ã§ã³ã«ã圹ç«ãŠãã ããïŒ ã¯ããã« ããããMarkdownïŒããŒã¯ããŠã³ïŒãšã¯äœã Markdownã䜿ãããšäœã䟿å©ã ã³ãã¥ãã±ãŒã·ã§ã³ãã¹ã ãŒãº ã«ãªã ããŒã«ãå€ãã£ãŠã䜿ãã ããã ãèŠããã°å®å¿ãªèšæ³10éž 1. èŠåºã ãªãŒããã³ã° Meetupã®çºè¡šå
容 â Twelve-Factor Appã§èªã¿è§£ããã¢ãã³ãªã¢ããªã®çæ³ãšã¬ã¬ã·ãŒãªã¢ããªã®çŸå® â¡éçºã°ã«ãŒããéçºããŒã ã«ãªããŸã§ã®æ©ã¿ â¢çµææŽåæ§ãã§ããªãéçºè
ã®ãã¡ã€ã³ã€ãã³ã掻çšäŸ 2. æ¹è¡ 3. ãªã¹ãïŒç®æ¡æžãïŒ 4. çªå·ä»ããªã¹ã 5. 衚ïŒããŒãã«ïŒ 6. 匷調ã倪æå 7. åãæ¶ãç· 8. ãªã³ã¯ 9. åŒçš 10. æ°Žå¹³ç· çµããã« ãããã Markdown ïŒããŒã¯ããŠã³ïŒãšã¯äœã æç« ã«èŠåºããç®æ¡æžããªã©ãæç« ã«ç°¡åã«è£
é£Ÿãæœãããã®èšè¿°æ³ã Markdown ïŒããŒã¯ããŠã³ïŒã§ãã ç°¡åãªèšè¿°ã«ãŒã«ã«åŸã£ãŠæç« ãäœæãããšHTMLãžå€æãããè£
é£Ÿãæœãããæç« ãåºæ¥äžãããŸãã äŸãšããŠä»¥äžã¯ ã©ã¯ã¹ã®ConnpassããŒãž ã§ã®ã€ãã³ãã®ç޹仿ã§ããããã ã®æåã®çŸ
åã§ããäžå³ãããã Markdown ã«ãã£ãŠè£
食ãããäžå³ã®æ¹ãå§åçã«èªã¿ãããããšããåããããã ããããšæããŸãã Markdown ãªã Markdown ãã ã¡ãªã¿ã« ã©ã¯ ã¹ã§ã¯ç€Ÿå
ã®ãã£ããããŒã«ã«Mattermostãæ¡çšããŠããããšãããã è¥æããéšé·ãŸã§ Markdown ã䜿ã£ãã³ãã¥ãã±ãŒã·ã§ã³ãæ¯æ¥è¡ãããŠããŸãã ãšã³ãžãã¢ä»¥å€ã§ãå©çšã§ããæ¹ã¯å€ãã§ãã Markdown ã䜿ãããšäœã䟿å©ã ã³ãã¥ãã±ãŒã·ã§ã³ãã¹ã ãŒãº ã«ãªã äžè¿°ã®ããã«æç« ã«æè»œã«è£
食ãå ããããšãã§ããå§åçã«æèŠãäŒãããããªããŸãã æ¥åžžã®ã³ãã¥ãã±ãŒã·ã§ã³ã®ä»ãè°äºé²ãIssueã§ãèªã¿ãããæç« ãäœæããããšãã§ããããã«ãªãã§ãããã ããŒã«ãå€ãã£ãŠã䜿ãã Markdown ãæ¡çšããŠããããŒã«ããµãŒãã¹ã¯æ°å€ãïŒä»¥äžïŒãäžåºŠèšæ³ãèŠããŠããããŸãã°ãå©çšããããŒã«ãå€ãã£ãŠãåæ§ã®èšæ³ã§æç« ãäœæããããšãå¯èœã§ãã ã¡ãªã¿ã«ãã®ããã°ã Markdown ã§æžããŠããŸãã GitHub Qiita åçš®ãšãã£ã¿ Mattermost Backlog ...etc ããã ãèŠããã°å®å¿ãªèšæ³10éž ããã§ã¯ä»£è¡šçãªèšæ³ã玹ä»ããŠãããŸãã ããã§ç޹ä»ãã10åã®èšæ³ã身ã«ã€ããã°ãæ®æ®µã®ã³ãã¥ãã±ãŒã·ã§ã³ã«å°ãããšã¯ç¡ããªãã¯ãã§ãã 1. èŠåºã ãŸãã¯èŠåºãïŒäŸ. 1ç« ã第5ç¯ãªã©ïŒã§ãã èŠåºãã衚çŸããã«ã¯ ã # + åè§ã¹ããŒã¹ ã ã®åŸãèŠåºãåãã€ããããšã§è¡šçŸã§ããŸãã ãŸã # ãéããããšã§ãèŠåºãã®éå±€ã衚çŸããããšãã§ããŸãã è°äºé²ã ã¢ãžã§ã³ã ã瀺ãéã«ã¯ã以äžã®ãããªèŠåºãããããšèªã¿ãããã§ãããã äŸãšããŠã以äžã§ã¯èŠåºã4ãš5ãçµã¿åãããŠããŸãã æžãæ¹äŸ #### ãªãŒããã³ã° #### Meetupã®çºè¡šå
容 ##### â Twelve-Factor Appã§èªã¿è§£ããã¢ãã³ãªã¢ããªã®çæ³ãšã¬ã¬ã·ãŒãªã¢ããªã®çŸå® ##### â¡éçºã°ã«ãŒããéçºããŒã ã«ãªããŸã§ã®æ©ã¿ ##### â¢çµææŽåæ§ãã§ããªãéçºè
ã®ãã¡ã€ã³ã€ãã³ã掻çšäŸ è¡šç€ºäŸ ãªãŒããã³ã° Meetupã®çºè¡šå
容 â Twelve-Factor Appã§èªã¿è§£ããã¢ãã³ãªã¢ããªã®çæ³ãšã¬ã¬ã·ãŒãªã¢ããªã®çŸå® â¡éçºã°ã«ãŒããéçºããŒã ã«ãªããŸã§ã®æ©ã¿ â¢çµææŽåæ§ãã§ããªãéçºè
ã® ãã¡ã€ã³ ã€ãã³ã掻çšäŸ 2. æ¹è¡ 次ã¯ã·ã³ãã«ã§ãããæ¹è¡ã§ãã æ¹è¡ã¯ææ«ã« åè§ã¹ããŒã¹2〠ãã€ããããšã§å®çŸã§ããŸãã æžãæ¹äŸ ææ«ã«åè§ã¹ããŒã¹ã2ã€ä»ãããšãæ¹è¡ã§ããŸããâ æ¹è¡ã§ããŸããã è¡šç€ºäŸ ææ«ã«åè§ã¹ããŒã¹ã2ã€ä»ãããšãæ¹è¡ã§ããŸããâ æ¹è¡ã§ããŸããã 3. ãªã¹ãïŒç®æ¡æžãïŒ å
é ã«ãã€ãã³ ãã€ããããšã§ãç®æ¡æžãã衚çŸããããšãã§ããŸãã ãŸã åè§ã¹ããŒã¹2ã€ã§ã€ã³ãã³ã ãã€ããããšã§ãéå±€æ§é ã瀺ãããšã§ããŸãã ããžã«ã«ã«èããäŒãããå Žåãªã©ãå€çšããã·ãŒã³ãéåžžã«å€ãèšæ³ã§ãã æžãæ¹äŸ - 奜ããªèšèª - Java - PHP - 奜ããªãšãã£ã¿ - VSCode - Vim - Typora - 奜ããªã¡ãã£ã¢ - ã¯ãŠãªããã¯ããŒã¯ - Qiita è¡šç€ºäŸ å¥œããªèšèª Java PHP 奜ããªãšãã£ã¿ VSCode Vim Typora 奜ããªã¡ãã£ã¢ ã¯ãŠãªããã¯ããŒã¯ Qiita 4. çªå·ä»ããªã¹ã å
é ã«çªå·ãã€ãããªã¹ãã衚瀺ãããå Žåã«ã¯ã å
é ã«çªå· ãä»ããŠè¡šçŸããŸãã ãŸãç®æ¡æžããšåæ§ãã€ã³ãã³ãã«ãã£ãŠéå±€æ§é ã瀺ãããšãå¯èœã§ãã æžãæ¹äŸ 1. äœã¿ããçº 1. éå 1. ç¥æ¥œå 1. è»çªª 1. éšå±ã®æ¡ä»¶ 1. éšé³ 1. ãããå¯ 1. é§
ããåŸæ©3å è¡šç€ºäŸ äœã¿ããçº éå ç¥æ¥œå è»çªª éšå±ã®æ¡ä»¶ éšé³ ãããå¯ é§
ããåŸæ©3å 5. 衚ïŒããŒãã«ïŒ 衚ã¯å°ãè€éã§ããã ãã€ã ãš ãã€ãã³ ã§äœæã§ããŸãã ãŸãããããŒãšåè¡ã®éã®1è¡ã«ã¯ãã€ãã³ãæå®ããå¿
èŠããããŸããã ãã€ãã³ã®å·Šå³ã« ã³ãã³ ãæå®ããããšã§ å³å¯ããå·Šå¯ããäžå€®æã ãæå®ããããšãã§ããŸãã æžãæ¹äŸ |æ¥ä» | ã«ããŽãªãŒ | ã€ãã³ãããŒã | |---:| :---: | :--- | |2020/6/17 | Meetup | SaaSãæ¯ããå質æ
ä¿è¡| |2020/6/19 | PHP | TechCafe| |2020/6/24 | Meetup | SaaSãæ¯ããéçºåå| |2020/6/26 | ãªããžã§ã¯ãæå | ãªããžã§ã¯ãæåLTäŒ| |å³å¯ã| äžå€®æã | å·Šå¯ã | è¡šç€ºäŸ æ¥ä» ã«ããŽãªãŒ ã€ãã³ãããŒã 2020/6/17 Meetup SaaS ãæ¯ããå質æ
ä¿è¡ 2020/6/19 PHP TechCafe 2020/6/24 Meetup SaaS ãæ¯ããéçºåå 2020/6/26 ãªããžã§ã¯ãæå ãªããžã§ã¯ãæå LTäŒ å³å¯ã äžå€®æã å·Šå¯ã 6. 匷調ã倪æå æç« ã®äžã§åŒ·èª¿ãããæèšãããå Žåã æèšã®ååŸã ã¢ã¹ã¿ãªã¹ã¯ ã§å²ã ããšã§è¡šçŸã§ããŸãã äžèŠããŠæ³šç®ãã€ã³ããã¢ããŒã«ã§ãããããå©çšé »åºŠãé«ãèšæ³ã®äžã€ã§ãã â»ããŒã«ã«ãã£ãŠ ã¢ã¹ã¿ãªã¹ã¯ ã®åæ°ãç°ãªãå ŽåããããããåããŒã«ã®ã¬ã€ãçã確èªãã ããã æžãæ¹äŸ 7æãã©ã¯ã¹ã®** Meetup **ãš** ååŒ·äŒ **ãç®çœæŒãã ãïŒïŒ è¡šç€ºäŸ 7æã ã©ã¯ ã¹ã® Meetup ãš ååŒ·äŒ ãç®çœæŒãã ãïŒïŒ 7. åãæ¶ãç· åãæ¶ãç·ã¯ æèšã®ååŸã ãã«ã ïŒ~~ïŒã§å²ã¿ãŸãã äžåºŠæžããæé¢ã«èª€ãã倿Žããã£ãå Žåãç§ã¯ãããã®åãæ¶ãç·ã䜿ããŸãã æžãæ¹äŸ ã¢ã³ã±ãŒãã®çµæãå
æã¯å®ã«~~80%~~ 90% ã®æ¹ããé«ãæºè¶³åºŠãåŸãããŸããïŒ è¡šç€ºäŸ ã¢ã³ã±ãŒãã®çµæãå
æã¯å®ã« 80% 90% ã®æ¹ããé«ãæºè¶³åºŠãåŸãããŸããïŒ 8. ãªã³ã¯ æ¥ã
ã®ã³ãã¥ãã±ãŒã·ã§ã³ã§ãåç
§å
ã®URLã玹ä»ããããšã¯å€ãããšæããŸãã URLã貌ãä»ããŠç€ºããŠãããã§ãããåéãå€ããªã£ãŠããŸãå Žåããã¡ãã®ãªã³ã¯èšæ³ã䟿å©ã§ãã ãªã³ã¯ã¯ è§ã«ãã³ãšäžžã«ãã³ ãçµã¿åãããŠèšè¿°ããŸãã æžãæ¹äŸ ã©ã¯ã¹ã®ã€ãã³ãæ
å ±ã¯ã[Connpass](https://rakus.connpass.com/)ããã§ãã¯ããŠãïŒ è¡šç€ºäŸ ã©ã¯ ã¹ã®ã€ãã³ãæ
å ±ã¯ã Connpass ããã§ãã¯ããŠãïŒ 9. åŒçš ã¡ãŒã«ã®è¿ä¿¡ã§ãè€æ°ã®è©±é¡ã«è§Šããéã«ã¯åŒçšã䜿ãããšãããããšæããŸãã Markdown ã§ãåŒçšãããéã«ã¯ã > ã䜿ãããšã§è¡šçŸãããŸãã æžãæ¹äŸ > 次åã®å匷äŒã®ããŒãã«ã€ã㊠ãªããžã§ã¯ãæåã§ãã > ã€ãã³ãé嬿¥ 6/26(é)ã§ãã > å Žæ ãªã³ã©ã€ã³ã§ãã https://rakus.connpass.com/event/178556/ è¡šç€ºäŸ æ¬¡åã®å匷äŒã®ããŒãã«ã€ã㊠ãªããžã§ã¯ãæå ã§ãã ã€ãã³ãé嬿¥ 6/26(é)ã§ãã å Žæ ãªã³ã©ã€ã³ã§ãã https://rakus.connpass.com/event/178556/ 10. æ°Žå¹³ç· ãŸãšãŸã£ãæ
å ±ã瀺ããã æé¢ã«ã¡ãªããªãå ããããšãã§ããŸãã æ°Žå¹³ç·ã¯ ãã€ãã³3〠ãæãããšã§ãç°¡åã«èšè¿°ã§ããŸãã æžãæ¹äŸ ã©ã¯ã¹ã®ã€ãã³ãæ
å ±ã玹ä»ããããšæããŸãã äžèšã®å
容ãã確èªãã ããã --- - [ããªã³ã©ã€ã³ãSaaSãæ¯ããéçºåå/DDDãå¿ççå®å
šæ§ãTwelve-Factor](https://rakus.connpass.com/event/178046/) - [ããªã³ã©ã€ã³ãPHP::LTäŒ ãLTæ @2ïŒéäžåå OKã](https://rakus.connpass.com/event/178724/) - [ããªã³ã©ã€ã³ããªããžã§ã¯ãæåLTäŒ vol.2ïŒéäžåå OKïŒ](https://rakus.connpass.com/event/178556/) --- ããããã®çæ§ã®ãåå ããåŸ
ã¡ããŠããŸãïŒ è¡šç€ºäŸ ã©ã¯ ã¹ã®ã€ãã³ãæ
å ±ã玹ä»ããããšæããŸãã äžèšã®å
容ãã確èªãã ããã ããªã³ã©ã€ã³ãSaaSãæ¯ããéçºåå/DDDãå¿ççå®å
šæ§ãTwelve-Factor ããªã³ã©ã€ã³ãPHP::LTäŒ ãLTæ @2ïŒéäžåå OKã ããªã³ã©ã€ã³ããªããžã§ã¯ãæåLTäŒ vol.2ïŒéäžåå OKïŒ ããããã®çæ§ã®ãåå ããåŸ
ã¡ããŠããŸãïŒ çµããã« å©çšåºŠãé«ã Markdown ã®èšæ³ã玹ä»ããŠããŸããã ãŸã ãŸã 䟿å©ãªèšæ³ã¯ãããŸããããã®10èšæ³ãèŠããŠããã°ã ååã«ãèªèº«ãäŒãããããšãèªã¿ãããæç« ãèµ·ããããšãã§ããã¯ãã§ãã Markdown ã䜿ããããŒã«ããµãŒãã¹ã¯æ¥ã
å¢ããŠããŸãã®ã§ããã®ããã°ããæŽ»çšããã ããŸãããå¬ããã§ãã ã§ã¯ã§ã¯ã ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã rakus.hubspotpagebuilder.com ã©ã¯ ã¹Developersç»é²ãã©ãŒã https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ âTECH PLAY techplay.jp âconnpass rakus.connpass.com
ããã«ã¡ã¯ãæè¡åºå ±ã® syoeshin ã§ãã åœç€Ÿ ã©ã¯ ã¹ã®éçºã§ã¯æ§ã
ããŒã«ã䜿ã£ãŠãŸãã ããã¹ããšãã£ã¿ ã䜿çšããã±ãŒã¹ãå€ã è¥æãããã©ã³ãèªåã«åã ããã¹ããšãã£ã¿ âãã€ã»ãšãã£ã¿â ãæçšããŠãŸãã ããã¹ããšãã£ã¿ ã£ãŠçš®é¡ãå€ã㊠ã»çµå±ã©ããéžã¶ãïŒ ã»ãšãªãã®ãã®äººã¯äœã䜿ã£ãŠãããïŒ æ°ã«ãªããŸãããã ããã§ãä»åã¯åœç€Ÿã®è¥æããããã©ã³ã«ãŸã§ æ®æ®µæçšããŠãã ããã¹ããšãã£ã¿ ãŒãš ãããããã€ã³ããèããŸããã 質åïŒãæçšã®ãšãã£ã¿ã¯äœã§ããïŒã åœç€Ÿèª¿æ»çµæã®ã°ã©ãã¯ä»¥äž âæçšãšãã£ã¿ã®èª¿æ»çµæ ãã¯ããšèšããŸãã åœç€Ÿ ã©ã¯ ã¹ã§1äœã®ãããããšãã£ã¿ã¯ âVisualStudioCode ã€ã³ã°ããããã©ã³ãŸã§å¹
åºãå±€ã§æ¯æ 以äžãæçšè
éããã®ããããã³ã¡ã³ã ä»ãæäž»æµãªã®ã§äŸ¿å© ãã©ã°ã€ã³ ãèšäºãªã©ã VSCode åæã®ãã®ãå€ãã Atom ãBracketãšæ¯ã¹ãŠè»œãã£ãïŒä»ã¯ããããªãïŒ GIT MarkDown Python PHP Docker AWS ãªãã§ããã 軜ãã倿©èœïŒ çºè¡šè³æã Markdown ã§æžããŠãã¬ãã¥ãŒãããã®PDFåºåãŸã§ VSCode ã§ã§ãã¡ããïŒmarpïŒ æ°ãããã®ã«æ¹ãã㊠Atom ããä¹ãæããŸãã 軜ããRemote Containerã䟿å©ãæè¿æ ¡æ£ãã察å¿ããã®ã§æç« æžããšãã«ã䜿ãã èŠæããç·šéãæãã ããã©ã«ãã®HTML ã¹ãããã ãçŽ æŽããããããããHTMLã³ãŒãã£ã³ã°ãã€ã€ãLive Serverã§ä¿åâ峿ãµãŒãåæ ã§è¯ãæã WSL ãšç¹ããŠäœ¿ãã®ãã§ãããnpm ã¹ã¯ãªãã ã®å®è¡ãã¯ãªãã¯æäœã§å¯èœãªã®ã§ãNode.js䜿ãç³»ã®äœæ¥ã«ç¹ã«éå®ããŠãã ããŒã¯ããŠã³ã§ã®åçš¿äœæãã§ãã¯ãç®ã«åªããã®ã§å¥œãã§ãã ãã¡ã€ã«ãµãŒãäžã®ããã¹ããã¡ã€ã«ãåæç·šéå¯èœ â ä»è
ã«ããäžæžã鲿¢ äŒè°äžã®è°äºäœæã倿 ç¹éã§ã®åæäœæ¥æãªã©ããªã¢ã«ã¿ã€ã ã§ããã¹ãã®å
±æãè¡ãæã«äŸ¿å© æç€ºçã«ä¿åããŠããªããŠãåèµ·åæã«ç·šéäžã®å
容ãå衚瀺ããã åçŽãª ããã¹ããšãã£ã¿ ã«ããéçºã«ã䜿ããã ãã©ã°ã€ã³ ããšã«ããè±å¯ããã®æ°ã«ãªãã°èªåã§ã ãã©ã°ã€ã³ ãäœããã æ¯åã䜿ã£ãŠããŠå¹
åºãçšéã幎霢局ã§äœ¿ãããŠãããšãããè¯ãã etc... äžéçã«ãå
šäžä»£ã§å¹
åºãæ¯æãã åœç€Ÿã§ã¯ã€ãã«èŠªåã§äœ¿ã£ãŠããäŸãç»å ŽïŒ 次ãã§ãåœç€Ÿã§2äœã®ãããããšãã£ã¿ã¯ â ãµã¯ã©ãšãã£ã¿ â»æå€ã«ã ãã¡ããã€ã³ã°ããããã©ã³ãŸã§ã®å¹
åºãå±€ã§æ¯æ (çè
ã markdown ãã§ãã¯ã§å©çš) 以äžãæçšè
éããã®ããããã³ã¡ã³ã ã¡ãã䜿ãã«ã¯æ¥œã巚倧ãªããã¹ããã¡ã€ã«ã§ãå²ãšè»œããããã¹ã ãšã³ã³ãŒãã£ã³ã° ã®æäœã§æ
£ããŠããã ããã¹ãæŽåœ¢ãšãããæãã·ã§ãŒãã«ããããŒããªããã§ããã®ããã£ã¡ãªã®ã§ãã£ã¡äœ¿ã£ã¡ãã ç®ã«åªãã æ°äººã®é ãå
茩㫠ãµã¯ã©ãšãã£ã¿ ã®è¶
çµ¶æå·§ãèŠããŠããã ãæåãããã ããã¹ãæäœãããããã èªåãªãã®æé©åã ãµã¯ã©ãšãã£ã¿ ã§åºæ¥äžãã£ãŠããŸã£ããããã€ãã®ã·ã§ãŒãã«ããããŒãå€çšããŠããŸããïŒãœãŒãïŒAltïŒAãããŒãžAltïŒMïŒ äœ¿çšãœããã«å³ãã客å
ã§ããªãã䜿ãããšãèš±ãããŠãã Sier 埡çšéãšãã£ã¿ å²ãšèµ·åã軜ãã®ã§å€§ããªãã°ãã¡ã€ã«ãªã©ã¯ãµã¯ã©ã§éããŸãã grep ããã®ãžã£ã³ãããã¯ãã䟿å©ã 軜ããããã»ã¹ãèœã¡ãããšããããªãã®ã§ãã€ãéå®ããŠãŸã èµ·åãæ©ããã¡ã¢çšã æåã³ãŒã å€æçš ã¡ã¢ã SQL ããµããšæžãæã«ã¯äŸ¿å© 眮æã¯ããã«éãã æåã³ãŒã 倿ã䟿å©ãã¯ããæã« jar ãã¡ã€ã«ã base64 ãšã³ã³ãŒãã£ã³ã° ããŠã³ãã => base64 ãã³ãŒãããŠä¿å ã§æãå
¥ããŠããã®ãæãããã ã¡ã¢æžããããã¡ãã£ãšããç·šéãŸã§å€§æµããã䜿ã£ãŠããŸã 眮æãããŒãžïŒãœãŒããç©åœ¢éžæèŸºããå€çšããŠããŸã æ£èŠè¡šçŸ ã§ã®çœ®æã æåã³ãŒã ãæ¹è¡ã³ãŒãã®å€æã«å©çšããŠããŸã Java ã SQL ã® ã·ã³ã¿ãã¯ã¹ ãã€ã©ã€ãã䜿ããã®ãå¬ããã§ã etc... Grep æ©èœãã¢ãŠãã©ã€ã³è§£æã¯ãšãŠã䟿å©ïŒ åœç€Ÿã§åç3äœã®ãããããšãã£ã¿ã¯âTyporaâãšâ Vim â âTypora ç¡æã§ãWin/ Mac / Linux ã«å°å
¥å¯èœ ã·ã³ãã«ãªHTMLã«ãšã¯ã¹ããŒãã§ãã 匷å㪠Markdown ãšãã£ã¿ 以äžãæçšè
éããã®ããããã³ã¡ã³ã Markdown ãšãã£ã¿ãæžããç¬é倿ãããã®ã§æžããŠããŠæ°æã¡ãã ãªã¢ã«ã¿ã€ã ã«ããŒã¯ããŠã³ãåæ ããŠãããŠãæè»œã«ç¶ºéºã«æžãããã ããŒã¯ããŠã³ããªã¢ã«ã¿ã€ã ã§åæ ããæç« äœæããããããã Markdown ã®ãšãã£ã¿ãã¹ã¿ã€ã«ãããç¶æ
ã§ç·šéã§ããã®ããã "ããŒã¯ããŠã³èŠããšãã¯ããããšã«ããèŠããããšæããŠããŸãã" etc... ãªã¢ã«ã¿ã€ã ãã¬ãã¥ãŒã®UI ã·ã³ãã«ãã¶ã€ã³ãçŽæçæäœã奜ã人ã«ãã¹ã¹ã¡ïŒ â Vim äºå€§ãšãã£ã¿ã®äžã€ 誰ããèšãããŠãŸãã ããã¹ããšãã£ã¿ ã«ã¯äžçš®é¡ããååšããªãã " Vim " ã " Emacs " ã "ãã以å€ã" ã ã â» åŒçšå
以äžã¯åœç€Ÿã®æçšè
éããã®ããããã³ã¡ã³ã èŠããŠããŸããšãã¡ãã¡ã«æã䌞ã°ããªããŠè¯ããŠæ¥œã ãªãšæããŸãã䜿ãããªããããã«ãªãããã ã¿ãŒããã«æäœããŠãæµãã§ã¯ Vim ã䜿çšãäžæã¯ ãã©ã°ã€ã³ å
¥ãããã«ã¹ã¿ãã€ãºã«åã£ãŠããããä»ã¯ããã©ã«ãã§äœ¿çšã Viã§ãå¯ãèšå®ãå€ãããã©ãã©ãã«èšå®ãããå¿ããã®ã§ãæ€èšŒæ©ç§»è¡æã«ããã vi ããã vim ãããæŽŸããµãŒããŒäžã§ã¡ãã£ãšããç·šéãããããšãã«ãããšå¬ãã Webç³»ãšã³ãžãã¢ã§viã䜿ããªã人ã¯ããªãã¯ãããã®å»¶é·ã§ Vim ãæ¥åžžçã«äœ¿ãã®ã¯å¿
ç¶ã etc... Vim ã¯ãå€ãããå€ãã®ãšã³ãžãã¢ã«æãããŠãããšãã£ã¿ã§ãã æ
ã«ã"æ"ã"å§"ã匷ãïŒ æ¬¡ãã§ãåœç€Ÿã§5äœã®ãããããšãã£ã¿ã¯ â emacs 以äžãæçšè
éããã®ããããã³ã¡ã³ã ãµãŒãäžã§ CLI ã§ã¡ããã£ãšç·šéããã®ã«âã Lisp ã§æ¡åŒµã§ããã®ã§çްãããšãããèªå奜ã¿ã«ã§ãã æå
ã¡ã¢çšãšã¿ãŒããã«äžã§ã®äœæ¥çšãä»ã®ãšãã£ã¿ã emacs 颚 ããŒãã€ã³ã ã«ããã®ã¯å«ãã çŸåšããã¯ãã¡ã¢åž³ãšããŠãã䜿ã£ãŠããªãããããã etc... æ¡åŒµæ§ãé«ããèªç±ã«ã«ã¹ã¿ãã€ãºãã§ããïŒ ããã«ã€ããã®ã§ã¯ïŒ 次ãã§ãåœç€Ÿã§6äœã®ãããããšãã£ã¿ã¯ âcotEditor 以äžãæçšè
éããã®ããããã³ã¡ã³ã ã¡ãã䜿ãã«æ¥œãããã¹ã ãšã³ã³ãŒãã£ã³ã° ã®å€æãããããã æè»œã«äœ¿ãããã¡ã¢ã«ãã䜿ã£ãŠã etc... 以äžãšãã£ã¿çŸ€ã¯å©çšè
ãåçã§ããã â Atom 以äžãæçšè
éããã®ããããã³ã¡ã³ã æ¡åŒµæ§ãšæäœæ§ã§éžãã§ãŸã 軜快ã«åäœããŠãããããã£ãšå¬ãã etc... â Eclipse ( IDE ) 以äžãæçšè
éããã®ããããã³ã¡ã³ã åŠçã®é ãããã©ã€ããŒãã§ã¯äžçªäœ¿ã£ãŠããŸã éããšãã人ãããŸãããéããªããããªPC䜿ã£ãŠãã®ããããªãã®ã§ãïœ etc... âJetBrains ( IDE ) 以äžãæçšè
éããã®ããããã³ã¡ã³ã ã¹ ã¯ã©ãã ãã¡ã€ã«ãè»œãæ°æã¡ã§äœ¿ã£ãŠãã ãããžã§ã¯ãã«å±ããã«ã³ãŒãã£ã³ã°ãã§ãã IDE ã®æ¯æŽãåãããã etc... â Sublime Text 以äžãæçšè
éããã®ããããã³ã¡ã³ã ã¡ãã£ãšãã ã¹ã¯ãªãã ãèŠããšãã«äœ¿ããŸã ç¹ã«çç±ããããšããããæãã䜿ã£ãŠããç¡åçãä»ã䜿ã£ãŠããŸã etc... ânano 以äžãæçšè
éããã®ããããã³ã¡ã³ã æäœãçŽæçãªã®ã§viã䜿ãããªããªãæ¹ã«ã¯ããããã§ã etc... â TeraPad 以äžãæçšè
éããã®ããããã³ã¡ã³ã å人çã« ãµã¯ã©ãšãã£ã¿ ãããã¢ã€ã³ã³ã奜ãã§ã etc... âTextastic 以äžãæçšè
éããã®ããããã³ã¡ã³ã WorkingCopy(gitã¯ã©ã€ã¢ã³ã)ãšäœµã㊠iOS ããããã°æŽæ°çšã« etc... æåŸã« ãæçšã®ãšãã£ã¿ã¯äœã§ããïŒããš åœç€Ÿã¡ã³ããŒã« ãã¢ãª ã³ã°ããŠããé ã» sublime 掟ã¯ä»ïŒ ã» emacs 掟ã¯ïŒ vim 掟ã¯ïŒãªãïŒ ãªã© äžã«ãã"ãšãã£ã¿æŠäº"ã®å°ãæåãŸã§ çãäžãããåã¡ã³ããŒãåçããŠãããŸããã æŠäºæåã§è«äºãçµããäºãã§ããã®ã¯ ãã£ãšãæããšããèšèã®ãããã ãš åæã«è§£éããŠãããŸãã 2020幎ãçããã®æçšã®ãšãã£ã¿ã¯äœã§ããïŒ ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã forms.gle ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ rakus.connpass.com
ã¯ããã« ããã«ã¡ã¯ãmrym_618ã§ãã ä»åã¯ãæ®æ®µæ¥åã§äœ¿çšããŠããPhpStormã® ãã©ã°ã€ã³ ã®ãã¡ãå人çã«ããããã®3ã€ã玹ä»ããããšæããŸãã ã¯ããã« Rainbow Brackets deep-assoc-completion String Manipulation ãããã« Rainbow Brackets Rainbow Brackets ãšã¯ã察å¿ããæ¬åŒ§ã®è²ãå€ããŠèŠããããã ãã©ã°ã€ã³ ã§ãã è€æ°ã®ifæãªã©ã«ãããã¹ããéãªã£ãŠãããšãã©ã®æ¬åŒ§ãšã©ã®æ¬åŒ§ã察å¿ãããåããã«ãããªããã³ãŒããèªã¿ã«ãããªã£ãŠããŸããŸãã ããã§ããã® ãã©ã°ã€ã³ ãå°å
¥ããããšã§å¯Ÿå¿ããæ¬åŒ§ãåããããããªããŸãã®ã§ãã³ãŒããèªã¿ããããªããŸãã å°å
¥æ¹æ³ã¯ã Setting > Plugins ã§ ãRainbow Brackets ããæ€çŽ¢ããã€ã³ã¹ããŒã«ããŠPhpStormãåèµ·åããã ãã§ãã ãŸãã Editor > Color Scheme > Rainbow Bracket ããæ¬åŒ§ã®è²ãã«ã¹ã¿ãã€ãºã§ããŸãã®ã§ãèªåã®èŠãããããã«ã«ã¹ã¿ãã€ãºããŠäœ¿çšããŠããããã°ãšæããŸãã deep-assoc-completion deep-assoc-complatetionãšã¯ãé
åã®è£å®ãããŠããã ãã©ã°ã€ã³ ã§ãã 飿³é
å ã®äºæž¬è£å®ãDocCommentã«é
åã®æ§é ãå®çŸ©ãããšãããè§£éããŠããããªã©ãé
åã®æäœã楜ã«ãªã ãã©ã°ã€ã³ ã§ãã å°å
¥æ¹æ³ã¯ãäžèšãšåæ§ã§ Setting > Plugins ã§ ãdeep-assoc-completionããæ€çŽ¢ããã€ã³ã¹ããŒã«ããŠPhpStormãåèµ·åããã ãã§ãã String Manipulation String Manipulationãšã¯ãæååæäœãã§ãã ãã©ã°ã€ã³ ã§ãã æååããã£ã¡ã«ã±ãŒã¹ãã¹ããŒã¯ã±ãŒã¹ã«å€æãããã ãšã¹ ã±ãŒãã ãšã³ã³ãŒã ãªã©ãã§ããŸãã äœ¿çšæ¹æ³ã¯ã String Manipulation ãå°å
¥åŸã«ãæäœãããæååãéžæãã Alt + m ãæŒãããšã§è¡šç€ºãããããããããŠã³ããæäœãããåŠçãéžæããã ãã§ãã å°å
¥æ¹æ³ã¯ãäžèšãšåæ§ã§ Setting > Plugins ã§ ãString Manipulationããæ€çŽ¢ããã€ã³ã¹ããŒã«ããŠPhpStormãåèµ·åããã ãã§ãã ãããã« ä»åã¯PhpStormã®å人çã«ããããã® ãã©ã°ã€ã³ ã3ã€ç޹ä»ããŸãããPhpStormã«ã¯ãä»å玹ä»ãã ãã©ã°ã€ã³ 以å€ã«ãå€ãã® ãã©ã°ã€ã³ ããããŸãã®ã§ããããã詊ããŠæ¥åå¹çãäžããŠãããããšæããŸãã ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã forms.gle ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ rakus.connpass.com