2020-01-01ãã1幎éã®èšäºäžèŠ§
ãã®èšäºã¯Recruit Engineers Advent Calendar 2020ã®11æ¥ç®ã®èšäºã§ãã TL;DR 察象èªè ã¯è»¢çœ®ã€ã³ããã¯ã¹ãå°ãç¥ã£ãŠããããã®æ€çŽ¢åå¿è ã§ã æ€çŽ¢ãšã³ãžã³ã«èå³ã湧ããä»çµã¿ãç¥ãããã«Goã§èªäœããŠããŸã èªäœæ€çŽ¢ãšã³ãžã³ã®AnalyzerãšIndexerãšSâŠ
ã¯ããã« ããã°ã©ãã³ã°èšèªGoãèªãã§ããŠãããããã¯ãã«ãå©çšããŠSetãå®è£ ãããšããããããŸããã ã·ã³ãã«ãã€æãã€ããããªãæ¹æ³ã ã£ãã®ã§çŽ¹ä»ããŸãã ããã°ã©ãã³ã°èšèªGo (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)äœè :Alan A.A. DâŠ
äœã£ããã® ãã©ã€æšãGraphvizã§å¯èŠåãããã®ãäœããŸããã github.com $ brew install graphviz $ go get github.com/kotaroooo0/mute $ vi data.txt $ mute -s data.txt | dot -T png -o sample.png # data.txt keynote keycase king kingdom macbook âŠ
engineer.recruit-lifestyle.co.jp
åé¡ Docker 㧠Elasticsearch ãèµ·åããŸãã services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.4.0 environment: - discovery.type=single-node ports: - 9200:9200 - 9300:9300 以äžã® Elasticsearch ã¯ã©ã€ã¢ã³ãã©ã€âŠ
ã¯ããã« ããã°ã©ãã³ã°èšèª Go ã®ç ä¿®ãåè¬ããŠããã®ã§åŠã³ãã¡ã¢ããŠãããŸãã ããã°ã©ãã³ã°èšèªGo (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)äœè :Alan A.A. Donovan,Brian W. Kernighançºå£²æ¥: 2016/06/20ã¡ãã£ã¢: åè¡æ¬ïŒãœããã«ããŒïŒ âŠ
ã¯ãã㫠瀟ã®åæ 3 人ã®ãã¹ã¿ã³ãã©ãªãŒãããŒã 㧠ISUCON10 äºéžã«åºå ŽããŸããã æçµã¹ã³ã¢ã¯ 1727 ç¹ã§äºéžæéããŸããã 50äœãããã§ããã æ¬æŠåºå ŽããŒããŒã2158ç¹ãªã®ã§ãããš1,2æãšãããšããã§ããã ãã£ãããš(ããŒã ã§) äºéžå ISUCON9 âŠ
ããã°ã¡ã³ã¿ãªã³ã°ã«ã€ã㊠6, 7, 8 æãš @kakakakakkuããã®ããã°ã¡ã³ã¿ãªã³ã°ãåããŸããã é± 2 ã§èšäºãæçš¿ããã«ãŒã«ãå®ããŠãããéæã§ããªãæã¯æ¬¡ã®é±ã«è¶³ããªãåãè¿œå ã§æžããŸãã äŸãã°ãé£äžæ¯ã«ãªã 1 èšäºãæžããªãã£ãé±ããããŸãâŠ
ã¯ããã« æ¥å以å€ã§ Go ã§ããŒã«ãäœã£ãããTwitter Bot ãäœã£ããããŠããŸãã ããããã³ãŒãã¬ãã¥ãŒãåããæ©äŒããªãè¯ã Go ã®æžãæ¹ã身ã«ã€ããªãã®ã§ã¯ãšäžå®ã«ãªããŸããã ããã§ãããŸããŸãªèšäºãåèã«ããŠã³ãŒãã®æžãæ¹ãåŠãã§ã¿ãŸããâŠ
ã¯ããã« ããæ¹ ã©ã®ããŒã¿ããªã³ã¡ã¢ãªã«èŒããã ã©ãå®è£ ããã 1. ã°ããŒãã«ã§å€æ°ã宣èšããŸãã 2. åæååŠç/initializeã§ã¡ã¢ãªã«èŒããŸãã 3. SQL ãå©ããŠååŸããŠããéšåãã¡ã¢ãªã«èŒãã Map ããååŸããããã«å€ããŸãã ãããã« åè âŠ
éã®åŒŸäžž 以äžã§ãã£ãã·ã¥æŽ»çšããã«ããPush ããããªã«è¡ã£ãŠãããŸãã $ docker login -u $DOCKERHUB_USER -p $DOCKERHUB_PASS # Docker Hub ã ECR ã«ãã°ã€ã³ $ export DOCKER_CLI_EXPERIMENTAL=enabled # Buildxãæå¹ã«ãã $ docker buildx createâŠ
ã¯ããã« 2018 幎 10 æã« Cloud Native Buildpacks 㯠Cloud Native Computing Foundation (CNCF)ã« Sandbox ãšããŠåãå ¥ããããŸããã CNCF ã«ã¯ Kubernetes, Prometheus, Envoy, Fluentd ãªã©æåãããžã§ã¯ããå€ãåãå ¥ããããŠããŸãã Buildpacks âŠ
ã¯ããã« ãããå©çšããŠãISUCON ã®ç·Žç¿ãããŸãã github.com 以äžã§ãã³ãããŒã«ãŒãåãããšãããŸã§ã§ããŸãã $ git clone https://github.com/matsuu/vagrant-isucon.git $ cd isucon9-qualifier-standalone $ vagrant up $ vagrant ssh # VMäžã§ä»¥äžâŠ
ã¯ããã« CI ã§ã¯æ¯åãŸã£ãããªç°å¢ã§ãã¹ãããã«ããã§ããŸãã ããã«ã¯ãå€ã㯠Docker ãçšããããŠããŸãã ããã«ã¯ãDocker ã§å®çŸããããŸã£ãããªç°å¢ã§ã Docker ãã«ããªã© Docker ãå©çšã§ããŸãã åæç¥è: Docker ã¯ã©ã€ã¢ã³ããš dockerd dâŠ
WHY: ãªãäžéã€ã¡ãŒãžãã¿ã°ä»ãããã®ã ä»ã§ã¯ Docker ã€ã¡ãŒãžã®è»œéåã®ããã«ãã«ãã¹ããŒãžãã«ãã¯æ¬ ãããŸããã ããŒã«ã«ã§ã®å®è¡ã§ã¯åé¡ãããŸããããCI ç°å¢ãªã©ã® dockerd ãæ¯åºŠå€ãã Docker In Docker(dind)ã§ã¯åé¡ãèµ·ãããŸãã æçµã€âŠ
æŠèŠ Twitter Account Activity API ã䜿ãããšã§ãªãã©ã€ã®èªåè¿ä¿¡ãã§ããŸãã ããããæé ãè€éã§ããå ¬åŒããã¥ã¡ã³ããåããã«ãããšæããããèšäºã«ãŸãšããŸãã ãªãã©ã€ã®èªåè¿ä¿¡ã«ã¯ä»¥äžã®äºæ®µéãå¿ èŠã§ãã èªèšŒãè¡ãã¢ããªã±ãŒã·ã§ã³ã WâŠ
ã¯ããã« Docker ã€ã¡ãŒãžãµã€ãºã¯å°ãããã°å°ããã»ã©ãPush ãš Pull ã®é«éåã«ã€ãªããå¬ããã§ãã docker historyã«ãã£ãŠã€ã¡ãŒãžã¬ã€ã€ãŒããšã®ãµã€ãºã¯åãããŸãããã©ã®ã¬ã€ã€ãŒã®ã©ã®ãã¡ã€ã«ã®ãµã€ãºã倧ãããã¯åãããŸããã $ docker histoâŠ
ã¯ãã㫠以åãCI ç°å¢ã§ã® Docker ãã«ãã®ãã£ãã·ã¥ã«ã€ããŠèšäºãæžããŸããã kotaroooo0-dev.hatenablog.com ååã®èšäºã®ããã«ãã«ãã¹ããŒãžãã«ãã§ãªãå Žåã¯ã1 Dockerfile 1 Cache ã§åé¡ãããŸããã§ããã ããããä»ã§ã¯ Docker ã€ã¡ãŒãžã®âŠ
æ¬èšäºã§ã®èšèã®å®çŸ© èµ·å: åãå§ããããš(äŸ: PC ã®é»æºãã¿ã³ãæŒãããš) 皌å: åãã¯ãããããš(äŸ: PC ãå©çšå¯èœã«ãªãããš) ã¯ãã㫠以äžã® Redis ãš MySQL ãå©çšããã¢ããªã±ãŒã·ã§ã³ã® docker-compose ãèããŸãã version: "3" services: appâŠ
ã¯ããã« ä»®æ³åã¯äœ¿ãããã¢ããªã±ãŒã·ã§ã³ã ãã§ãªã OS ãå«ããŠãŸãããšåããä»çµã¿ã§ãã ããã§ã¯ãã²ã¹ã OS ãšãã¹ã OS ãåã Linux ã§ããã°ã«ãŒãã«ãªã©ãéè€ããŠããŒãããããšã«ãªãç¡é§ã«ã¡ã¢ãªãæ¶è²»ããŠããŸããŸãã OS ã®ã«ãŒãã«ã¯ãã¹âŠ
ãã®èšäºã®å 容 ã·ã¹ãã ã³ãŒã«ãšã¯ Go ã§ã¯ã©ãã·ã¹ãã ã³ãŒã«ãåŒã³åºããŠããã ã·ã¹ãã ã³ãŒã«ãšã¯ ã·ã¹ãã ã³ãŒã«ãšã¯ãç¹æš©ã¢ãŒã㧠OS ã®æ©èœãåŒã¶ããšã§ãã ã¢ããªã±ãŒã·ã§ã³ã§ã¯éåžžããŠãŒã¶ãŒã¢ãŒãã§ãã CPU ã®å©çšãå¶éãããŠããŸãã ãã®âŠ
ã¯ããã« Go ãªããããã·ã¹ãã ããã°ã©ãã³ã°ãèªã¿ãŸããã Goãªããããã·ã¹ãã ããã°ã©ãã³ã°äœè :æžå· ãããçºå£²æ¥: 2017/10/23ã¡ãã£ã¢: åè¡æ¬ïŒãœããã«ããŒïŒ åã¯æ¬ã§èªã¿ãŸããããå ã 㯠Web ã§é£èŒããŠããã¿ããã§ç¡æã§èªãããšãã§ããŸãâŠ
ã¯ããã« GitHub Actions äžã§ã® Docker ã€ã¡ãŒãžã®ãã«ãé«éåã«ã€ããŠæ å ±ãå°ãªãã£ãã®ã§èªåãªãã«èª¿æ»ããŠã¿ãŸããã Jenkins ã®ããã«èªåã§ãã¹ãããã®ã§ã¯ãªããGitHub Actions ã CircleCI ã§ã¯ã¹ããŒãã¬ã¹ã«ãžã§ããè¡ãããŸãã ãã®ããããâŠ
ã¯ããã« Go ãªããããã·ã¹ãã ããã°ã©ãã³ã°ãèªã¿ãŸããã Goãªããããã·ã¹ãã ããã°ã©ãã³ã°äœè :æžå· ãããçºå£²æ¥: 2017/10/23ã¡ãã£ã¢: åè¡æ¬ïŒãœããã«ããŒïŒ åã¯æ¬ã§èªã¿ãŸããããå ã 㯠Web ã§é£èŒããŠããã¿ããã§ç¡æã§èªãããšãã§ããŸãâŠ
ã¯ããã« Go ãªããããã·ã¹ãã ããã°ã©ãã³ã°ãèªã¿ãŸããã Goãªããããã·ã¹ãã ããã°ã©ãã³ã°äœè :æžå· ãããçºå£²æ¥: 2017/10/23ã¡ãã£ã¢: åè¡æ¬ïŒãœããã«ããŒïŒ åã¯æ¬ã§èªã¿ãŸããããå ã 㯠Web ã§é£èŒããŠããã¿ããã§ç¡æã§èªãããšãã§ããŸãâŠ
èª²é¡ å ¥åã«å¯ŸããŠãæååéåã®äžããæã䌌ãŠããæååãè¿ãããã äŸ ["gmail", "googlemap", "googledrive", "dockerhub", "github"]ãšããéåãããã "mail" ãšå ¥åããããš "gmail" ãè¿ã£ãŠããŠã"docker" ãšå ¥åããããš "dockerhub" ãè¿ã£ãŠâŠ
ãµã€ããŠãºç€Ÿã® Docker ç ä¿®è³æãèŠãŠãããš Dockerfile ã®éç解æããŒã«ã玹ä»ãããŠãããã©ãããã解æããã®ãèå³ã湧ããã®ã§è©ŠããŠã¿ãŸããã hadolint ãšã©ãŒãäºåã«æ€ç¥ããŠããããããããã Dockerfile ã®æžãæ¹ãææããŠãããŸãã HaskelâŠ
ã¯ããã« Go ã§ã¯ãã€ã³ã¿ãŒãã§ãŒã¹ã䜿ã DI ããããšã§å®è£ ã眮ãæããããšãã§ããŸãã äŸãã°ããã¹ãã§å€éš API ã䜿ãå Žåã«å®éã®ãªã¯ãšã¹ããé£ã°ããªãããã«ãã¹ãçšã«å®è£ ã眮ãæãããããŸãã Go ã§ã¯ç¹å¥ãªã©ã€ãã©ãªã䜿ãããšãªããæšæºâŠ
ã¯ããã« Docker ã€ã¡ãŒãžããã«ãããŠããäžã§ãã€ã¡ãŒãžãµã€ãºè»œéåã䞊åå®è¡ã¯ã©ãã®ç°å¢ã§ãã«ããããæ°ã«ããªãã§è¡ãããšãã§ããŸããã ãããããã£ãã·ã¥ã®ä»çµã¿ã¯ç°å¢ã«ãã£ãŠãç°ãªããªã©è€éã§ãã æ¬èšäºã§ã¯ããã£ãã·ã¥ã®çš®é¡ã«ã€ããŠçŽ¹âŠ
ãªãããã«ããæ©ããã ãããã€æéã®ççž® AutoScaling çã§ã®ã€ã³ã¹ã¿ã³ã¹ã®è¿œå æéã®ççž® CI ã®ãã«ãæéãççž® ã©ãããã«ããæ©ããã 䞊åæ§ãäžãã ãã«ããã£ãã·ã¥ãå¹ããã 䞊åæ§ æ¬èšäºã§ã¯ã䞊åæ§ã®ã¿ã«è§Šããã BuildKit ã䜿çšãã DocâŠ