CTOã®å·å£( @dmnlk )ã§ãã 2019/11/30ã«æ± è¢ã§è¡ãããDevelopers Boost 2019ã«äž»å¬ã®ç¿æ³³ç€Ÿæ§ããæåŸ
é ããåºèª¿è¬æŒãšããŠç»å£ãããŠé ããŸããã Developers Boost ã¯ãU30ãšã³ãžãã¢ã®ç»ç«éããšé¡ãããŠãããU30ãšã³ãžãã¢ã®ããã®ã«ã³ãã¡ã¬ã³ã¹ã§ãã ããŒããããããç§ã®æŠãæ¹ããšãããã®ã ã£ãã®ã§ãèªåãã©ã®ããã«èªåã®åžå ŽäŸ¡å€ã決ãæé·ãçåæŠç¥ãç«ãŠãŠããããããããã¯ããã¡ãŒã¹ãã«äŸ¡å€ãåµé ãããšã³ãžãã¢ãšããŠã®çãæ¹ããšããã¿ã€ãã«ã§çºè¡šãããŠé ããŸããã è³æã¯äžèšã«ãªããŸãã ãšã³ãžãã¢ã®åžå ŽäŸ¡å€ãã¯äººãããããããšæããŸãããæè¡ãã©ã䌞ã°ããŠãããäœã®ããã«ãã£ãŠãããã人ããããã ãšæããŸãã èªåã«ãšã£ãŠã®ãã£ãªã¢åœ¢æã®äŸ¡å€åºæºã«ããããã¯ããã眮ããã®ãç§ã®æŠãæ¹ã«ãªã£ãŠããŸãã ãããèŠèãããŠé ããçæ§ã®ãšã³ãžãã¢ã®ãšããŠã®ãã£ãªã¢åœ¢æã®æ¹åæ§ã®äžã€ã®ææã«ãªã£ãŠããããã°å¹žãã§ãã ä»ã®æ¹ã®çºè¡šãããã€ãèãããŠé ããŸãããã倧å€åèã«ãªããã®ãå€ãU30ãšããã©ãè²ã
ãªæŠãæ¹ã®å€æ§æ§ããããªãšæããŸããã ãŸããæèŠªäŒã§ãå€ãã®æ¹ãšã話ãããŠé ãåºæ¿ãåããããŠé ããŸããã æ¹ããŠããã®ãããªæ©äŒãé ããç¿æ³³ç€Ÿæ§ã«ã¯ã瀌ãç³ãäžããããŠããã ããŸãã æ¥å¹Žã¯ãŸã ã®ãªã®ãªU30ã®æ ãªã®ã§åå ããããšæããŸãã
ãã®èšäºã¯ BASE Advent Calendar 2019 ã®4æ¥ç®ã®èšäºã§ãã devblog.thebase.in ããã«ã¡ã¯ãBASE BANKæ ªåŒäŒç€Ÿ Dev Divisionã«æå±ããŠããæ±å£ïŒ @hgsgtk ïŒã§ãã æ®æ®µãããã°ãã«ã³ãã¡ã¬ã³ã¹ã§ã¢ãŠããããããå
容ãšããŠã¯ãPHPã»Go ã»Pythonãªã©ãµãŒããŒãµã€ãèšèªãçšãã話ãããã¹ããã³ãŒãèšèšã®è©±ãå€ãã®ã§ããããã£ããã®å¹Žã«äžåã®ã¢ããã³ãã«ã¬ã³ããŒãªã®ã§ãæ®æ®µã¯ããŸãããªãã¯ã©ãŠãã€ã³ãã©ã®ã¬ã€ã€ãŒã®è©±ãããããšæããŸãã ç§ã¯ãã YELL BANKïŒãšãŒã«ãã³ã¯ïŒ ããšãããµãŒãã¹ã®éçºã»éçšãããŠããŸãããã®ãµãŒãã¹ã®éçšã«ããã£ãŠãRelational databaseãšããŠã Amazon Aurora ãå©çšããŠããŸããã Amazon Auroraãå©çšããã«ããã£ãŠãã¢ããªã±ãŒã·ã§ã³ããåç
§ç³»ãªã¯ãšã¹ããåãä»ãããšã³ããã€ã³ããå®çŸ©ããã®ã«Custom endpointã䜿çšããŠããŸãã ãã®Custom endpointã«ãããŠããã§ãŒã«ãªãŒããŒãæ³å®ããå Žåã«å¿
èŠãªãèšå®ã®ã¡ãã£ãšããæ³šæç¹ã玹ä»ããŠã¿ãŸãã ã±ãŒã¹ã¹ã¿ã㣠次ã®ããã«ã1å°ã®æžã蟌ã¿ããŒã«ã®ã€ã³ã¹ã¿ã³ã¹ãšã2å°ã®èªã¿èŸŒã¿ããŒã«ã®ã€ã³ã¹ã¿ã³ã¹ã®èš3å°ã®ã€ã³ã¹ã¿ã³ã¹ãã¶ãäžããã¯ã©ã¹ã¿ãŒãæ³å®ããŠã¿ãŸãã AWS RDSã®ãããžã¡ã³ãã³ã³ãœãŒã«ç»é¢ ãã®ã¯ã©ã¹ã¿ãŒã«ãããŠãã¢ããªã±ãŒã·ã§ã³ãã㯠test-database-1-analysis ãšããèªã¿èŸŒã¿ããŒã«ã®ã€ã³ã¹ã¿ã³ã¹ã¯åç
§ãããåæçšãšããŠäœ¿ããšããæ§æã ãšããŸãã Amazon Auroraã®ãšã³ããã€ã³ã åæç¥èãšããŠãAmazon Auroraã«ã¯4ã€ã®ãšã³ããã€ã³ããååšããŸãã docs.aws.amazon.com ãŸããçŸåšã®ãã©ã€ããªDBã€ã³ã¹ã¿ã³ã¹ã«æ¥ç¶ãã ã¯ã©ã¹ã¿ãŒãšã³ããã€ã³ã ãDBã¯ã©ã¹ã¿ãŒã®äœ¿çšå¯èœãªAuroraã¬ããªã«ã®ããããã«æ¥ç¶ãã èªã¿åããšã³ããã€ã³ã ãAuroraã¯ã©ã¹ã¿ãŒå
ã®ç¹å®ã®DBã€ã³ã¹ã¿ã³ã¹ã«æ¥ç¶ãã ã€ã³ã¹ã¿ã³ã¹ãšã³ããã€ã³ã ããããŠä»åã®èšäºã®ã¿ã€ãã«ã§ããã ã«ã¹ã¿ã ãšã³ããã€ã³ã ã§ãã ã«ã¹ã¿ã ãšã³ããã€ã³ãã¯ãéžæããDBã€ã³ã¹ã¿ã³ã¹ã®ã»ããã衚ããéžæããã°ã«ãŒãå
ã§è² è·åæ£ãè¡ãæ¥ç¶ããŸãã ä»åã®ã±ãŒã¹ã§ã¯ãèªã¿åããšã³ããã€ã³ãã®äžéšãã¢ããªã±ãŒã·ã§ã³ãã䜿ãããããšãèŠæ±ã§ãããã®èŠæ±ãã«ã¹ã¿ã ãšã³ããã€ã³ãã§ããã°å¶ãããããã§ãã ã«ã¹ã¿ã ãšã³ããã€ã³ãã¿ã€ã å®éã«ã«ã¹ã¿ã ãšã³ããã€ã³ããèšå®ããŸãããã ãããã§ãŒã«ãªãŒããŒãèµ·ããŠã€ã³ã¹ã¿ã³ã¹ã®ããŒã«ãå
¥ãæ¿ãã£ãéã®èæ
®ã¯å¿ããŠã¯ãããŸããããããã£ãå Žåã«ç¥ã£ãŠããã¹ã㯠ã«ã¹ã¿ã ãšã³ããã€ã³ãã¿ã€ã ã§ãã ãã®ã«ã¹ã¿ã ãšã³ããã€ã³ãã¿ã€ãã«ãã£ãŠãåœè©²ãšã³ããã€ã³ãã«é¢é£ã¥ããããšãã§ããDBã€ã³ã¹ã¿ã³ã¹ã決ãŸããŸããå
·äœçã«ã¯ã READER ã» WRITER ã» ANY ã®äžçš®é¡ããããŸãã READER: èªã¿åãå°çšã®Auroraã¬ããªã«ã§ããDBã€ã³ã¹ã¿ã³ã¹ã®ã¿ããããã®äžéšã«ãªãã WRITER: ãã«ããã¹ã¿ãŒã¯ã©ã¹ã¿ãŒã«ã®ã¿é©çšããããè€æ°ã®èªã¿æžãDBã€ã³ã¹ã¿ã³ã¹ãå«ããããšãã§ãã ANY: èªã¿åãå°çšã®Auroraã¬ããªã«ãšãèªã¿åã/æžã蟌ã¿ã®ãã©ã€ããªã€ã³ã¹ã¿ã³ã¹ã®äž¡æ¹ãããã®äžéšã«ãªãã ã«ã¹ã¿ã ãšã³ããã€ã³ãã¿ã€ãã¯ããããžã¡ã³ãã³ã³ãœãŒã«äžã§èŠãéãã¯ã衚瀺ãããŠããªãã®ã§ãæ°ãã€ãã«ããã§ããããããžã¡ã³ãã³ã³ãœãŒã«ã§äœæããå Žåã«ã¯ãANYã«ãªããŸãã ã«ã¹ã¿ã ãšã³ããã€ã³ãã¿ã€ãã® ANY ãŸã㯠READER ã AWS ãããžã¡ã³ãã³ã³ãœãŒã« ã§éžæããããšã¯ã§ããŸãããAWS ãããžã¡ã³ãã³ã³ãœãŒã« ã§äœæãããã¹ãŠã®ã«ã¹ã¿ã ãšã³ããã€ã³ã㯠ANY ã¿ã€ãã«ãªããŸãã https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Aurora.Overview.Endpoints.html#Aurora.Endpoints.Custom.Properties ãããžã¡ã³ãã³ã³ãœãŒã«ããäœã£ãŠã¿ããš äŸãã°ããããžã¡ã³ãã³ã³ãœãŒã«ã§äœæããã«ã¹ã¿ã ãšã³ããã€ã³ãã«ãèšå®æç¹ã§èªã¿èŸŒã¿ããŒã«ã®ã€ã³ã¹ã¿ã³ã¹ãéžæããŠã¿ãŸãã ãããžã¡ã³ãã³ã³ãœãŒã«ç»é¢ããã«ã¹ã¿ã ãšã³ããã€ã³ããäœæãã ãã®ç¶æ
ã§ãããžã¡ã³ãã³ã³ãœãŒã«ãã ãã§ãŒã«ãªãŒã㌠ãããŠã¿ãŸãããããšãã«ã¹ã¿ã ãšã³ããã€ã³ãã«èšå®ããã€ã³ã¹ã¿ã³ã¹ã¯æ¬¡ã®ããã«å€åããŸãã ãã§ãŒã«ãªãŒããŒåŸã®ãšã³ããã€ã³ãã¡ã³ã㌠ããŒã«ã æžã蟌㿠ã«ãªã£ãŠããŸããŸãããããã§ã¯ãã¬ããªã«ã®ã¿ãåç
§ããããšã³ããã€ã³ãã«ãããæå³ãæºããããšãã§ããŸããã ã©ãããã°ããã å
ã»ã©ãäŒãããéããçŸæç¹ïŒ2019幎12æ4æ¥ïŒã§ããããžã¡ã³ãã³ã³ãœãŒã«ãããã«ã¹ã¿ã ãšã³ããã€ã³ãã¿ã€ããèšå®ããæ¹æ³ã¯ãªããããã©ã«ãã§ANYãšãªããŸããããããAWS CLIããã¯ã«ã¹ã¿ã ãšã³ããã€ã³ãã¿ã€ããæå®ã§ããã®ã§ããã¡ãã§äœã£ãŠãããŸãããã AWS CLIã§ã«ã¹ã¿ã ãšã³ããã€ã³ããäœæããå Žåã create-db-cluster-endpoint ã䜿çšããŸãã $ aws rds create-db-cluster-endpoint --db-cluster-identifier test-database-1 \ --db-cluster-endpoint-identifier reader-2 \ --endpoint-type READER \ --static-members test-database-1-instance-1-ap-northeast-1c test-database-1-instance-1 ãªãã·ã§ã³ endpoint-type ã«ãŠ READER ãæå®ããããšã§ãã«ã¹ã¿ã ãšã³ããã€ã³ãã¿ã€ããREADERã«ãªããŸãã ãŸãããã®æã®èšå®æ¹æ³ãšããŠãèšå®ãããèªã¿èŸŒã¿å°çšDBã€ã³ã¹ã¿ã³ã¹ãšãçŸåšã®ãã©ã€ããªDBã€ã³ã¹ã¿ã³ã¹ã®äž¡æ¹ãèšå®ããŠãããŸãããããšãããŒãžã¡ã³ãã³ã³ãœãŒã«ããã¯æ¬¡ã®ããã«èŠããŸãã AWS CLIããäœæããã«ã¹ã¿ã ãšã³ããã€ã³ã çŸåšãèªã¿èŸŒã¿ããŒã«ãšãªã£ãŠãã test-database-1-instance-1-ap-northeast-1c ã®ã¿ããšã³ããã€ã³ãã¡ã³ããŒãšãªã£ãŠããããã©ã€ããªDBã€ã³ã¹ã¿ã³ã¹ã¯èªã¿èŸŒã¿å°çšã§ã¯ãªãã®ã§ã¡ã³ããŒã«ã¯ãªã£ãŠããŸããã ããããŠãããšããã§ãŒã«ãªãŒããŒãèµ·ããŠãæžã蟌ã¿ã»èªã¿èŸŒã¿ãå
¥ãæ¿ãã£ãå Žåã«ãããŠããèªã¿èŸŒã¿å°çšã®ã€ã³ã¹ã¿ã³ã¹ã«å¯ŸããŠè§£æ±ºããããã«ãªããŸãã ãã§ãŒã«ãªãŒããŒåŸã®ãšã³ããã€ã³ãã¡ã³ã㌠ã¡ãªã¿ã«ãYELL BANKã®éçšã®ããã®ã€ã³ãã©æ§æç®¡çã¯ãåºæ¬çã« Terraform ã§è¡ãªã£ãŠããŸããã®ãããTerraformã®tfãã¡ã€ã«ã«ãŠæ¬¡ã®ããã«èšå®ããŸããã resource "aws_rds_cluster_endpoint" "test-database-read" { cluster_identifier = aws_rds_cluster.test-database.id cluster_endpoint_identifier = "test-database-read" custom_endpoint_type = "READER" static_members = ["test-database-1", "test-database-2"] } ããã㫠以äžãAmazon Auroraã®ã¡ãã£ãšããå°ãã¿ã®ç޹ä»ã§ããããã®ä»ã«ãããµãŒãã¹ã®æ°èŠéçºæãéçšããŠããäžã§ãã¯ã©ãŠãã€ã³ãã©ã®ã¬ã€ã€ãŒã®çµéšãããŸã£ãŠãã£ãŠãããã®ãããã®ã§ã2020幎ãå°åºãã«ã§ãã¿ãªããŸã«ãå±ãã§ããã°ãšæããŸãã ææ¥ã¯ãData StrategyããŒã ã®éŽæšãããšOwners GrowthããŒã ã®é è€ããã§ãïŒã楜ãã¿ã«ãïŒ
ãã®èšäºã¯BASE Advent Calendar 2019 4æ¥ç®ã®èšäºã§ãã devblog.thebase.in ããã«ã¡ã¯ãå³¶ç°ã§ãã äžæšå¹Žã¯ãšã³ãžãã¢ãšããŠæ¥åããããªããæšå¹Žã¯ãšã³ãžãã¢ãªã³ã°ãããŒãžã£ãŒ(以äžEM)ãæ
ããä»å¹Žã¯ãŸããšã³ãžãã¢ãšããŠäžå¹ŽãéãããŸããã ãšã³ãžãã¢ã«æ»ã£ãŠæ¹ããŠæããããšã¯ãBASEã®EMã¯ãšã³ãžãã¢ãªã³ã°ïœãšããèšãåããããŠããŸããããšã³ãžãã¢ãšã¯å
šã圹å²ãéããã®ã ãšæããŸããã EMããã£ãŠãããšãã¯ãããã«äºæ¥ãæé·ãããããæé·ãããããã«ã©ããã£ãçµç¹ã»ããŒã ãäœããããã®ããã«ã¯ã©ããã£ã人ãæåãå¿
èŠãããã®äººãæå€§é掻èºããããã«ã¯ã©ããã£ãå¶åºŠãå Žãå¿
èŠããèããŠããŸããã ãšã³ãžãã¢ã«æ»ã£ãŠããã¯ãã®å¶åºŠãæåã®äžã§éãããŠããã®ã§ããèªåãEMã«ãªãå(äžæšå¹Žé )ã®ãšã³ãžãã¢çµç¹ããéçºãæé·ã§ããç°å¢ãæŽã£ããªãšæããŸããã ç¹ã«ãšã³ãžãã¢ã®äººæ°ãå¢ããããã«å
¥ç€Ÿãããæ¹ãã¡ããããã匷ã人ãšèšããããšã³ãžãã¢ã°ãããªã®ã§Slackã§æµããããåãããGitHubã®ã³ãŒããèŠãŠããã ãã§ãçžåœå匷ã«ãªããŸãã ããŠããšã³ãžãã¢ã«æ»ã£ãã®ã§EMã®ããã«æ
ã£ãŠããæ¡çšãçµç¹ã¥ããã®åœ¹å²ã¯ãªããªããŸãããã1on1ã¯ç¶ç¶ããŠè¡ã£ãŠããŸãããã ãããåŽã§ã¯ãªãåãããšããŠã§ãã ä»åã¯èªåã1on1ãããåŽã®æã«æã£ãŠããããšãåããåŽã«ãªã£ãŠæã£ãããšãŸãšããããšæããŸãã 1on1ããããåŽããšããŠãã£ãŠããã㚠人äºã瀟å
ã«ãŒã«ã®ã«ã€ããŠå
±æ æé·éçšã«ãããã³ãã£ãŒäŒæ¥ãšããã®ã¯å
¥ç€Ÿãããæ¹ãå€ãã§ãããæ°ããéžå®ãããå¶åºŠã倿Žãããå¶åºŠãå€ãã£ãã®ã§ããã®å
±æãè¡ã£ãŠããŸããã æè¿ã§ã¯äººäºã»åŽåããŒã ãå
šäœã«å
±æããŠãããŠããã®ã§æè¿ã®BASEã®ç¶æ³ãªãç¡ããŠãããããªãšããæãã§ãã 1ã¶æã®æ¯ãè¿ã åã¯æ1ã§1on1ãè¡ã£ãŠããŸããã ã¡ã³ããŒã®GitãSlackã§ã®ããåãã瀟å
ããã¥ã¡ã³ããªã©ãåžžã«ãŠã©ããããåèªã®ææããŸãšããŠãã1on1ã§ææã確èªããè©äŸ¡é
ç®ã«ã€ããŠãäºãã®èªèã®ããåãããè¡ã£ãŠããŸããã ãšã³ãžãã¢ã¯ææç©ã§ã®è©äŸ¡ã倧äºã§ããåã¯é©åãªã¬ãã¥ãŒã顧客åãåãããªã©ã®éçšãã©ããŒãç¥èŠãçãããæè²ãªã©ãè©äŸ¡å¯Ÿè±¡ãšããŠäŒããŠããŸããã ããããããšãèãã»ä»åŸæåŸ
ããããšãäŒãã çµç¹ãšããŠæåŸ
ããããšãäŒãã€ã€ãæ¬äººãããããããšãèããŠããŸããã ã©ããªã«éèŠãªäºã§ãæ¬äººã®ããæ°ã®æ¹åæ§ãšãã¹ãããããããšçç£æ§ãäžãã£ãŠããŸãã®ã§ãªãã¹ãæåŸ
ãšã®ä¹é¢ãç¡ããããã«æ°ãã€ããŠããŸããã 質çå¿ç äŒç€Ÿã®ããšä»¥å€ã«ãèªèº«ã®äœèª¿ã®ããšãå®¶åºãªã©ã®ãã©ã€ããŒããªããšããäŒç€Ÿã«å¯ŸããŠããããŠã»ãããããããããªã©æ¥ã
æã£ãŠããããšã®å
±æãããŠããŸããã 以äžãåã¯äž»ã«è¡ã£ãŠãã1on1ã®å
容ã§ãã 1on1ããåããåŽãã«ãªã£ãŠæã£ãããš ãåããåŽãã1on1ã«å¯ŸããŠå¿ççè² æ
ãæããå Žåããã ãããžã§ã¯ãã®é²æãæããããªãæã¯ãåããåŽãšããŠã¯æ°ãéãã£ãã§ãã ããã«ãã®ç¶æ³ã§è©äŸ¡ã·ãŒãºã³ã«ãªããšä»åŸã®ããšã§å¿ççãªè² æ
ã¯å€§ããã£ãã®ã§ãããã£ãç¶æ³ãçžè«ã§ããå Žã«ãªããšè¯ããªãšæããŸããã 幎霢ãè¿ãã£ãããåãã©ã€ãã€ãã³ããçµéšããEMã¯æ¯èŒç話ãããã çŸåšã®EMã¯å¹Žéœ¢ãè¿ãåããããªã©ã€ãã€ãã³ããçµéšããŠããã®ã§ããåäŸã®ãè¿ãã§æ°æ¥éæ©éããŸããããåäŸã®çè·ã§äŒã¿ãŸãããªã©æ¥åå€ã®èŠä»¶ãèšããããã§ãã 話ãããããšæ°æã¡ã®ãã©ã³ã¹ã¯æ¯äŸãããšãããããå¿ççãªå®å®ã«ãç¹ãããšæãã®ã§çžæ§ã¯å€§äºã ãªãŒãšæããŸããã å Žæãããæ¹ãå€ããããšã§1on1ãžã®å¿ççè² æ
ã軜æžããã 1on1ã®æéã«å¯ŸããŠãã¬ãã£ããªå°è±¡ãã§ããŠããŸããšãã®æéãæ¥ãã®ãè² æ
ã«ãªã£ãŠããŸãã®ããªãšæããŸããã ãããã£ãç¶æ³ã§ã¯äœãæèŠãåºããæªãæµããç¶ããŠããŸãçµæçã«ã¯çç£æ§ãäžãã£ãŠããŸãããšã«ãªããŸãã ããã£ãå Žåã¯æéãå Žæãå€ãã¿ããããæ¹ãå€ããŠã¿ããªã©ç°å¢ãå€åãããã®ãå¿
èŠããªãšæããŸããã æåŸã« 1on1ãããåŽããåããåŽã«ãªã£ãŠäžçªéèŠã ãšæã£ãã®ã¯ããäºãã«ãããåŽãããããåŽããšããæèã¯æã£ãã»ããè¯ããšããããšã§ãã BASEã¯å¹Žéœ¢ã圹è·é¢ä¿ãªããã©ããã«è©±ããç°å¢ã§ãããè¡åæéã«ãSpeak Openlyããæ²ããŠããããšããããã»ã¯ã·ã§ã³ãããŒã å
ã§äžäžã®é¢ä¿ãæèããããšãããŸããªãã®ã§ã1on1ã¯äžåžããéšäžã«ãããã®ããšããããã¯å¯Ÿçãªé¢ä¿æ§ãåºæ¬ãšããŠãäºãã«æ°ã«ãªã£ãŠããããšãæåŸ
ããŠããããšãäŒããã£ãã»ããèªèã®éœéœ¬ãã³ãã¥ãã±ãŒã·ã§ã³ã¹ãã¬ã¹ãå°ãªããªãé·æçã«èŠããšãã«çç£æ§ã¯äžããã®ã§ã¯ãšæããŸããã ææ¥ã¯Data StrategyãããŒãžã£ãŒã®åãããšOwners GrowthãããŒãžã£ãŒã®é è€ããã§ãïŒ
ããã«ã¡ã¯ïŒBASEã®Product Divisionã§ãšã³ãžãã¢ããã£ãŠãããŸãå·å³¶ïŒ @nazonohito51 ïŒãšç³ããŸãã ãã®èšäºã¯BASE Advent Calendar 2019ã®3æ¥ç®ã®èšäºã§ãã devblog.thebase.in åã®æ¥ã¯ id:ngsw ã® EC2ã«ãããåäœæéãããã®åå解決å¶éã®å¯Ÿå¿ ãš id:chiiichell ã® ãšã³ãžãã¢2幎çããªãŒããã«ã³ãŒããèªãã§ä»å¹Žèªåãæžããã³ãŒããæ¯ãè¿ã ã§ããã ä»åã¯æ®æ®µã¯èŠãããšã®ãªã倧åæè¡ã«ã³ãã¡ã¬ã³ã¹éå¶ã®è£åŽã«ã€ããŠæžãããŠããã ãããšæããŸãã ãã¡ãã¯æåéãè£åŽã§ã¯ããŒãžã³ã°ã®æºåãããŠããå®è¡å§å¡é·ã®èäžã§ãã PHPã«ã³ãã¡ã¬ã³ã¹ãšã¯ PHPã«ã³ãã¡ã¬ã³ã¹ãšã¯2000幎ããç¶ããŠãããPHPã«ã³ãã¡ã¬ã³ã¹å®è¡å§å¡äŒã«ãã£ãŠéå¬ããŠããã«ã³ãã¡ã¬ã³ã¹ã§ããæè¿ã¯åå 人æ°ã1500人ãè¶
ããæ¥æ¬ã®ä»ã®ããã°ã©ãã³ã°èšèªã®ã«ã³ãã¡ã¬ã³ã¹ãšæ¯èŒããŠãéåžžã«äººæ°ãå€ããããããæ¥æ¬ã§ãæå€§çŽã®ãœãããŠã§ã¢ãšã³ãžãã¢ã®ã«ã³ãã¡ã¬ã³ã¹ãªããããªãããšæããŸããïŒãã ãä»ã®ã«ã³ãã¡ã¬ã³ã¹ã¯è€æ°æ¥éå¬ã ã£ãããè³æ¬ã倧ããã£ãããšã1æ¥ã®ã¿åå è²»ç¡æã®PHPã«ã³ãã¡ã¬ã³ã¹ãšåçŽã«åå 人æ°ã§ã€ãã³ãèŠæš¡ãæ¯èŒããããšã¯é£ãããšèããŠããŸãïŒ ç¬¬20åç®ã®éå¬ãšãªãä»å¹Žã¯ beyond .* ãšããããŒããæ²ããŠãPHPã®ãããªãé£èºãç®æããã«ã³ãã¡ã¬ã³ã¹ã§ãããå
¬åŒãµã€ãã®ããŽã¯é£èºããããã®é£è¡æ©ã®æ»èµ°è·¯ãã€ã¡ãŒãžãããã¶ã€ã³ãšãªã£ãŠããŸãã PHPã«ã³ãã¡ã¬ã³ã¹å®è¡å§å¡äŒãšã¯ PHPã«ã³ãã¡ã¬ã³ã¹å®è¡å§å¡äŒãšã¯è¬ã®ç§å¯çµç€Ÿã§ããå€ãªå€ãªæããšããã«éãŸããããŒãæ·±ããã¶ããªããç·è²ã®æ¶²äœã飲ãã§ç¥ç¥·ãæ§ããæªããéå£ã§ãã ãšããã®ã¯åè«ã§ãæ£äœã¯ æ¥æ¬PHPãŠãŒã¶äŒ ã®ã¡ã³ããŒã§ããç¹ã«åå è³æ Œããããšããããã§ã¯ãªãã®ã§ãããåºæ¬çã«1åã¯åœæ¥ã¹ã¿ãããçµéšãããæ¹ããã£ãšæ·±ãã€ãã³ãã«é¢ãããããšæã£ããšãã«ãªã£ãŠããã ããŠããŸããããããã³ã¢ã¹ã¿ãããšåŒã°ããå®è¡å§å¡äŒã®ã¡ã³ããŒã®ä»ãåœæ¥ãšåæ¥ã®ã¿æäŒã£ãŠãã ããåœæ¥ã¹ã¿ããããäŒå Žã®ãããã¯ãŒã¯åšããçšæããŠãã ããNOCã¡ã³ããŒãªã©ãããã£ããããç§ãå
šè²ãææ¡ããŠããããã§ã¯ãããŸããããã¹ã¿ããã¢ãµã€ã³è¡šãèŠãéãã¯ä»å¹Žã¯112åãã®äººæ°ã§PHPã«ã³ãã¡ã¬ã³ã¹ã¯éå¶ãããŠããŸããã å®è¡å§å¡äŒã¯è£ã§äœããã£ãŠããã®ãïŒ åæ¥ãŸã§ã®æºå ä»å¹Žã®å®è¡å§å¡äŒã䜿ã£ãŠããã¿ã€ã ã¹ã±ãžã¥ãŒã«ã¯ä»¥äžã®ããã«ãªããŸãã ããã ããèŠããšã¹ãã³ãµãŒã»ã¹ããŒã«ãŒã»ããã°ã©ã é¢é£ã®ã¹ã±ãžã¥ãŒã«ãç®ç«ã¡ãŸãããå®éã®ãšãããã以å€ã®äœæ¥ããããããããŸãã Webãµã€ã åºå ± ãã¶ã€ã³ïŒTã·ã£ããããŒã«ãŒãããŒã ã«ãŒãetcïŒ ã²ã¹ãã¹ããŒã«ãŒæèŽ ã¹ã¿ã³ãã©ãªãŒ é³é¿ã»æ åé
ä¿¡ æžç±è²©å£²ããµã€ã³äŒäŒç» æèŠªäŒ äŒå Žèšèš etc... ããããã«æ
åœãååã®ããã¯ãªãMTGã§æ±ºããæ¯æ1åã®MTGãç©ã¿éããªããæºåãé²ããŸãããŸãä»å¹Žã¯elePHPantãæèŠªäŒåå ãã±ããã®è²©å£²ã®ããã«ãããã·ã§ãã販売ãªã©ããããŸãããïŒåŒç€Ÿã®ãµãŒãã¹ãå©çšããŠããã ããŸããïŒ ã¿ã€ã ã¹ã±ãžã¥ãŒã«äžã¯ä»å¹Žã®6æèŸºãããéå§ããŠããŸãããããæå³æ¬åœã®éå§ç¹ã¯å»å¹Žã®10~11æèŸºãã ã£ããããŸãããšããã®ããã€ãã³ããšããã®ã¯ãŸãå
ã«å Žæã®ç¢ºä¿ããå§ãŸããŸããäŒç»ã ãé²è¡ããŠãå®éã«éå¬ã§ããå Žæããªããã°äœãå®çŸã§ããªãããã§ãããããŠã€ãã³ãäŒå Žã®ç¢ºä¿ãšããã®ã¯å€§å€ã§ã倧äœã®å Žå1幎以äžåããåãå§ããªããšäºçŽã§ããŸãããå®ã¯PHPã«ã³ãã¡ã¬ã³ã¹2019ã®äŒå ŽäºçŽäœæ¥ãããã®ã¯ç§ãªã®ã§ãããåå è
ã»ã¹ã¿ããã®è² è·ãèããŠã€ãã³ãç¿æ¥ã¯äŒæ¥ã§ããæ¥ã確ä¿ãããã£ããšããããããã£ãæ¥ã¯ããåãããŠããŸã£ãŠããã®ã§ãæ³£ãæ³£ãæ¥ææ¥ã§ç¢ºä¿ããçµç·¯ããããŸãã 忥ãšåœæ¥ 忥ã«ããã11/30(å)ã¯ãããããããŸã§æºåãããŠãããã®ãå®çŸããŸããäŒå Žã«å
šãŠã®å¿
èŠãªç©åãéãŸãã®ã§ãããããå
ã«ã²ãããèäœåŽåãèäœåŽåãèäœåŽåã§ãã æ¬åœã«ããããã®æ€
åã䞊ã¹ãã®ããã¡ããã§ãããä»ã«ãã¹ãã³ãµãŒããŒã¹ã®èšå¶ãããŸãã ç¹ã«å€§å€ãªã®ãå®ã¯é»æºã§ãPiOã®é»æºã¯åºäžã«åãŸã£ãŠããã®ã§ãããã®ã«ããŒããã¡ããã¡ãéããã§ãã2,30ããã°ã©ã ãããšèããŠããŸãããŸããšãŠãæã¡ã¥ãããæãæãã ãããŠæªæãããããã§ããããŒã¹ãžã®é
ç·æ¬¡ç¬¬ã§ã¯äœååããã®ã«ããŒéãç· ãããªããŠã¯ãªããªãã®ã§ãæãæãŸãªããŠãã«ããŒæã¡äžãäœæ¥ã®ç©ã¿éãã§è
°ãããããŸãã ãããŠåæ¥äœæ¥ã®æãããã®ããã®æ¥çã§ã¯è¹å·¥è¹ãšè¡šçŸãããããŒãããã°ã®ãã©ã·è©°ãäœæ¥ã§ããäžžãé
眮ããããŒãã«ã«ã¹ãã³ãµãŒæ§ã®ãã©ã·ãããããšäžŠã¹ãã²ããã1æãã€åã£ãŠãããŸããæ¬åœã«äœæéããã®äœæ¥ãç¶ããã®ã§ãäœåºŠãããããåããªãããããŠå
šå¡ããã¿ãŒã«ãªã£ãŠãããŸãã ããããããšã«ãã£ãŠåœæ¥ãããããã€ãã³ããéå¬ããããšãåºæ¥ãŸãã ãããŠã€ãã³ããçµããã°åœç¶ã®ããã«åŸçä»ãããããŸããPiOã«äŒå Žãããããªç¶æ
ããè¿ãããªããã°ãªããªãã®ã§æé€ãå«ããŠãŸãåããããªäœæ¥ãããŠãããŸãã å®è¡å§å¡äŒã§ã®ç§ã®åœ¹å² ç§ã¯äŒå Žèšèšãšãã圹å²ã§æºããããŠããã ããŠããŸãããäž»ãªäœæ¥å
å®¹ã¯æåéãäŒå Žã®èšèšãããããšã§ãåæ
åœããã®äŸé Œã«åãããŠååã®é
眮ãè¡ããŸãããŸãäŒå Žã§ãã 倧ç°åºç£æ¥ãã©ã¶PiO ãšããåãããããšãå¿
èŠã«ãªããŸãã ååãé
眮ããã ããšããã°ç°¡åããã«èãããã®ã§ãããå®éã®ãšããMTGãéããããšã«åæ
åœããã®äŸé Œãç¶æ³ãå€ããç¶ãããã®ãã³ã«äœåºŠãæžãçŽããŸãããç¹ã«å€§ããã£ãã®ã¯éäžã®ã¹ãã³ãµãŒæ ã®å¢å ã§ããå
ã
ã®èšç»ã§ãé廿é«ã®æ°ã®ã¹ãã³ãµãŒããŒã¹ãçšæããªããã°ãªããªãã£ãã®ã§ãããéäžããæŽã«å¢ãããšãªã£ãŠå°ãé ãæ±ããããšããããŸããäžèšã®å³ã¯æçµæ±ºå®ã®èšèšãªã®ã§ããããããŸã§ã«äžäœäœåã®æžãçŽããããŠããã®ãåãããªããããæžãçŽããŸããã ç§ã¯ãã®åœ¹å²ã2å¹Žéæºãã£ãŠããã®ã§ãããäŒå Žãšã¯ã€ãã³ãã«ãããããããå©å®³é¢ä¿ãæçµçã«åæããå Žæãªã®ã ãšããæ°ã¥ãããããŸãããããæ
ã«ããããå©å®³é¢ä¿è
ã®èŠæ±ã®å€åã«å¯Ÿå¿ãç¶ããããšããã®åœ¹å²ã®ãã¢ãªãã ãšèããŠããŸãã äŒå Žèšèšãšã·ã¹ãã èšèšã¯äŒŒãŠãã ããäžã€ã®æ°ä»ããšããŠäŒå Žèšèšãšã·ã¹ãã èšèšã£ãŠäŒŒãŠããããšãããã®ããããŸããã äŒå Žèšèšã¯ããããèŠæ±ã«å¯Ÿå¿ãç¶ããå¿
èŠããããŸãããããããã«ã¯äŒå Žã®ç©ççãªå¶çŽãããããã¯èŠæ±ãšèŠæ±ãšã®éã§çºçããã³ã³ããªã¯ããªã©ããå
šãŠã®èŠæ±ã«å¿ãããã®ã¯å®ã¯é£ããã£ããããŸããäŸãã°ã¹ãã³ãµãŒããŒã¹ãå¢ãããããŠãäŒå Žã®ç©ççãªå€§ãã以äžã«é
眮ããããšã¯åºæ¥ãŸããããŸãåããŒã¹ã«é»æºãäŸçµŠãããã«ãäŒå Žã®é»æºã眮ãããŠããå Žæã¯éãããŠãããããããŒã¹ãé
眮ã§ããäœçœ®ã¯ããçšåºŠéå®ãããŸããããã«ã¯ã»ãã·ã§ã³äŒå Žãšé³ãåºãããããŒã¹ãè¿ã¥ããããšã¯åºæ¥ãªãããããµã€ã³äŒãè¡ãæžç±è²©å£²æãã¹ãã³ãµãŒããŒã¹ãã»ãã·ã§ã³äŒå Žã«è¿ãäœçœ®ã«çœ®ãããšã¯åºæ¥ãŸããã ãã®ããã«äŒå Žèšèšã¯èŠæ±ãšèŠæ±ãšã®ãã©ã³ã·ã³ã°ããç©ççå¶çŽãšã®ãã©ã³ã·ã³ã°ãªã©ãè¡ã£ãŠãããŸãã倧éã®å€æ°ããããªãã§ãããããã®ç®çããã¡ããšæããã€ãã³ãé²è¡äžããçšåºŠæºè¶³ã§ãã質ã«èœãšã蟌ãã§ããäœæ¥ã§ãããšãèšããŸãã ããã£ãŠåžžã«æè¡çãªå¶çŽããçŸåšã®å®è£
äžã®å¶éã®äžããããã®æã
ã®ã¹ããŒã¯ãã«ããŒããã®èŠæ±ã«å¿ãç¶ããã·ã¹ãã èšèšãã®ãã®ã ãªãšæããŸããããªã®ã§ããšããããã§ã¯ãªãã§ãããã·ã¹ãã èšèšã«èå³ã®ããæ¹ã¯äžåºŠäŒå ŽèšèšãçµéšããŠã¿ãããšãããããããŸãã ã€ãã³ãéå¶ã®ééå³ æåŸã«äœæ
èªåãã€ãã³ãéå¶ããã£ãŠããã®ãããã®ééå³ã¯äœãªã®ããšããã話ããããŠããã ããšãä»èããŠã¿ãŠãæ£çŽè¯ãåãããŸããã§ãããå°ãªããšãã€ãã³ããäžæããã£ããšããã€ãã³ãã§åãã§ãããæ¹ãããã£ãããã®ã¯ãšãŠããããããæããŸãããäœãããå®å©çãªèŠè¿ããããããšèšããããšãããªã«ç¡ããªãšæã£ãŠããŸããå°æ¥ã®è»¢è·æŽ»åã®ãšãã«ãªã«ããã广ãããããšèšãããã°ããããããŸããªãã ãããªãšæããŸããïŒãã£ãŠãªãããã¯é¥ãã«è¯ãå°è±¡ãªã®ã§ãããçŽç²ã«è»¢è·å¹æãçããªãä»ã«ãã£ãšè¯ãæ¹æ³ããããšæããŸãïŒ ãããã€ãã³ãéå¶ããã£ãŠãããšæ¬æ¥ã«ãããç«ã¡åãã«éå
ããããã®å°ãªããããããšæã£ãŠããŸããäŒç€ŸèŠæš¡ã«ããããšæããŸãããäŒç€Ÿã倧ãããªããšèªåã®ãã£ãŠããäœæ¥ã巚倧ãªãã®ã®äžéšãšãªã£ãŠãããŸãããã®ããèªåã§äºæ¥ãçŽæ¥çã«ãã³ããªã³ã°ããŠããæèŠãèããªã£ããããã®ã§ãããã€ãã³ãéå¶ã¯ãããªããšã¯ãããŸãããã»ãšãã©çŽæ¥çã«ãã³ããªã³ã°ããå¿
èŠããããŸãã æèŠçãªè©±ã«ãªã£ãŠããŸãç³ãèš³ãªãã®ã§ãããã€ãã³ãéå¶ãããããšã«ãã£ãŠæ®æ®µã®æ¥åã«ãããŠè¡ã®éã£ã決æãè¡ããããã«ãªã£ãŠããæè§ŠããããŸããç§ããå€åã«ããããèšããããŸãŸã«äœæ¥ãããŠããããç®çæããããŸããªãŸãŸãã£ãŠãããããŠããéšåã¯å€ã
ãã£ãã®ã§ãããã©ããç®çãèŠæ®ããæèã倿ãã§ããããã«ãªã£ãŠããæ°ãããŸããã©ããã£ãå æé¢ä¿ã§ãããªã£ãã®ãä»ã§ãã¯ã£ãããšèšèªååºæ¥ãªãã®ã§ãããå
è¿°ã®éãã€ãã³ãéå¶ãããããšã§å°ãªãããæ¬æ¥ã«éå
ããããã®ã¯ãããšæããŠããŸãã ææ¥ã¯BASE BANKã® id:khigashigashi ãããšProduct Dev Divisionã® id:smdksk ã§ãïŒã楜ãã¿ã«ïŒ
ããã«ã¡ã¯ïŒ2019幎ãããå°ãã§çµããã§ãããããŠããã®åºŠã¯ã12/1ïŒæ¥ïŒã«æ±äº¬ã»è²ç°ã§éå¬ããã PHP Conference Japan 2019 ã«ãŠã3åã®ã¡ã³ããŒãç»å£ããŸããããŸãããã©ããã¹ãã³ãµãŒãšããŠåè³ããããŸãããä»åã¯ãã¹ããŒã«ãŒãšããŠåå ããããããŒ( @m3m0r7 )ãéåïŒ @o0h_ ïŒãæ±å£ïŒ @hgsgtk ïŒã®3åããåå ã¬ããŒãããå±ãããŸãïŒ PHP Conference Japanãšã¯ PHP Conference Japan 2019 ãšã¯ã12/1ïŒæ¥ïŒã«éå¬ããããããã°ã©ãã³ã°èšèªPHPã®ã«ã³ãã¡ã¬ã³ã¹ã§ããä»å¹Žã¯ãçŽ1400人ã®PHPãšã³ãžãã¢ãéã£ãåœå
æå€§çŽã®ã«ã³ãã¡ã¬ã³ã¹ãšãªããŸããã phpcon.php.gr.jp BASEã¯ããã©ããã¹ãã³ãµãŒãšããŠæ¬ã«ã³ãã¡ã¬ã³ã¹ã«åè³ããããŸããã https://phpcon.php.gr.jp/2019/ äŒå Žã¯ãæšå¹Žã®éå¬ã«ç¶ãã倧ç°åºç£æ¥ãã©ã¶ PiOã§ããã BASEã®ããŒã¹ äŒæ¥ããŒã¹ã§ã¯ãåŒç€Ÿã¡ã³ããŒãæã£ãŠããããã£ããã® ElePHPant ã§ããŒã¹ã圩ã£ãŠã¿ãŸãããæ¬åœã«ããããã®åå è
ã®æ¹ãšã話ãããŠããã ããäžå倧倿¥œããæéãšãªããŸããã ãŸããã¢ã¡ãªã«ããæ¥æ¥ãããŠãã Adam Culp ããã«ããããŒã¹ã«è¶³ãéãã§ããã ããåçãæ®ã£ãŠããã ã貎éãªæ©äŒããããŸããã Adam Culp ããã¯ããã€ã¢ãã§éå¬ãããŠãã SunshinePHP ãšããPHPã®ã«ã³ãã¡ã¬ã³ã¹ã®ãªãŒã¬ãã€ã¶ãŒããããŠããããPHPã³ãã¥ããã£ãäžççã«ãªãŒããããŠãäžäººã§ãã Adam Culpãããšã±ããã åœæ¥ã®æžåºã³ãŒããŒã§ã¯ãèè
ã«ãããµã€ã³äŒããããå人çã«æžç±ãã¿ããªã®PHPãã«å¯çš¿ããŠãããããããŒ( @m3m0r7 )ã»æ±å£ïŒ @hgsgtk ïŒããµã€ã³äŒã«åå ããŠããŸããã æžç±ãã¿ããªã®PHPããµã€ã³äŒçµäºïŒããããŸã ãŸã è²·ã£ãŠããïŒïŒïŒé ŒãïŒïŒïŒïŒ åçã¯èè
ã®éååçã§ãã pic.twitter.com/2gkJWXOxWj — uzulla (@uzulla) December 1, 2019 çºè¡šå
容ã»è³æ ããããŒ( @m3m0r7 )ãéåïŒ @o0h_ ïŒãæ±å£ïŒ @hgsgtk ïŒãããããããçºè¡šå
容ããäŒãããŸãã ããã㌠@m3m0r7 Track2 (å°å±ç€ºããŒã«)ã«ãŠã»ãã·ã§ã³ãããŠããã ããŸããã ãã®ã»ãã·ã§ã³ã§ã¯ PHP ã§äžŠååŠçãéåæåŠçãã©ãå®è£
ããã°ããã®ãïŒãšãã£ãã話ã䞻軞ã«ããããã䞊è¡åŠçã䞊ååŠçãéåæåŠçãšã¯äœãªã®ãïŒãšããæ§æã«ãªãããã«ããŠããŸãããããŒã«èªäœã倧ãããå€ãã®æ¹ã«èµ·ããããã ããŠæè¬ããŠãããŸãã æ±å£ããã«ãããïŒelePHPant æã£ãŠãããªããã§ããïŒããšèšããã倧äºã ããªããšããããšã§ã販売ãå§ãŸã£ãŠããã«è³Œå
¥ãã elePHPant ãäŒå Žã«æã£ãŠãããŸããã è³æèªäœã¯ãå®ã¯ç§äžäººã§äœãäžãããã®ã§ã¯ãªããç§ã®ä»ãŸã§ã®çµéšãå«ãã Go èšèªã䜿çšããŠãã BASE BANK ã®æ±å£ããã budougumi0617 ããã«ãèŠãŠããã ãããçºè¡šç·Žç¿ã«ä»ãåã£ãŠããã ãããããŠæ ¡æ£ã«æ ¡æ£ãéããŠããŠããŠããè¶ãããã ããçæ§ã«æ¥œããçè§£ããŠããããããã«å°œåããŠãããŸããïŒ ãããŠãæèŠªäŒ LT ã§ã¯ããPHP ã JVM èšèªã«ããããšããå
容ã§ãã¢ã亀ããŠã話ãããŠããã ããŸããã å®ã¯å祥寺 pm ã§ããã話ããããšã®ãªãå
容ã§ãä»ãŸã§ ãPHP ã§ JVM ãå®è£
ããããšãã話ãåã€ãã³ãã§äž»è»žã«ã話ããŠããŸãããããããšã¯ãŸãå¥ã§ PHP ãã®ãã®ã JVM èšèªã«ããŠããŸããšãã£ãå
容ã«ãªã£ãŠããŸãã ãªããä»å¹Žã®ã»ãã·ã§ã³ã¯ PHP ã«ã³ãã¡ã¬ã³ã¹ 2019 ã§æåŸã§ããããŒã¿ã«ã®ç»å£åæ°ã¯ 15 åã§ãçºè¡šæé㯠270 åã§ãã 詳ããã¯å人㮠note ã«ããšã ãæ·»ããŠãŸãšããŠããŸãã®ã§ããèå³ãããã°ã芧ãã ããã ä»å¹Žã®ç»å£å®çžŸïœããã㌠@m3m0r7 éå @o0h_ Track5(äŒè°å®€AB)ã«ãŠçºè¡šããããŠããã ããŸããã ãŸãæåã«ããããŠæãå°è±¡ã«æ®ã£ãŠããã®ã¯ãæºå¡ã«ãªã£ãäŒè°å®€ã®å
æ¯ã§ãã ç»å£ã®æ©äŒãé ãã身ãšããŠã¯ãèŽè¡ã®å€ãã«ç·åŒµããã€ã€ãããããªã«å€ãã®äººãšåæã«èªåã®å¥œããªè©±ãå
±æã§ãããã ãªãããšå¬ããæããŸããã ä»å¹Žã®PHP Conference Japanã§ã¯ãä»ã®å€ãã®ã»ãã·ã§ã³ã§ãæºå¡ãããã«è¿ãç¶æ
ãçãŸããŠããå°è±¡ããããŸã ãåããã¯ãŒãæã£ãã€ãã³ãã ãšæããŸããããããªã«ç±éã®æ¿ã空éãåµãäžããŠãããã¹ã¿ããã®çããã«ãå¿ããæè¬ãç³ãäžããŸããããããšãããããŸããïŒ ããŠãä»åã®å
容ã¯ãèªåèªèº«ãããããã話ãããã°èå³ãæã€ãããªãèŽããŠã¿ããïŒããšããããŒã¶ã«ãæåºãããã®ã§ãããã®ããããç¥èŠãå
±æããããç¥ã£ãŠããããããªããšããæ³ãã倧äºã«ãã€ã€ãã³ãã¥ããã£ã«å¯ŸããŠãåããæããããããããªæ°æã¡ã§èšã¿ãŸããã 25åãšããæ ã®äžã§èªããããã®ã¯ãããå
ããªéšåã«éããŸããããããããã®ã»ãã·ã§ã³ããã£ããã« git clone git@github.com:composer/composer.git ã詊ã¿ãæ¹ãåºãŠããããªãæé«ã§ãïŒïŒ æ±å£ @hgsgtk ãã©ããã¹ãã³ãµãŒãšããŠåè³ããã®ã§ãBASEã®ã¹ãã³ãµãŒã»ãã·ã§ã³ãæ
åœããããŸããããŸããæèŠªäŒLTã§ãçºè¡šãããŠããã ããŸããã®ã§ããããäž¡æ¹ã®è³æãå
¬éããããŸãã ç¥èŠã®ãªãæè¡ã¹ã¿ãã¯ããããã¯ã·ã§ã³å°å
¥ãããšã³ãžãã¢ã®å°å
¥æŠç¥ BASEã®ã¹ãã³ãµãŒã»ãã·ã§ã³ãšããŠçºè¡šããããŸãããç§ã¯ãBASEæ ªåŒäŒç€Ÿã®åäŒç€Ÿã§ãã BASE BANKæ ªåŒäŒç€Ÿ ã«ãŠã YELL BANKïŒãšãŒã«ãã³ã¯ïŒ ãšãããµãŒãã¹ãéçºããéã«ãæè¡éžå®ãè¡ããŸããããã®éã«æããã" æè¡éžå®ãšããæææ±ºå®ã«ãããäžå® ã«å¯ŸããŠã©ãç«ã¡åãã£ãŠããã°ããã"ã«ã€ããŠè³æãšããŠåœ¢ã«ããŠã¿ãŸããã åœæ¥ã¯ãéåžžã«å€ãã®æ¹ã«è¶³ãéãã§ããã ã圢ã«ãªããŸããããæè¡éžå®ã®æææ±ºå®ãè¡ã£ãããšãããæ¹ãã©ãããããããïŒããšäŒå Žã«åããããéã«8å²ãããããããããšããæ¹ã ã£ããããåããããªèª²é¡æãå¢éã«ç«ã£ãããšãããæ¹ãå€ãããã§ããã çºè¡šåŸã¯ãTwitteräžã«ãŠå
±æã®å£°ãããåèã«ãªã£ãããšããããžãã£ããªåå¿ãããã²ãšãŸãäžå®å¿ããŸããã #phpcon #Track4 éçšããªããšããããªãããšããã ããã — ã¢ãã㌠(@akki_megane) December 1, 2019 #phpcon #Track4 話ã®äžã§ãäžè¬åããäœåºŠãèãã çŽ æŽãããçºè¡šããšæã£ã ç®æããšããã®é«ããæãã — 倮 (@sogaoh) December 1, 2019 åãããããã£ããåæ°ã¥ãããã #phpcon #track4 — ãããšð (@shostako_Vc) December 1, 2019 ãŸããçºè¡šåŸã«ããããããŒã¹ã«ãããããã ããŠè³ªåãã«æ¥ãŠãã ããæ¹ãè€æ°ããã£ãããã"éçºçŸå Žã«ããããã¹ã"ã"æè¡è©äŸ¡ã®å段éã«ã©ããã£ãæºåãããã"ãªã©ãæ¹ããŠãèªåãã©ããããïŒããšæŽã«æ¯ãè¿ãæ©äŒã«ãªãã倧倿æçŸ©ãªæéã«ãªããŸããã åœæ¥ãäŒå Žã«ãŠèãã«æ¥ãŠãã ãã£ãæ¹ã
ã«ã¯ãã®å ŽãåããŠæ¹ããŠåŸ¡ç€Œç³ãäžããŸãã èªäœããŠã¿ããxUnitãã¬ãŒã ã¯ãŒã¯ ãã¡ãã¯æèŠªäŒLTã«ãŠè©±ããå
容ã§ããä»å¹Žã®PHP Conference Japanã§ã¯ãPHPãšã³ãžãã¢ã§ããã°äžåºŠã¯å¿
ããäžè©±ã«ãªã£ãããšãããã ãã PHPUnit ã®éçºè
ã§ãã Sebastian Bergmann ãããã¹ããŒã«ãŒãšããŠãã€ãããæ¥æ¥ããŠããŸããã æ¥é ã®PHPUnitãžã®æè¬ãšæãäŒããããšæããxUnitãã¬ãŒã ã¯ãŒã¯ãèªäœããŠã¿ãããšã§ãæ¹ããŠPHPUnitã®åããç¥ãããšããçºè¡šãããŠã¿ãŸããã ããã¯äœè«ã§ãããSebastian Bergmannãããšã¯åæ¥ã®ã¹ããŒã«ãŒãã£ããŒã®éã«çŽæ¥è©±ãããŠããã ããŸããããPHPUnitãäœæ
ã€ãã£ãã®ãïŒããšããèæ¯ããä»åŸã©ãããæ§æ³ãããã®ããšãã£ã話ãèãããŠããã ããŸãããè±èªã§ã®äŒè©±ã¯ãŸã ãŸã é£ãããç¶æ
ã®ç§ã§ãåªãããã£ãã話ããŠããã ãæ¬åœã«çŽ æŽãããæ¹ã§ããããã£ãšè±èªã§ã®äŒè©±åãã€ããŠãã£ã€ãè°è«ã§ããããã«ãªããããšåŒ·ãæã£ãæéã«ãªããŸããã ãããã« PHP Conference Japan 2019 ã®å®è¡å§å¡é·ã§ããæ¿è°·é·åžãããã¯ãããå®è¡å§å¡äŒã®çæ§ããŸãåŒç€Ÿãšã³ãžãã¢ã®ã»ãã·ã§ã³ããéèŽããŠãã ãã£ãçæ§ã«å¿ãã埡瀌ç³ãäžããŸããPHPã³ãã¥ããã£ã«å¯ŸããŠåè³ãç»å£ãšãã圢ã§åŸ®åãªããè²¢ç®ã§ããããšå
æ ã«æããŸãã æ¥å¹Žã®éå¬ã¯10æ11æ¥ ã®éå¬ãšã®ããšã§ãå¿ããæ¥œãã¿ã«ããŠãããŸããèª ã«ããããšãããããŸããïŒ
ãã®èšäºã¯ããBASE Advent Calendar 2019ãã®3æ¥ç®ã®èšäºã§ãã devblog.thebase.in åã®æ¥ã¯ id:ngsw ã® EC2ã«ãããåäœæéãããã®åå解決å¶éã®å¯Ÿå¿ ãš id:chiiichell ã® ãšã³ãžãã¢2幎çããªãŒããã«ã³ãŒããèªãã§ä»å¹Žèªåãæžããã³ãŒããæ¯ãè¿ã ã§ããã devblog.thebase.in Product Dev Divisionã®å è³è°·ã§ããå
éšçµ±å¶ã®å®çŸææ®µã®1ã€ã§ãããITãžã®å¯Ÿå¿ãã«ã€ããŠæŽåæ¹åãæ¥ã
é²ããŠããŸãã瀟å
ã®å
éšçµ±å¶äºåå±ãšç£æ»æ³äººã«è©äŸ¡ãšã¢ããã€ã¹ãããã ããªãããITçµ±å¶ã®ãã¡ã®å
šè¬çµ±å¶ãžã®å¯Ÿå¿ã宿œããŠããŸãã AnyPay瀟ããã® GitHubãçµç¹éå¶ã«æŽ»çšããäºäŸ ã«ãããšãããæŽ»åã®äžã§è¡ãææžç®¡çãæ¿èªã蚌跡管çã«GitHubããšãŠãæå¹ã ãšæããããšãå€ããããŸããããã®èšäºã§ã¯å
ã®èšäºã«åŠã³è¡ã£ãŠããäžã§ãåŒç€Ÿã®ITçµ±å¶ã«ãããGitHubã®æŽ»çšäºäŸãã玹ä»ããããšæããŸãã èŠçšé¡ã®ç®¡ç GitHubã«ãªããžããªãäœããèŠçšé¡ãMarkdownã§çµ±å¶é
ç®æ¯ã«.mdãã¡ã€ã«ãäœã£ãŠããŸããã¢ããã€ã¹ããã ããããšãGitHub Issueã«èµ·ãããŠè°è«ãé²ããèŠçšã®æŽæ°ã¯ãã«ãªã¯ãšã¹ããçµãŠmasterãžããŒãžããŠããŸããGitHub Flowã§éçšããŠããŠãmasterãçŸåšé©çšãããŠããçµ±å¶ã®æŽåç¶æ³ãšããŠããŸãã èŠçšé¡ã¯äžåºŠäœãçµãããçµäºãšãããã®ã§ã¯ãªããäŒç€ŸããµãŒãã¹ã®ç¶æãšçºå±ã®ããã«æ¹åãå ããŠãããã®ãªã®ã§ãã©ããã£ãçµç·¯ã§ãã®æ¹æ³ã«ãªã£ãã®ããã©ããªIssueããã©ããªè°è«ããããã®ããè¿œè·¡ãæ€çŽ¢ãã§ããããšã倧åã§ãããããã£ãé¢ãããGitHubã¯ãšãŠãæå¹ã§ãã PDFãšãã¹ãã£ã³ã° ãŸããGitHubãšã¯çŽæ¥é¢ä¿ãããŸããããèŠçšé¡ãMarkdownã§æžããŠãããŠè¯ãã£ãããšã玹ä»ããŸããGitHubã§Markdownã衚瀺ã§ãããšã¯ãã瀟å€ã®ç£æ»æ³äººãšãããšãããæãããã®ã§ããªããžããªã«åå ããŠãããããšã¯çŸå®çã«é£ããã£ããããŸããããã§ãã¹ã¯ãªããã§MarkdownãPDFã«å€æããŠããŸãã markdown-pdf ã§ã¯CSSã§ãã©ã³ããçŽã®ãµã€ãºãæå®ããããšãã§ããã®ã§ãææžã®ããŒã¿ãšäœè£ãåããŠèããããšãã§ããŸããconcatãã§ããã®ã§ã1ã€ã®Markdownãã¡ã€ã«æ¯ã«1PDFã§ã¯ãªããèŠçšé¡ã®ãŸãšãŸãæ¯ã«1ã€ã®PDFã«concatããŠããŸãã pdf.js #!/usr/bin/env node const fs = require( 'fs' ), path = require( 'path' ), markdownpdf = require( 'markdown-pdf' ), config = require( 'config' ); const walk = (dir, callback) => { fs.readdirSync(dir).forEach((item) => { const filePath = path.join(dir, item); const stat = fs.statSync(filePath); if (stat.isDirectory()) { walk(filePath, callback); } else if (stat.isFile()) { callback(filePath); } } ); } ; config.get( 'pdf.docs' ).map(doc => { let strings = [] ; walk(doc.dir, filePath => { if ( /.*\.md$/ .test(filePath)) { strings.push(fs.readFileSync(filePath, { encoding: 'utf-8' } ).replace( /---[\s\S]*?---/ , '---' )); } } ); markdownpdf( { paperFormat: "A4" , cssPath: "pdf.css" , remarkable: { linkify: true , } } ) .concat .from.strings(strings) .to(doc.dest, function () { console.log( "created" , doc.dest); } ); } ); pdf.css body { font-size : 0.625em ; font-family : "ãã©ã®ãææ ProN W3" , "Hiragino Mincho ProN" , "ïŒïŒ³ ææ" , "MS PMincho" , serif ; } abbr [ title ] : after , a [ href ] : after { content : "" ; } GitHubã«åå ããŠããªã瀟å
ã¡ã³ããŒã«å
¬éããã«ã¯ Docusaurus ã䟿å©ã§ããMarkdown+Docusaurusã®æŽ»çšã«ã€ããŠã¯ BASEã®éçºè
æ§åãæ©èœã®ããã¥ã¡ã³ããµã€ãããªãã¥ãŒã¢ã«ãããšãã®èšäº ãã芧äžããã ç¹æš©IDã®ç®¡çãšæ¿èª æ¬çªããŒã¿ããŒã¹ãªã©ã®éèŠãªã·ã¹ãã ã«ã¢ã¯ã»ã¹ããç¹å¥ãªæš©éãæã€ã¡ã³ããŒã¯ãæ¥åã«å¿ããŠã¢ã¯ã»ã¹ç®¡çæš©éäžèЧã«åºã¥ãèšå®ããŠããŸãããŸãç¹æš©ã®ä»äžãæš©éã倿Žããéã«ã¯è²¬ä»»è
ã®æ¿èªãå¿
èŠãšããã¯ãŒã¯ãããŒã«ããŠããŸããä»èª°ãã¢ã¯ã»ã¹æš©éãæã£ãŠãããã®äžèЧãã©ãããçç±ã§ç³è«ããã®ããèª°ãæ¿èªããã®ããã¯ãŒã¯ãããŒã®æ§ç¯ãšèšŒè·¡ç®¡çãã¢ãã¿ãªã³ã°ã«GitHubã䜿ã£ãŠããŸãã ã¢ã¯ã»ã¹ç®¡çæš©éäžèЧãYAMLã§æžããŠããã远å åã³åé€ã®ç³è«ã¯YAMLãã¡ã€ã«ãžãã«ãªã¯ãšã¹ããããŠãå¿
èŠãªæ¿èªè
ã®ã¬ãã¥ãŒïŒPullRequestã®approvedïŒãåããéçšã«ããŠããŸããæ¿èªè
㯠CODEOWNERS ã«å®çŸ©ããããšã§ãã«ãªã¯ãšã¹ãäœææã«èªåã§åºå®ã§ããŸãã .github/CODEOWNERS ãã¡ã€ã«èªäœã®ã³ãŒããªãŒããŒã¯ãã¢ãã¿ãªã³ã°ããã¡ã³ããŒã«ããŠããŸãã ãŸã 宿œããŠããŸããããgitãªããžããªå
ã®YAMLãã¡ã€ã«ã«ããããšã§ããã°ã©ã ãšã®èŠªåæ§ãäžãããTerraformãAnsibleãªã©ã€ã³ãã©æ§æç®¡çã®äžã«ãçµã¿èŸŒãããšãã§ãããšæããŸãã CODEOWNERS # CODEOWNERSã®äŸã§ãã # ããã©ã«ã * @violetyk # æ¬çªDBãžã¢ã¯ã»ã¹ãããŠãŒã¶ã®æ¿èª /permissions/production_db.yml @dmnlk é害管çå°åž³ åæãšããŠé害ã¯èµ·ããªãããã«çãè¬ããã®ã§ãããäžãäžäºæ
ãé害ãèµ·ãããšãã«ã¯è§£æ±ºã«è³ããŸã§ãèšé²ã»ç®¡çããææ®µãè¬ããŠããããšãå¿
èŠã§ãã é害ã®èšé²ã管çã«ã¯GitHub IssueããIssueã®èªåäœæã«GitHub Actionã䜿ã£ãŠããŸããåŒç€Ÿã§ã¯é害çºçæã®ã¯ãŒã¯ãããŒãšããŠãSlackã§ #incident_yyyymmdd ã®ãããªãã£ã³ãã«ãäœãçŸæ³å ±åããããšããããå§ãŸããŸãïŒSlackãããŠã³ããŠããã代æ¿ã®ãã£ããã§ïŒã GitHub Actionã§å®æçã«é害ã®ãã£ã³ãã«ãäœãããŠãããã©ãããç£èŠãããã£ãå Žåã«ã¯GitHubã«é害管çIssueãäœããŸããé害管çIssueã¯èªåçã« incident ã¿ã°ãã€ããŠè²¬ä»»è
ã«ã¢ãµã€ã³ãããŸãã責任è
ãéå®³å ±åãæžããŠé害察å¿ãçµãã£ããIssueãã¯ããŒãºããŠããŸãã GitHubã§ç®¡çã起祚ãèªååããããšã§ãå ±åæŒãããªãããæªè§£æ±ºã®éå®³ãæ ¹æ¬å¯Ÿå¿ãèŠãããã®ã®å®æçãªæ£åžããªã©ã容æã«ãªããŸããã GitHub Action é害ã®ãã£ã³ãã«ãç£èŠããŠIssueãèªåã§äœãGitHub Actionã¯æ¬¡ã®ããã«æžããŠããŸãã .github/workflows/create_issues.yml name : Create Github issues from Slack incident channels on : schedule : - cron : '0 1 * * *' jobs : build : runs-on : ubuntu-latest steps : - uses : actions/checkout@v1 - name : Set up Python 3.7 uses : actions/setup-python@v1 with : python-version : '3.7' architecture : 'x64' - name : Install dependencies run : | pip install --upgrade pip pipenv pipenv sync - name : Create issues env : SLACK_TOKEN : ${{ secrets.SLACK_TOKEN }} run : | YYYYMMDD=`date +"%Y%m%d" --date "1 day ago" ` pipenv run create_issues --repo=baseinc/info-system --term=${YYYYMMDD} --label=incident --assignee=xxxx JasonEtco/create-an-issue GitHub Actionã® JasonEtco/create-an-issue ã¯Issueããã³ãã¬ãŒãããäœãActionã§ãããã®Actionã宿çã«è¡ãå¿
èŠãããSaaSã®ã¢ã«ãŠã³ãã®æ£åžãã¿ã¹ã¯ã«äœ¿ã£ãŠããŸããGitHub IssueãšããŠäœæããåSaaS管çè
ã«ã¢ãµã€ã³ãæ£åžãå
å®¹ãæžããŠçµãã£ããã¯ããŒãºãããšããéçšã§èšŒè·¡ç®¡çããŠããŸãã .github/workflows/create_issues_quarterly.yml name : Create issues quarterly on : schedule : # 1Q(1/1), 2Q(4/1), 3Q(7/1), 4Q(10/1) (UTC) - cron : '0 1 1 1,4,7,10 *' jobs : build : runs-on : ubuntu-latest steps : - name : Checkout uses : actions/checkout@v1 - name : Review Slack uses : JasonEtco/create-an-issue@v1.2.0 with : args : workflow_templates/review_accounts/slack.md å
éšçµ±å¶ã®ç°å¢æŽåãšéçºè
äœéšã®äž¡ç«ãç®æã㊠åŒç€Ÿã®äºäŸãã玹ä»ãããŠããã ããŸããããŸã ãŸã ææ¢ãã§ãã£ãŠãããšãããå€ãã®ã§ã掻çšäºäŸããæã¡ã®æ¹ããã£ããã£ãããã²ã話ãèãããŠããã ãããã§ãã ã³ãŒãã¬ãŒããšã³ãžãã¢ã®ããã·ã§ã³ã¯ãã·ã§ãããªãŒããŒã«å®å¿ããŠãµãŒãã¹ã䜿ãç¶ããŠããã ãããã«ãæ¥åã®æå¹æ§åã³å¹çæ§ã»è²¡åå ±åã®ä¿¡é Œæ§ã»äºæ¥æŽ»åã«é¢ããæ³ä»€ãªã©ã®éµå®äžŠã³ã«è³ç£ã®ä¿å
šãšãã£ãå
éšçµ±å¶ã®ç°å¢æŽåãšéçºè
äœéšã®äž¡ç«ãèãç¶ããæ¹åãç¶ããŠããããšã§ããå¿
èŠä»¥äžã®ã«ãŒã«ãéçšãé£ããçµ±å¶ãåºããããšã§ãµãŒãã¹ã®æé·ã¹ããŒããèœãšãããéã«å éã§ãããããæè»ãªãã©ã³ã¹æãæã£ãŠæ¹åãé²ããŠãããããšæããŸãã ææ¥ã¯ id:khigashigashi ãš id:smdksk ã§ãããæ¥œãã¿ã«ïŒ ãBASE Advent Calendarãã®èšäºäžèЧã¯ãã¡ãã§ãã devblog.thebase.in
ãã®èšäºã¯ BASE Advent Calendar 2019 ã®2æ¥ç®ã®èšäºã§ãã devblog.thebase.in ããã«ã¡ã¯ïŒBASEã§Frontend Groupã«æå±ããŠãã äžäœå ã§ããäž»ã«ãããã·ã§ããäœæãµãŒãã¹ãBASEãã®ããã³ããšã³ããæ
åœããŠããŸãã 2016å¹Žã«æªçµéšããBASEã§ã€ã³ã¿ãŒã³ãéå§ãããã®åŸæ£ç€Ÿå¡ãšããŠå
¥ç€ŸããŸãããåœæã¯äž»ã«LP ãªã©ã®ããŒã¯ã¢ããã管çç»é¢ã®UI ã«é¢ãã现ããä¿®æ£ãªã©ãæ
åœããŠããã䜿ã£ãŠããæè¡ã¯äž»ã«HTML, CSS, jQuery ã§ãLP ã§äœ¿ããããªç°¡åãªã¢ãã¡ãŒã·ã§ã³ã®å®è£
ããããããšããªãã£ãã®ã§JavaScript ã®ç¥èã¯ã»ãŒçç¡ã§ããã ä»åã®ããã°ã§ã¯ã ãªãŒããã«ã³ãŒã ãèªã¿ãªãããä»å¹Ž1å¹ŽéæžããŠããèªåã®ã³ãŒããæ¯ãè¿ã£ãŠã¿ãããšæããŸãã ä»å¹Žäž»ã«åãçµãã§ããããš æšå¹Žãã·ã§ãããªãŒããŒããã䜿ã管çç»é¢ã®ãã«ãªãã¥ãŒã¢ã«ãããžã§ã¯ããæ¬æ Œçã«å§åããŸããã ïŒãããžã§ã¯ãã«ã€ããŠã®ã話ã¯ãæšå¹Žã®ã¢ããã³ãã«ã¬ã³ããŒã§ãã¶ã€ã³ã°ã«ãŒãã®æ©å·ã ãBASEãã®ç®¡çç»é¢ãªãã¥ãŒã¢ã«ãããžã§ã¯ãã®ãããŸã§ãšãããã ãšããèšäºãæžããŠããŸããïŒ ãããšåææã«ããã³ããšã³ãããŒã ãæ°ãã«çºè¶³ããã€ã³ã¿ãŒã³ã®é ãããã¢ã·ã¹ã¿ã³ããã¶ã€ããŒãã ã£ãè©æžãããããã³ããšã³ããšã³ãžãã¢ãã«ãªããŸããã ïŒåœæã®å¿å¢ïŒ ãã¢ã·ã¹ã¿ã³ããã¶ã€ããŒãšããã€ã€ããã¶ã€ã³ã¯ã§ããªãããèªåã¯äžäœäœè
ãªãã ããã£ãŠæã£ãŠãããã©ã仿¥ããç§ã¯ããã³ããšã³ããšã³ãžãã¢ãªã®ããŒïŒå¬ããïŒã Vue.js + TypeSrcript ã®æ°ããã¢ãŒããã¯ãã£ãæ¡çšããããšã«ãªããVue.js ã®å匷ãå¿
èŠã ãšæ°ä»ããç§âŠ å匷ããªãããã¢ãŠãããããšããŠãã¶ã€ããŒåãã«Vue.js ååŒ·äŒ Vue Boot Camp ãéå¬ãããããŸããã ãããŠä»å¹Žã管çç»é¢ãªãã¥ãŒã¢ã«ãããžã§ã¯ãã®äžã®ã²ãšã€ã§ããæ³šæç®¡çç»é¢ã®ããã³ããšã³ãåŽå®è£
ãæ
åœããããšãšãªããŸããã ïŒåœæã®å¿å¢ïŒ ãVue.js ãªããšãªãè§Šã£ãããããã©ããããWeb ã¢ããªã±ãŒã·ã§ã³ã®äžã§ã©ãæžãããŠãã©ãåãã®ãå
šç¶äºæ³ãã€ããªãâŠãããªå€§ããªãããžã§ã¯ãã«ã¢ãµã€ã³ãããŠå€§äžå€«ãªã®ãâŠãããâŠã ã§ããšããããããã£ãŠãã 2æã«çèªãããŠãããæš¡çŽ¢ãã€ã€æžããŠããã³ãŒããã¡ãæ¯ãè¿ã£ãŠã¿ãããšæããŸãã ã³ãŒããæ¯ãè¿ã£ãŠã¿ã ã¬ãŒãç¯ã䜿ã£ãŠæ£åžžç³»ãšç°åžžç³»ãæç¢ºã«ãã å
šäœã®ç¶æ
ã管çããããã« HashMap ã䜿çšããŠããŸããããHashMap ã¯äžèº«ã®å€åã Vue ãç£èŠããããšãã§ããªãããã代ããã®ããŒãšã㊠updated ãç£èŠå¯Ÿè±¡ã«å«ããããšã«ããŸããã ä¿®æ£å class extends Vue { // ... ordersAt ( page: number ) : ReadonlyArray < Order > | null { if ( this .updated ) { return this .allOrdersMap.get ( page ) || null } return null } updateOrders () { // ... this .updated = + new Date () } // ... } ã¬ãã¥ãŒ ããšã§çŽãã«ããããèªã¿ã«ãããªãã®ã§ãæåŸã®return ãç°åžžç³»ã«ãªããããªæžãæ¹ã¯ããŸãããªãã»ããããã§ã ã¬ãŒãç¯ãšããèãæ¹ã䜿ã£ãŠ typescript if(!this.update) { return null } ãå
ã«æžããšããã§ãã ä¿®æ£åŸ ordersAt ( page: number ) : ReadonlyArray < Order > | null { if ( ! this .updated ) { return null } return this ._allOrdersMap.get ( page ) || null } updated 㯠Vue ã®éœåã®ããã®ã³ãŒããªã®ã§ããããååšããªãã®ã¯æç¢ºã«åŠçã®å®è¡ãäžå¯èœã«ãªããŸããä»åã®å Žåã¯ç£èŠããã§ããã°ããã®ã§ãguard ã®æ¹ãé©åã§ãã æ¡ä»¶åå²ãèªã¿ããããã æ¡ä»¶ã«ãã£ãŠè¡šç€ºãåãæ¿ããåŠçã§ããæéã®æå®ãããŠãããã©ããã§è¡šç€ºã倿ŽããŸãã ä¿®æ£å < template > // ... < p v- if= "!condition.from && !condition.to" > {{ __ ( 'ãã¹ãŠã®æé' ) }} < /p > < div v- else> < p > {{ format ( condition. from) }} < /p > ã < p > {{ format ( condition.to ) }} < /p > < /div > // ... < /template > ã¬ãã¥ãŒ ããããã±ãŒã¹ã¯ not and not ãããã or ã®ã¿ã®æ¹ãåããããããšæãã®ã§ãå®éã«æéãåºãæ¹ã from or to ãšããæ¹ãè¯ãæããããŸãã ä¿®æ£åŸ < template > // ... < p v- if= "condition.from || condition.to" > < p > {{ format ( condition. from) }} < /p > ã < p > {{ format ( condition.to ) }} < /p > < /p > < div v- else> {{ __ ( 'ãã¹ãŠã®æé' ) }} < /div > // ... < /template > !A and !B ã¯æåŸãŸã§èªãå¿
èŠãããäžã«ãåŠå®ãªã®ã§åºæ¬çã«èªã¿ã¥ããããšã«ããæéãæå®ãããŠããã°è¡šç€ºãå€ããã®ã ãããã©ã¡ãããæå®ãããŠãããããšããæ¡ä»¶ã®æ¹ãèªç¶ã§ãã æå³ãäŒãã key ãªæååãšãªã£ãŠãã prop ãå®éã®è¡šç€ºã®ããã«æ¥æ¬èªã«å€æããåŠçã§ãã ä¿®æ£å class extends Vue { // ... get paymentInfoTitle () { if( this .isCreditCard ) { return 'ã¯ã¬ãžããã«ãŒã決æž' } else if ( this .isBank ) { return 'éè¡æ¯èŸŒ' } else if ... { // ... } return '' } // ... } ã¬ãã¥ãŒ switch ã§æžããæ¹ãæå³ã¯éããããããªãšæã£ã ä¿®æ£åŸ class extends Vue { // ... get paymentInfoTitle () { switch( this .$props.payment ) { case 'credit_card' : return 'ã¯ã¬ãžããã«ãŒã決æž' case 'bank' : return 'éè¡æ¯èŸŒ' // .... } } // ... } if-else ... ãšããŠãããããã switch ã§ãã®ãã¡ã©ããã«ãªããšããç¶²çŸ
æ§ãããæ¹ãå¯èªæ§ãé«ããã§ãã äžåºŠã«äžã€ã®ã¿ã¹ã¯ãè¡ã éžæãããŠããæ€çŽ¢æ¡ä»¶ãstring ãšããŠè¡šç€ºãããããã®åŠçã§ãã ä¿®æ£å class extends Vue { // ... get searchConditionStatus () { return this .searchCondition. status .map ( x => { return orderStatuses.find (status => { return status .key == x } ) !.name } ) .join ( ', ' ) } // ... } ã¬ãã¥ãŒ map ãªã©ã®é¢æ°åã€ã³ã¿ãŒãã§ã€ã¹ãå©çšããå Žåã¯äžåäžåã®é¢æ°ã®åŠçãå°ããªåäœã§åãåºãæ¹ãèªã¿ãããã§ã ä»ãã®é¢æ°ã¯ã status ããªããžã§ã¯ãã«å€æããŠã name ãåãåºãããšããåŠçãããŠããŸããããããäºã€ã«åããæã ä¿®æ£åŸ class extends Vue { // ... get searchConditionStatusLabel () { return this .searchCondition. status .map ( x => { return orderStatuses.find (status => { return status .key == x } ) ! } ) .map ( x => x.name ) .join ( statusSeparater ) } // ... } å°ããåäœã§åŠçãåãåºãããšã§ãæŠèŠãææ¡ãããããªãã³ãŒããèªã¿ããããã®ã«ãªããŸãã ãããžã§ã¯ãåºæã®ã³ãŒãããæ±çšã³ãŒããåé¢ãã string ãšããŠå€ææžã¿ã®ãå±ãæé垯ãã人ãèªãã圢åŒã«æ»ãåŠçã§ãããã®ãããªåŠçã¯ãä»ã®ç®æã§ãç»å Žãã BASE ã§ã¯ã銎æã¿ã®ãã®ã§ãã ä¿®æ£å class extends Vue { // ... deliveryTime ( time: string ) { const startTime = time.slice ( 0 , 2 ) const endTime = time.slice ( 2 , 4 ) if( time == '0812' ) { return 'ååäž' } return startTime + 'ã' + endTime + 'æ' } // ... } ã¬ãã¥ãŒ ãã®ãããã®å€æã¯ timeslot-to-string ã®ãããªæ©èœãšããŠåãåºããŠããããã ä¿®æ£åŸ import { timeslotToString } from '~/util/timeslot' class extends Vue { // ... get deliveryTime () { return timeslotToString ( this .orderDetailDeliveryDate.delivery_time_slot ) } // ... } // ~/util/timeslot.ts export const timeslotToString = ( time: string ) => { const startTime = time.slice ( 0 , 2 ) const endTime = time.slice ( 2 , 4 ) if( time == '0812' ) { return 'ååäž' } return startTime + 'ã' + endTime + 'æ' } Vue(View) ããåŠçãæãåºãããšã§ãä»ã®ç®æãããåç
§ã§ãã颿°ã«ãªããŸããããŸããVue ã§ã®é¢å¿ããšãæžããã³ãŒããå°ãªããªããŸããã åã³ã³ããŒãã³ãã®äžããã®èŠç¹ã§ã€ãã³ãåãæ±ºãã åã³ã³ããŒãã³ãå
ã§ãã§ãã¯ããã¯ã¹ãéžæããsubmit ãã¿ã³ã§ $emit ãã芪ã³ã³ããŒãã³ãå
ã§ã¢ãŒãã«ïŒ hoge-modal ïŒãéãåŠçãããŸãã ä¿®æ£å // åã³ã³ããŒãã³ã < template > //... < bbq-button @click = "submit" > submit < /bbq-button > //... < /template > < script > //... class extends Vue { //... submit () { this .$emit ( 'show: hoge-modal' ) } //... } < /script > // 芪ã³ã³ããŒãã³ã < template > //... < åã³ã³ããŒãã³ã @show :hoge-modal = "isHogeModalVisible = true" >< /åã³ã³ããŒãã³ã > //... < hoge-modal :show = "isHogeModalVisible" @cancel = "isHogeModalVisible = false" > //... < /hoge-modal > //... < /template > ã¬ãã¥ãŒ ã³ã³ããŒãã³ããèšèšããŠããäžã§ããã®ã³ã³ããŒãã³ãã¯èŠªã³ã³ããŒãã³ãã®ååšãç¥ããªããšèããã®ãåºæ¬ã§ã ãããªããšåã³ã³ããŒãã³ããåºæ¥ãããšã¯ã submit ãããããšããã€ãã³ããéãããšã ãã«ãªããŸã åã³ã³ããŒãã³ãã¯ã€ãã³ããåãåã£ã芪ã³ã³ããŒãã³ããäœãã show ãããã©ãããç¥ããŸãããã hoge-modal ãšãããã®ãååšããããšãç¥ããŸãã ãã®ã€ãã³ãåã ãšãå
·äœçãªèŠªã³ã³ããŒãã³ããååšããåæã®ã€ãã³ãåã«ãªããã§ããããã®éã§åã³ã³ããŒãã³ãã®äžããã®èŠç¹ã§ã€ãã³ãåãæ±ºãããšãã£ããæ¥ãååã«ãªããããã§ã ä¿®æ£åŸ // åã³ã³ããŒãã³ã class extends Vue { //... submit () { this .$emit ( 'submit' ) } //... } // 芪ã³ã³ããŒãã³ã < template > //... < åã³ã³ããŒãã³ã @submit = "isHogeModalVisible = true" >< /åã³ã³ããŒãã³ã > //... < /template > åãæèããããšã¯ã submit ããããšãã ããªã®ã§ãããã«åãããŠã€ãã³ãåã倿ŽããŸããã ãªãªãŒã¹ãçµã㊠ç¡äºã«éçºã¯é²ã¿ã6æã« 泚æäžèЧããŒãž ã11æã« 泚æè©³çްããŒãž ããªãªãŒã¹ããããšãã§ããŸããã æèããŠããããš ãã«ãªã¯ãäœãåäœã现ãããã ã€ãã€ããã€ãã§ã«ããããçŽããŠãããããããçŽããŠãããããšçްããä¿®æ£ãå«ããŠããŸããçµæçã«å€§ããªãã«ãªã¯ãäœã£ãŠããŸã£ãŠããçºããªããªãäœæ¥äžã®ãã«ãªã¯ãã¬ãã¥ãŒã«åºããã«ããŸããã ã²ãšã€ã®ãã«ãªã¯ã«å«ãŸãããã¡ã€ã«ã®å·®åã倧ãããªãã°ãªãã»ã©ããã®åã¬ãã¥ãŒããŠãããç¯å²ã倧ãããªããã¬ãã¥ãŒã³ã¹ããé«ããªã£ãŠããŸãã®ã§ããªãã¹ãå°ããªåäœã§ãã«ãªã¯ãäœããéçºé床ãäžããããããæèããŸããã ã³ãããã¡ãã»ãŒãžã«ã¯ãã®ã³ãããã«ãããä¿®æ£çç±ãæžã ãªãŒããã«ã³ãŒãã®ç¬¬5ç« ãã³ã¡ã³ããã¹ãããšãç¥ããã«ãæžãããŠããããã«ãã³ãŒããèªãã°ããã«åãããããªå
容ãã³ã¡ã³ããã³ãããã¡ãã»ãŒãžã«æžãã®ã§ã¯ãªãããããããã³ãŒããèªã人ããã®ã³ãŒããçè§£ãããŸã§ã«ãããæéãçãããçºã®ã³ã¡ã³ããã©ãããŠãã®ä¿®æ£ãããã®ããäŒããçºã®ã³ãããã¡ãã»ãŒãžãæžãããæèããŸããã ã§ããããã«ãªã£ãããš äŒè©±ãã§ããããã«ãªã£ã ãã«ãªã¯å
ã§ããã³ãŒããæžããæå³ãèãããŠãããã«å¯ŸããŠèªåã®èŠè§£ãè¿°ã¹ãããšããã®ã¯ããåœããåãªå
æ¯ãããããŸãããã§ãããæ³šæç®¡çã®ã³ãŒããæžãå§ããé ã®ç§ã¯ãšã«ããåããã®ãäœãããšããäžå¿ã§ã³ãŒããæžããŠãããããæç¢ºãªæå³ãªã©ãªãç¶ãè¶³ãç¶ãè¶³ãã§æžããŠãããã¡ã«ã³ãŒããåºæ¥äžãã£ãŠãããããã¬ãã¥ãŒã§ã³ãŒãã®æå³ãèãããŠãããªããã®ãããªã³ãŒãã«ãªã£ãã®ããèªåã®èšèã§ããŸã説æã§ããã«ããŸããã Vue.js ãæžããŠãããã¡ã«ãã³ãŒããæžãå§ããåã«ãä»èªåã¯äœãïŒå®è£
ïŒããããã ã£ãããšäžåºŠé ã§æŽçããŠããæãåããããã«ãªããããããæžãã°æåŸ
ããåããå®è£
ã§ãããããšäºæž¬ããªããã³ãŒããæžããããã«ãªãããããããã£ãšã¬ãã¥ãŒãããã£ããšãã«ãã®ã³ãŒããæžããæå³ã説æã§ããããã«ãªã£ãæ°ãããŸããåœããåã®ããšã§ã¯ãããŸãããããŸãã§ããªãã£ãããšãã§ããããã«ãªã£ããšããããšã¯ãç§ã«ãšã£ãŠãšãŠã倧ããªå€åã§ããã äºæž¬ã§ããããã«ãªã£ã äžèšã®éããVue.js ãæžãããšã«æ®µã
æ
£ããŠãããšãäžåºŠé ã®äžã§æŽçããç¿æ
£ãã€ããŸããããã®äžã§ãããã®æžãæ¹ã¯åé·ã ãªããšããããã¯å
±éåããã»ãããã£ãããããªããªã©ãšæãããã«ãªããã³ãŒããèªã人ã«ãšã£ãŠèªã¿ãããã³ãŒããèªåãå®è£
ãããšãã«é ã®æŽçããããããããªãã£ããããã³ãŒããæžãããããæ®µã
æèããããã«ãªããŸããã ãããã£ãŠã©ãããåãããããã ããâŠïŒããšã²ãšã€ã²ãšã€ç¢ºãããªããã³ãŒããæžããŠããé ã«æ¯ã¹ããšãããŸãåãäºæ³ãããã£ãšãšã©ãŒãåºãã ãããšããäºæ³ãã©ã¡ããã§ããããã«ãªããéçºããããããªã£ãããã«æããŸãã ãšã©ãŒããã¡ããšèªãããã«ãªã£ã äºæ³ããªããæžããã³ãŒããå®è¡ããæã«ãšã©ãŒãåºããšããã£âŠããšãªããŸããã§ããããšã©ãŒã¯çŠããèœã¡çããŠããèªããšã解決ããããã®ãã³ããæžããŠãããäœãããããã®ã§ã¯ãªããšããããšãåŠã³ãŸããã äŸãã°ããããããšã©ãŒã§ãããš (倿°å) is not defined ããã¯ã (倿°å) ãªããŠå€æ°ãå®çŸ©ãããŠãªããïŒããšãããšã©ãŒãªã®ã§ããŸãã¿ã€ãã³ã°ãã¹ããªãããçããŸãã Object is possibly null ããã¯ã null ãããããªããªããžã§ã¯ãã«å¯Ÿããæäœã¯ã§ããªãããšãããšã©ãŒãªã®ã§ã null ãããªãããšãä¿èšŒããã°ãããã ãªããšã³ãŒããèŠçŽããŸãã JS ã®å匷ãå§ããã°ããã®é ã¯ããšã©ãŒãåºããšãã«çã£å
ã«ãšã©ãŒæãã³ããããŠæ€çŽ¢ããåããããªäºè±¡ãããã«å¯Ÿãã解決çããªãããæ¢ããŠããŸããããã©ãã®è¡ã§èµ·ããŠãããšã©ãŒãªã®ãããšã©ãŒæãããèªã¿ã debugger ã console.log() ãªã©ã䜿çšããŠãåŠçã®æµãã远ããªãããšã©ãŒã®åå ãæ¢ããŠããããšã解決ããããã®äžçªã®è¿éã ãšæ°ä»ããããšã§ãšã©ãŒæãèŠãŠãå·éã«å¯ŸåŠã§ããããã«ãªã£ããšæããŸãã ãŸãšã 泚æç®¡çç»é¢ãªãã¥ãŒã¢ã«ãããžã§ã¯ããå§åããŠããçŽ9ã¶æéãã²ãããã«ã³ãŒããæžãç¶ããŠããŸããããè©æžããããã³ããšã³ããšã³ãžãã¢ã«ãªã£ãã°ããã®é ã«æ¯ã¹ãŠèªåã¯äœãå°ãã§ãæé·ã§ããŠããã®ã ããããããã³ããšã³ããšã³ãžãã¢ãšããŠã®ä»äºããã£ããã§ããŠããã®ã ãããããšäžå®ã«ãªãããšãå€ã
ãããŸããã ããããããã³ããšã³ãããŒã ãçºè¶³ããŠããåŸã
ã«äººãå¢ããããŒã ã®ã¡ã³ããŒãç§ã®æãã³ãŒããäžå¯§ã«ã¬ãã¥ãŒããŠããããã質åãæ©ãã§ããããšãããã°ãã€ã§ãèããŠããããããã§èªåã®åŒ±ç¹ãæ¹åç¹ã«æ°ä»ããæéã¯ããã£ãŠãããããããŸããããåŸã
ã«ã§ããããšãå€ããªã£ããšå®æããŠããŸãã ãŸãããããžã§ã¯ãã¡ã³ããŒã§ããããã¯ãšã³ããšã³ãžãã¢ããã¶ã€ããŒãªã©ããããžã§ã¯ãã«é¢ãã人ãšåãç®ç·ã§çžè«äºãææ¡ãã§ããããã«ãªã£ãããšãèªåã®äžã§ã¯å€§ããªæé·ã§ããã ãããžã§ã¯ãã¡ã³ããŒã®äžå¡ãšããŠãããã³ããšã³ãæ
åœãšããŠãå®è£
ãã¿ãŒã³ãå€å²ã«ãããæ³šæç®¡çç»é¢ã®å®è£
ãå®éããããšãã§ããããã³ããšã³ããšã³ãžãã¢ãšããŠã®èªä¿¡ãã€ããŸãããæ¬¡åæºãããããžã§ã¯ãã§ãä»åã®åçãåŠãã ããšãçãããŠãéçºã楜ãã¿ãããšæããŸãïŒ ææ¥ã¯Corporate Engineeringããã£ãŠããå è³è°·ãããšåºç€Groupã®å·å³¶ããã§ãïŒã楜ãã¿ã«ãïŒ
ãã®èšäºã¯ BASE Advent Calendar 2019 ã®2æ¥ç®ã®èšäºã§ã devblog.thebase.in SREã® ngsw ã§ãã BASEã¯AWSãæ¡çšããŠããããã®äžã§ãEC2ã«å€§ããäŸåããéšåããããŸããEC2ã«ãããŠã¯ä»¥äžã®å¶çŽããããŸãã DNS ã®å¶é VPC ã§ã® DNS ã®äœ¿çš - Amazon Virtual Private Cloud DNS ã®å¶é å Amazon EC2 ã€ã³ã¹ã¿ã³ã¹ã¯ Amazon ãæäŸãã DNS ãµãŒããŒãžéä¿¡ã§ãããã±ããæ°ã ãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ã€ã¹ãããæå€§ 1024 ãã±ãã/ç§ã«å¶éããŠããŸãã ãã®å¶éãå¢ããããšã¯ã§ããŸããã AWSã®ãããŒãžããµãŒãã¹ã¯ãšã³ããã€ã³ãã®æäŸã«ãªãããã®ãšã³ããã€ã³ããžã®ã¢ã¯ã»ã¹ã«åå解決ã¯å¿
èŠãšãªããŸããBASEå
šäœãžã®ã¢ã¯ã»ã¹æ°ã¯å¢å åŸåã«ãããŸãã®ã§ãåå解決詊è¡åæ°ãåããå¢å åŸåã«ãããšèããŠè¯ãã§ãããã ãèããŠè¯ãã§ãããããšããã®ã¯å¹³åžžæã«ã¯ãã®å¶çŽã¯é¡åšåããåé¡èŠãããªãããã§ãã æŽçãããšããã§ã®èª²é¡ã¯ çªçºçãªã¢ã¯ã»ã¹å¢ã«ãèãããååè§£æ±ºæ¹æ³ãæã¡ãŸããã ã¢ã¯ã»ã¹å¢æã®ã¹ã«ãŒããããåå解決å¶çŽã§é æã¡ã«ãªããªãããã«ããŸããã ãšããããšã«ãªããŸãã AWS ã«ãããåå解決å¶çŽåé¿ã®ãã¹ããã©ã¯ãã£ã¹ EC2 Linux ã§ã® DNS 解決ã®å€±æãåé¿ãã å®éã®å¯Ÿå¿æ¹æ³ã¯äžèšã®èšäºããã¹ãŠãšãã£ãŠãéèšã§ã¯ãããŸãããããããããããã®ãŸãŸé©çšã§ããããã§ããããŸããããã®å·®åãè¡éãããããŠãäŒãã§ããã幞ãã§ãã ããdnsmasqã£ãŠãªã«ïŒ dnsmasq - ArchWiki å
·äœçã«ã¯EC2ã€ã³ã¹ã¿ã³ã¹å
éšã«DNSãã£ãã·ã¥ãµãŒããæã€ããšãã§ããŸããç°¡æœã«ç³ãäžããã° dnsmasqãèµ·åãã 127.0.0.1:53 ã§å¿çãããããšã«ããåœè©²ã®åå解決å¶çŽãåé¿ã§ãããšããããšã§ãã 念ã®çºåé¿ã§ããªããããããªãç¶æ³ã(æšæž¬ã§ã¯ãããŸãã)äžããŠãããŸãã åå¥ã®FQDN 1024åè¶
ã®ç§éåå解決 IPv6åå解決 ã æå¹ãªç¶æ
ã§åå¥ã®FQDN 512åè¶
ã®ç§éåå解決(éœåºŠAã¬ã³ãŒããšAAAAã¬ã³ãŒãã解決ããããšãã) ä»åãäŒãããæé ã§ã¯ dnsmasq ã¯IPv6ã«é¢ããŠåãåããããªãããšã確èªããŸããã äž»é¡ã¯ãdnsmasq ãAWSãªãŸã«ãåãåãããç§é1024åè¶
è¡ã£ãŠããŸãäºèªäœã¯äŸç¶ãšããŠå¶çŽãããŠãããã«ãªããŸããã§ãããCNAMEã¬ã³ãŒãã®éœåºŠåãåãããTXTã¬ã³ãŒãã® include èšè¿°ãªã©ãé¢ãã£ãŠããåé¡ãšèããŸãã dnsmasq èšå®å
容 以äžã«ã©ã®ããã«èšå®ããããæžããŸããã èµ·åããã»ã¹å dnsmasq å®è¡User dnsmasq dnsmasq UID 5353 dnsmasq GID 5353 dnsmasqèšå®ãã¡ã€ã« /etc/dnsmasq.conf æå€§ãã£ãã·ã¥TTL 2 æå°ãã£ãã·ã¥TTL 1 ãã£ãã·ã¥ã¬ã³ãŒãæ° 500 ãã¬ãã£ããã£ãã·ã¥TTL 60 dnsmasqçšresolvãã¡ã€ã« /etc/resolv.dnsmasq ãªãŸã«ãIP 169.254.169.253 VPC ã§ã® DNS ã®äœ¿çš - Amazon Virtual Private Cloud dhclientèšå®ãã¡ã€ã« /etc/dhcp/dhclient.conf timeout 300 retry 60 dhclientãèšå®ãããªãŸã«ãIP 127.0.0.1, 169.254.169.253 supersede domain-name-servers 以äžã®èгç¹ãæã£ãŠããŸãã UID / GID ã¯ãããããããã®ã dnsmasqèªèº«ã®ãã£ãã·ã¥æéãããããã«é·ãããªã dnsmasqããã»ã¹ãæ»ãã å Žåã§ãã£ãŠãAWSå€éšãªãŸã«ããããã¯ã¢ãããšããŠå©çšããªã UID / GIDã«ã€ã㊠åèªèº«ãUID / GID ã¯æç€ºããŠãããããšèããã®ã§æç€ºããæ¬¡ç¬¬ã§ããããããã§çŸè¡ç°å¢é©çšæã«åé¡ã眮ããŸããã ãµãŒãæ§æã¯ chef ã§ç®¡çãããŠããã®ã§ãããdnsmasqå°å
¥ä»¥åã«èšå®ãããæ¢åãŠãŒã¶ã«ãããŠã¯ UID / GID ãæç€ºãããŠããªãç¶æ³ã§ããã dnsmasq ã¯ãµãŒãèšå®ã®æ©ã段éã§å
¥ããŠããã®ãããã ãããšèããããããã®äžçªã«ã€ã³ã¹ããŒã«ããŠèšå®ããããã¬ã·ããæžãæããã®ã§ãããçŸåšäœ¿çšããŠããOSã®ä»æ§ããããUID / GIDãæç€ºæå®ãããšããã以åŸã«äœæãããŠãŒã¶ãã°ã«ãŒãã¯æç€ºæå®IDããã®ã€ã³ã¯ãªã¡ã³ãã«ãªãããšããããšãèµ·ããŠããŸããŸãããã€ãŸã hoge 5354:5354 fuga 5355:5355 ã®ãããªåœ¢ã§ãã ããã§ã¯æ¢åã®EC2ãšæ°èŠã®EC2ã§å·®åãã§ãŠããŸããŸããæ§ç¯ææã«ãã£ãŠãµãŒãã®ç¶æ³ãéãããšã«ãªã£ãŠããŸãã®ã¯ããŸãããæ°æã¡ã§ã¯ãããŸããã®ã§ãã¬ã·ãèªäœãèŠçŽããŠãã¹ãŠã®ãŠãŒã¶ã«UID / GIDãæèšãããã倿ŽããŸããã dnsmasqèªèº«ã®ãã£ãã·ã¥æéã«ã€ã㊠ããã£ãã·ã¥æéãããããã«é·ãããªãããšããããšã«ã€ããŠã§ããä»åã®dnsmasqå°å
¥ç®çã¯ãåå解決å¶éãšããå¶çŽã®è§£æ±ºãã§ãããã§ãã®ã§ã1ç§éã ããã£ãã·ã¥ã§ããã°ããããã以å€ã®å¯äœçšã極åæé€ããããšããã¹ã¿ã³ã¹ã§ããŸããããã£ãã·ã¥æéãé·ããããšããŠãããããã¯TTLãªããã¿ãŠdnsmasqã¯ãããªã«åäœããŠããããšä¿¡ããŠã¯ããã®ã§ãããæ€èšŒå·¥æ°ãæå°ã«ããããã«çãå€ãèšå®ããŠããŸãã æžå¿µãå
·äœçã«ç³ãäžãããšãdnsmasqã®ãã£ãã·ã¥æéãé·ãããããšã§ãAWSãããŒãžãã»ãµãŒãã¹ããªãŒãã¹ã±ãŒã«ããå Žåã®ALIASã¬ã³ãŒããç¡èŠããæéãé·ããªãã®ã§ã¯ãªãããã§ããã dnsmasqããã»ã¹ãæ»ãã å Žåã«ã€ããŠ æ¬æ¥ã§ããã°ããã¯ã¢ããã®DNSãå€éšã«çšæããããã®ã§ãããä»åã¯ãã®å¯Ÿå¿ãè¡ã£ãŠããŸãããçç±ã¯ãVPCãªãã·ã§ã³ã«ãããã©ã€ããŒããã¹ããŸãŒã³ã«äŸåããŠããããããšãªããŸããå€éšã®DNSã¯ãã®æ
å ±ãç¥ãåŸãŸããã®ã§ãåãåãããã§ãããšããã§æåŸ
ããåå解決ã¯è¡ãããæ£åžžã«åäœããŸããã å
ã«ãæžããŸãããä»åã®ç®çã¯ãåå解決å¶éãšããå¶çŽã®è§£æ±ºãã«çµã£ãŠããŸãã®ã§ãå®ç§ãç®æãã®ã§ã¯ãªãããããããã®ããªãã ãå°ãªãå·¥æ°ã§ããšããå²ãåããããŠããŸãã ãããŸãæ©èœããŠããã®ãã確ãããã å°ãªããšãAWSãªãŸã«ããžã®åãåããåæ°ãæ¿æžããŠããã確ãããããã°ããããšæããŸããå㯠tcpdump ã§ç¢ºèªããŸããã #!/bin/bash while : do dig +short 01endpoint.example.com > /dev/null 2 >& 1 & dig +short 02endpoint.example.com > /dev/null 2 >& 1 & dig +short 03endpoint.example.com > /dev/null 2 >& 1 & dig +short 04endpoint.example.com > /dev/null 2 >& 1 & done äžèšã¹ã¯ãªãã dig.sh çšåºŠã§ã广ã¯ã¿ãŠãšããŸããã chmod +x dig.sh # dnsmasqå°å
¥å ./dig.sh tcpdump -s 0 -i any port 53 -w dnsmasq_before.pcap # dnsmasqå°å
¥åŸ ./dig.sh tcpdump -s 0 -i any port 53 -w dnsmasq_after.pcap ããã§ååŸã§ãã *.pcap ã wireshark ã Cocoa Packet Analyzer ã§æ¯èŒããŠã¿ãŸãããã dnsmasq before 172.31.0.2 ãAWSãªãŸã«ã éœåºŠåãåãããçºçããŠããããšãããã dnsmasq after 169.254.169.253 ãAWSãªãŸã«ã 127.0.0.1 DOMAIN ã dnsmasq ãã®ç»åã§ã¯AWSãªãŸã«ããååšããªãçšåºŠã«dnsmasqã§å®çµããŠããããšãããã 察å¿ãçµã㊠åè·ãAWSãå©çšããŠããã®ã§ãããdnsmasqã§ã¯ãªãå€éšDNSããªãŸã«ãæå®ãã察å¿ã§ããã仿ãã°ãdnsmasqã®æ©æµã§ãããã¬ã€ãã³ã·è»œæžããææŸããŠããã®ã ãªãšããæããŸããä»åã¯æ¡çšäŸ(AWSãã¹ããã©ã¯ãã£ã¹ã ããåœç¶ãªã®ã§ãã)ã§ãããSREãšããç«å Žãèãããšãã£ãšããããã®äžæ¡çšäŸãæããªããŠã¯ãªããªããªãšèããŸãã ãææ®µãšç®çãåãéãããªããšããèšèããããŸãããã®å察åŽã«ã¯ãææ®µã®æ°ãšãã®è³ªããããäœãç®çã«ã§ããããå¶çŽããŠããããšãå人çã«ã¯èããŠããŸãã®ã§ãæè¡è·ãšããŠãããããªããŒã«/ãœãããŠã§ã¢ãè§Šã£ãŠææ°ãã®ãã®ãå¢ãããŠããããããã®çµéšã§ãã£ãŠãããã¯ãã«è²¢ç®ããŠãããããšãããããŠèããæ¬¡ç¬¬ã§ãã
ãã®èšäºã¯ BASE Advent Calendar 2019 ã®1æ¥ç®ã®èšäºã§ãã devblog.thebase.in ããã«ã¡ã¯ããµããã§ãã 11/27æ¥ã«ãFukuoka Growth Nextã§éå¬ãããFGN Campã«ç»å£ããŠããŸãããåãšCAMPFIREã®CTOã§ããäžå·ãããç»å£ããFGNã«å
¥å±
ããã¹ã¿ãŒãã¢ããã§ããæ ªåŒäŒç€Ÿã¯ã¢ã³ã ã®äžéãããšãæ ªåŒäŒç€Ÿãã€ãã®å°ç¥ããã®ãæ©ã¿ãèããšãã圢åŒã®ããã«ãã£ã¹ã«ãã·ã§ã³ã§ããã growth-next.com ãã®äžã®è³ªåã§ãããšã³ãžãã¢ã®æ¡çšã¯äººç©éèŠïŒã¹ãã«éèŠïŒããšãã質åããããŸããã®ã§ããã®èšäºã§è§ŠããŠã¿ãããšæããŸãã ãããã人éã¯ã¢ãããŒã·ã§ã³ã§åãçãç©ã ãšæããŸãããšãããé è³åŽåã§ããããã°ã©ãã³ã°ã«ã€ããŠã¯åµé æ§ãšã»ããã§åãããšãå¿
èŠã§ãã ã€ã³ã¿ãŒããã以åãããã°ã©ãã³ã°ãä»äºã«ãã人ã®ä»äºããæ
å ±åŠçããäž»æµã ã£ãæä»£ã«ãããããã°ã©ãã³ã°ã®äœæ¥ã¯ãè£œé æ¥ã®ã¡ã¿ãã¡ã§èšããã«ãŒã«ã©ãŒçãªè·çš®ã ã£ãã®ã§ã¯ãªãããšæããšããããããŸãããŸã ã³ã³ãã¥ãŒã¿ã®åŠçé床ãé
ããã¡ã¢ãªã®éãå°ãªãããå®å®çšŒåã®ããã«ã¹ãã«ãèŠãæä»£ãæŽã«HTMLã®ãããªãšã¬ã¬ã³ããªæ
å ±äŒéæè¡ã¯ãªããã³ã³ãã¥ãŒã¿ãã¬ã³ããªãŒãªãšã¬ã¬ã³ããªããžãã¯ãšViewãããã°ã©ããäœããªããšãããªãã£ãããã§ããããã®é ã¯ä»æ§ãèãããšèšãè¡çºããããå§åçã«ããã°ã©ãã³ã°ã®è² è·ãé«ãæä»£ã ã£ãã®ã§ãã³ãŒããæžã人ãã¡ã¯ãã¡ãããšåãããã°ã©ã ãäœãããšã«éäžããããåŸãªãããããè£œé æ¥çãªã¡ã¿ãã¡ã§ãèšèšå·¥çšãšããã°ã©ã å·¥çšã®åé¢ãæ±ãããŠããã®ã ãšèããããŸãã ãã®åŸãWindowsããã°ã©ãã³ã°ã§RADããŒã«ãåºãŠããŠGUIããã°ã©ãã³ã°ãç°¡åã«ãªãããã®åŸãããã«HTMLãCSSãªã©ã®Webæè¡ãåºãŠããŠãããã³ããšã³ãã®ViewãšãµãŒããµã€ãã®ããžãã¯ã¯ããã®å°éè·æ¯ã®è·èœãšããŠåé¢ãããããšã«ãªããŸãããWebã®æè¡ã¯å°ã
ãã³ãŒãããã¹ã£ãŠããã©ãŠã¶ãèœã¡ããªããŠããšã¯ãããŸããããã©ã€ã¢ã³ããšã©ãŒã®ãããããšè¡šçŸåãå¢ããããšã§ç«¶äºåçãåãããŠãŒã¶ãŒã«ãšã£ãŠã¯è¡šçŸåè±ãã§äœ¿ããããæ©èœã享åãããã£ããã«ãªããŸãã ãããªããšã€ã³ã¿ãŒãããæä»£ã®ãããã¯ãã¯ãã³ãŒããéããŠäœãæã®åµé æ§ã衚çŸããèå°ãšããŠã®èŠçŽ ãé«ãŸããŸããçµæãç«¶äºåã®æºæ³ãšããŠäœãæã®ããžã§ã³ãéèŠããããã詳现èšèšãšã³ãŒããåæã«æžãããããšãå¢ããããçš®ã®å³èåãšããŠã®ããã°ã©ãã³ã°ãéèŠãªæä»£ã«ãªããŸãããç¹ã«ã¹ã¿ãŒãã¢ããã®åæã§ããã°ããã»ã©ããããã¯ããªãŒããŒã§ããçµå¶è
ãæåã«ã³ãŒããæžãããšãæ±ãããããªã©ããããã¯ãããŒã±ãããã£ãããå®çŸããŠãŒã¶ã«åºãããããã¯ããäœããããšã®æ¹ã倧åã«ãªããŸãã ããã¯ãããããŠãŒã¶äœéš = ãŠãŒã¶ãšã¯ã¹ããªãšã³ã¹ãéèŠã§ãããšããããšã瀺ããŠããŸãã ããããæä»£ã«ãããŠã¯ããŠãŒã¶ã®ããšãæèããŠããŠãŒã¶ããã«åãã§ããã ãããããã¯ãã¥ãããããžãã£ãã«é²ããªããŠã¯ãããŸããã ããŠããããŸã§æè¡åãšããèšèãäžèšãã§ãŠããªãããšã«æ°ãä»ããŸãããïŒ Webãæ¯ããããã¯ãšã³ãã®æè¡ãããã³ããšã³ãã®æè¡ã¯ãšãŠãéèŠã§ããæè¡ã®ç§»ãå€ãããæ¿ãããç¶ç¶ããWebãµãŒãã¹ã«ãšã£ãŠã¯ã€ã³ã¿ãŒããããã¬ã³ãã®å€åã«å¯ŸããŠåžžã«æåç·ã§ããããã«ã¯æè¡åãå¿
èŠã§ãã ãšãããããã®æè¡åã§æ¯ããããWebã®ãããã¯ãã¯ããããããŠãŒã¶äœéšãå®çŸããŠãªããŒã§ããã©ããªã«å®å®ããã·ã¹ãã ããŠãŒã¶ããã䜿ã£ãŠãã ãããªããšååšããæå³ããããŸããããããŠããã®ãããã¯ãã®ãŠãŒã¶äœéšã¯ããã®äŒç€Ÿã®æåãææ³ã«ãã£ãŠçã¿åºãããŸãããã®äŒç€Ÿã®ã«ã«ãã£ãŒããããã¯ãææ³ã«å
±æããè³åããäžã§ãé«åºŠãªæè¡ã䜿ã£ãŠãããã¯ããæ¯ããããã§ãã ã€ãŸãã人ç©éèŠããã¹ãã«éèŠãããšãããšçç£æ§ã¯æãç®ã«ãªããŸãã ã¢ãŠããããã®çç£æ§ = ãã®äººãããžãã£ãã«åããããš x ã¹ãã« ã¢ãŠãããããå®çŸããããã®ã¹ãã«ã¬ãã«ã¯å°éé åã«ãã£ãŠå€ããã®ã§ãã¹ãã«ã¯åœ¹å²ãåžããã©ã¡ãŒã¿ã ãšæã£ãŠãããã®ãè¯ããšæããŸããããã«å¯ŸããŠããã®äººã®è³å
ç©è³ªãããžãã£ãã«ãªã£ãŠããªããã°ããã®äººãã©ããªã«é«ãã¹ãã«ãæã£ãŠããŠããããã¢ãŠããããã«ã¯æµãŸããŸããã ãŸããœãŒã¹ã³ãŒããçã¿åºãããã®åŽåçç£æ§ãšããèŠç¹ã§ã¯ãç¥èåŽåè
ãšãã人éã®ã¹ããã¯ã«å¯ŸããŠ100%ãŸã§ãéçã§ããã€ãŸããæéã®éçºãå®çŸããããã«ã¯ãè³å
ã®éäžåãšçšŒåçã100%ã«è¿ã¥ããããšãçæ³ã§ãããã®ããã«ããäœããã®ã«å¯ŸããŠãã¬ãã£ãç©è³ªãè³å
ã«åæ³ãããŠããŸãäœèšãªæèã«éªéãããªãããšã倧åæã«ãªããšæããŸãã ããæ
ã«ããšã³ãžãã¢ãªã³ã°ãããŒãžã£ãããããããã¯ããããŒãžã£ããã£ã¬ã¯ã¿ãŒã¯ãåã¡ã³ããŒã楜ããããžãã£ãã«åãããããªç°å¢ã€ãããããããã¯ãã®æ¹åæ§ã瀺ããŠããå¿
èŠããããŸãããããã«å
±æå¯èœãªäººæã ãããããã¢ãŠãããããçã¿åºããšããããšã«ãªããŸãã 峿 Œã§çé¢ç®ãªäººã¯ãä»äºãã«ãããŠãã¢ãããŒã·ã§ã³ããªã©ãšãããã©ã¡ãŒã¿ãæã¡åºãã®ã¯ããããããšãã人ãããã£ãããã®ã§ãããæã
ã®ãããã¯ãããŠãŒã¶äœéšãå¿åããéãããŠãŒã¶ããã«å¯ãæ·»ã£ãŠãããã¯ããäœããªããã°ãšã©ãŒåŠçäžã€åã£ãŠãã€ã±ãŠãªãå®è£
ã«ãªããšæããŸããããã¯ãããžãã£ããªã¢ãããŒã·ã§ã³ã¯ç¡èŠã§ããªãããªãšæããŸãã ãããããã«æåŸ
ã§ããªãå Žåã¯ããšã©ãŒåŠçäžã€ãŸã§èšèšã§ã¬ãã¬ãã«åºãããããªãããããããŠã©ãŒã¿ãŒãã©ãŒã«åœ¢åŒã§éçºããããåŸãªããªãããã§ãããWebã®ãšã³ãžãã¢ããããå«ãã®ã¯çæ§ã埡åç¥ã®éããã¢ãžã£ã€ã«ãšãæ§ã
ãªéçºææ³ã¯ææ¡ãããŠãããšæããŸããããã®äžå°ã«ãã¡ã³ããŒã®é«ãã¢ãããŒã·ã§ã³ãçã¿åºãããšã倧åæã§ãããšããããšã¯ãããŸãèªãããŠããŸããã ãªã®ã§ãåé ã®è³ªåã®åçããããšã ããã¡ããã¹ãã«ã¯å¿
èŠã ãããããããå§åçã«äººç©ã®æ¹ãéèŠãäœãéèŠããšãããšäœããã®ãæã
ã®ãããã¯ãã®èãæ¹ã«å¯Ÿããã«ã«ãã£ãŒãã£ãããããéèŠã ãšããåçã«ãªããšæããŸããæã
ã®äžã§ã¯ããã€ã³ã¿ãŒãããã奜ãããšããã®ã¯ïŒã€ã®æ¡çšåºæºã«ãªã£ãŠããŸããã€ã³ã¿ãŒãããã«ã€ãªãããããã¯ãã«å¯Ÿããé è©£ãæ·±ãããããããŠãŒã¶ã«å¯ŸããŠãã³ã³ãã¥ãŒã¿ã«å¯ŸããŠããã¹ãã¿ãªãã£ã®é«ããããã¯ããäœãããšãã§ããçµæãšããŠã®å·¥æ°æé©åãææ»ãã®å°ãªãã«ã€ãªããããã§ãã
ãã®èšäºã¯ BASE Advent Calendar 2019 ã®1æ¥ç®ã®èšäºã§ãã devblog.thebase.in ããã«ã¡ã¯ãBASE BANKæ ªåŒäŒç€Ÿã§ãããã¯ããããŒãžã£ãŒãããŠããæ³å·ïŒ @gimupop ïŒã§ãã çŽè¿ã§ã¯ã峿ã«è³é調éãã§ããéèãµãŒãã¹ã YELL BANKïŒãšãŒã«ãã³ã¯ïŒ ããšãããããã¯ãã®ã°ããŒã¹æœçã«åãçµãã§ããŸãã ä»åã¯ã¢ããã³ãã«ã¬ã³ããŒãšããããšã§ãä»å¹Žåå人ã«ãšã£ãŠäžçªå€§ããªå€åã§ãã£ãããµãŒããŒãµã€ããšã³ãžãã¢ãããããã¯ããããŒãžã£ãŒã«ãžã§ããã§ã³ãžããããšã顿ã«èšäºãæžããŸãã ãããã¯ããããŒãžã£ãŒã«ãªã£ã顿« åã¯ããšããšæ°åæããããµãŒããŒãµã€ããšã³ãžãã¢ãšããŠåããŠããŸãããäŒç€Ÿã®é°å²æ°ã¯ããããéã£ãŠããŠãã©ã¡ãããšãããšãšã³ãžãã¢ã®åœ¹å²ãéå®çãªäŒç€Ÿã§åããŠããŸãããBASEå
¥ç€ŸåŸããµãŒããŒãµã€ããšã³ãžãã¢ãšããŠå
¥ç€ŸãåããŠããŸããããBASEã¯ä»ãŸã§ã®äŒç€Ÿãšã¯éããŸããã äžäººã®ãšã³ãžãã¢ãèŠãç¯å²ãæ¯èŒçåºãããš ãããã¯ãã®æé·ã«ãããæ
ç±ã匷ãããš äžèš2ç¹ãç¹ã«æããéãã§ãããã®éãã¯åã®çãéãã®ããšã§ããšãŠãæ°æã¡ããåããŸããããã®ããã«åããã¡ã«ããã匷ããããã¯ãã®æé·ã«ã³ãããããããšèããããã«ãªããŸãããä»ãæºãã£ãŠãããããã¯ãã§ãããYELL BANKãã®æ°èŠéçºã§ã¯ããããã¯ãã®ããžã§ã³ã®éšåãæã€äŒç»æ
åœè
ãšãšãã«ãããå
·äœåãã圹å²ããã£ãŠåããŠããŸããã仿§äœæãèšèšãå®è£
ãQAãŸã§ç¹å®ã®åœ¹å²ã«åºå·ãããã¡ã³ããŒãšååããªããéçºãé²ããŠãããŸããããããŠãªãªãŒã¹åŸããããããªç·ãç¹ããã2019幎7æãããæ£åŒã«ãããã¯ããããŒãžã£ãŒã«å°±ä»»ããŸããã ãããã¯ããããŒãžã£ãŒãšããŠè©Šè¡é¯èª€ããäžã§ã®æ°ä»ã ãããã¯ããããŒãžã£ãŒã¯ããããã¯ãã®è²¬ä»»è
ãšããŠãŸããããèŠããã 圹è·åãæããã«ãªã£ãã®ã§ãåããããã¯ãã«è²¬ä»»ãæã€ããšãæç¢ºã«ãªããä»ã®ããŒã ããæ
å ±ãéãŸãããããªããŸããããŸãä»ã®ããŒã ã«ååããé¡ãããéãéåæããªããªããã¹ã ãŒãºã«è©±ãé²ãããã«ãªããŸãããè©æžã§ãŸããããã®èŠããæ¹ãå€ãããšããçµéšã§ããã ãããã¯ããããŒãžã£ãŒã¯ãããŒã ãäœã åããšã³ãžãã¢ãããããã¯ããããŒãžã£ãŒã«ãªãããšã§ãåœç¶ãªãããšã³ãžãã¢ã®æ°ãæžããŸãããå®è³ª2è¶³ã®ãããç¶æ
ã«ãªã£ãŠããŸããéçºã«ãããããå·¥æ°ã¯èœã¡ãæ°ãã«æåŸ
ããã圹å²ã«åŸäºããã®ã«ãæéãããããŸããã ãã®ç¶æ³ãæ¹åããææ®µã®äžã€ããŠãäººã®æ¡çšããããŸããæ¡çšæŽ»åã®äžã§è¯ãçžããããçŸåšã§ã¯ãšã³ãžãã¢ã®ã¡ã³ããŒã1åå¢ããŸãããäžæçã«èŠããç¶æ³ã«ã¯ãªããŸããããçµæãšããŠä»¥åãããæŽã«åŒ·ãããŒã ã«ãªã£ãŠãã宿ããããŸãããããã¯ãã®æªæ¥ãæãäžã§ãããŒã ã®æªæ¥ãæãããšãå¿
èŠã§ãããšæ°ãä»ããŸããã ãããã¯ããããŒãžã£ãŒã¯ããããã¯ãã®æé·æ®µéã®æå
端ã«ãã ãããã¯ãã®æé·æ®µéã®å€åã«æ°ãã€ãã®ã«é
ããŠãéçºã«åæ»æãããããŠããŸããŸãããèªåã®åœ¹å²ãå€ããã®ãšè¿ãææã§ããããã¯ãã®æ®µéã«ãå€åããããŸãããæ°èŠã®æ©èœéçºã®ãã§ãŒãºããããããã¯ãã°ããŒã¹ã®ãã§ãŒãºãžã®å€åã§ãã ãã®ãã§ãŒãºã§ã¯ãéé²ã«æ©èœéçºãããã®ã§ã¯ãªããç¶æ³ãæãããšããããšãå¿
èŠã§ããããšã³ãžãã¢ãšããŠé¢ããã®ã§ããã°ããããã¯ã段éãã©ãã§ãããå®çŸãããæ©èœãç®ã®åã«çŸããŠããããã©ã®ããã«å®çŸããããšããéšåã«éäžããã°åé¡ãããŸããã§ãããããããããã¯ããããŒãžã£ãŒã¯ããããã¯ãç¶æ³ã®å€åãçã£å
ã«æããããæ¹ãå€åãããªããæœçãèããŠããããã¯ãã®æé·ãåŒã£åŒµã£ãŠãããªããŠã¯ãªããŸããã èªåã®æ±ºæãããããã¯ãã®æé·ã¹ããŒãã«æ·±ãçµã³ã€ããŠããããšã«æ°ãä»ããŸããã ãããã¯ããããŒãžã£ã¯ãHowã«ããéããªã ãšã³ãžãã¢ãšããŠåããŠãããã£ãªã¢ã¯ããšã³ãžãã¢ã¡ã³ããŒãšã®ã³ãã¥ãã±ãŒã·ã§ã³ã®åããããããæ©èœã®åæšéžæã®å€æããSQLãæžããçãããã¹ããã³ã°ãã€ã³ãã§ãããããå
·äœçã«ã©ãäœãããšããããšãèãããããšã決æãé
ããããšã«ããªãããå®è£
ã®å®¹æãçãèããããæ©èœã®å
容èªäœã«ã圱é¿ããŠããŸããäœããããããšããèŠæ±ãæç¢ºã«ããŠããã®ä»ã¯èããããä»ã®ã¡ã³ããŒãšçžè«ããªããé²ããã¹ããšããããšã«æ°ãä»ããŸããã ãããã¯ããããŒãžã£ãŒã¯ããªãºã ãäœã ãããã¯ãéçºã¯ããšãã«ãã³ããªåããŸããç¹ã«ãããžã§ã¯ããé·æåããã»ã©ãããããã°ããŒã¹ãã§ãŒãºã«ãããŠã¯ãã³ããªåããã¡ã§ããããããå Žåã«ãªãºã ãäœãåºãããšãããããã¯ããããŒãžã£ãŒã®éèŠãªä»äºã ãšæããŸããã æªæ¥ã®èšç»ãç«ãŠãŠãçŸåšãã£ãŠããããšãšæªæ¥ãšã®ã€ãªããã宿çã«æç¢ºã«ããããš æ¥ã
ã®ç®æšãç«ãŠãŠããããç®ã«èŠãã圢ã«ããŠå°ããªéææãåºããŠããããš äžèšã®ãããªããšãæ°ã«ããªãããããã¯ãéçºãäž»å°ããŠãããšãæ¯èŒçãã¬ãã·ã¥ãªæ°æã¡ã§ããŒã ã課é¡ã«åãçµããããšã«æ°ãä»ããŸããã ãããã¯ããããŒãžã£ãŒã¯ããããã¯ãã®ããšãèãç¶ãæªæ¥ãèŠã æ¥å¹ŽåºŠã®äºæ¥èšç»ãäœãäžã§ããããã¯ããããŒãžã£ãŒã¯ãããæªæ¥ãèŠãªããã°ãªããªããšããããšãæèããŸããããã®éã®æèã®æµãã®äžã§ãæªæ¥ã®ããžã§ã³ãäœãã«ã¯ãéå»ã®ããŒã¿ãšçŸç¶ãããæ·±ãç¥ããªãã°ãããªããšããããšã«æ°ãä»ããŸãããããæ·±ã誰ããããããã¯ãã®ããšãèããã®ããæªæ¥ãäœããããã¯ããããŒãžã£ãŒã®ä»äºã§ãããšããããšã«æ°ãä»ããŸããã ä»åŸ å幎é詊è¡é¯èª€ããäžã§ããããã ãã®æ°ä»ãããããŸããããã æ°ä»ããåŸãããšãä»äºãªã®ã§ã¯ãªããé©åãªã¢ãŠãããããåºãç¶ããããšãå¿
èŠã§ãããããã®æ°ä»ããæŽ»ããã€ã€ãåžžã«ãŒãããŒã¹ã§åŒãç¶ããããã¯ããããŒãžã£ãŒãšããŠãããŒã ã§ãããã¯ããæé·ãããŠãããŸãã
ãã®èšäºã¯ BASE Advent Calendar 2019 ã®1æ¥ç®ã®èšäºã§ãã devblog.thebase.in ããã«ã¡ã¯ãã¯ãããŸããŠã Product Dev Divisionã§ãšã³ãžãã¢ãªã³ã°ãããŒãžã£ãŒãããŠããå±±åŽãšç³ããŸãã BASEã«å
¥ç€ŸããŠ1幎åã»ã©ã«ãªããŸããå
¥ç€ŸåŸã¯Webã¢ããªã±ãŒã·ã§ã³ãšã³ãžãã¢ãšããŠEã³ããŒã¹ãã©ãããã©ãŒã ãBASEïŒãã€ã¹ïŒãã®ããã¯ãšã³ãéçºãããåããPJã®éçºãã£ã¬ã¯ã·ã§ã³ãããŒã äœãã»çµç¹äœãã«åãçµãã§ããŸããã ç§ããšã§ãããä»å¹Žã®6æã«ç¬¬äžåãçãŸããŸããããããŠåã®èªçã«åãããŠ2ã¶æåã®è²äŒãååŸããŸãããçãæéã§ããããç¶èŠªãšããŠãããšã³ãžãã¢ïŒãããŒãžã£ãŒãšããŠããåŠã³ãå€ãæéã§ããããã®ãšãã®äœéšã誰ãã®åœ¹ã«ç«ãŠã°ãšæããè²äŒååŸã«ã€ããŠæžãããšã«ããŸããã ç§ã®è²äŒååŸèš BASEã«ãããç·æ§ã®è²äŒååŸã«ã€ã㊠BASEã«ãããŠãç·æ§ç€Ÿå¡ã§åããŠè²äŒãååŸããã®ã¯çŸåšã®ç§ã®äžåžã§ããèå°ã§ããã èå°ãè²äŒãååŸãããšãã®äœéšã¯ãã¡ãã«ãŸãšãŸã£ãŠããŸãã ãæ¥æ¬ã®ããã«ãè²äŒã®ã¹ã¹ã¡ïœç§ã®è²äŒäœéšèšïœã åœæèå°ã¯ãã¡ãšã³ãžãã¢ã§ãã£ããããä»åãç§ã¯ç·æ§ãã€ç®¡çè·ãšããŠã¯åããŠè²äŒãååŸããŸããã ãªãè²äŒãåãããšæã£ãã åçåŽåçã®èª¿æ» ã«ãããšãç·æ§ã®æ£ç€Ÿå¡ãè²äŒãååŸããªãã£ãçç±ã®TOP3ã¯ä»¥äžã§ãã è·å Žãè²å
äŒæ¥å¶åºŠãååŸãã¥ããé°å²æ°ã ã£ããã äŒç€Ÿã§è²å
äŒæ¥å¶åºŠãæŽåãããŠããªãã£ããã æ®æ¥ãå€ãçãæ¥åãç¹å¿ã§ãã£ããã ïŒ å¹³æ29幎ç å°åå瀟äŒå¯Ÿççœæž 第2ç« ç¬¬4ç¯ ããïŒ èŠãŠããã ããšãããéããè·å Žç°å¢ã«é¢ããçç±ãå€ãæããããŠããŸãã ç§èªèº«ãè²äŒååŸã決æããå㯠è²äŒååŸãèšãåºãããã©ãããåå¿ãè¿ã£ãŠããã ãã å¿ããã®ã«æ°ã¶æåäœã§è²äŒãååŸããã®ã¯æ°ãåŒãã èªåãããªãéã«åé¡ãèµ·ãããã©ãããã æ°ã¶æãäŒãã ãçŸå Žæã倱ã£ãŠããŸã ããŒã ã«JOINããã°ããã®ã¡ã³ããŒã«ãšã£ãŠäžåžãããã«ããªããªããããªç°å¢ã£ãŠã©ããªãã ãã ãšãã£ãããšãæ©ãã§ããŸããã ååŸã決æãããã£ããã¯äžè¿°ãã èå°ã®èšäº ã§ããã è²äŒæéäžã®1.5ã¶æã¯åšã®æé·ãéè¿ã§èŠãããšãã§ããç§ã®äººçã«ãããŠç涯å¿ããªãã§ãããããããã®ãªãæ¥ã
ãšãªããŸããã çãŸããã°ããã®åã®æé·ãéè¿ã§èŠãããšãã§ããã®ã¯ãã®ã¿ã€ãã³ã°ãããããŸããããŸããè²å
ã«ã€ããŠåл任ãã«ããã®ã§ã¯ãªããèªåããã«ã¿ã€ã ã§åå ããããšæããŸããã äžåžã«çžè« è²äŒååŸã決æãäžåžã«çžè«ããã®ã2019幎åé ã§ãããåœæã®äžåžã§ãã£ã è€å· ïŒåœæCTOïŒçŸEVP of DevelopmentïŒã«çžè«ãããšãããããã§ãšãïŒåŒãç¶ããé²ããŠãããïŒããšæ°æã¡ããèšã£ãŠããããŸãããäžå®ãå¹ãé£ã³ãèäžãæŒããããããªæ°æã¡ã«ãªã£ãããšãèŠããŠããŸãã è²äŒåã®åŒãç¶ã åœæã®ç§ã®ä»äºã¯ä»¥äžã®ãããªãã®ã§ããã ãBASEãã®ããã¯ãšã³ãéçºãšéçºãã£ã¬ã¯ã·ã§ã³ ãããŒãžã£ãŒæ¥å (æ¡çšæŽ»åïŒ1on1ïŒè©äŸ¡ïŒã¡ã³ããŒã®æé·æ¯æŽïŒããŒãã£ã³ã°éçšïŒetc) æºåæéãå幎ã»ã©åãããšãã§ããŸããã®ã§ãçµæçã«ãã©ã®ã¿ã¹ã¯ããã¡ããšåŒãç¶ãã§ããã ãããšãã§ããŸãããåŒãç¶ãæéãé·ãã«åãããšãã§ããã®ã§ãåŒãç¶ãå
容ã®è³æäœæãšå
±æã«æéããããããšãã§ããã®ã倧ããã£ããšæããŸãããŸããåŒãç¶ãã«é¢ãã£ãæ¹ã
ãè²äŒååŸã«çè§£ã瀺ããŠãããŠããã€ååçã ã£ãã®ãéåžžã«ãããããã£ãã§ãã ãããŒãžã£ãŒæ¥åã«ã€ããŠã¯å°ãæ©ã¿ãŸããã ããšãã°ãæ¡çšæŽ»åã¯ããŒã ãäœãäžã§éåžžã«éèŠãªæ¥åã§ããç§ã¯æ¡çšãããŒã«é¢ãã£ãŠããããããã®éšåã誰ãã«åŒãç¶ãããšãªã©ã§ããã®ã ããããåŒãç¶ãã ãšããŠäžåšã®éã®æ¡çšæŽ»åã¯ããŸãé²ãã®ã ãããããšé ãæ±ããŸãããããããæ¡çšåºæºã«ã€ããŠã¯æ®æ®µãããããŒãžã£ãŒå士ã§èªèãåãããããã«ããŠããã®ã§ãåé¡ãªãåŒãç¶ãã§ããŸããã çµæããŸããã®ã¡ã³ããŒã®ååãåŸãªããããã¹ãŠã®æ¥åãè²äŒåãŸã§ã«åŒãç¶ãããããšãã§ããŸããã â» å°ãè±ç·ããŸããããšã³ãžãã¢ãªã³ã°ãããŒãžã£ãŒã«ã€ããŠã¯åŒç€ŸTech Blogã®ãã¡ãã®èšäºãåãããŠèªãã§ããã ããã°ãšæããŸãïŒ ãEOF2019è³æå
¬éã瀟å¡100äººèŠæš¡ã®WebãµãŒãã¹ã«ããããšã³ãžãã¢ãªã³ã°ãããžã¡ã³ã ãšã³ãžãã¢ãšããŠã¯ã¯ã¯ã¯ãç¶ããããã®ãšã³ãžãã¢ãªã³ã°ãããŒãžã£ãšãã圹å²åæ
è²äŒäž æããããšãããã€ãæžããŸãã ãŸãè²å
ã®å¿ããã«ã€ããŠã§ãããããè²å
ããŠããããä»äºã®æ¹ã楜ããè²å
以å€ã®æéã¯ãšããªãããªã©ãšèšãããããšããããŸãã è²äŒåã¯ãæ¯æãã®æéãå°ããããããããªããšããè»œãæ°æã¡ããããŸãããããããè²äŒã«å
¥ããšãã®ãããªæéã¯ãŸã£ãããããŸããã§ãããæŒå€åãã3æéæ¯ã®æä¹³ã»ãã«ã¯ããªã ãæ¿ããã颚åãå¯ããã€ãããã以å€ã«ãå®¶äºå
šè¬ãªã©ãèªåã®ããŒã¹ã§ç掻ãªãºã ãäœããªãã®ãäžçªå€§å€ã§ãããåºç£çŽåŸã®åŠ»ãããããã¹ãŠã1人ã§ããªããšãªããšã粟ç¥çã«ãäœåçã«ãçžåœãªå°é£ã§ãã£ããšæããŸãã ãŸããåãæ€èšºã«ã€ããŠãã£ããšãã®ãšããœãŒãã§ãã ãå»è
ããã»å©ç£åž«ããã»ä¿å¥åž«ããã«ãç§ãè²äŒã2ã¶æåååŸããŠããããšãã話ããããšãå
é²çãªäŒç€Ÿã§ããããçããã§ããããITã®äŒç€Ÿã ããå®¶ã§ãä»äºãããŠãããã§ããããšãã£ãåå¿ããããããšããããŸããã åçåŽåçã®èª¿æ»ã«ãããšãç·æ§ã®è²äŒååŸçã6.16%ã§ãããã®ãã¡1ã¶æä»¥äžã®æéããšã£ãŠããå²åã18.9%ã§ãããã®ããšãèæ
®ãããšåœç¶ã®åå¿ãããããŸããã ïŒ å¹³æ30幎床éçšåçåºæ¬èª¿æ» ããïŒ å¹³æ¥ã«ã·ã§ããã³ã°ã¢ãŒã«ã®ãããŒçšååºã«è¡ãæ©äŒãäœåºŠããã£ãã®ã§ãããèµ€ã¡ãããç¶èŠªãšäžç·ã«ããå§¿ãèŠãããã®ã¯ãæ¬åœã«æ°ããããããããããŸããã§ããã ç·æ§ã§é·æéè²äŒãååŸãã人ãå°ãªãããšã宿ããŸããã 埩垰 ææ¥åŸ©åž°ããæšãäŒç€Ÿã®ã¡ã³ããŒã«Slackã§äŒãããšãã®æ§åã§ãã Slack以å€ã§ããåŸ©åž°åæ¥ã«ãªãã£ã¹ãæ©ããŠãããšãã«ããããã®æ¹ã
ããããããããªããïŒããšå£°ããããŠããã ããŸããã 2ã¶æåãšã¯ãããäŒç€Ÿãšã®ã³ã³ã¿ã¯ãããŸã£ãããªããæ¥åãäžåããŠããªãã£ããããåŸ©åž°åæ¥ã¯ç·åŒµããŠåºç€ŸããŸãããäŒç€Ÿã®ã¿ãªãããã声ããããŠããããããšãæ¬åœã«ããããã£ãã§ãã 埩垰çŽåŸã¯ãä»äºãåŒãç¶ãã§ããæ¹ãšã®1on1ãäžå¿ã«ãã£ããã¢ãããé²ããŸãããçµæã1ã¶æçšåºŠã§ããšã®æ¥åã«åŸ©åž°ããããšãã§ããŸããã ãŸããç§ãããªãéã«ä»äºã®äžéšãè©ä»£ããããŠãããŠããã¡ã³ããŒããã®çæéã§ãã®ãããæé·ããŠããŠãéåžžã«é Œãããã£ãã§ããä»äºãæãåã£ãŠå²ãæ¯ã£ãçµæãã¡ã³ããŒã責任ããã£ãŠä»äºãé²ããŠããããŸããã®ã¡ã³ããŒã®æé·ãèŠãããšãã§ããŠãå¬ããéãã§ããïŒéã«ç§ãããªãããšã«ãã£ãŠããã®ãããªæé·ãããããšãããã®ã ãªããšæ°ã¥ãããšãã§ããŸããïŒã è²äŒååŸã«å¿
èŠãªãã®ã£ãŠ ãé
å¶è
ã®åºç£çŽåŸã®äŒæååŸãä¿é²ããããã«å¿
èŠãªããšã¯ãªã«ãããšããåãã«ãå€ãã®ç·æ§ããäŒæãåããããè·å Žã§ããããšããšåçããããã§ãããŸããä»ã«ãè·å Žã«é¢ããåçãç¶ããŠããŸãã ïŒ å¹³æ29幎ç å°åå瀟äŒå¯Ÿççœæž 第2ç« ç¬¬4ç¯ ããïŒ ãããã«ãç§ãè²äŒãååŸã§ããã®ã¯ãè²äŒãååŸããããç°å¢ãæŽã£ãŠããããããªãšæããŸãããšãã«ãåœæã®äžåžïŒåç· åœ¹ã®è€å·ïŒãè²äŒååŸã«ã€ããŠçè§£ã瀺ããŠããããã瀟å
ã«ç·æ§ã®è²äŒååŸè
ããããããããšã倧ããã£ãã§ãã äœè«ã§ããç§ãè²äŒãååŸããããšã管çè·ãå«ãè€æ°åã®ç·æ§ç€Ÿå¡ãæ°ã¶æåäœã§è²äŒãååŸããŠããŸããç§ã®è²äŒååŸã®äœéšããå°ãã§ãä»ã®ç·æ§ç€Ÿå¡ã®è²äŒååŸã®åŸæŒãã«ãªã£ãŠããã®ã§ããã°å¬ããã§ãã æåŸã« 2ã¶æåã®éãç¶ãšããŠããããã®ãªãæéãéããããšãã§ããŸãããçãŸããã°ããã®åã®æé·ãéè¿ã§èŠããããšã¯ã人çã®å®ç©ã§ãã ãã®äœéšãããšã«ãä»åŸã¯ãããŒãžã£ãŒãšããŠãã¡ã³ããŒã®ã¿ãªãããè²äŒãååŸããããç°å¢äœãã«åãçµãã§ãããããšæããŸãã 以äžãç§ã®è²äŒååŸã«ã€ããŠã話ãããŠã¿ãŸãããããããè²äŒååŸãèããŠããæ¹ã®åèã«å°ãã§ããªãã°å¹žãã§ãã
åæžã ããã³ããšã³ããšã³ãžãã¢ã®æŸå( @simezi9 )ã§ãã å
æ¥10æ30æ¥ã«ã¯ã©ãŠãã¯ãŒã¯ã¹ããããåãããŠå®æœããVue.jsã®èšèšå匷äŒã§ããã Vue.jsã¢ãŒããã¯ãã£ãªã³ã°ååŒ·äŒ ã«ãŠã BASEã®çŸåšã®Vueã³ã³ããŒãã³ãã®èšèšã«é¢ããŠç»å£ããŠã話ããŠããŸããã å
šäœã®è³æã¯ãã¡ã ã§ã ããšããšBASEã§ã¯Vue.js+TSãæ¡çšããå€§èŠæš¡ãªã·ã¹ãã ã®ãªãã¥ãŒã¢ã«ãããžã§ã¯ãã2018幎ããã¹ã¿ãŒãããŠããŸãããããã«ããã£ãŠã®å€§ãŸããªããã³ããšã³ãã®æ§ç¯æ¹éã¯ä»¥åãblogãå€éšç»å£ã§çºè¡šããŠããŸããã æ¬¡äžä»£ã®ç®¡çç»é¢ãäœãããã³ããšã³ãã®åãçµã¿ - BASEéçºããŒã ãã㰠次ã®5å¹Žãæ¯ããVue.js補UIã³ã³ããŒãã³ãã©ã€ãã©ãªãè²ãŠã ãããŸã§ã®çºè¡šã§ã¯å€§æ ã®æè¡ã¹ã¿ãã¯ãã¯ãŒã¯ãããŒã®è©±ãå€ãã£ãã§ããã ä»åã¯Vueã³ã³ããŒãã³ãã®èšèšãå匷äŒã®äž»çŒã«ãã£ãããšããããããå°ããã¯ããªèгç¹ããVueã³ã³ããŒãã³ããäœãäžã§ç©ã¿äžããŠããç¥èŠãçºè¡šããããšã«ãªããŸããã BASEã®ã³ã³ããŒãã³ãèšèš ã¹ã©ã€ãå
ã§ãæéãå²ããŠç޹ä»ããŠããŸãããBASEã®Vueã³ã³ããŒãã³ãã¯å€§ãã4çš®é¡ã«åãããŠããŸãã ããšããšã¯AtomicDesignã®èãæ¹ãäžå¿ã«ããã³ã³ããŒãã³ãèšèšããã¹ã¿ãŒãããŸãããã Atomic Designã®èãæ¹ã¯Webã¢ããªã®ãã¶ã€ã³ãäœãäžã§æå¹ã§ã¯ãããã®ã®ãå®è£
ãšãã芳ç¹ã§ããã°ããã ãã§ã¯ããŸããããªãã®ã§ã¯ïŒãšããçåã«ã¶ã€ããã æçµçã«Presentational Component / Container Componentã®èããåºæºãšããŠãããããããããã®ã³ã³ããŒãã³ãã®ã¬ã€ã€ãAtomic Designã®èªåœãåãå
¥ããªããåè§£ããããšã§çŸåšã®ãããªåœ¢ã«ãªã£ãŠããŸãã ä»åç»å£ããã«ããã£ãŠã®å人çãªè£ããŒããšããŠã ãAtomic Designãæ¡çšããŠãã話ã¯ããèãããã©ãçŽç²ã«ããã ãã§ããŸãåããŠããçŸå Žã¯ã©ãã ããããã ãããïŒã ãšããã®ãèããŠã¿ãããšãããã®ããããŸããã å®éã®çºè¡šã§ããã®ãããªå
容ã«è§ŠããŠãã®åŸã®æèŠªäŒã§è©±ãèãããšãããçŽç²ãªAtomic Designã§ã¯ãªãäœããã®æãå ããéçºãããŠãããããžã§ã¯ãã®ã»ããå€ãããªå°è±¡ãåããŸããã Atomic Designã¯ã¢ãã³Webã¢ããªãã¶ã€ã³ã®èšèšææ³ãšããŠå€§ããæ®åããã€ã¡ãŒãžã¯ãããŸããã å®éã®å®è£
ãšã®éãã€ãªããã©ã¯ãã£ã¹ã¯ãŸã äžè¶³ããŠããŠãå®éã«ã¯ãŸã ææ¢ããªéšåãå€ãã®ããªããšãããããªéšåã宿ããŸããã Storybookã®æŽå çŽç²ãªèšèšã®è©±ãšã¯å°ããããŠããŸãéšåã¯ããã®ã§ãããçŸä»£ã®ããã³ããšã³ãéçºã®æšæºè£
åã«ãªãã€ã€ããStorybookã®å®è£
ã«ã€ããŠãã話ãããŠããã ããŸããã Storybookã®å°å
¥è©±ã¯èŠãããããšã¯ãã£ãŠããåãããžã§ã¯ãã§æãæãã®äœ¿ãæ¹ããããŠããŠããã©ã¯ãã£ã¹ãéçšãå®éã«èšèªåããŠãã話ã¯ããã»ã©å€ãèŠãããªããããªæ°ãããŠããã®ã§ãèªåãéçºããŠããäžã§ã®æããã¹ã©ã€ãã«ããŸããã Storybookããã¶ã€ããŒãšãšã³ãžãã¢ãã³ãã¥ãã±ãŒã·ã§ã³ãåãããã®åå°ã«ããŠããããããšããæãã¯ãããžã§ã¯ãéå§åœåããæã£ãŠãããã®ã®ã å®éã«éçºããŠãã£ãŠããªããªããããããŸããããããã®åå ã¯ãªãã ããïŒãšããã®ãèãããã®ã«ãªã£ãŠããŸãã ã¹ã©ã€ãã§ã¯ããµã³ãããã¯ã¹ãæ§ãšãã«ã¿ãã°ãæ§ãšããèšèã䜿ã£ãŠèªåã®èãã衚çŸããŠã¿ãŸããã Storybookãžã®å®è£
ã«ã¯ãå®éã«ãããå©çšãããŠãŒã¶ãŒïŒãã¶ã€ããŒã ã£ããã³ã³ããŒãã³ããçµã¿èŸŒããšã³ãžãã¢ã ã£ããïŒã«ããã ããããŠãªãã®æ°æã¡ã ããããã¯ãããµãŒãã¹ã«åãããã®ãšåæ§ã«æã£ãŠãããªããšãããªããªããšããã®ãå人çã«ã¯çµè«ã«ãªã£ãŠãããããŸãã å瀟ã®storybookãã©èŠããã€ããšããã£ãŠã¿ãŠã»ãã — ã (@simezi9) August 5, 2019 StorybookãAtomic Designåæ§ã«ãã£ãšçŸå Žã§ã®ãã©ã¯ãã£ã¹ã®è©±ãå¢ããŠãããšãããªãšæã£ãŠããŸãã å®è£
ã®tips æåŸã«å®è£
ã®tipsãšããŠããŸãWebã§ã¯èŠãããªããã©å人çã«ãã¿ãŒãã©ã¯ãã£ã¹ã ãšæã£ãŠããVue.jsã®å®è£
ã®ãããã¯ãããã€ãå°ãã¿ãšããŠç޹ä»ãããŠããã ããŸããã äžçªèšãããã£ãããšã¯ã ã³ã³ããŒãã³ãã®è¯ãã¯å
±éåã§ã¯ãªããŠè²¬åã®åé¢ ãšããããšã æ§ãé«ãéšåãªã®ã§ããã ããã ãã ãšæœè±¡çãããŠé¢çœããªãããªãšæã£ãã®ã§ãEventã®ååã®ä»ãæ¹ããpayloadã®æž¡ãæ¹ãaria屿§ã䜿ã£ãã¹ã¿ã€ãªã³ã°ãªã©å®çšé »åºŠãé«ããã©æ¡å€è§£èª¬èšäºãèŠãæ©äŒã®å°ãªãïŒãšæã£ãŠããïŒãã®ãéžãã§åãäžããŠã¿ãŸããã ç¹ã«Vue.jsã®ã¹ã³ãŒãä»ãã¹ãããã¯è§£èª¬ãå°ãªããšã£ã€ãã«ããæŠå¿µã§ã¯ãããã®ã®ãäžåºŠæ±ããããã«ãªããšéåžžã«åŒ·åãªèšèšã®æŠåšãšãªãã®ã§ãã²åãäžãããã£ããã®ã«ãªããŸãã ãã®ã¹ã©ã€ãã§ãšããããŠããå®è£
ãã¯ããã¯èªäœã¯ Vuex ã Vuetify ãªã©ã®OSSã©ã€ãã©ãªã®å®è£
ãããªãåèã«ãããŠããã£ãŠãããã®ãããã ããããå®è£
tipsã«èå³ã®ããæ¹ã¯GithubãèŠããŠã¿ãã®ããšãŠããªã¹ã¹ã¡ã§ãã ç¹ã«Vuetifyã¯å®è£
ãããç·ŽãããŠããŠè³ªãé«ãã®ã§ã¯ãªãããšæã£ãŠããŸãã ãããã« ä»åã¹ã©ã€ããšããŠãŸãšããŠç»å£ããæ©äŒããã ãã£ãå匷äŒéå¶ã¹ã¿ããã®çæ§ã«æ¹ããŠæè¬ãããšãšãã«ã ãŸã ãŸã ææ¢ããç¶ããªããçºå±ããŠããã§ãããBASEã®ããã³ããšã³ãéçºã« äžç·ã«æºãã£ãŠãããããšããæ¹ãåéããŠãã ã®ã§ èå³ã®ããæ¹ã¯ãã²ã声ããããã ããã°ãšæã£ãŠããŸã
ããã«ã¡ã¯ãDesign Groupã«æå±ããŠããæ£®ïŒ @ mrkzk ïŒã§ãïŒ å°ãåã« BASEã§ãã©ã³ããããžã§ã¯ãå§ããŸãã ãšããèšäºãå
¬éããã®ã§ãããä»åã¯ãã®äžç°ã§è¡ããã ååºãªãã¥ãŒã¢ã« ã«ãã©ãŒã«ã¹ããŠã話ãããããšæããŸãã ãªãååºãªãã¥ãŒã¢ã«ãè¡ã£ãã®ã å匷äŒãããŒãã¢ããã§ãã³ãã³ã坿ãïŒããšãè€ãããã ãBASEã®ãã®ååº å®ã¯ãã®ååºã代衚ã®é¶Žå²¡ããã¶ã€ã³ãããã®ãªãã§ããBASEã®ãã«ãã«ã©ãŒå
šéã§å¯æãã§ãããã 坿ãã坿ãã®ã§ããïŒããããèŠããšããçŸåšã®ãã©ã³ãã¬ã€ãã©ã€ã³äžã ãšãã©ã³ããæ¯æããŠããããšã«ãªããŸãããããŠã¡ãã£ãšæ
å ±ãå€ãã ä»åã®ãªãã¥ãŒã¢ã«ã§ã¯ãã©ã³ããããžã§ã¯ãã®äžç°ã§ãã®èæ¯ã«æº¶ã蟌ãã§ããŸã£ããã£ããæãBASEã®ãã©ã³ããå®ãããšãã¡ã€ã³ã«ããã©ã¹ã§BASEã®ããããã®åæ§ãããã¥ãŒãã©ã«ãªå°è±¡ãèœãšã蟌ãã ãã¶ã€ã³ã«å€æŽããããšã«ããŸããïŒ ãŸãã¯ãã©ã€ãªãªãã£é«ãã®ãã©ã³ãä¿æãšãã¶ã€ã³ã®æ¹åæ§ ä»åã®ã¡ã€ã³ã§ãããã©ã³ãä¿æã®ããã®å€æŽãšãçæ³ããªã¹ãã¢ãã çŸç¶ ãã©ã³ããå®ãããŠããªãïŒæº¶ã蟌ã¿ãã£ããBASEãšããæååäœã§ã®äœ¿çšïŒ ååºã®æ
å ±ã«å¶éããªã人ããããã§æ
å ±éãå€ãããããšããã ãã¬ã³ãããããå€ããŠããŠãã åœåéžãã çŽãå°å·ããã©ãã©ãå€ããŠãããã¯ãªãªãã£ã«ã ã©ããã SNSã¢ã«ãŠã³ãã®èšå
¥ãä»»æãªã®ã§ã人ãããããã©ãã© çæ³ ãã©ã³ãã¬ã€ãã©ã€ã³ã«æ²¿ã£ããã®ïŒ ãã©ã³ããããŽãæ£ãã䜿ã BASEã®ãã¬ã³ããªãŒãã¯ãã®ãŸãŸã«ä»ã£ãœã ãã«ãã«ã©ãŒãçããããã¬ã³ããªãŒãªé°å²æ°ã¯ãã®ãŸãŸã«ãåæ§ãšãã¥ãŒãã©ã«æã®ãããã® åºãäžçã«åã㊠ã°ããŒãã«ãæèããè±èªè¡šèšãäœæ çŽè³ªãšè²ã®åçŸ ååºäº€æãããçžæã®æ¹ãæããè§ŠããããªãçŽè³ªãã€ããã«ãã«ã©ãŒã®æ·¡ãè²ããã£ããåçŸã§ããå°å· ãªãã¥ãŒã¢ã«ã«ããã£ãŠè¡ã£ãããš ååºãé
ãæ©äŒãå€ãã«ã¹ã¿ããŒãµã¯ã»ã¹ããšã³ãžãã¢ã®ã¡ã³ããŒã«ãã¢ãªã³ã° éå»ã«ååºã§å°ã£ããšããœãŒãããã£ãããããªããšããèŠæãèããã ä»ç€Ÿããã®ååºãç ç©¶ çŽ æµãªãšããããªã¹ãã¢ããããã æ¥è
éžã³ ä»äžãããçŽæãåå150ååã®ããŒã¿å
¥çš¿ã«é©ããŠããããªã© çŽéžã³ æè§ŠãéèŠïŒãããŠããŽã®çºè²ã綺éºã«è¡šçŸã§ããããèŠæ¥µããã®ãé£ããã»ã»ã» åæ§ã®è¡šçŸ ç¹æ®ãªå°å·æ¹æ³ãæ¡çšãããªã©ãBASEãããã®è¡šçŸ éçšæ¹æ³ éãã¶ã€ããŒã§ãæ
å ±ãä¿®æ£ããã远å ãããã§ãããããªã誰ãéçšããŠãäžå®ã®ã¯ãªãªãã£ãç¶æã§ããéçšæ¹æ³ ãªã©ãæ§ã
ãªéçšããããŸããããèšäºã®äžã§ã¯ããã€ãããã¯ã¢ãããã€ã€ã話ããŸãïŒ ååºããŒã¿éçšã®æžå¿µãšè§£æ±ºç æžå¿µ ãã¶ã€ã³ã ãã§ãªãååºããŒã¿ãéçšããŠããéã®æžå¿µããããŸããã BASEã®ååºã¯AiããŒã¿ã§ãã³ãã¬ãŒãåãããŠãããæ°å
¥ç€Ÿå¡åã®çºæ³šãæ¢åã®ååºã®è©æžã倿Žãè¡ãéã«ããã¶ã€ããŒããŒã¿ã倿ŽããããšããªãïŒãšãŠããããããããšã«ïŒHRã®ã¡ã³ããŒãæ
å ±ãæµã蟌ã¿ãå
¥çš¿ããŠãããŠããŸãã ã§ãããããæ°å¹Žã§éšçœ²åã倿Žãããããè©æžããªã©ã现ååãããŠãã£ãããšã§ãªãã¥ãŒã¢ã«åã®ãã³ãã¬ãŒããã¶ã€ã³ã§ã¯æ¢åã®éçšãæ
ä¿ã§ããªããªã£ãŠããç®æãããã€ããã£ãããšãæ¹åãå¿
èŠã§ããã ãŸããSNSã¢ã«ãŠã³ãã®æ°ãçš®é¡ã«ã«ãŒã«ããªãã人ã«ãã£ãŠæ
å ±ããããããªã®ã§éçšã倧å€ããªã®ã§SNSã¯å»æ¢ãããïŒïŒãšã¡ã¢ãå
¬éãããšãããã ãã®ããã«ãšã³ãžãã¢ãããã匷ãèŠæããã£ãã®ã§ãã¡ããæ®ãã€ã€ã«ãŒã«ãèšããŠã¹ãããªãããããšã«ããŸããïŒ è§£æ±ºç ãšããçµç·¯ãå
ã«ãä»åãã³ãã¬ãŒããã ãã³ãã¬ãŒãå
Ό
¥çš¿ããŒã¿ ã«ããããšã«ã ãå¿
é ãéšçœ²åãè©æžãïŒïŒè¡orïŒè¡ïŒãåå ãä»»æãé»è©±çªå·ãã¡ãŒã«ã¢ãã¬ã¹ãSNSã¢ã«ãŠã³ãïŒFacebook,Twitter,GitHub,InstagramïŒ ã§æ§æããé»è©±çªå·ãã¡ãŒã«ã¢ãã¬ã¹ãSNSããããä»»æã§ãããSNSãèŒããå Žåã«ã¯äžã€ã ãéžã¶ãšããã«ãŒã«ãèšããŸããã ãŸãã人ã«ãã£ãŠæ
å ±ãïŒã€ã ã£ããïŒã€ã ã£ãããSNSã®æå®ãããããã§ããã ïŒã€ã ã£ããã³ãã¬ãŒãã - è©æžãïŒè¡ - è©æžãïŒè¡ ã®ïŒã€ã«å¢ãããŸããã ãããŠé
ç®Maxã®ïŒã€ãé»è©±çªå·ããé ã«ããã¹ãã§çšæããäžèŠãªãã®ã¯æ¶ãããšããå°ãã¢ããã°ãªåœ¢åŒã§ã¯ãããŸããéãã¶ã€ããŒã§ãæ±ãããããã³ãã¬ãŒãã«ããŸããã ãŸããã€ã³ããããåé€ãããããããããã¹ãŠãããã¹ãæ
å ±ã«å€æãããããé»è©±çªå·ãSNSã¢ã«ãŠã³ããªã©ã®ã¢ã€ã³ã³ã¯ FontAwesome ã§ããã¹ããšããŠåºåããŠããŸãã ïŒãããå¿
èŠã®ãªãããŽãäŒç€Ÿæ
å ±ã¯ãºã¬ãŠããŸããšå°ãã®ã§ã¬ã€ã€ãŒã§ããã¯ããŠããŸãïŒ è©Šäœã«è©Šäœãéã宿ïŒïŒ è²å³ãè§äžžã®ç¶ºéºããèŠãããå°ãããã§ããã€ãã®æ¥è
ã«ãé¡ãã詊äœãç¹°ãè¿ãã ãã®äžã§ãã£ãšãçŽã®æè§Šããããããã£ããè²ãåºãæ¥è
ãããéžã³ãŸããïŒããããã¡ãã§ãïŒ (è«žäºæ
ã«ããç¬ç¹ãªé
眮ãšãªã£ãŠãããŸãããæå¬) ïŒè²å±é BASEã®ããŽã§ãããã«ãã«ã©ãŒããéžã¹ãïŒè²ã§ã¡ã³ããŒã®åæ§ãè¡šçŸ çŽè³ª ãã£ãšããšæã«éŠŽæã¿æããæ«ã§ãããªããããªã©ãããŒãå å·¥ ãã¶ã€ã³ 暪åãã§ãã¬ã³ããã€BASEã®ãã¥ãŒãã©ã«ãªå°è±¡ãè¡šçŸ æ¥è±å¯Ÿå¿ è¡šã¯æ¥æ¬èªè¡šèšãè£é¢ïŒã«ã©ãŒïŒã¯è±èªè¡šèš æåŸã« ãã£ãããšããæµãã§ã¯ãããŸãã以äžããªãã¥ãŒã¢ã«å
容ã§ãã 5æäžæ¬ããå§åããŠæå
ã«å±ããã®ã8æäžæ¬ã ã£ãã®ã§æéã«ããŠ2ã¶æå匱ããããŸããããçºè²ãè¯ã坿ãã§ããŠããããäœããäžçªæžå¿µããŠããéçšãã人äºããã¯ããã³ãã¬åãããããïŒããšã®ãªã¢ã¯ã·ã§ã³ãããããä»ã®ãšããåé¡ãªããŸãã£ãŠããããªã®ã§ãã£ãŠããã£ããŒïŒïŒïŒãšéææã«æº¢ããŠãããŸãïŒ BASEã®ã¡ã³ããŒãšååºäº€æã®ãçžæã®éã«ä»ãŸã§ä»¥äžã«çŽ æµãªã³ãã¥ãã±ãŒã·ã§ã³ãçãŸããŸãããã«ïŒ
ããã«ã¡ã¯ãã¯ãããŸããŠããä¹
ãã¶ãã§ãïŒ BASE BANKæ ªåŒäŒç€Ÿ ã«ãŠãœãããŠã§ã¢ãšã³ãžãã¢ãããŠããæ±å£ïŒ @hgsgtk ïŒã§ãã2019幎11æ7æ¥ïŒæšïŒã11æ10æ¥ïŒæ¥ïŒã«CakePHPã®åœéã«ã³ãã¡ã¬ã³ã¹ CakeFest 2019 ããæ¥æ¬ã§éå¬ãããŸãããç§ã¯ãã¹ããŒã«ãŒãšããŠåå ããã®ã§ãããåããŠ30å匷ãåœéã«ã³ãã¡ã¬ã³ã¹ã§è©±ãæ©äŒãšãªã£ãã®ã§ãçºè¡šã®ããã«æºåããããšãåçç¹ãèžãŸããŠãåå ã¬ããŒãããå±ãããŸãã CakeFest 2019 CakeFest 2019 ãšã¯ãPHP補ãŠã§ããã¬ãŒã ã¯ãŒã¯ã®äžã€ã§ãã CakePHP ã®åœéã«ã³ãã¡ã¬ã³ã¹ã§ãã幎ã«1åéå¬ãããŠãããä»åã¯åããŠæ¥æ¬ã§ã®éå¬ãšãªããŸããã cakefest.org CakeFest 2019ã¯ãWorkshop dayã2æ¥ãConference dayã2æ¥ã®åèš4æ¥éã§ãããWorkshopã¯DMM.comããã®ãªãã£ã¹ãäŒå Žã§ãConference dayã¯SmartNewsããã®ãªãã£ã¹ãäŒå Žã«ãªããŸããã ç§ã¯ãConference dayããCakeFest 2019ã«åå ããŸããã ããã«ãã£ã豪è¯ã§ãCakeFestã® ElePHPant ïŒç·è²ã®è±¡ïŒãšãCakePHPã®ããŒããªã©ãããããŸããã ãŸããç§ã¯ã¹ããŒã«ãŒåå ã ã£ãã®ã§ãããã¹ããŒã«ãŒã¯ãããŸãäžã«åºåã£ãŠããªããšåã®CakeDCã®ElePHPantïŒéè²ã®è±¡ïŒãè²°ããŸããïŒ ãŸããããã¯ã¹ãã©ããã»åæãããããã§ããä»åãBASEã¯ãã·ã«ããŒã¹ãã³ãµãŒã»ã©ã³ã€ãŒãã¹ãã³ãµãŒãšããŠåè³ããŠããã®ã§ãããã¯ã¹ãã©ããã«ã¯ BASE ã®ãµãŒãã¹ããŽãå
¥ããŠããã ããŠããŸããCakePHPã®Founderã® Larry Masters ãããªã©ãæ®æ®µãäžè©±ã«ãªã£ãŠããOSSã®ã³ã¢ã¡ã³ããŒã®æ¹ããèªç€Ÿã®ããŽã®å
¥ã£ãããã¯ã¹ãã©ãããã€ããŠããå
æ¯ã¯å€§å€ææ
šæ·±ãå
æ¯ã§ããã basebook.binc.jp ãŸããä»åãåå ããBASEã®ãšã³ãžãã¢4åã§ã Larry Masters ãããšèšå¿µæ®åœ±ããŠããã ããŸããïŒ æçµæ¥ã«ã¯ãCakePHPã®ã±ãŒããåå è
å
šå¡ã«æ¯ãèãããŸããã Presentation Kazuki Higashiguchi is speaking now about how to avoid the pain of test code. #CakeFest2019 #cakePHP #japan pic.twitter.com/Umo9unL7gg — CakePHP (@cakephp) November 9, 2019 ç§ã¯ãConference day忥ã®11æ9æ¥ã®å€æ¹ã«35åã»ã©ã Test-Driven Development to avoid test painful ãšãã話ãããŸããã ããã¹ããã€ããããšããç¶æ³ã«å¯ŸããŠãTDDïŒTest-Driven DevelopmentïŒãã©ã®ããã«äœ¿ããã®ãã説æããå
容ã§ããTDDèªäœã®èª¬æã«ã¯ãçŸåšbeta4ããªãªãŒã¹ãããŠãã CakePHP4.0 ã®ãµã³ãã«ã³ãŒããçšããŠãã©ã€ãã³ãŒãã£ã³ã°ãè¡ããŸããã è³æ è³æã«ã¯ãã©ã€ãã³ãŒãã£ã³ã°ã§ãã®å Žã§è©±ããéšåãå
¥ããŠããŸããTDDã®ã¢ãããŒããè¡ãããšã§ããã¹ãããã³ãŒãèšèšã«å¯Ÿãããã£ãŒãããã¯ãåããããšãã§ããŸããèšèšéå
·ãšããŠãã¹ãã䜿ããç¹ãäŒããã°å¹žãã§ãã ã©ã€ãã³ãŒãã£ã³ã°äžã«äœ¿çšãããµã³ãã«ã³ãŒãã¯ãGitHubã®äžèšã®ã¬ããžããªã«å
¬éããŠããŸããåºç€ãšãªãå
容ã¯ãCakePHPã®ãã¥ãŒããªã¢ã«ãšãªã£ãŠãã Content Management Tutorial ã§ãããã«ãã¢ããããã®æ©èœã远å ããã³ãŒãã«ãªã£ãŠããŸãã github.com CakePHPã¯ãéçºäžææ°ã® 4.x-dev ã®branchãå©çšããŸãããããšããšã¯ãããŒãžã§ã³3.5ãå©çšããŠããã³ãŒãã ã£ãã®ã§ã4.0ãžã®ããŒãžã§ã³ã¢ããããã®çºè¡šæ©äŒãæ©ã«å®æœããŸãããããŒãžã§ã³ã¢ããããŠã¿ãŠæ°ãã€ããç¹ãªã©ã¯ãå¥é12æã® CakePHP Advent Calendar 2019 ã§ããã°ãæžããŸãã çºè¡šåŸã®åå¿ çºè¡šåŸããè¯ãã£ãããšãããã£ãŒãããã¯ãããã ãããšãã§ããŸããããŸããTwitterããšãŽãµãããšããã©ã€ãã³ãŒãã£ã³ã°ãåèã«ãªã£ããã»ãTDDãã£ãŠãããããšãã£ãåå¿ããã£ãã®ã§ãäœãããåèã«ãªã£ãŠããžãã£ããªåœ±é¿ãäžãããããããªçºè¡šã«ãªã£ãæ°ãããŸããããïŒ ã©ã€ãã³ãŒãã£ã³ã°ããããåèã«ãªã£ã #cakefest2019 — morgan (@idubmorgan) November 9, 2019 Your speech had a positive impact on me!! Thank! — ç¥è°· æå£« / Gunji Kamiya (@GunjiKamiya) November 10, 2019 ãã¡ã®äŒç€Ÿã§ããã³ãã³ãTDDå®è·µããŠããããïŒ #CakeFest2019 — ã«ã³ãðæ²çž@Webãšã³ãžã㢠(@kanbo0605) November 9, 2019 æºå CakeFest 2019ã¯ãåããŠè±èªã§30ååŒ·è©±ãæ©äŒã§ããããã«ã³ãã¡ã¬ã³ã¹ã§è±èªã§ããŒã¯ãããããšæã£ãŠããæ¹ã¯æœåšçã«å€ããšæãã®ã§ãä»åã©ã®ããã«æºåããã玹ä»ããããšæããŸãã 瀟å
ã§ãšã³ãžãã¢è±èªå匷äŒãéå¬ãã ãšã«ãããã«ããå
人ãã¡ã®ã«ã³ãã¡ã¬ã³ã¹ã§ã®ããŒã¯ãèŠãŠãè±èªã§ã®ãã¬ãŒãºãšãé°å²æ°ã«æ
£ããŠãããããšããããã£ãã®ã§ãç¶ç¶çãã€å®æçã«åŠã¶ããã«ã瀟å
ã§ãšã³ãžãã¢è±èªå匷äŒãå§ããŸããã6æããåå¹Žéæ¯é±ãTEDã®ããŒã¯ãããã¯ã«ã³ãã¡ã¬ã³ã¹ã®ããŒã¯ãèããŸããã å幎ç¶ç¶ãããããã§ã6æåœåã¯ãã»ãšãã©ãããã...!ããšãªã£ãŠããç¶æ
ã ã£ãã®ããããªããšãªãããããããšèšã£ãŠãããªããšåããããã«ãªã£ãŠãããŸããã ãŸãããããããªã¹ããŒããèŠã€ã€ãã¹ããŒãæã»ã¹ã©ã€ãã®éãæ§æã»è©±ã®ã¯ããæ¹ãªã©ãèããããšãã§ããŸããã è±èªã®åèãåç
§ãã æ®æ®µã翻蚳ãããæ¥æ¬èªãããã°ããããèªãã§ããã®ã§ãããè±èªã§äººã«äŒãããšãªããšãã©ã®ããã«å°éçšèªã衚çŸãããŠããããç¥ãå¿
èŠããããŸãããã®ããŒãºã«ãåèã¯æé©ã§ãããå®éã«ãä»åã®ã«ã³ãã¡ã¬ã³ã¹ããŒã¯ããã£ããã«ãããããªæžç±ã賌å
¥ããŠèªãã§åèã«ããŸãããèªåã®äŸã§ã¯ãã Growing Object-Oriented Software, Guided by Tests ããã xUnit Test Patterns: Refactoring Test Code ããã Practical Object-Oriented Design: An Agile Primer Using Ruby ããªã©ãåèã«ããŠãå®éã«çºè¡šè³æå
ã§ãåŒçšãããŠããã ããŸããã 鿬¡éèš³ãæ³å®ããåçš¿ ä»åã®CakeFest 2019ã§ã¯ã鿬¡éèš³ããã£ãã®ã§ãèªåã®è©±ãéèš³ã®æ¹ãæ¥æ¬èªã«ç¿»èš³ããŠããæéããããŸããããã¯æ¬åœã«åããŠã®çµéšã ã£ãã®ã§ãèªåã®çºè¡šãäœåã§çµããã®ãå
šãèªããŸããã§ãããçµæçµéšããŠã¿ãŠã鿬¡éèš³ããããšãããåæã«ããè©±ãæ¹ãå¿
èŠã ãšæããŸããã å
·äœçã«ã¯ãèªåã§åããæéãšéããåçŽèšç®ã§ååã«ãªãã®ã§ãçãç°¡æœã«ã¯ã³ã»ã³ãã³ã¹ã§äŒããå¿
èŠããããŸããä»åã®ããŒã¯ã§ã¯ãã¹ã©ã€ãã«æžãããæç« ãšã¯å¥ã«ãã¹ã©ã€ãããšã«äžæã§èª¬æããåçš¿ãçšæããŠããŸããã ã©ã€ãã³ãŒãã£ã³ã°çšã®ã¡ã¢ ã©ã€ãã³ãŒãã£ã³ã°ãäžçªé ã䜿ããŸãããè±èªãèãã€ã€ç®ã®åã®PHPã³ãŒããæžããŠããããšã«ãªãã®ã§ãçžåœãããã¯ç¶æ
ã§é²ããããšã«ãªããŸãã ææªå°ã£ãŠè³ã忢ãããšãã®æ ãæãšããŠãã³ãŒããšè©±ãèšèãçšæããŠãããšããã§ããå®éã«äœ¿ã£ãã®ã¯ãã¡ãã£ãšé·ãã³ãŒãã®ã³ããã«ã€ãã£ããããã§ãããåé¡çºçæã®æºåã¯å€ãã«è¶ããããšã¯ãããŸããã äºåç·Žç¿ã»æ·»å 瀟å
çºè¡šç·Žç¿ãèš2åè¡ããŸãããå®éã«æ¯åœèªã§ã¯ãªãèšèªã§è©±ããšããã ãã§æ®æ®µã®åãããæéãããããŸãããæ³£ãæ³£ã話ãåã£ãŠãããªãããã¡ãããšåå è
ã®æ¹ã
ã®æåŸ
æã«å¿ããããããªå
容ãå¢ãããŠããäœæ¥ãšãªããŸããããŸããå®éã«è©±ãããšã§è©°ãŸã£ãŠããŸã£ããéåæãæãã衚çŸãåºãŠããã®ã§ãããããåèãæµ·å€ã¹ããŒã«ãŒã®è©±ãåèã«ä¿®æ£ããŠãããŸããã ããã«ä»¥åã GopherCon 2019 ã§Lightning Talkãããéã«ãç·Žç¿ã«ä»ãåã£ãŠããã ãããè±èªãåŸæãªæ¹ã«å人çã«ãé¡ãããŠã¹ã©ã€ãã®è±èªè¡šçŸãæ·»åããã ããŸããã ç·Žç¿ãæ·»åã«ä»ãåã£ãŠããã ããæ¹ã
ã«ã¯ããã®å ŽãåããŠæ¹ããŠã瀌ç³ãäžããŸããããããšãããããŸããïŒ ãµã£ãšè©±ãçšã®è±èªçšæ ã¹ã©ã€ãå€ã§åããã¡ãªè±æã120%ã®æºåãšããŠãããšããã§ããä»åãããŸããŸçšæããŠããäžæãã I'm sorry to keep you waiting ïŒåŸ
ãããŠããããïŒã ã£ããã§ãããåŸã«æžãã®ã§ããæ¬åœã«æ©æãã©ãã«ã§é
ããŠåå è
ã®æ¹ãåŸ
ãããããšã«ãªãã®ã§çšæããŠãããŠããã£ãã§ãã ãã®ä»ã«ããæéããªããŠã¹ã©ã€ããã«ããããªããšãããªãæã®ã»ãªããšããäŸå€ç³»çºçæã®ãã¬ãŒãºãçšæããŠãããšå®å¿ã§ãããšæããŸãã åçã»æ¹åç¹ ãŸããåçç¹ãä»ã®æ¹ã®çºè¡šãèŠãŠæ°ã¥ããæ¹åç¹ããã£ãã®ã§ãŸãšããŠã¿ãŸãã æå
ã§åçš¿èŠãçšã®æ©ææºå ä»åãç§ã¯ã©ã€ãã³ãŒãã£ã³ã°ããã£ãã®ã§åº§ãã£ã±ãªãã§è©±ããŠããã®ã§ãããPCããé¢ããŠç«ã£ãŠè©±ãæ¹ããã¿ãŒã§ã¯ãããŸããçæ³ãèšãã°ãå
šéšæèšããŠãããæèšããªããŠãå¿ã®äžããè±èªãåºãŠããã®ãããã®ã§ããããªããªãããããããŸããã åããã¹ããŒã«ãŒã ã£ã @t_motooka ããã®çºè¡šã§ã¯ãPCãã¹ã¯ãªãŒã³ã«ã€ãªãã§ãã¹ã©ã€ãæäœãiPadã§è¡ã£ãŠããŸãããããã§ããã°ãç«ã£ãŠè©±ãããã¹ã©ã€ãããšã®åçš¿ãèŠããŠãããªãšæããŸãããæ¬¡åã¯ããã®ææ³ã§ãããŸãã æ®ãæéãèŠå€±ã£ãïŒå¡ãã¹ïŒ æ©æãã©ãã«ã§åœåã®æéããé
ããŠå§ãŸã£ãããšããã£ãŠãå
å¿ãã£ã¡ãçŠã£ãŠããŸãããæ®æ®µã logicool ã«ã¿ã€ããŒãèšå®ãã€ã€ãããã¯ã¢ããã§ã¹ããã®ã¿ã€ããŒã䜿ã£ãŠèªåã®æã¡æéã®æ®ãã確èªããŠããŸããä»åéåžžã«å¡ãã¹ãããŠãã©ã€ãã³ãŒãã£ã³ã°ã§ã¹ã©ã€ãããé¢ããã¿ã€ãã³ã°ã§logicoolã®ã¿ã€ããŒããªã»ãããããããã«ã¹ããã®ã¿ã€ããŒãåããããšãå¿ããŠããŸãããããã æéãæŒããŠããäžã§äœæãŸã§ã«çµããã°ããã®ãèŠå€±ã£ãŠããŸããåããªãããä»äœåçµã£ãŠãããã ããšãœã¯ãœã¯ãç¶ãã矜ç®ã«ãªã£ãŠããŸããŸãããããã«é¢ããŠã¯ãæ°ãã€ããããããããæèšã¯ç¡ããããããŸãããã»ã»ã»ã çµæã30å匱ã ã£ãã®ã§æé©è§£ã ã£ããªãšæãã€ã€ãããã話ããŠãããããªããšæã£ãéšåãããã€ãã«ããããã®ãå¿æ®ãã§ããã ãŸããããã¯äœè«ã§ããã MacBook Air ãæ©æãšçžæ§æªããŠæ ããªããã¿ãŒã³ããä»å¹Ž24åçºè¡šããŠããŠ3å確èªãããŠããŸããæ©æçžæ§ãæªãããšã¯ä»ã®PCã§ããããšæãã®ã§ãAirPlayã§ãã§ããããã«æºåãããªã©å¯ŸçãããŠãããšããã§ãããã Speakers æåŸã«ã±ãŒããšäžç·ã«ã¹ããŒã«ãŒãšã³ã¢ã¹ã¿ããã®ã¿ãªããã§åçãåããŸããã ãŸããCakeFest 2019åå è
ã§ã«ã³ãã¡ã¬ã³ã¹ãããŒã«ãµã€ã³ããŸããã ããã«ããBASEã®ãµãŒãã¹ããŽã倧ããå
¥ããŠããã ããŠããã®ã§ãBASEã®è¿ãã«ãµã€ã³ããŸããïŒ æåŸã« CakeFest 2019ã§ã¯ãæ®æ®µã®ã«ã³ãã¡ã¬ã³ã¹ã§ã¯ãªããªãæ©äŒãå°ãªããCakePHPèªäœã®ããŠããŠãããã顿ã«ããããŒã¯ããã£ã€ãèããŸããããŸããæ®æ®µGitHubãSlackäžã§ããåãããããŠããã ããŠãããCakePHPã®ãªãŒããšã³ãžãã¢ã§ãã @mark_story ããããæ¥æ¬äººã³ã¢ã³ããã¿ãŒã® @chinpei215 ãããªã©ãšçŽæ¥è©±ãããããšãŠã楜ããæéãéããããŠããã ããŸããã ãã®ãããªæ¥œããæéãçšæããŠããã ãããCakeFest 2019ã®éå¶ã¡ã³ããŒã®æ¹ã
ã«æè¬ããããŸãããŸããåå ãããã£ã³ã¹ãæãã°ã次åã®CakeFestã«ãåå ããããšæããŸãã Thank you for holding CakeFest 2019 in Japan!
ããã«ã¡ã¯ïŒBASEæ ªåŒäŒç€Ÿã®è€å·ïŒããµããïŒã§ãã 2019幎10æ31æ¥éå¬ããã EOF2019 (Engineering Organization Festival 2019) ãšãããšã³ãžãã¢ã®ããŒã ãããžã¡ã³ãã«æºãã人éã®ã€ãã³ãã«ãã¹ãã³ãµãŒãšããŠåå ãããšå
±ã«ç»å£ããŠãŸãããŸããã ãã¡ããåœæ¥ã®çºè¡šè³æã«ãªããŸãã 2019/10/31 BASE瀟çºè¡šè³æ - EOF2019 from çäž è€å· ãã¬ãŒã³ããŒã·ã§ã³ã®ç®çãšããŠã¯ããšã³ãžãã¢ã®ãããžã¡ã³ãæ¥åã¯ã¯ãªãšã€ãã£ããªä»äºã§ããããšã³ãžãã¢ãªã³ã°ã®å»¶é·ç·äžã§ãããªããã ãïŒãšããããšãç¥ã£ãŠæ¬²ããããã®çµæãšããŠããšã³ãžãã¢ãªã³ã°ãããŒãžã£ã«ææŠãã人ãå¢ãããããšãããã®ã§ãã ãªããBASEæ ªåŒäŒç€Ÿã«åãCTOãšããŠãžã§ã€ã³ããæã«ã¯ããã§ã«ãšã³ãžãã¢ãäœäººãããç¶æ
ã§ãããäžå¿ãBASE嵿¥çŽåŸããæè¡é¡§åãšããŠé±äžããããããããããšããŠBASE瀟ã«ã¯éã£ãŠããŸããããã¡ãããšäŒç€Ÿã®äžã«å
¥ã£ãŠã¿ããšããããŸã§å
šç¶èŠããŠããªãã£ããã®ãããããèŠããããã«ãªããåœæã¯é«ééè·¯ã®åæµè»ç·ãå
šåã§èµ°ããããªæãã§ã©ãã«ãCTOãšããŠæŽ»åéå§ããèšæ¶ããããŸãã ãã®é ã®çµç¹èª²é¡ãããåŸã
ã«éçºè
ãå¢ããŠãã£ãŠãä»ã®æ®µéã«ãŸã§ãªãæã®è©±ããããŠããã ããŸãããããããåããããªãã§ãŒãºããä»åŸæé·ããŠããã¹ã¿ãŒãã¢ããã®CTOãEMã®äººãã¡ãå°ãã§ãåèã«ãªãã°ãšæã£ãŠã®æ
å ±å
±æã§ããåœç¶ãåã
ã®äºæ
ã¯ã±ãŒã¹ãã€ã±ãŒã¹ã§ãããããŸããããäœãã®åèã«ãªãã°å¹žãã§ãã ãªãããããŸã§ããããŒãžã£ã«èå³ãã人åãã®ãã¬ãŒã³ããŒã·ã§ã³ãªã®ã§ããã®åœ¹å²ã«ã€ããŠã¯å°ãç
œããããªè¡šçŸãå
¥ã£ãŠããŸãããããžã¡ã³ãæ¥åã«èå³ããªãæ¹ãªã©ã§äžå¿«ã«æãããæ¹ãããã£ããã£ããå
ãããŠè¬çœªããŠãããŸãã ãªããåœæã®BASEã®ç¶æ³ã¯ã調ã¹ãããããèšäºã«ããŠãããŠããŠãåœæã®ã¡ã³ããŒãç¥ã£ãŠããåã¯ã€ãæ³£ããŠããŸãèšäºã ã£ãã®ã§ãã¡ããããããã£ããæ¯éã mochi.click
ããã«ã¡ã¯ïŒãã®åºŠã¯10/12(å)ã«æ²çžã§éå¬ããã PHPã«ã³ãã¡ã¬ã³ã¹æ²çž2019 ã«BASEãåè³ïŒ3åãç»å£ããããŸããïŒä»åã¯ããããŒ( @m3m0r7 )ãå·å³¶ïŒ @nazonohito51 ïŒãæ±å£ïŒ @hgsgtk ïŒã®3åããåå ã¬ããŒãããå±ãããŸãïŒ ã€ãã³ãæŠèŠ PHPã«ã³ãã¡ã¬ã³ã¹æ²çž 㯠ã«ã³ãæ§ ( @kanbo0605 ) ãå®è¡å§å¡é·ãåããããæ²çžã§éå¬ãããPHPã«ã³ãã¡ã¬ã³ã¹ãšããŠã¯ãä»å¹Žåã§ããïŒ10/12ã« PHPã«ã³ãã¡ã¬ã³ã¹æ²çž ãéå¬ãããã®ã§ãããããã«å ããŠåæ¥ïŒ10/11ïŒã«éå¬ããã (éå
¬åŒ)PHPã«ã³ãã¡ã¬ã³ã¹æ²çž2019åå€ç¥ãªãžã§ã¯ãã³ã³ ã«ãåå ããã®ã§äž¡æ¹ã¬ããŒãããããŸãã (éå
¬åŒ)åå€ç¥ 10/11ã« (éå
¬åŒ)PHPã«ã³ãã¡ã¬ã³ã¹æ²çž2019åå€ç¥ãªãžã§ã¯ãã³ã³ ãéå¬ãããŸããã忥ããåå ã§ããPHPerãã¡ã§ããããé°å²æ°ã§ãé
ã飲ã¿ãªããããŒã¯ãèãããæèŠªãããããäŒã§ããã äŒå Žã¯ãé£èŠåžå
ã® æ ªåŒäŒç€Ÿãµã€ãã¹ ããã®ãªãã£ã¹ã§ãããéåžžã«ããããã§éãããããäŒå Žã§ããã åå€ç¥äŒå Žã®æ ªåŒäŒç€Ÿãµã€ãã¹ãã æ¬ç·š 10/12ã¯ãããã PHPã«ã³ãã¡ã¬ã³ã¹æ²çž2019 åœæ¥ïŒäŒå Žã¯ãå®é湟åžã«æ§ãã CODE BASE OKINAWA ãšããäŒå Žã§ããã PHPã«ã³ãã¡ã¬ã³ã¹æ²çž2019 å
¥ãå£ æµ·ãè¿ããŠã¡ãã£ãšäŒå Žã®è£ã«è¡ãã°ããã«æµ·ãèŠããPHPã ãã§ãªãæ²çžãæããããšãŠãè¯ãã§ããïŒ äŒå Žè£ããã§ããæ©ããšèŠããå®éæ¹Ÿã®æµ· BASEã¯ãã·ã«ããŒã¹ãã³ãµãŒãšããŠåè³ããŠããã®ã§ããªãŒããã³ã°ã§ã¯äŒç€Ÿç޹ä»ããã ããŸããã ãªãŒããã³ã° (éå
¬åŒ)åå€ç¥ãæ¬ç·šã«ãŠããããŒ( @m3m0r7 )ãå·å³¶ïŒ @nazonohito51 ïŒãæ±å£ïŒ @hgsgtk ïŒã®3åãå
šå¡ã§åèš7åç»å£ããããŸããã以äžç»å£è
åäœã«ãã玹ä»ã«ãªããŸãïŒ ç»å£å
容&ã¹ã©ã€ã ããããŒ( @m3m0r7 )ãå·å³¶ïŒ @nazonohito51 ïŒãæ±å£ïŒ @hgsgtk ïŒã®3åã®çºè¡šå
容ããäŒãããŸãïŒ ããã㌠æ²çžã§ã¯ãåå€ç¥ã»æ¬ç·šã»æèŠªäŒ LT ãããã㊠3 åç»å£ãããŠããã ããŸããã åå€ç¥ åå€ç¥ã¯ PHP ã§ ãã€ããªãã¡ã€ã«ãèªã -JVM ã® ClassFile Structure ãèªãã§ã¿ã - (English Title: How to read a binary file - Read the ClassFile Structure of JVM - )ãšããå
容ã§ç»å£ & ã©ã€ãã³ãŒãã£ã³ã°ããããŠããã ããŸãããäºãã©ããã£ãããšãããã®ããã¹ã©ã€ãã§äœã£ãŠããã®ã§ãããã»ãšãã©ãã©ã€ãã³ãŒãã£ã³ã°ã ã£ããããè³æã¯ã¢ããããŒãããŠããŸãããä»åã® PHP ã«ã³ãã¡ã¬ã³ã¹æ²çžã§ã¯å°æ¹Ÿã®æ¹ãå€ãããã£ããã£ãŠããããšãåå€ç¥ã§ç¥ããæ¥ãã§ãã®å Žã§è±èªçã®è³æãã€ãã£ãŠããŸããããããŠãåå€ç¥ã§ãã¶ãé£ã¹ãªãããORION ã飲ã¿ã€ã€ Drunk Driven Development ã§æ¥æ¬èªãšè±èªã®ã¹ã©ã€ãã亀äºã«äºã説æãããŠããã ããã©ã€ãã³ãŒãã£ã³ã°ã 15 åçšåºŠè¡ããŸãããã©ã€ãã³ãŒãã£ã³ã°ã®çºæ³ã¯ @DQNEO ããã®ã€ã³ã¹ãã€ã¢ã§ãã15åãšããéãããæéã§ããã®ã§ã次ã©ã€ãã³ãŒãã£ã³ã°ããããšãã¯ããå°ãé·ãã®æéã§ãããããªãšæããŸããã åå€ç¥ã§ã®ç»å£æ§å è±èªã«ããŸãèªä¿¡ããªãã£ãã®ã§ãããé°å²æ°ã§äŒãã£ãŠããããã§è¯ãã£ãã§ãã æ¬ç·š PHPer ã®ããã® PHPUnit ãš Selenium ã䜿ã£ããã©ãŠã¶ãã¹ãã®ããã ãšããã¿ã€ãã«ã§çºè¡šãããŠããã ããŸããããã¡ã㯠PHP ã«ã³ãã¡ã¬ã³ã¹åæµ·éã«ãŠç»å£ããå
容ãšåãã¿ã€ãã«ã§ãããçºè¡šã®ä»æ¹ãå€ãããã Twitter ã®ãã©ãã¯ãŒããããããªã³ã¯åããã©ãæ€ç¥ããã®ãç¥ãããããšãã£ãèŠæããããŸããã®ã§ãäžéšã¹ã©ã€ããå¢ãããŠãã¢ã³ã¹ãã¬ãŒã·ã§ã³ã远å ããŠããŸãã ãŸããäžåå è
ãšã㊠Swoole ã®ã³ã¢ã³ããã¿ãŒã® Albert Chen ããã® How Swoole Blows Your Mind about PHP? ãæèŽããããã«æèŠªäŒã®ãšãã«ã話ããããŠããã ããŠãããææçŸ©ãªæéãéãããŸããã ãã ã¹ã¿ãŒç£èŠã·ã¹ãã ã« Swoole ã䜿çšãããŠããã ããŠããã®ã§ãSwoole ã®ã©ã€ããµã€ã¯ã«ãªã©ããšãŠãåŠã³ã«ãªããŸããã æèŠªäŒ LT æèŠªäŒ LT ããããšããåãèããŠããŠãäœã話ãããæ©ãã§ãããã§ãããåšãããããŒããŒãã®è©±ãèãããŠããŠãä»ãŸã§äœ¿ã£ãŠããããŒããŒãã®è©±ããŠã¿ããããªããšèããã®ã§ãããããããªèšäºã«ãªã£ãŠãã話é¡ã§ã¯ãããäºçªç
ãã ãã©ãããããšããããšã§å°ãè¿·ã£ãŠããŸããã ãããŠãæãã€ãããã¿ããä»ãŸã§ã«å£ããããŒããŒããšãã·ã³ãã¡ãã§ããã£ããè³æãã€ããå£ããããŒããŒãã®æãåºã«æµžããªããæèŠªäŒ LT ã§ç»å£ãããŠããã ããŸããã å·å³¶ PHPã«ã³ãã¡ã¬ã³ã¹åæµ·éãšåããã¹ãã³ãµãŒã»ãã·ã§ã³ãšãã圢ã§ç»å£ãããŠããã ããŸãããç§ã«ããŠã¯çããå匷äŒèšèšã®è©±ããããŠããã ããŸããããšãŠãåé¿ãããé©ããŠããŸããå匷äŒãéããŠã©ãæé·ããã®ãã ãšã³ãžãã¢ã®ç¥ççç£è¡ ããåŠç¿ãã¿ãŒã³ãåŒçšããªããäžè¬åããŠè©±ãããŠããã ããŸããã æ±å£ @hgsgtk æ²çžã§ã¯ãéå
¬åŒåå€ç¥ã»æ¬ç·šã»æèŠªäŒã®3åçºè¡šããŠããŸãã ãã¶ã€ã³ãã¿ãŒã³ãåºèªããæ·±ãçè§£ãã at éå
¬åŒåå€ç¥ éå
¬åŒåå€ç¥ã§15åãæéãé ããŠè©±ããŸãããGoFïŒGang of FourïŒã®ãã¶ã€ã³ãã¿ãŒã³ã¯ã建ç¯å®¶ã¯ãªã¹ããã¡ãŒã»ã¢ã¬ã°ã¶ã³ããŒã®ããã¿ã³ã»ã©ã³ã²ãŒãžãã«åœ±é¿ãåããã¢ã€ãã¢ã§ããæ®æ®µããã¶ã€ã³ãã¿ãŒã³ãèªç¶ãšå£ã«ããŠããç§éã§ãããæ¹ããŠãã®åºèªãããã¶ã€ã³ãã¿ãŒã³ãèŠããšããã®ç®çã»èª²é¡æãèŠããŠããã®ã§ã¯ãšèããŠããŸããä»åã®çºè¡šã¯ãã®èããèšèªåããŠã¿ãŸããã çºè¡šåŸã akki_megane ãããšãçºè¡šå
容ã«é¢é£ããã¯ãªã¹ããã¡ãŒã»ã¢ã¬ã°ã¶ã³ããŒã®å»ºç¯çè«ã«ã€ããŠã®æžç±ææ³æŠãã§ãããã @koyhoge ããã«ãã¿ã³ã»ã©ã³ã²ãŒãžã«é¢é£ããåèæ
å ±ãããã ããããçºè¡šããããšã§ããã«çè§£ãæ·±ãŸã£ãŠããæéã«ãªããŸããã ãå²ãçªããå¢ãããªãããã®ã³ãŒãèšèš at æ¬ç·š æ¬ç·šã§ã®Lightning Talkäžã®æ§å æ¬ç·šã§LTã®äžæ ãé ããŠè©±ããŸãããæ®æ®µãæ¥åã§ã®éçºãããŠããŠããå
ã®ã³ãŒããå³ããããããæ¹åããæéããªãããããæ©èœè¿œå ã®ãã€ã«ã¹ããŒã³ã¯è¿«ã£ãŠããããšããç¶æ³äžã§çãŸããPull Requestã«å¯ŸããŠããã£ãšããã·ãªéžæè¢ãã®è³æãåºããããã«ããããšæãããã®è³æãäœæããŸããã æèŠªäŒã«ãŠãåèã«ãªã£ãããšææ³ãé ããããè³æå
¬éåŸãçŽ4100Viewã»çŽ190ã¯ãŠã¶ïŒ2019幎10æ15æ¥æç¹ïŒããã ããå€ãã®æ¹ã«ã芧ããã ãçµæã«ãªããŸããã PHPã«ãããç¬èªäŸå€èšèšãèãã at æèŠªäŒ åœæ¥ã®æèŠªäŒLTããã£ãã®ã§è©±ããŸãããäŸå€èšèšã«ãããŠãã©ã®ããã«ç¬èªäŸå€ã¯ã©ã¹ãäœããã«ã€ããŠã¯ããšã©ãŒãã³ããªã³ã°ã«ã€ããŠã®èãæ¹ããã®èåŸã«ããå質ã«ã€ããŠã®èãæ¹ãèæ¯ã«ãããšæããŸããä»åã¯ãç¬èªäŸå€ã®ç¹ã«åºåºã¯ã©ã¹ãã©ãPHPã«ãããŠå®çŸãããããSymfonyã®å
éšå®è£
ãªã©ãåèã«ããªããèãããã®ãè³æã«ããŸããã ãšãã£ãŠããæèŠªäŒãªã®ã§è³ãããèŠçŽ ãæ¬²ããããªãšããããšã§ãå°æ¹Ÿããæ¥ãŠããæ¹ã
ãããã®ã§ãå
šç·šè±èªã§è©±ããã£ã¬ã³ãžãããŸãããããçšåºŠäŒå Žã®çãäžããã«è²¢ç®ã§ãããããªæ°ãããã®ã§è¯ãã£ãã§ãã ãããã« PHPã«ã³ãã¡ã¬ã³ã¹æ²çž2019 ã®å®è¡å§å¡é·ã®ã«ã³ãæ§ïŒ @kanbo0605 ïŒãã¯ãããå®è¡å§å¡äŒã®çæ§ããŸãåŒç€Ÿãšã³ãžãã¢ã®ã»ãã·ã§ã³ããæž
èŽããŠãã ãã£ãçæ§ã«å¿ãã埡瀌ç³ãäžããŸããPHPã³ãã¥ããã£ã«å¯ŸããŠåè³ãç»å£ãšãã圢ã§åŸ®åãªããè²¢ç®ã§ããããšå
æ ã«æããŸããæ¬¡åã®éå¬ãå¿ããæ¥œãã¿ã«ããŠãããŸããèª ã«ããããšãããããŸããïŒ
2019/10/12 (å) ã«éå¬ããã PHP ã«ã³ãã¡ã¬ã³ã¹æ²çž 2019 ã« BASE ã«æå±ãã 3 åã®ãšã³ãžãã¢ãç»å£ããŸãã BASE ã¯ãããŸã§ã«ãéå¬ãããŠãã PHP ã«ã³ãã¡ã¬ã³ã¹ãžã®ç»å£äžŠã³ã«ã¹ãã³ãµãŒããã³ãã¥ããã£è²¢ç®æŽ»åãšããŠè¡ã£ãŠåããŸããã PHP ã«ã³ãã¡ã¬ã³ã¹æ²çžã¯åéå¬ãšã®ããšã§ãåŒç€Ÿãšã³ãžãã¢ã楜ãã¿ã«ããŠãããŸãã ã»ãã·ã§ã³ã®å
容ã«ã€ã㊠ããã㌠( @m3m0r7 ) ã¬ã®ã¥ã©ãŒã»ãã·ã§ã³: 30å æå±: Product Dev Division åºç€éçº PHPer ã®ããã® PHPUnit ãš Selenium ã䜿ã£ããã©ãŠã¶ãã¹ãã®ããã ã¿ãªããã¯ãã©ãŠã¶ãã¹ããããéã«ãã©ã®ããã«ãã¹ããããŠããŸãã§ããããïŒ ãã©ãŠã¶ãã¹ããããéã«æåãªãœãããŠã§ã¢ãšã㊠Selenium ããããŸãã ãŸãã PHP ã§ã¯ Selenium ãšç¹ãããã® OSS ãšã㊠Facebook WebDriver ããããŸãã Selenium ã䜿ãããšã«ããããªã³ã¯åããçºçããŠããªããã®ç¢ºèªãããããåçã«çæããã DOM ã®æ€èšŒãè¡ã£ããã ãã©ãŒã ã«èªåã§å€ãå
¥ããããªã©æ§ã
ãªçšéã§ãã¹ããè¡ãããšãã§ããŸãã ããã«ã Selenium 㯠JavaScript ããã®å Žã§å®è¡ã§ãããã Chrome, Firefox, IE ãªã©ãã©ãŠã¶ããšã®ãã¹ããè¡ãããšãå¯èœã§ãã ãããŠãå®éã«ç§ã以åå€ããŠããäŒç€Ÿãè€æ¥å
ã«å°å
¥ããçµéšãããšã« Selenium ãš Facebook WebDriver ãš PHPUnit ã䜿ã£ããã¹ãã®æ¹æ³ãã å°å
¥ããã«ããã£ãŠã©ã®ãããªèŠåŽããã£ãã®ããããŒã¯ã§ããããšæããŸãã æ±å£ åæ ( @hgsgtk ) LT: 5 å æå±: BASE BANK, Inc. Dev Division Tech Lead ãå²ãçªããå¢ãããªãããã®ã³ãŒãèšèš é·ãç¶ãã·ã¹ãã ãéçšããŠãããšããã¹ããæžãããŠããªãã³ãŒããäœçŸè¡ã»äœåè¡ã«æž¡ãã¡ãœãããååšããã³ãŒããéæã«ååšããã·ã¹ãã ã«å¯ŸããŠéçšã»æ¹ä¿®ãããŠããå¿
èŠãåºãŠããããšããããŸãã ãããã«å¯ŸããŠãæ ¹æ¬æ²»ççã«æ§é ãæ¹åãããªã©ãå¿
èŠãšãããã€ã€ããå·¥æ°æã»æ¹åããããã®æéã®åé¡ãªã©ã§ãæ¢åã®ã³ãŒãããŒã¹ãšåæ§ã®ããæ¹ãèžè¥²ããŠããŸã£ãŠããã«ç¶æ³ãæªåãããŠããŸããšããçµéšãããããšã®ããæ¹ã¯å€ãã®ã§ã¯ãªãã§ããããããã®ããŒã¯ã§ã¯ãã¬ã¬ã·ãŒã³ãŒãæ¹åã®ææ³ãäžéšã掻çšããŠãããã«ãæ¬¡ã®æ¹åã«ã€ãªããäœå°ãæ®ããç¶æ³ãã«ä¿ã€ãã話ããŸããå
·äœçã«ã¯ããã¹ãã©ãŠãã¡ãœãããã»ãéæšå¥šæ©èœã®åé¿ã»æç€ºãã»ã仿§åãã¹ãããªã©ãæããããŸãããã®ããŒã¯ãéããŠããä»ã®ã³ãŒãã«åŒãããããã«æèããŠèªåã®ä»äºãã³ãŒãã«åæ ãããããšããèãæ¹ã«ã€ããŠäŒãããã°ãšããã£ãŠããŸãã å·å³¶ æ
§ ( @nazonohito51 ) ã¹ãã³ãµãŒã»ãã·ã§ã³: 10å æå±: Product Dev Division åºç€éçº ç€Ÿå
å匷äŒã§OOPãšCleanArchitectureãšDDDãå匷ãå§ãããšããã話 BASEã§ã¯äžéšã®æå¿ã§OOPãšCleanArchitectureãšDDDã®å匷ãããŠããŸããæè¿æµè¡ãã®ã¯ãŒããå
šéšè©°ã蟌ã¿ãŸãã£ãããªã¥ãŒã æºç¹ãªå匷äŒã§ã¯ãããŸãããçè«ãšå®è·µãã€ãªããããšããç®çãæ²ããŠãèªæžãããå®è·µãšãã£ã¹ã«ãã·ã§ã³ãéèŠããªããååãã«åãçµãã§ããŸããRobert C. Martinã®æžç±ã§æ±ãããŠãã絊äžã·ã¹ãã ã®äŸã顿ã«ããã¡ã€ã³ã¢ããªã³ã°ãCleanArchitectureäžã§ã®å®è£
ãOOPãã¶ã€ã³ãã¿ãŒã³ã®é©çšãªã©ãã¢ãããã°ã©ãã³ã°ãéããŠå®è·µããŠããŸãããŸã éå¬ããŠéããªãããããªããªãçµæãã話ããããšã¯é£ããã®ã§ãããå®è·µãéããŠåŸãææ³ãåå è
ã®å€åãªã©ãåãäžããŠãã¿ãªããã®æã¡åž°ããç¥èã«å€æããŠçºè¡šããããšæããŸãã æåŸã« PHP ã«ã³ãã¡ã¬ã³ã¹æ²çž 2019 ã®åœæ¥ã®ãã±ããã¯äžèšãããç³ã蟌ã¿ããã ããŸãã PHPã«ã³ãã¡ã¬ã³ã¹æ²çž2019 PHPã«ã³ãã¡ã¬ã³ã¹æ²çž2019 æèŠªäŒ ããã§ã¯ãã¿ãªããŸã«ãäŒãã§ããããšã楜ãã¿ã«ããŠãããŸãã
ãã€ããããŸã§ããUIãã¶ã€ããŒã®éæïŒ @nomjic ïŒã§ãã å
æ¥ãæžããã Figmaã®ãã©ã°ã€ã³ç޹ä»èšäº ã§ãå°ãè¿°ã¹ãŸããããUIãã¶ã€ã³ããŒã«ã§ãã Figma ã¯ãã³ãã¶ã€ããŒãäœå³ãè³æäœããè¡ãã«ããã£ãŠãæçšã§ãã ãã£ãšãŠãŒã¶ãå¢ããã奜ãŸãã... ãšæ¥é ããæã£ãŠãããã瀟å
ã§ãã³ãã¶ã€ããŒåãã«Figmaè¬ç¿äŒãè¡ãæ©äŒãåŸãŸããã®ã§ããã®çµç·¯ãè¬ç¿äŒã®å
å®¹ãææãªã©ãæžãããŠããã ãæ¬¡ç¬¬ã§ãã è¬ç¿äŒãäŒç»ããã«è³ãèæ¯ ãã³ãã¶ã€ããŒãäœå³ããã®ãã€ããã åŒç€Ÿã§ã¯ããã³ãã¶ã€ããŒã®äººïŒãããã¯ããããžã¡ã³ãããšã³ãžãã¢ãªã³ã°ã®ã¡ã³ããŒïŒãã¡ãã£ãšããäœå³ãããããUIã®ã¯ã€ã€ãã¬ãŒã ãäœãæã«ã¯ãGoogle Slidesã䜿çšããå Žåãå€ãã§ãã æ®æ®µãã¶ã€ã³ããŒã«ã䜿çšããŠãã身ãããããšãã¹ã©ã€ãè³æäœæããŒã«ã䜿ã£ãŠçµµå³ãæããªã㊠ããã®äººãã¡ã¯äœãšããèŠåœ¹ã«èããŠããã®ã...ã ãšæã£ãŠããŸãã®ã§ãããäžæ¹ã§Adobeã®ããŒã«ãSketchã倿©èœãããŠããŒãã«é«ãããšããã®ãçè§£ã§ããŸããã倿®µã匵ããŸãããã Figmaãè¯ãã®ã§ã¯ å³äœãã«å€§å€ãªåŽåãå²ããŠããããšãèŠãããåŒç€Ÿãã¶ã€ããŒãããFigmaã¯æ¯èŒçç°¡åã«äœ¿ããããå§ããŠã¿ãããããšèããŠãã³ãã¶ã€ããŒåãã®Figmaãã¥ãŒããªã¢ã«ãäœæããŠãããŸãããïŒãã¥ãŒããªã¢ã«ã¯æ¬èšäºã®åŸåã«æ²èŒããŸããïŒ ãããŠããè¬ç¿äŒããããã®ã ãæäŒã£ãŠããããŸããããšç§ã«ãäŸé Œããã ããããã€ïŒãããŸãïŒFigmaäžæ³ïŒããšæ¿ã£ã次第ã§ãã ãªã Figma ? ãã¶ã€ã³ããŒã«ãæ°å€ããäžã§ãªãFigmaãéžãã ããšèšããšãçç±ã¯ä»¥äžã®éãã§ãã æäœæ¹æ³ãïŒæ¯èŒçïŒã·ã³ãã« ãã©ãŠã¶äžã§æäœå¯èœãªã®ã§ãOSãåããªã æ
å ±ãã·ã§ã¢ãããã³ã¡ã³ãã€ãããããã®ã楜 æäœæŠå¿µãGoogle Slidesã«è¿ã ⻠泚èšïŒFigmaã®ãã° Figmaããå§ãããã«ããã£ãŠè§ŠããããåŸãªããã°ãäžä»¶ãããŸãã å
šè§æåãå
¥åããçŽåŸã«åè§å
¥åã¢ãŒãã«åãæ¿ããŠæåãå
¥åãããšãåãæ¿ããçŽåã«å
¥åããŠããå
šè§æåãæ¶ããŸãã 詳ãã㯠ãã¡ãã®noteèšäº ãªã©ãåç
§ãã ããã ãã®ãã°ããç¡ããã°ãªãã®æµæããªãFigmaãå§ãã§ããã®ã§ãã...ã Figmaè¬ç¿äŒå®æœ æŠèŠ æéïŒ60å å
容ïŒFigmaã®éçšã«ãŒã«ãšåºæ¬æäœã®èª¬æ & ãã³ãºãªã³ è¬ç¿å¯Ÿè±¡ïŒãããã¯ããããžã¡ã³ãã®ã¡ã³ããŒïŒãšã³ãžãã¢ãåå OKïŒ ç®çïŒâ åºæ¬æäœã®çè§£ â¡æ¥œãã è¬ç¿å
容 以äžã®ãããªæµãã§è¬ç¿äŒã宿œããŸããã 1. Figmaã®æŠèŠç޹ä»ïŒ5åïŒ è¬ç¿äŒã®å°å
¥éšã§ãã FigmaãUIãã¶ã€ã³ä»¥å€ã«ãæ§ã
ãªçšéã§äœ¿ããããšãã³ã©ãäœæ¥ããããããšããã¡ãªãããããããš... çã3åçšåºŠã§èª¬æããŸããã 2. Figmaã®éçšã«ãŒã«èª¬æïŒ5åïŒ Figmaã¯ããŒã¿ã®ã·ã§ã¢ãéåžžã«å®¹æã§ããããã«ããã£ããæ©å¯æ
å ±ãæŒãããŠããŸãå±éºããããŸãããã®ãããã®ç¹ãèžãŸããŠãã©ã€ã»ã³ã¹ç®¡çãããŒã¿ã·ã§ã¢ã«é¢ããã«ãŒã«ã®èª¬æãè¡ããŸããã 3. åºæ¬æäœã®èª¬æïŒãã¥ãŒããªã¢ã«ããªããïŒïŒ20åïŒ äºåã«äœæãããã¥ãŒããªã¢ã«ããªãã圢ã§ãã³ãºãªã³ããŠãåºæ¬æäœãçè§£ããŸãã ïŒãã®ãã¥ãŒããªã¢ã«ã¯æ¬èšäºã®åŸåã«æ²èŒããŸãã®ã§ããã³ãã¶ã€ããŒã®äººãFigmaã®äœ¿ç𿹿³ãåŠã³ããæã®åèã«ããŠããã ããã幞ãã§ããïŒ 4. componentã®æŠå¿µç޹ä»ïŒ5åïŒ Figmaã«ãããcomponentã®æŠå¿µãšæ±ãã«ã€ããŠãç°¡åã«ã§ãã説æããŸãã 1ã€äœãã°è€æ°ç®æã§äœ¿ããŸããã䟿å©ãªãã€ã§ãã ãªããžã§ã¯ãå¿åèšèªã§èšãæã®ClassãšInstanceã¿ãããªãã€ã§ãç¶æ¿é¢ä¿æã£ãŠãŸãã ãšããçšåºŠã®ãã£ãããã説æãããŸããã 5. 課é¡ãäžããŠåã
ãã©ã€ïŒ25åïŒ æåŸã«ããç»é¢é·ç§»å³ãäœã£ãŠã¿ããããšãã課é¡ãäžããŠãæ®ãã®æéã§ãã©ã€ããŠããããŸãããã©ã€ããéçšã§è³ªåãããããšãã£ããéæãã¶ã€ããŒã«èããŠããããŸãã äºãçšæãã1ã€ã®ãã¡ã€ã«äžã§äžæã«äœæ¥ãããŠããããŸããã ä»ã®UIãã¶ã€ã³ããŒã«ã«ã¯ã§ããªããFigmaãªãã§ã¯äœ¿ãæ¹ã詊ããŠãããããããã®åœ¢ããšããŸããã ããã§ã¯ãäœ¿ãæ¹ãèŠããŠãããããšãããæ¥œããã§ãããããšãæšãšããŸãããæ¥œããæ¹ãèšæ¶ã«å®çãããããçµæãšããŠæ¥œæå¹çãé«ãã ãããšèŠèŸŒãã§ã®ããšã§ãã æ¡ã®å®ãäžãããé¡ãç¡èŠããŠèªç±ã«å³ïŒãšããããã·ã¥ãŒã«ãªã¢ãŒãïŒãç»é¢äžã«å±éãã埡ä»ãè€æ°åããã£ããããŸããããããã¯ããã§OKã§ãããäœããããšæã£ããã®ãã©ãäœããããåã
ããã©ã€ããŠäžæç¹ãã£ãã質åããããšããå Žãçšæã§ããã®ã§ãè¬ç¿äŒãå¬ããåŽãšããŠã¯ç®çãéããŸããã ææ ã²ãšãŸãããâ åºæ¬æäœã®çè§£ â¡æ¥œããããšããç®çã¯éããŸããã ãããæ¥åã«åœ¹ç«ã£ããã«ã€ããŠã¯ãè¬ç¿äŒã®1é±éåŸã§ããçŸæç¹ã§ã¯ãŸã ããããŸããã 宿¥åã«å¯ŸããŠã©ããªåœ±é¿ããã£ããã¯ãããããŸããå ±åããããšæããŸãã [ä»é²] è¬ç¿äŒã®ããã«äœã£ããã¥ãŒããªã¢ã« 以äžãè¬ç¿äŒã§äœ¿çšãããã¥ãŒããªã¢ã«ã転èŒããŸããïŒäžéšçç¥ïŒ STEP1ïŒãã¡ã€ã«ã®æ°èŠäœæ åæç»é¢ã®ããããŒã® ïŒ ãããŒãžå
ã® ïŒ New File ãã¯ãªãã¯ãããšãã¡ã€ã«ãæ°èŠäœæã§ããŸãã STEP2ïŒFrameã®äœæ Frameã¯ããããçµµãæžãçºã®çšçŽã ãšæã£ãŠãã ãããïŒSketchã§ãããšããã®ã¢ãŒãããŒãã§ãïŒ ãã®Frameã¯äœããªããŠãäœæ¥ã§ããŸãããæºã«çŽæ¥çµµãæåãæžããŠãç¶æ
ã§ãã è³æãã¯ã€ã€ãŒãäœæããã¬ãã«ã ãšèŠããããã°Frameã¯ãªããŠã倧äžå€«ã§ãããpdfæžãåºããå°å·ããå Žåã¯Frameãäœã£ãŠãããæ¹ãè¯ããšæããŸãã ããŒã«ããŒãã äº ã¿ãããªã¢ã€ã³ã³ã®ããŒã«ãéžã³ãŸãã ãã®ããŒã«ãéžã¶ãšå³åŽã®ããã«ã«ã©ã®ãµã€ãºã§Frameãäœæãããéžæè¢ãåºãŠããŸãã äž»èŠãªããã€ã¹ãµã€ãºãéžæè¢ã«åºãŠããã®ã§ã奜ããªãµã€ãºãéžæããŠãã ããã ãµã€ãºãéžãã§ã¯ãªãã¯ãããšç»é¢äžã«FrameãäœæãããŸãã äœæããFrameã¯éžæç¶æ
ã ãšåé
ã«å°ããåè§ãåºãã®ã§èªç±ã«ãµã€ãºã倿ŽãããD&Dã§ç§»åãã§ããŸãã 现ãããµã€ãºãèšå®ãããå Žåã¯å³åŽã®ããã«ã«WãHãæ°å€å
¥åã§ãããšãããããã®ã§ããã¡ãã§èšå®ããŠãã ããã STEP3ïŒããã¹ãå
¥å ããŒã«ããŒã® T ã¿ãããªã¢ã€ã³ã³ïŒã®ããŒã«ãéžæããŸãã ããŒã«ãéžæãããFrameäžã®å¥œããªäœçœ®ïŒFrameå€ã§ã倧äžå€«ã§ãïŒãã¯ãªãã¯ããŠããã¹ããå
¥åããŸãã ããã¹ãã®ãµã€ãºãè²ãªã©ã倿Žãããå Žåã¯å³åŽã®ããã«ã§å€æŽããŸãã ããã¹ãå
¥åç¶æ
ã ãšéžæéšåããã¹ã¿ã€ã«ãé©çšãããªãã®ã§ãããã¹ãå
šäœã«ã¹ã¿ã€ã«ãé©çšãããå Žåã¯ãäžåºŠããã¹ãã®å
¥åã®ç¶æ
ãçµäºãããŠãïŒããŒã«ã ã¿ãããªïŒåãéïŒã¢ã€ã³ã³ã®ããŒã«ã«ãªã£ãŠããã®ã確èªããŠïŒããäžåºŠããã¹ããéžæããŠããã¹ã¿ã€ã«ã®å€æŽãããŠã¿ãŠãã ããã STEP4ïŒå³åœ¢ã®æç» åè§ãç¢å°ãæãããæã¯ããŒã«ããŒã® â¡ ã®éžæããŸãã â¡ ã®æšªã® ãã¯ãªãã¯ãããšããã€ãéžæè¢ãåºãŠããã®ã§å¥œããªå³åœ¢ãéžæããŠãã ããã æãããå³åœ¢ãéžæããç¶æ
ã§Frameäžã®å¥œããªäœçœ®ïŒFrameå€ãOKïŒã«D&Dã§å¥œããªãµã€ãºã®å³åœ¢ãæãããšãã§ããŸãã æåãšåãããã«ãé
眮ããå³åœ¢ã¯å³åŽã®ããã«ã§ã¹ã¿ã€ã«ïŒå¡ãè²ãçžåããè§äžžãªã©ãªã©...ïŒã倿Žããããµã€ãºã調æŽããããšãã§ããŸãã STEP5ïŒç¢å°ã®æç» åè§ãäžžãªã©ã®å³åœ¢ãšåæ§ã«ç¢å°ãæãããšãã§ããŸãã ç¢å°ã®å Žåã¯D&Dã§é
眮ããåŸã«ããã«ã¯ãªãã¯ãããããšã§ãç¢å°ãæ²ãããããããšãã§ããŸãã ç¢å°ãããã«ã¯ãªãã¯ããŠãç¢å°ã®äžã«ã«ãŒãœã«ãä¹ãããšäž¡ç«¯ãšçãäžã«âãåºãŠããã®ã§ãçãäžã®âãã€ãŸãã§å¥œããªäœçœ®ã«ç§»åããã°ç¢å°ãæ²ããããšãã§ããŸãã ç¢å°ãè€æ°ã®å Žæã§æ²ãããå Žåã¯ãç¢å°ç·äžã®âãšâã®éã«ã«ãŒãœã«ãç§»åãããšãèãâãåºãŠããã®ã§ããã®âãã¯ãªãã¯ãããšæ²ããçºã®ãã€ã³ããå¢ããããšãã§ããŸãã ç¢å°ã®ç·šéãçµäºããå Žåã¯ãããŒã«ããŒã«ãã Done ãã¿ã³ãã¯ãªãã¯ããŠçµäºããŠãã ããã STEP6ïŒç»åã®æ¿å
¥ ç»åãæ¿å
¥ããå Žåã¯ãå³åœ¢ã®æç»åæ§ã« â¡ ã¢ã€ã³ã³ã®æšªã® ãã¯ãªãã¯ã㊠Place Image ãéžæããŸãã ããŒã«ãéžæãããšç»åéžæãåºãŠããã®ã§ãæ¿å
¥ãããç»åãéžæããŸãã ç»åãéžæããããç»é¢äžã«ã¯ãªãã¯ã§é
眮ãããããD&Dã§ãµã€ãºãæå®ããŠé
眮ããŠãã ããã ç»åã®ããªãã³ã° æ¿å
¥ããç»åãFigmaäžã§ããªãã³ã°ããããšãã§ããŸãã ããªãã³ã°ãããç»åãéžæããŠããããŒã®çãäžãããã«ãã ã¿ããªã¢ã€ã³ã³ã® Crop Image ãéžæããŸããïŒãŸãã¯ç»åãããã«ã¯ãªãã¯ïŒ Crop Image ãã¯ãªãã¯ãããšç»åç·šéçšã®ããã«ã衚瀺ãããç»ååŽã«ããªã ãšãªã¢ã衚瀺ãããŸãã ãã®ããªã ãšãªã¢ãD&DããŠå¥œããªãµã€ãºã«ããªãã³ã°ããŸãã ããªãã³ã°åŸã«ç»åéšåãD&Dãããšããªã ãšãªã¢å
ã§ç»åã®äœçœ®ã倿Žããããšãã§ããŸãã ïŒè£è¶³ïŒç»åç·šéããã«ã®ã¹ã©ã€ããŒã¯ç»åã®ã¬ã¿ããçšã§ãïŒ ç»åã®ç·šéãçµäºããå Žåã¯ãç»åç·šéçšããã«ã® ãã¯ãªãã¯ããããäœããªããšãããããã«ã¯ãªãã¯ãããšç·šéãçµäºã§ããŸãã STEP7ïŒã³ã¡ã³ããã€ãã Figmaäžã§è³æãã¯ã€ã€ãŒã«ã³ã¡ã³ããã€ããå Žå㯠ã¿ãããªã¢ã€ã³ã³ã® Add/Show Comments ãéžæããŸãã ããŒã«ãåãæ¿ãããã³ã¡ã³ããã€ãããå Žæã§ã¯ãªãã¯ãããšã³ã¡ã³ããå
¥åã§ãããã£ãŒã«ããåºãŠããŸãã ã³ã¡ã³ããå
¥åããã Post ãã¿ã³ãã¯ãªãã¯ããŠã³ã¡ã³ããæçš¿ããŠãã ããã ã³ã¡ã³ããæçš¿ãããšå³åŽã®ããã«ã«ã³ã¡ã³ãã®ãªã¹ãã衚瀺ãããŸãã ã³ã¡ã³ãã«ã¯è¿ä¿¡ããããšãã§ããã®ã§ãä¿®æ£æç€ºãèŠæãªã©ãFigmaäžã§ãããšããã§ããŸãã ããã«ãŠåºæ¬æ©èœã®ç޹ä»ã¯çµããã§ãããç²ãæ§ã§ããïŒ
ããã«ã¡ã¯ïŒãã®åºŠã¯9/21(å)ã«åæµ·éã®æå¹ã§éå¬ããã PHPã«ã³ãã¡ã¬ã³ã¹åæµ·é ã«BASEãåè³ïŒ3åãç»å£ããããŸããïŒä»åã¯ããããŒ( @m3m0r7 )ãæ±å£ïŒ @hgsgtk ïŒãå·å³¶ïŒ @nazonohito51 ïŒã®3åããåå ã¬ããŒãããå±ãããŸãïŒ äŒå Ž æå¹åžæ°äº€æµãã©ã¶ ãšããã§ã£ã£ã£ã£ããïŒïŒïŒ äŒå Žãã«ã³ãã¡ã¬ã³ã¹äŒå ŽãšããŠéå¬ãããŸãããå§åçéæŸæã®ãã建ç©ã§ãèŽ
æ²¢ã«ç©ºéã䜿ã£ãŠãŸãããããŒã»ã»ã»ãããåæµ·éã åŒç€Ÿã¯ãŽãŒã«ããã©ã³ã«ãŠã¹ãã³ãµãŒã·ãããããŠããã ããŠããã®ã§ãã¹ãã³ãµãŒããŒã¹ãèšå¶ãããŠããã ããŸãããBASEã§è²·ããã·ã§ãããªãŒããŒããã®ååãæ¥å Žè
ã®æ¹ã«ãé
ãããŠãBASEãšãããµãŒãã¹ãçããã«ç¥ã£ãŠããããŸãããäŒå Žã§é
ãããã³ãŒããŒãšäžç·ã«ã楜ãã¿ããã ããã¿ããã§ãã ãŸãã¹ãã³ãµãŒããŒã¹ãšã¯å¥ã«ãåŒç€Ÿãã3åãç»å£ããŸããïŒä»¥äžç»å£è
åäœã«ãã玹ä»ãšãªããŸãã ç»å£å
容ã»ã¹ã©ã€ã by @memory Hello World, everyone! ããããŒ( @m3m0r7 )ã§ãã BASE æ ªåŒäŒç€Ÿã®åºç€ããŒã ã§ãœãããŠã§ã¢ãšã³ãžãã¢ãããŠããŸãã PHP ã«ã³ãã¡ã¬ã³ã¹åæµ·éã§ã¯ãæ¬ç·šã®ã¬ã®ã¥ã©ãŒã»ãã·ã§ã³ãã¢ã³ã«ã³ãã¡ã¬ã³ã¹ãæèŠªäŒ LT ã® 3 ã€ã«ãŠç»å£ãããŠããã ããŸããããŸããã¢ã³ã«ã³ãã¡ã¬ã³ã¹ã®æ èªäœã¯ãªãã£ãã®ã§ããã ããŒã ã ããã«ãæéã 10 åã»ã©ããã ããå®çŸããŸããããã®å ŽãåããŠåŸ¡ç€Œç³ãäžããŸãã ã¬ã®ã¥ã©ãŒã»ãã·ã§ã³ 忥ã«ããã«ã§æçµç¢ºèªãšããŠãã¢ã³ã¹ãã¬ãŒã·ã§ã³ã®ç¢ºèªãããŠåé¡ãªããšå€æãããåœæ¥ãè¿ããã®ã§ãããæ¬çªã§èŠäºã« docker ã³ã³ãããèµ·åã§ããªãåé¡ã§ããã¢ã³ã¹ãã¬ãŒã·ã§ã³ã倱æã«ãªãããã§ããã æ¬é³ãèšããšãé ã®äžãçã£çœã«ãªã£ãŠããŸã£ããã§ãããäŒå Žã®æž©ãã声æŽãã倱æãããããªããšããæ°æã¡ãå®ãçµãã ã®ããæçµçã«ã¯ãã¢ã³ã¹ãã¬ãŒã·ã§ã³ãåããäŒå Žãã倧ããªææãããã ããŸããã DEMO åããªããªã£ãŠæ³£ãããã ã£ã — ããããŒð± (@m3m0r7) September 21, 2019 docker ã³ã³ãããçŽããŠããéã«ãã©ããŒããŠãã ãã£ãã¹ã¿ããã®ã¿ãªããŸããªãŒãã£ãšã³ã¹ã®ã¿ãªããŸãæ¬åœã«ããããšãããããŸããã ã¿ãªããŸãããã£ããããªããã°ããã¢ã³ã¹ãã¬ãŒã·ã§ã³ã¯å€±æã«çµãã£ãŠããããšã ãšæããŸãã æè¬ããŠãããããŸãããæ¬åœã«ããããšãããããŸããã ããã«ãžæ»ã£ãéã«ç¢ºèªãããéãåå 㯠docker ã®ã³ã³ããåããã¶ã£ãŠãããšã®ãšã©ãŒãªã®ã§ ERROR: for php Cannot create container for service php: Conflict. The container name "/php" is already in use by container "6d11f8998f7f16f7715b2b2e7bf72c2cbf1d379afb84b18a8400a347c8dbcbd7". You have to remove (or rename) that container to be able to reuse that name. ERROR: Encountered errors while bringing up the project. ãšã©ãŒæã«ãæžããŠããããã«äžèšã®ããã« docker rm ãããã°ãåããŸããã docker rm 6d11f8998f7f16f7715b2b2e7bf72c2cbf1d379afb84b18a8400a347c8dbcbd7 åœæ¥ã¯ãã³ã³ããåãå€ãããšãã察çããšã£ãŠç¡äºãã¢ã³ã¹ãã¬ãŒã·ã§ã³ã§ããŸããã ã¢ã³ã«ã³ãã¡ã¬ã³ã¹ ã¢ã³ã«ã³ãã¡ã¬ã³ã¹ã§ã¯ ãPHP ã§ JVM ãå®è£
ããããšãã£ãå
容ã§çºè¡šãããŠããã ããŸãããããããªã€ãã³ãã§ã話ãããŠããã ããŠããå
容ãã®ã¥ããšåçž®ãããŠã PHP ã§ JVM ãå®è£
ãããšã¯äžäœã©ãããããšãªã®ããã¡ã€ã³ã« 10 åã§ã話ãããŠããã ããããã¢ã³ã¹ãã¬ãŒã·ã§ã³ããããŠããã ããŸããã æèŠªäŒ LT æèŠªäŒ LT ã§ã¯ ãPHP ã§ Python ãåããããšãã£ãå
容ã§çºè¡šãããŠããã ããŸããã ã¹ã©ã€ãè³æãèŠãŠããã ããã°ããããŸãã python ãã³ã³ãã€ã«ããéã«åºåããã pyc ãã¡ã€ã«ã PHP äžã§ãšãã¥ã¬ãŒã·ã§ã³ããããšãã£ãå
容ã§ãã ãã¡ãã®æé㯠5 åã ã£ãã®ã§ãã®ã¥ããšåçž®ãããŠããã ããŠããã¢ã³ã¹ãã¬ãŒã·ã§ã³ããããŠããã ããŸããã CakePHP2ã§ãPhpStormãã³ãŒãè£å®ããŠãããããã«ãã話 by @nazonohito51 BASEæ ªåŒäŒç€Ÿã§ãšã³ãžãã¢ããã£ãŠãããŸãå·å³¶ïŒ @nazonohito51 ïŒã§ãã ã¹ãã³ãµãŒã»ãã·ã§ã³æ ãšããŠ10åã®çºè¡šããããŠããã ããŸãããïŒå®ã¯BASEãã¹ãã³ãµãŒã»ãã·ã§ã³ãããã®ã¯ä»åãåãšãªããŸãïŒ ã¹ãã³ãµãŒã»ãã·ã§ã³ãšããããšã§äŒç€Ÿã®ç޹ä»çãªçºè¡šããããããªãšæã£ãŠããŸãããã3幎ã¶ãã«éå¬ãããåæµ·éã®å€§åã«ã³ãã¡ã¬ã³ã¹ã«åãã§åå ãããå匷ç±å¿ãªãšã³ãžãã¢ã®æ¹ã
ã«å¯ŸããŠäŒç€Ÿã®è©±ããããšããã®ãéæ®ããªãšæãããããŠããªããªã®æè¡ããŒã¯ã«ããŸãããæå€ãšSNSçã®çããããã®åå¿ããããã¹ãã³ãµãŒã»ãã·ã§ã³ãšã¯ããæ°è² ããæè¡ããŒã¯ã«å¯ããŠããŸã£ãŠè¯ãã£ããªãšæããŸãã èªäœããŠçè§£ããxUnit by @hgsgtk ã©ãããåããŸããŠãããã«ã¡ã¯ãæ±å£ïŒ @hgsgtk ïŒã§ããBASE BANKæ ªåŒäŒç€Ÿã«ãŠãœãããŠã§ã¢ãšã³ãžãã¢ãããŠããŸããç§ã¯ã次ã®ã¹ã©ã€ãã®å
容ã§Lightning TalkãããããŸããã xUnit ãšã¯ããã¹ãã£ã³ã°ãã¬ãŒã ã¯ãŒã¯ã®ç·ç§°ã衚ããã®ã§ãPHPerã§ããã°æ¯ãåžãããã«ãäžè©±ã«ãªã£ãŠããäºãå€ãã§ãããã PHPUnit ãxUnitãã¡ããªãŒã®äžã€ã§ãããã®ããŒã¯ã§ã¯ããããªxUnitã®ç¹åŸŽãèªäœããŠçè§£ããããšãããã®ã§ããä»åäœæãããã®ã¯ãGithubäžã«å
¬éããŠããŸãã https://github.com/hgsgtk/mpunit çºè¡šåŸãæ©éãèŽè¬ããã ããŠãã @itosho ããã«PRãé ããŸããïŒ https://github.com/hgsgtk/mpunit/pull/6 åœæ¥ãã¹ããŒãããŒã¯ã§çºè¡šã¹ã©ã€ãå
ããŸãšãã«èªãæéãªãã£ããšæããŸãã®ã§ããããç§ãxUnitèªäœãããïŒããšèå³ãæãããæ¹ãããã£ããããŸãããããã²ã¹ã©ã€ããšGithubã¬ããžããªã®ã³ãŒãåèã«ããã£ãšãã£ãŠã¿ãŠãã ããïŒ ãããã« PHP ã«ã³ãã¡ã¬ã³ã¹åæµ·éã®å®è¡å§å¡é·ã®ããæ§ïŒ @makies ïŒãã¯ãããå®è¡å§å¡äŒã®çæ§ããŸãåŒç€Ÿãšã³ãžãã¢ã®ã»ãã·ã§ã³ããæž
èŽããŠãã ãã£ãçæ§ã«å¿ãã埡瀌ç³ãäžããŸããæ¬¡åã®éå¬ãå¿ããæ¥œãã¿ã«ããŠãããŸããæ¬åœã«ããããšãããããŸããã
ã©ãããã¯ãããŸããŠãæ±å£ïŒ @hgsgtk ïŒã§ãã BASE BANKæ ªåŒäŒç€Ÿ Dev Divisionã§ãœãããŠã§ã¢ãšã³ãžãã¢ãããŠããŸãããã®åºŠã9æ14æ¥ã9æ17æ¥ã«éå¬ããã PyCon JP 2019 ã«åå ããã Pythonã䜿ã£ã APIãµãŒããŒéçºãå§ããéã« æŽåããCIãšãã¹ãæ©æ§ ããšããã¿ã€ãã«ã§çºè¡šããŠããŸããã PyCon JP 2019ãšã¯ 9æ14æ¥ã9æ17æ¥ã«éå¬ãããPythonãšã³ãžãã¢ãäžåã«éãåœå
æå€§çŽã®Pythonã®ã«ã³ãã¡ã¬ã³ã¹ã§ãã9æ16æ¥ã»17æ¥ã®åŸå2æ¥éã§ã»ãã·ã§ã³ã¹ããŒã«ãŒã«ããããŒã¯ãè¡ããã2æ¥éã§ãç§ã¯16æ¥ã®16:00ãã15åéç»å£ããŠããŸããã pycon.jp çºè¡šããå
容 çºè¡šããå
容ã¯ã Pythonã䜿ã£ã APIãµãŒããŒéçºãå§ããéã« æŽåããCIãšãã¹ãæ©æ§ ãšããã¿ã€ãã«ã§ãã pycon.jp ããŒã¯ã®æŠèŠã¯æ¬¡ã®ãããªå
容ã§ãã Pythonã¢ããªã±ãŒã·ã§ã³ãéçºãå§ããéã®CIã§ã®ã³ãŒãæ€æ»ãšãŠããããã¹ãã®æŽåã«ã€ããŠåãäžããŸããCIã«ã€ããŠã¯ãã¹ã¿ã€ã«ãã§ãã¯ããšã©ãŒè§£æã®èªååããŠããããã¹ãã«ã€ããŠã¯ãå®DBãå©çšããã±ãŒã¹çäºåã®èšèšã»æ©æ§çã®å¿
èŠãªå·¥å€«ã玹ä»ããŸãã çºè¡šè³æã¯Speaker Deckã«å
¬éããŠããŸãã çºè¡šåç»ã¯YouTubeã«ãŠå
¬éããã ããŠããŸããã www.youtube.com ãããç§ãã«ã³ãã¡ã¬ã³ã¹ã§ã¹ããŒã«ãŒããŠããã®ãèŠãããããšãããæ¹ãããã°ãPHPã»Goèšèªã®ã³ãã¥ããã£ã§çºè¡šããŠã人ãšããã€ã¡ãŒãžããæã¡ãããããªãã®ã§ããã BASE BANKæ ªåŒäŒç€Ÿ ã§éå¶ããŠããã YELL BANK ïŒãšãŒã«ãã³ã¯ïŒããšãããµãŒãã¹ã®è£åŽã§Pythonãå©çšããAPIãéçºããŠããŸãããã®éã®éçºç¥èŠãCIã»ã³ãŒãæ€æ»ã»èªåãã¹ãã®3ç¹ã«çµã£ãŠãŸãšããå
容ããã®è³æã«ãªããŸãã Pythonã«éãããã¡ã€ã³ã§ç¥èŠã®ããèšèªä»¥å€ãæ¥åã§æ±ãéã«ãCIã»ã³ãŒãæ€æ»ã»èªåãã¹ãã¯ãããã«ã³ãŒãå質ãä¿èšŒããã ãã§ãªããéçºè
èªèº«ã®åŠç¿ãµã€ã¯ã«ãä¿é²ããŠããã圹å²ãæãããŠãããŠãããšæããŠããŸããããã®æèŠãèšèªåããããšããã®è³æã§ã¯è©Šã¿ãŸããã ãããããããšã«ãäŒå Žã¯æºå¡åŸ¡ç€Œã§ãå¥äŒå Žã§ã®äžç¶äŒå Žã䜿ããããªã©ãå€ãã®æ¹ã«æ¥ãŠããã ããŸããã Twitterã®TLããšãŽãµãããšã誰ãã®åèã«ãªãå
容ã«ã¯ãªã£ããããªã®ã§ã²ãšãŸãå®å µããŸããïŒã»ã£ïŒã qiita.com sayuhanten.hateblo.jp wotsushi.hatenablog.com æ©éææ³ãå
±æããã ããæ¹ã
èª ã«ããããšãããããŸãïŒçµãã£ãçŽåŸã¯æåŸ
æã«å¿ãããããäžå®ãªæ°æã¡ã匷ãã®ã§ææ³ã圢ã«ããŠããã ãããšéåžžã«ç»å£è
ã¯å®å¿ãããã®ã§...ïŒã ãããã« å人çã«PyCon JPã¯ç§ããŽããŽããšã³ãžãã¢ãããŠããéã«ã人çã§åããŠåå ããã«ã³ãã¡ã¬ã³ã¹ïŒ PyCon JP 2015 ïŒã§ãããåœæç»å£ãããŠããæ¹ã
ã«ãããã€ããããã§ç»å£ãããããã«ãªãããè¯ããªãããšãããããŠããããçŸåšãæè¡ã«ã³ãã¡ã¬ã³ã¹ã§ç»å£ããããã«ãªã£ãæåã®åäœéšãªããã®ã ã£ããããŸãã ä»åã PyCon JP 2019 ã§ç»å£ãããæéãããã ããã®ã¯ãåçš®ã«ã³ãã¡ã¬ã³ã¹ã®äžã§ãç¹ã«ãšã¢ãæ°æã¡ãåãæéã§ããã Pythonçéããã¥ãŒãã§ãã #pyconjp — Kazuki Higashiguchi (@hgsgtk) September 16, 2019 è€æ°èšèªã»è€æ°ã¬ã€ã€ã®æè¡ã«è§ŠããŠç·åçãªèŠç¹ãæã¡ããç§ã«ãšã£ãŠãPythonãšããèšèªã¯ãã³ãŒãã®å¯èªæ§ãããã«äžããããããŒã¿åæã®ææ³ãçè§£ã»å®è·µããäžã§ãããããä»ãåã£ãŠããããæè¡ãªã®ã§ããŸãæ¥å¹Ž2020ã«å¥ã®ç¥èŠãæã£ãŠãããããã«ãæ¥ã
ã®ãµãŒãã¹éçºã«ç²Ÿé²ããŠãããããšæããŸãã ã§ã¯ããŸãã£ã