ããã«ã¡ã¯ãéçºæ¬éšã®å®®å
ã§ãã ããŠããããŸã§åŒç€Ÿã®ãªã³ã©ã€ã³èšºçã¢ããªã CLINICS ãã§ã¯ãããŒã³ãæãã Heroku ãå©çšããŠãããŸããã Heroku ãšã¯ãPaaS ã®äžçš®ã§ Web ã¢ããªã±ãŒã·ã§ã³ãç°¡åã«ãããã€ããã¹ãã£ã³ã°ã§ãããµãŒãã¹ã§ãã ããçšåºŠã®å¶çŽã¯ã€ããŸããã(倧äœã®å¶çŽã¯éã§è§£æ±ºã§ããã®ã§)䜿ã£ãŠãããããå€ãã®ã§ã¯ãªãã§ããããã ä»åãäºæ
ã«ãã Heroku ãã AWS Elastic Beanstalk (以äžãEB)ãžç§»è¡ããããšã«ãªããŸããã®ã§ããã®ãããã§ãã£ãããšãå
±æã§ããã°ãšæããŸãã Private PaaS ã«ããªãã®ïŒ ãŸãã¯ããã«ç§»è¡ã«ããããPriavte PaaS ãæ§ç¯ããæ¹æ³ã暡玢ããŸããã ã§ããããããã®ã¯ã©ã¹ã¿ã®æ§ç¯ã¯ã§ããŠããå°ä»»ã®(Ops|SRE|ã€ã³ãã©)ããŒã ãããªããããæ¥ã
ã®ç®¡çãéçšã«æãåããªãã ãããšããæããããPrivate PaaS ã®æ§ç¯ã¯èŠéããŸããã ãã®èŸºãã¯ä»åŸããŒã 人æ°ãå¢ãããææŠããŠããããã§ãâŠã æ€èšæãåèã«ãããªã³ã¯ PAAS comparison - Dokku vs Flynn vs Deis vs Kubernetes vs Docker Swarm (2017) Convox Deis Flynn ãªã AWS Elastic Beanstalk ã«ããã®ïŒ EB ã«ã¯ Rails ã Sinatra ã§äœæããããŠã§ãã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããã® Ruby ãã©ãããã©ãŒã ãäºãçšæãããŠãããŸãã ãã ããä»åã®ç§»è¡ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ãžã®å€æŽãäžåå ããã«è¡ãããã£ããããRuby ãã©ãããã©ãŒã ãå©çšããŸããã§ããã 代ããã« Docker ã³ã³ãããå®è¡ã§ãã ãã©ãããã©ãŒã ããã£ãããããã¡ãã䜿ãããšã«ããŸããã herokuish ã§ Docker ã€ã¡ãŒãžãäœæ ã¢ããªã±ãŒã·ã§ã³ã® Docker ã€ã¡ãŒãžåã«ã¯ã gliderlabs/herokuish ã䜿ããŸããã ãã㯠buildpack ã䜿ãã¢ããªã±ãŒã·ã§ã³ã slug åããããslug ãå®è¡ããããã®ããŒã«ã§ãã Docker ã€ã¡ãŒãžäœæã®æé ã¯ä»¥äžã®éãã§ãã herokuish buildpack build ãš herokuish slug generate ã§ã¢ããªã±ãŒã·ã§ã³ã slug ã«ãã herokuish slug import ã§ slug ãã€ã³ããŒãããŠå®æ ããã§ã¯ãããããç°¡åã«èª¬æããŠãããããšæããŸãã ã¢ããªã±ãŒã·ã§ã³ã slug ã«ãã docker pull gliderlabs/herokuish docker run \ -v "/path/to/app:/tmp/build" \ -v "/path/to/cache:/tmp/cache" \ -v "/path/to/slug:/tmp/slug" \ gliderlabs/herokuish \ /bin/bash -c 'herokuish buildpack build && herokuish slug generate && herokuish slug export > /tmp/slug/slug.tgz' herokuish ã¯ç¹å®ã®ãã£ã¬ã¯ããªã«å¯ŸããŠåŠçãè¡ããŸããâ ã§ã¯ãã«ãããã¢ããªã±ãŒã·ã§ã³ãŸã§ã®ãã£ã¬ã¯ããªãã¹ã /tmp/build ã«ãããã³ã°ããŠããŸãã /tmp/cache 㯠buildpack ãå©çšãããã£ãã·ã¥çœ®ãå Žã§ãããã®ãã£ã¬ã¯ããªã次å以éã®ãã«ãã§ããããã³ã°ããŠãããšãã«ãã®é«éåãèŠèŸŒããŸãã æåŸã® /tmp/slug ã¯ãã«ããã slug ãã³ã³ãããããã¹ããžã³ããŒããããã«æå®ããŠããŸãã(ãã㯠herokuish ã§çšæãããŠããã®ã§ã¯ãªãã³ã³ãããããã¹ããžãã¡ã€ã«ãã³ããŒããæ¹æ³ãæ©ãã æ«ã®ã¢ãããã¯ãªå¯Ÿå¿ã§ãâŠ) ä»ã«ãæ§ã
ãªãã£ã¬ã¯ããªããããŸãã詳ãã㯠ããã¥ã¡ã³ã ãã芧ãã ããã slug ãã€ã³ããŒããã æ¬¡ã«äœæãã slug ã䜿ãã¢ããªã±ãŒã·ã§ã³ã® Docker ã€ã¡ãŒãžãã€ãããŸãã cd $( mktemp -d ) mv /path/to/slug/slug.tgz . echo ' FROM gliderlabs/herokuish COPY slug.tgz /tmp/slug.tgz RUN cat /tmp/slug.tgz | herokuish slug import && rm /tmp/slug.tgz EXPOSE 5000 ' > Dockerfile docker build -f Dockerfile . docker build æã« Context ãšããŠã«ã¬ã³ããã£ã¬ã¯ããªå
šäœãéããããããäžæãã£ã¬ã¯ããªãäœæããã®äžã§ docker build ãè¡ã£ãŠããŸãã çµãã CLINICS ã§ã¯äžèšã®ãããªææ®µã§äœæãã Docker ã€ã¡ãŒãžã Amazon EC2 Container Registry ã«ã¢ããããŒãã EB äžã§å®è¡ããŠããŸãã æ¬æ¥ã§ããã°ãã¢ããªã±ãŒã·ã§ã³ã slug ã«ããéšåãšãslug ãã€ã³ããŒãããéšåãåå²ããªããŠãè¯ããšæããŸãããCircleCI ã§ Docker ã€ã¡ãŒãžãäœæããé¢ä¿äžã§ãã®ãããªæ¹æ³ã«ãªããŸããã å
æ¥ GA ãšãªã£ã CircleCI 2.0 ã«ã¯ãŸã 察å¿ã§ããŠããªãã®ã§ãä»åŸã®èª²é¡ãšããããšæããŸãã ãç¥ãã ã¡ãã¬ãŒã§ã¯ãCLINICS ã ãã§ãªããå»çä»è·ã®æ±äººãµã€ãã ãžã§ãã¡ãã¬ãŒ ããå»åž«ãã¡ãã€ãããªã³ã©ã€ã³å»çäºå
žã MEDLEY ããå£ã³ãã§æ¢ããä»è·æœèšã®æ€çŽ¢ãµã€ãã ä»è·ã®ã»ãã ããªã©ã®ãããã¯ããæäŸããŠããŸãããããã®ãµãŒãã¹ã®æ¡å€§ãåããŠããã®æé·ãæ¯ãããšã³ãžãã¢ã»ãã¶ã€ããŒãåéããŠããŸãã https://www.medley.jp/recruit/creative.html ã¡ãã¬ãŒã§äžç·ã«å»çäœéšãå€ãããããã¯ãäœãã«é¢ããããæ¹ã®ãé£çµ¡ãåŸ
ã¡ããŠãããŸãã
ããã«ã¡ã¯ãéçºæ¬éšã®å®®å
ã§ãã ããŠããããŸã§åŒç€Ÿã®ãªã³ã©ã€ã³èšºçã¢ããªã CLINICS ãã§ã¯ãããŒã³ãæãã Heroku ãå©çšããŠãããŸããã Heroku ãšã¯ãPaaS ã®äžçš®ã§ Web ã¢ããªã±ãŒã·ã§ã³ãç°¡åã«ãããã€ããã¹ãã£ã³ã°ã§ãããµãŒãã¹ã§ãã ããçšåºŠã®å¶çŽã¯ã€ããŸããã(倧äœã®å¶çŽã¯éã§è§£æ±ºã§ããã®ã§)䜿ã£ãŠãããããå€ãã®ã§ã¯ãªãã§ããããã ä»åãäºæ
ã«ãã Heroku ãã AWS Elastic Beanstalk (以äžãEB)ãžç§»è¡ããããšã«ãªããŸããã®ã§ããã®ãããã§ãã£ãããšãå
±æã§ããã°ãšæããŸãã Private PaaS ã«ããªãã®ïŒ ãŸãã¯ããã«ç§»è¡ã«ããããPriavte PaaS ãæ§ç¯ããæ¹æ³ã暡玢ããŸããã ã§ããããããã®ã¯ã©ã¹ã¿ã®æ§ç¯ã¯ã§ããŠããå°ä»»ã®(Ops|SRE|ã€ã³ãã©)ããŒã ãããªããããæ¥ã
ã®ç®¡çãéçšã«æãåããªãã ãããšããæããããPrivate PaaS ã®æ§ç¯ã¯èŠéããŸããã ãã®èŸºãã¯ä»åŸããŒã 人æ°ãå¢ãããææŠããŠããããã§ãâŠã æ€èšæãåèã«ãããªã³ã¯ PAAS comparison - Dokku vs Flynn vs Deis vs Kubernetes vs Docker Swarm (2017) Convox Deis Flynn ãªã AWS Elastic Beanstalk ã«ããã®ïŒ EB ã«ã¯ Rails ã Sinatra ã§äœæããããŠã§ãã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããã® Ruby ãã©ãããã©ãŒã ãäºãçšæãããŠãããŸãã ãã ããä»åã®ç§»è¡ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ãžã®å€æŽãäžåå ããã«è¡ãããã£ããããRuby ãã©ãããã©ãŒã ãå©çšããŸããã§ããã 代ããã« Docker ã³ã³ãããå®è¡ã§ãã ãã©ãããã©ãŒã ããã£ãããããã¡ãã䜿ãããšã«ããŸããã herokuish ã§ Docker ã€ã¡ãŒãžãäœæ ã¢ããªã±ãŒã·ã§ã³ã® Docker ã€ã¡ãŒãžåã«ã¯ã gliderlabs/herokuish ã䜿ããŸããã ãã㯠buildpack ã䜿ãã¢ããªã±ãŒã·ã§ã³ã slug åããããslug ãå®è¡ããããã®ããŒã«ã§ãã Docker ã€ã¡ãŒãžäœæã®æé ã¯ä»¥äžã®éãã§ãã herokuish buildpack build ãš herokuish slug generate ã§ã¢ããªã±ãŒã·ã§ã³ã slug ã«ãã herokuish slug import ã§ slug ãã€ã³ããŒãããŠå®æ ããã§ã¯ãããããç°¡åã«èª¬æããŠãããããšæããŸãã ã¢ããªã±ãŒã·ã§ã³ã slug ã«ãã docker pull gliderlabs/herokuish docker run \ -v "/path/to/app:/tmp/build" \ -v "/path/to/cache:/tmp/cache" \ -v "/path/to/slug:/tmp/slug" \ gliderlabs/herokuish \ /bin/bash -c 'herokuish buildpack build && herokuish slug generate && herokuish slug export > /tmp/slug/slug.tgz' herokuish ã¯ç¹å®ã®ãã£ã¬ã¯ããªã«å¯ŸããŠåŠçãè¡ããŸããâ ã§ã¯ãã«ãããã¢ããªã±ãŒã·ã§ã³ãŸã§ã®ãã£ã¬ã¯ããªãã¹ã /tmp/build ã«ãããã³ã°ããŠããŸãã /tmp/cache 㯠buildpack ãå©çšãããã£ãã·ã¥çœ®ãå Žã§ãããã®ãã£ã¬ã¯ããªã次å以éã®ãã«ãã§ããããã³ã°ããŠãããšãã«ãã®é«éåãèŠèŸŒããŸãã æåŸã® /tmp/slug ã¯ãã«ããã slug ãã³ã³ãããããã¹ããžã³ããŒããããã«æå®ããŠããŸãã(ãã㯠herokuish ã§çšæãããŠããã®ã§ã¯ãªãã³ã³ãããããã¹ããžãã¡ã€ã«ãã³ããŒããæ¹æ³ãæ©ãã æ«ã®ã¢ãããã¯ãªå¯Ÿå¿ã§ãâŠ) ä»ã«ãæ§ã
ãªãã£ã¬ã¯ããªããããŸãã詳ãã㯠ããã¥ã¡ã³ã ãã芧ãã ããã slug ãã€ã³ããŒããã æ¬¡ã«äœæãã slug ã䜿ãã¢ããªã±ãŒã·ã§ã³ã® Docker ã€ã¡ãŒãžãã€ãããŸãã cd $( mktemp -d ) mv /path/to/slug/slug.tgz . echo ' FROM gliderlabs/herokuish COPY slug.tgz /tmp/slug.tgz RUN cat /tmp/slug.tgz | herokuish slug import && rm /tmp/slug.tgz EXPOSE 5000 ' > Dockerfile docker build -f Dockerfile . docker build æã« Context ãšããŠã«ã¬ã³ããã£ã¬ã¯ããªå
šäœãéããããããäžæãã£ã¬ã¯ããªãäœæããã®äžã§ docker build ãè¡ã£ãŠããŸãã çµãã CLINICS ã§ã¯äžèšã®ãããªææ®µã§äœæãã Docker ã€ã¡ãŒãžã Amazon EC2 Container Registry ã«ã¢ããããŒãã EB äžã§å®è¡ããŠããŸãã æ¬æ¥ã§ããã°ãã¢ããªã±ãŒã·ã§ã³ã slug ã«ããéšåãšãslug ãã€ã³ããŒãããéšåãåå²ããªããŠãè¯ããšæããŸãããCircleCI ã§ Docker ã€ã¡ãŒãžãäœæããé¢ä¿äžã§ãã®ãããªæ¹æ³ã«ãªããŸããã å
æ¥ GA ãšãªã£ã CircleCI 2.0 ã«ã¯ãŸã 察å¿ã§ããŠããªãã®ã§ãä»åŸã®èª²é¡ãšããããšæããŸãã ãç¥ãã ã¡ãã¬ãŒã§ã¯ãCLINICS ã ãã§ãªããå»çä»è·ã®æ±äººãµã€ãã ãžã§ãã¡ãã¬ãŒ ããå»åž«ãã¡ãã€ãããªã³ã©ã€ã³å»çäºå
žã MEDLEY ããå£ã³ãã§æ¢ããä»è·æœèšã®æ€çŽ¢ãµã€ãã ä»è·ã®ã»ãã ããªã©ã®ãããã¯ããæäŸããŠããŸãããããã®ãµãŒãã¹ã®æ¡å€§ãåããŠããã®æé·ãæ¯ãããšã³ãžãã¢ã»ãã¶ã€ããŒãåéããŠããŸãã ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp ã¡ãã¬ãŒã§äžç·ã«å»çäœéšãå€ãããããã¯ãäœãã«é¢ããããæ¹ã®ãé£çµ¡ãåŸ
ã¡ããŠãããŸãã
ããã«ã¡ã¯ãéçºæ¬éšã®å®®å
ã§ãã ããŠããããŸã§åŒç€Ÿã®ãªã³ã©ã€ã³èšºçã¢ããªã CLINICS ãã§ã¯ãããŒã³ãæãã Heroku ãå©çšããŠãããŸããã Heroku ãšã¯ãPaaS ã®äžçš®ã§ Web ã¢ããªã±ãŒã·ã§ã³ãç°¡åã«ãããã€ããã¹ãã£ã³ã°ã§ãããµãŒãã¹ã§ãã ããçšåºŠã®å¶çŽã¯ã€ããŸããã(倧äœã®å¶çŽã¯éã§è§£æ±ºã§ããã®ã§)䜿ã£ãŠãããããå€ãã®ã§ã¯ãªãã§ããããã ä»åãäºæ
ã«ãã Heroku ãã AWS Elastic Beanstalk (以äžãEB)ãžç§»è¡ããããšã«ãªããŸããã®ã§ããã®ãããã§ãã£ãããšãå
±æã§ããã°ãšæããŸãã Private PaaS ã«ããªãã®ïŒ ãŸãã¯ããã«ç§»è¡ã«ããããPriavte PaaS ãæ§ç¯ããæ¹æ³ã暡玢ããŸããã ã§ããããããã®ã¯ã©ã¹ã¿ã®æ§ç¯ã¯ã§ããŠããå°ä»»ã®(Ops|SRE|ã€ã³ãã©)ããŒã ãããªããããæ¥ã
ã®ç®¡çãéçšã«æãåããªãã ãããšããæããããPrivate PaaS ã®æ§ç¯ã¯èŠéããŸããã ãã®èŸºãã¯ä»åŸããŒã 人æ°ãå¢ãããææŠããŠããããã§ãâŠã æ€èšæãåèã«ãããªã³ã¯ PAAS comparison - Dokku vs Flynn vs Deis vs Kubernetes vs Docker Swarm (2017) Convox Deis Flynn ãªã AWS Elastic Beanstalk ã«ããã®ïŒ EB ã«ã¯ Rails ã Sinatra ã§äœæããããŠã§ãã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããã® Ruby ãã©ãããã©ãŒã ãäºãçšæãããŠãããŸãã ãã ããä»åã®ç§»è¡ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ãžã®å€æŽãäžåå ããã«è¡ãããã£ããããRuby ãã©ãããã©ãŒã ãå©çšããŸããã§ããã 代ããã« Docker ã³ã³ãããå®è¡ã§ãã ãã©ãããã©ãŒã ããã£ãããããã¡ãã䜿ãããšã«ããŸããã herokuish ã§ Docker ã€ã¡ãŒãžãäœæ ã¢ããªã±ãŒã·ã§ã³ã® Docker ã€ã¡ãŒãžåã«ã¯ã gliderlabs/herokuish ã䜿ããŸããã ãã㯠buildpack ã䜿ãã¢ããªã±ãŒã·ã§ã³ã slug åããããslug ãå®è¡ããããã®ããŒã«ã§ãã Docker ã€ã¡ãŒãžäœæã®æé ã¯ä»¥äžã®éãã§ãã herokuish buildpack build ãš herokuish slug generate ã§ã¢ããªã±ãŒã·ã§ã³ã slug ã«ãã herokuish slug import ã§ slug ãã€ã³ããŒãããŠå®æ ããã§ã¯ãããããç°¡åã«èª¬æããŠãããããšæããŸãã ã¢ããªã±ãŒã·ã§ã³ã slug ã«ãã docker pull gliderlabs/herokuish docker run \ -v "/path/to/app:/tmp/build" \ -v "/path/to/cache:/tmp/cache" \ -v "/path/to/slug:/tmp/slug" \ gliderlabs/herokuish \ /bin/bash -c 'herokuish buildpack build && herokuish slug generate && herokuish slug export > /tmp/slug/slug.tgz' herokuish ã¯ç¹å®ã®ãã£ã¬ã¯ããªã«å¯ŸããŠåŠçãè¡ããŸããâ ã§ã¯ãã«ãããã¢ããªã±ãŒã·ã§ã³ãŸã§ã®ãã£ã¬ã¯ããªãã¹ã /tmp/build ã«ãããã³ã°ããŠããŸãã /tmp/cache 㯠buildpack ãå©çšãããã£ãã·ã¥çœ®ãå Žã§ãããã®ãã£ã¬ã¯ããªã次å以éã®ãã«ãã§ããããã³ã°ããŠãããšãã«ãã®é«éåãèŠèŸŒããŸãã æåŸã® /tmp/slug ã¯ãã«ããã slug ãã³ã³ãããããã¹ããžã³ããŒããããã«æå®ããŠããŸãã(ãã㯠herokuish ã§çšæãããŠããã®ã§ã¯ãªãã³ã³ãããããã¹ããžãã¡ã€ã«ãã³ããŒããæ¹æ³ãæ©ãã æ«ã®ã¢ãããã¯ãªå¯Ÿå¿ã§ãâŠ) ä»ã«ãæ§ã
ãªãã£ã¬ã¯ããªããããŸãã詳ãã㯠ããã¥ã¡ã³ã ãã芧ãã ããã slug ãã€ã³ããŒããã æ¬¡ã«äœæãã slug ã䜿ãã¢ããªã±ãŒã·ã§ã³ã® Docker ã€ã¡ãŒãžãã€ãããŸãã cd $( mktemp -d ) mv /path/to/slug/slug.tgz . echo ' FROM gliderlabs/herokuish COPY slug.tgz /tmp/slug.tgz RUN cat /tmp/slug.tgz | herokuish slug import && rm /tmp/slug.tgz EXPOSE 5000 ' > Dockerfile docker build -f Dockerfile . docker build æã« Context ãšããŠã«ã¬ã³ããã£ã¬ã¯ããªå
šäœãéããããããäžæãã£ã¬ã¯ããªãäœæããã®äžã§ docker build ãè¡ã£ãŠããŸãã çµãã CLINICS ã§ã¯äžèšã®ãããªææ®µã§äœæãã Docker ã€ã¡ãŒãžã Amazon EC2 Container Registry ã«ã¢ããããŒãã EB äžã§å®è¡ããŠããŸãã æ¬æ¥ã§ããã°ãã¢ããªã±ãŒã·ã§ã³ã slug ã«ããéšåãšãslug ãã€ã³ããŒãããéšåãåå²ããªããŠãè¯ããšæããŸãããCircleCI ã§ Docker ã€ã¡ãŒãžãäœæããé¢ä¿äžã§ãã®ãããªæ¹æ³ã«ãªããŸããã å
æ¥ GA ãšãªã£ã CircleCI 2.0 ã«ã¯ãŸã 察å¿ã§ããŠããªãã®ã§ãä»åŸã®èª²é¡ãšããããšæããŸãã ãç¥ãã ã¡ãã¬ãŒã§ã¯ãCLINICS ã ãã§ãªããå»çä»è·ã®æ±äººãµã€ãã ãžã§ãã¡ãã¬ãŒ ããå»åž«ãã¡ãã€ãããªã³ã©ã€ã³å»çäºå
žã MEDLEY ããå£ã³ãã§æ¢ããä»è·æœèšã®æ€çŽ¢ãµã€ãã ä»è·ã®ã»ãã ããªã©ã®ãããã¯ããæäŸããŠããŸãããããã®ãµãŒãã¹ã®æ¡å€§ãåããŠããã®æé·ãæ¯ãããšã³ãžãã¢ã»ãã¶ã€ããŒãåéããŠããŸãã ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp ã¡ãã¬ãŒã§äžç·ã«å»çäœéšãå€ãããããã¯ãäœãã«é¢ããããæ¹ã®ãé£çµ¡ãåŸ
ã¡ããŠãããŸãã
ããã«ã¡ã¯ãéçºæ¬éšã®å®®å
ã§ãã ããŠããããŸã§åŒç€Ÿã®ãªã³ã©ã€ã³èšºçã¢ããªã CLINICS ãã§ã¯ãããŒã³ãæãã Heroku ãå©çšããŠãããŸããã Heroku ãšã¯ãPaaS ã®äžçš®ã§ Web ã¢ããªã±ãŒã·ã§ã³ãç°¡åã«ãããã€ããã¹ãã£ã³ã°ã§ãããµãŒãã¹ã§ãã ããçšåºŠã®å¶çŽã¯ã€ããŸããã(倧äœã®å¶çŽã¯éã§è§£æ±ºã§ããã®ã§)䜿ã£ãŠãããããå€ãã®ã§ã¯ãªãã§ããããã ä»åãäºæ
ã«ãã Heroku ãã AWS Elastic Beanstalk (以äžãEB)ãžç§»è¡ããããšã«ãªããŸããã®ã§ããã®ãããã§ãã£ãããšãå
±æã§ããã°ãšæããŸãã Private PaaS ã«ããªãã®ïŒ ãŸãã¯ããã«ç§»è¡ã«ããããPriavte PaaS ãæ§ç¯ããæ¹æ³ã暡玢ããŸããã ã§ããããããã®ã¯ã©ã¹ã¿ã®æ§ç¯ã¯ã§ããŠããå°ä»»ã®(Ops|SRE|ã€ã³ãã©)ããŒã ãããªããããæ¥ã
ã®ç®¡çãéçšã«æãåããªãã ãããšããæããããPrivate PaaS ã®æ§ç¯ã¯èŠéããŸããã ãã®èŸºãã¯ä»åŸããŒã 人æ°ãå¢ãããææŠããŠããããã§ãâŠã æ€èšæãåèã«ãããªã³ã¯ PAAS comparison - Dokku vs Flynn vs Deis vs Kubernetes vs Docker Swarm (2017) Convox Deis Flynn ãªã AWS Elastic Beanstalk ã«ããã®ïŒ EB ã«ã¯ Rails ã Sinatra ã§äœæããããŠã§ãã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããã® Ruby ãã©ãããã©ãŒã ãäºãçšæãããŠãããŸãã ãã ããä»åã®ç§»è¡ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ãžã®å€æŽãäžåå ããã«è¡ãããã£ããããRuby ãã©ãããã©ãŒã ãå©çšããŸããã§ããã 代ããã« Docker ã³ã³ãããå®è¡ã§ãã ãã©ãããã©ãŒã ããã£ãããããã¡ãã䜿ãããšã«ããŸããã herokuish ã§ Docker ã€ã¡ãŒãžãäœæ ã¢ããªã±ãŒã·ã§ã³ã® Docker ã€ã¡ãŒãžåã«ã¯ã gliderlabs/herokuish ã䜿ããŸããã ãã㯠buildpack ã䜿ãã¢ããªã±ãŒã·ã§ã³ã slug åããããslug ãå®è¡ããããã®ããŒã«ã§ãã Docker ã€ã¡ãŒãžäœæã®æé ã¯ä»¥äžã®éãã§ãã herokuish buildpack build ãš herokuish slug generate ã§ã¢ããªã±ãŒã·ã§ã³ã slug ã«ãã herokuish slug import ã§ slug ãã€ã³ããŒãããŠå®æ ããã§ã¯ãããããç°¡åã«èª¬æããŠãããããšæããŸãã ã¢ããªã±ãŒã·ã§ã³ã slug ã«ãã docker pull gliderlabs/herokuish docker run \ -v "/path/to/app:/tmp/build" \ -v "/path/to/cache:/tmp/cache" \ -v "/path/to/slug:/tmp/slug" \ gliderlabs/herokuish \ /bin/bash -c 'herokuish buildpack build && herokuish slug generate && herokuish slug export > /tmp/slug/slug.tgz' herokuish ã¯ç¹å®ã®ãã£ã¬ã¯ããªã«å¯ŸããŠåŠçãè¡ããŸããâ ã§ã¯ãã«ãããã¢ããªã±ãŒã·ã§ã³ãŸã§ã®ãã£ã¬ã¯ããªãã¹ã /tmp/build ã«ãããã³ã°ããŠããŸãã /tmp/cache 㯠buildpack ãå©çšãããã£ãã·ã¥çœ®ãå Žã§ãããã®ãã£ã¬ã¯ããªã次å以éã®ãã«ãã§ããããã³ã°ããŠãããšãã«ãã®é«éåãèŠèŸŒããŸãã æåŸã® /tmp/slug ã¯ãã«ããã slug ãã³ã³ãããããã¹ããžã³ããŒããããã«æå®ããŠããŸãã(ãã㯠herokuish ã§çšæãããŠããã®ã§ã¯ãªãã³ã³ãããããã¹ããžãã¡ã€ã«ãã³ããŒããæ¹æ³ãæ©ãã æ«ã®ã¢ãããã¯ãªå¯Ÿå¿ã§ãâŠ) ä»ã«ãæ§ã
ãªãã£ã¬ã¯ããªããããŸãã詳ãã㯠ããã¥ã¡ã³ã ãã芧ãã ããã slug ãã€ã³ããŒããã æ¬¡ã«äœæãã slug ã䜿ãã¢ããªã±ãŒã·ã§ã³ã® Docker ã€ã¡ãŒãžãã€ãããŸãã cd $( mktemp -d ) mv /path/to/slug/slug.tgz . echo ' FROM gliderlabs/herokuish COPY slug.tgz /tmp/slug.tgz RUN cat /tmp/slug.tgz | herokuish slug import && rm /tmp/slug.tgz EXPOSE 5000 ' > Dockerfile docker build -f Dockerfile . docker build æã« Context ãšããŠã«ã¬ã³ããã£ã¬ã¯ããªå
šäœãéããããããäžæãã£ã¬ã¯ããªãäœæããã®äžã§ docker build ãè¡ã£ãŠããŸãã çµãã CLINICS ã§ã¯äžèšã®ãããªææ®µã§äœæãã Docker ã€ã¡ãŒãžã Amazon EC2 Container Registry ã«ã¢ããããŒãã EB äžã§å®è¡ããŠããŸãã æ¬æ¥ã§ããã°ãã¢ããªã±ãŒã·ã§ã³ã slug ã«ããéšåãšãslug ãã€ã³ããŒãããéšåãåå²ããªããŠãè¯ããšæããŸãããCircleCI ã§ Docker ã€ã¡ãŒãžãäœæããé¢ä¿äžã§ãã®ãããªæ¹æ³ã«ãªããŸããã å
æ¥ GA ãšãªã£ã CircleCI 2.0 ã«ã¯ãŸã 察å¿ã§ããŠããªãã®ã§ãä»åŸã®èª²é¡ãšããããšæããŸãã ãç¥ãã ã¡ãã¬ãŒã§ã¯ãCLINICS ã ãã§ãªããå»çä»è·ã®æ±äººãµã€ãã ãžã§ãã¡ãã¬ãŒ ããå»åž«ãã¡ãã€ãããªã³ã©ã€ã³å»çäºå
žã MEDLEY ããå£ã³ãã§æ¢ããä»è·æœèšã®æ€çŽ¢ãµã€ãã ä»è·ã®ã»ãã ããªã©ã®ãããã¯ããæäŸããŠããŸãããããã®ãµãŒãã¹ã®æ¡å€§ãåããŠããã®æé·ãæ¯ãããšã³ãžãã¢ã»ãã¶ã€ããŒãåéããŠããŸãã ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp ã¡ãã¬ãŒã§äžç·ã«å»çäœéšãå€ãããããã¯ãäœãã«é¢ããããæ¹ã®ãé£çµ¡ãåŸ
ã¡ããŠãããŸãã
ããã«ã¡ã¯ãéçºæ¬éšã®å®®å
ã§ãã ããŠããããŸã§åŒç€Ÿã®ãªã³ã©ã€ã³èšºçã¢ããªã CLINICS ãã§ã¯ãããŒã³ãæãã Heroku ãå©çšããŠãããŸããã Heroku ãšã¯ãPaaS ã®äžçš®ã§ Web ã¢ããªã±ãŒã·ã§ã³ãç°¡åã«ãããã€ããã¹ãã£ã³ã°ã§ãããµãŒãã¹ã§ãã ããçšåºŠã®å¶çŽã¯ã€ããŸããã(倧äœã®å¶çŽã¯éã§è§£æ±ºã§ããã®ã§)䜿ã£ãŠãããããå€ãã®ã§ã¯ãªãã§ããããã ä»åãäºæ
ã«ãã Heroku ãã AWS Elastic Beanstalk (以äžãEB)ãžç§»è¡ããããšã«ãªããŸããã®ã§ããã®ãããã§ãã£ãããšãå
±æã§ããã°ãšæããŸãã Private PaaS ã«ããªãã®ïŒ ãŸãã¯ããã«ç§»è¡ã«ããããPriavte PaaS ãæ§ç¯ããæ¹æ³ã暡玢ããŸããã ã§ããããããã®ã¯ã©ã¹ã¿ã®æ§ç¯ã¯ã§ããŠããå°ä»»ã®(Ops|SRE|ã€ã³ãã©)ããŒã ãããªããããæ¥ã
ã®ç®¡çãéçšã«æãåããªãã ãããšããæããããPrivate PaaS ã®æ§ç¯ã¯èŠéããŸããã ãã®èŸºãã¯ä»åŸããŒã 人æ°ãå¢ãããææŠããŠããããã§ãâŠã æ€èšæãåèã«ãããªã³ã¯ PAAS comparison - Dokku vs Flynn vs Deis vs Kubernetes vs Docker Swarm (2017) Convox Deis Flynn ãªã AWS Elastic Beanstalk ã«ããã®ïŒ EB ã«ã¯ Rails ã Sinatra ã§äœæããããŠã§ãã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããã® Ruby ãã©ãããã©ãŒã ãäºãçšæãããŠãããŸãã ãã ããä»åã®ç§»è¡ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ãžã®å€æŽãäžåå ããã«è¡ãããã£ããããRuby ãã©ãããã©ãŒã ãå©çšããŸããã§ããã 代ããã« Docker ã³ã³ãããå®è¡ã§ãã ãã©ãããã©ãŒã ããã£ãããããã¡ãã䜿ãããšã«ããŸããã herokuish ã§ Docker ã€ã¡ãŒãžãäœæ ã¢ããªã±ãŒã·ã§ã³ã® Docker ã€ã¡ãŒãžåã«ã¯ã gliderlabs/herokuish ã䜿ããŸããã ãã㯠buildpack ã䜿ãã¢ããªã±ãŒã·ã§ã³ã slug åããããslug ãå®è¡ããããã®ããŒã«ã§ãã Docker ã€ã¡ãŒãžäœæã®æé ã¯ä»¥äžã®éãã§ãã herokuish buildpack build ãš herokuish slug generate ã§ã¢ããªã±ãŒã·ã§ã³ã slug ã«ãã herokuish slug import ã§ slug ãã€ã³ããŒãããŠå®æ ããã§ã¯ãããããç°¡åã«èª¬æããŠãããããšæããŸãã ã¢ããªã±ãŒã·ã§ã³ã slug ã«ãã docker pull gliderlabs/herokuish docker run \ -v "/path/to/app:/tmp/build" \ -v "/path/to/cache:/tmp/cache" \ -v "/path/to/slug:/tmp/slug" \ gliderlabs/herokuish \ /bin/bash -c 'herokuish buildpack build && herokuish slug generate && herokuish slug export > /tmp/slug/slug.tgz' herokuish ã¯ç¹å®ã®ãã£ã¬ã¯ããªã«å¯ŸããŠåŠçãè¡ããŸããâ ã§ã¯ãã«ãããã¢ããªã±ãŒã·ã§ã³ãŸã§ã®ãã£ã¬ã¯ããªãã¹ã /tmp/build ã«ãããã³ã°ããŠããŸãã /tmp/cache 㯠buildpack ãå©çšãããã£ãã·ã¥çœ®ãå Žã§ãããã®ãã£ã¬ã¯ããªã次å以éã®ãã«ãã§ããããã³ã°ããŠãããšãã«ãã®é«éåãèŠèŸŒããŸãã æåŸã® /tmp/slug ã¯ãã«ããã slug ãã³ã³ãããããã¹ããžã³ããŒããããã«æå®ããŠããŸãã(ãã㯠herokuish ã§çšæãããŠããã®ã§ã¯ãªãã³ã³ãããããã¹ããžãã¡ã€ã«ãã³ããŒããæ¹æ³ãæ©ãã æ«ã®ã¢ãããã¯ãªå¯Ÿå¿ã§ãâŠ) ä»ã«ãæ§ã
ãªãã£ã¬ã¯ããªããããŸãã詳ãã㯠ããã¥ã¡ã³ã ãã芧ãã ããã slug ãã€ã³ããŒããã æ¬¡ã«äœæãã slug ã䜿ãã¢ããªã±ãŒã·ã§ã³ã® Docker ã€ã¡ãŒãžãã€ãããŸãã cd $( mktemp -d ) mv /path/to/slug/slug.tgz . echo ' FROM gliderlabs/herokuish COPY slug.tgz /tmp/slug.tgz RUN cat /tmp/slug.tgz | herokuish slug import && rm /tmp/slug.tgz EXPOSE 5000 ' > Dockerfile docker build -f Dockerfile . docker build æã« Context ãšããŠã«ã¬ã³ããã£ã¬ã¯ããªå
šäœãéããããããäžæãã£ã¬ã¯ããªãäœæããã®äžã§ docker build ãè¡ã£ãŠããŸãã çµãã CLINICS ã§ã¯äžèšã®ãããªææ®µã§äœæãã Docker ã€ã¡ãŒãžã Amazon EC2 Container Registry ã«ã¢ããããŒãã EB äžã§å®è¡ããŠããŸãã æ¬æ¥ã§ããã°ãã¢ããªã±ãŒã·ã§ã³ã slug ã«ããéšåãšãslug ãã€ã³ããŒãããéšåãåå²ããªããŠãè¯ããšæããŸãããCircleCI ã§ Docker ã€ã¡ãŒãžãäœæããé¢ä¿äžã§ãã®ãããªæ¹æ³ã«ãªããŸããã å
æ¥ GA ãšãªã£ã CircleCI 2.0 ã«ã¯ãŸã 察å¿ã§ããŠããªãã®ã§ãä»åŸã®èª²é¡ãšããããšæããŸãã ãç¥ãã ã¡ãã¬ãŒã§ã¯ãCLINICS ã ãã§ãªããå»çä»è·ã®æ±äººãµã€ãã ãžã§ãã¡ãã¬ãŒ ããå»åž«ãã¡ãã€ãããªã³ã©ã€ã³å»çäºå
žã MEDLEY ããå£ã³ãã§æ¢ããä»è·æœèšã®æ€çŽ¢ãµã€ãã ä»è·ã®ã»ãã ããªã©ã®ãããã¯ããæäŸããŠããŸãããããã®ãµãŒãã¹ã®æ¡å€§ãåããŠããã®æé·ãæ¯ãããšã³ãžãã¢ã»ãã¶ã€ããŒãåéããŠããŸãã ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp ã¡ãã¬ãŒã§äžç·ã«å»çäœéšãå€ãããããã¯ãäœãã«é¢ããããæ¹ã®ãé£çµ¡ãåŸ
ã¡ããŠãããŸãã
ããã«ã¡ã¯ãéçºæ¬éšã®å®®å
ã§ãã ããŠããããŸã§åŒç€Ÿã®ãªã³ã©ã€ã³èšºçã¢ããªã CLINICS ãã§ã¯ãããŒã³ãæãã Heroku ãå©çšããŠãããŸããã Heroku ãšã¯ãPaaS ã®äžçš®ã§ Web ã¢ããªã±ãŒã·ã§ã³ãç°¡åã«ãããã€ããã¹ãã£ã³ã°ã§ãããµãŒãã¹ã§ãã ããçšåºŠã®å¶çŽã¯ã€ããŸããã(倧äœã®å¶çŽã¯éã§è§£æ±ºã§ããã®ã§)䜿ã£ãŠãããããå€ãã®ã§ã¯ãªãã§ããããã ä»åãäºæ
ã«ãã Heroku ãã AWS Elastic Beanstalk (以äžãEB)ãžç§»è¡ããããšã«ãªããŸããã®ã§ããã®ãããã§ãã£ãããšãå
±æã§ããã°ãšæããŸãã Private PaaS ã«ããªãã®ïŒ ãŸãã¯ããã«ç§»è¡ã«ããããPriavte PaaS ãæ§ç¯ããæ¹æ³ã暡玢ããŸããã ã§ããããããã®ã¯ã©ã¹ã¿ã®æ§ç¯ã¯ã§ããŠããå°ä»»ã®(Ops|SRE|ã€ã³ãã©)ããŒã ãããªããããæ¥ã
ã®ç®¡çãéçšã«æãåããªãã ãããšããæããããPrivate PaaS ã®æ§ç¯ã¯èŠéããŸããã ãã®èŸºãã¯ä»åŸããŒã 人æ°ãå¢ãããææŠããŠããããã§ãâŠã æ€èšæãåèã«ãããªã³ã¯ PAAS comparison - Dokku vs Flynn vs Deis vs Kubernetes vs Docker Swarm (2017) Convox Deis Flynn ãªã AWS Elastic Beanstalk ã«ããã®ïŒ EB ã«ã¯ Rails ã Sinatra ã§äœæããããŠã§ãã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããã® Ruby ãã©ãããã©ãŒã ãäºãçšæãããŠãããŸãã ãã ããä»åã®ç§»è¡ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ãžã®å€æŽãäžåå ããã«è¡ãããã£ããããRuby ãã©ãããã©ãŒã ãå©çšããŸããã§ããã 代ããã« Docker ã³ã³ãããå®è¡ã§ãã ãã©ãããã©ãŒã ããã£ãããããã¡ãã䜿ãããšã«ããŸããã herokuish ã§ Docker ã€ã¡ãŒãžãäœæ ã¢ããªã±ãŒã·ã§ã³ã® Docker ã€ã¡ãŒãžåã«ã¯ã gliderlabs/herokuish ã䜿ããŸããã ãã㯠buildpack ã䜿ãã¢ããªã±ãŒã·ã§ã³ã slug åããããslug ãå®è¡ããããã®ããŒã«ã§ãã Docker ã€ã¡ãŒãžäœæã®æé ã¯ä»¥äžã®éãã§ãã herokuish buildpack build ãš herokuish slug generate ã§ã¢ããªã±ãŒã·ã§ã³ã slug ã«ãã herokuish slug import ã§ slug ãã€ã³ããŒãããŠå®æ ããã§ã¯ãããããç°¡åã«èª¬æããŠãããããšæããŸãã ã¢ããªã±ãŒã·ã§ã³ã slug ã«ãã docker pull gliderlabs/herokuish docker run \ -v "/path/to/app:/tmp/build" \ -v "/path/to/cache:/tmp/cache" \ -v "/path/to/slug:/tmp/slug" \ gliderlabs/herokuish \ /bin/bash -c 'herokuish buildpack build && herokuish slug generate && herokuish slug export > /tmp/slug/slug.tgz' herokuish ã¯ç¹å®ã®ãã£ã¬ã¯ããªã«å¯ŸããŠåŠçãè¡ããŸããâ ã§ã¯ãã«ãããã¢ããªã±ãŒã·ã§ã³ãŸã§ã®ãã£ã¬ã¯ããªãã¹ã /tmp/build ã«ãããã³ã°ããŠããŸãã /tmp/cache 㯠buildpack ãå©çšãããã£ãã·ã¥çœ®ãå Žã§ãããã®ãã£ã¬ã¯ããªã次å以éã®ãã«ãã§ããããã³ã°ããŠãããšãã«ãã®é«éåãèŠèŸŒããŸãã æåŸã® /tmp/slug ã¯ãã«ããã slug ãã³ã³ãããããã¹ããžã³ããŒããããã«æå®ããŠããŸãã(ãã㯠herokuish ã§çšæãããŠããã®ã§ã¯ãªãã³ã³ãããããã¹ããžãã¡ã€ã«ãã³ããŒããæ¹æ³ãæ©ãã æ«ã®ã¢ãããã¯ãªå¯Ÿå¿ã§ãâŠ) ä»ã«ãæ§ã
ãªãã£ã¬ã¯ããªããããŸãã詳ãã㯠ããã¥ã¡ã³ã ãã芧ãã ããã slug ãã€ã³ããŒããã æ¬¡ã«äœæãã slug ã䜿ãã¢ããªã±ãŒã·ã§ã³ã® Docker ã€ã¡ãŒãžãã€ãããŸãã cd $( mktemp -d ) mv /path/to/slug/slug.tgz . echo ' FROM gliderlabs/herokuish COPY slug.tgz /tmp/slug.tgz RUN cat /tmp/slug.tgz | herokuish slug import && rm /tmp/slug.tgz EXPOSE 5000 ' > Dockerfile docker build -f Dockerfile . docker build æã« Context ãšããŠã«ã¬ã³ããã£ã¬ã¯ããªå
šäœãéããããããäžæãã£ã¬ã¯ããªãäœæããã®äžã§ docker build ãè¡ã£ãŠããŸãã çµãã CLINICS ã§ã¯äžèšã®ãããªææ®µã§äœæãã Docker ã€ã¡ãŒãžã Amazon EC2 Container Registry ã«ã¢ããããŒãã EB äžã§å®è¡ããŠããŸãã æ¬æ¥ã§ããã°ãã¢ããªã±ãŒã·ã§ã³ã slug ã«ããéšåãšãslug ãã€ã³ããŒãããéšåãåå²ããªããŠãè¯ããšæããŸãããCircleCI ã§ Docker ã€ã¡ãŒãžãäœæããé¢ä¿äžã§ãã®ãããªæ¹æ³ã«ãªããŸããã å
æ¥ GA ãšãªã£ã CircleCI 2.0 ã«ã¯ãŸã 察å¿ã§ããŠããªãã®ã§ãä»åŸã®èª²é¡ãšããããšæããŸãã ãç¥ãã ã¡ãã¬ãŒã§ã¯ãCLINICS ã ãã§ãªããå»çä»è·ã®æ±äººãµã€ãã ãžã§ãã¡ãã¬ãŒ ããå»åž«ãã¡ãã€ãããªã³ã©ã€ã³å»çäºå
žã MEDLEY ããå£ã³ãã§æ¢ããä»è·æœèšã®æ€çŽ¢ãµã€ãã ä»è·ã®ã»ãã ããªã©ã®ãããã¯ããæäŸããŠããŸãããããã®ãµãŒãã¹ã®æ¡å€§ãåããŠããã®æé·ãæ¯ãããšã³ãžãã¢ã»ãã¶ã€ããŒãåéããŠããŸãã ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp ã¡ãã¬ãŒã§äžç·ã«å»çäœéšãå€ãããããã¯ãäœãã«é¢ããããæ¹ã®ãé£çµ¡ãåŸ
ã¡ããŠãããŸãã
ããã«ã¡ã¯ãéçºæ¬éšã®å®®å
ã§ãã ããŠããããŸã§åŒç€Ÿã®ãªã³ã©ã€ã³èšºçã¢ããªã CLINICS ãã§ã¯ãããŒã³ãæãã Heroku ãå©çšããŠãããŸããã Heroku ãšã¯ãPaaS ã®äžçš®ã§ Web ã¢ããªã±ãŒã·ã§ã³ãç°¡åã«ãããã€ããã¹ãã£ã³ã°ã§ãããµãŒãã¹ã§ãã ããçšåºŠã®å¶çŽã¯ã€ããŸããã(倧äœã®å¶çŽã¯éã§è§£æ±ºã§ããã®ã§)䜿ã£ãŠãããããå€ãã®ã§ã¯ãªãã§ããããã ä»åãäºæ
ã«ãã Heroku ãã AWS Elastic Beanstalk (以äžãEB)ãžç§»è¡ããããšã«ãªããŸããã®ã§ããã®ãããã§ãã£ãããšãå
±æã§ããã°ãšæããŸãã Private PaaS ã«ããªãã®ïŒ ãŸãã¯ããã«ç§»è¡ã«ããããPriavte PaaS ãæ§ç¯ããæ¹æ³ã暡玢ããŸããã ã§ããããããã®ã¯ã©ã¹ã¿ã®æ§ç¯ã¯ã§ããŠããå°ä»»ã®(Ops|SRE|ã€ã³ãã©)ããŒã ãããªããããæ¥ã
ã®ç®¡çãéçšã«æãåããªãã ãããšããæããããPrivate PaaS ã®æ§ç¯ã¯èŠéããŸããã ãã®èŸºãã¯ä»åŸããŒã 人æ°ãå¢ãããææŠããŠããããã§ãâŠã æ€èšæãåèã«ãããªã³ã¯ PAAS comparison - Dokku vs Flynn vs Deis vs Kubernetes vs Docker Swarm (2017) Convox Deis Flynn ãªã AWS Elastic Beanstalk ã«ããã®ïŒ EB ã«ã¯ Rails ã Sinatra ã§äœæããããŠã§ãã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããã® Ruby ãã©ãããã©ãŒã ãäºãçšæãããŠãããŸãã ãã ããä»åã®ç§»è¡ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ãžã®å€æŽãäžåå ããã«è¡ãããã£ããããRuby ãã©ãããã©ãŒã ãå©çšããŸããã§ããã 代ããã« Docker ã³ã³ãããå®è¡ã§ãã ãã©ãããã©ãŒã ããã£ãããããã¡ãã䜿ãããšã«ããŸããã herokuish ã§ Docker ã€ã¡ãŒãžãäœæ ã¢ããªã±ãŒã·ã§ã³ã® Docker ã€ã¡ãŒãžåã«ã¯ã gliderlabs/herokuish ã䜿ããŸããã ãã㯠buildpack ã䜿ãã¢ããªã±ãŒã·ã§ã³ã slug åããããslug ãå®è¡ããããã®ããŒã«ã§ãã Docker ã€ã¡ãŒãžäœæã®æé ã¯ä»¥äžã®éãã§ãã herokuish buildpack build ãš herokuish slug generate ã§ã¢ããªã±ãŒã·ã§ã³ã slug ã«ãã herokuish slug import ã§ slug ãã€ã³ããŒãããŠå®æ ããã§ã¯ãããããç°¡åã«èª¬æããŠãããããšæããŸãã ã¢ããªã±ãŒã·ã§ã³ã slug ã«ãã docker pull gliderlabs/herokuish docker run \ -v "/path/to/app:/tmp/build" \ -v "/path/to/cache:/tmp/cache" \ -v "/path/to/slug:/tmp/slug" \ gliderlabs/herokuish \ /bin/bash -c 'herokuish buildpack build && herokuish slug generate && herokuish slug export > /tmp/slug/slug.tgz' herokuish ã¯ç¹å®ã®ãã£ã¬ã¯ããªã«å¯ŸããŠåŠçãè¡ããŸããâ ã§ã¯ãã«ãããã¢ããªã±ãŒã·ã§ã³ãŸã§ã®ãã£ã¬ã¯ããªãã¹ã /tmp/build ã«ãããã³ã°ããŠããŸãã /tmp/cache 㯠buildpack ãå©çšãããã£ãã·ã¥çœ®ãå Žã§ãããã®ãã£ã¬ã¯ããªã次å以éã®ãã«ãã§ããããã³ã°ããŠãããšãã«ãã®é«éåãèŠèŸŒããŸãã æåŸã® /tmp/slug ã¯ãã«ããã slug ãã³ã³ãããããã¹ããžã³ããŒããããã«æå®ããŠããŸãã(ãã㯠herokuish ã§çšæãããŠããã®ã§ã¯ãªãã³ã³ãããããã¹ããžãã¡ã€ã«ãã³ããŒããæ¹æ³ãæ©ãã æ«ã®ã¢ãããã¯ãªå¯Ÿå¿ã§ãâŠ) ä»ã«ãæ§ã
ãªãã£ã¬ã¯ããªããããŸãã詳ãã㯠ããã¥ã¡ã³ã ãã芧ãã ããã slug ãã€ã³ããŒããã æ¬¡ã«äœæãã slug ã䜿ãã¢ããªã±ãŒã·ã§ã³ã® Docker ã€ã¡ãŒãžãã€ãããŸãã cd $( mktemp -d ) mv /path/to/slug/slug.tgz . echo ' FROM gliderlabs/herokuish COPY slug.tgz /tmp/slug.tgz RUN cat /tmp/slug.tgz | herokuish slug import && rm /tmp/slug.tgz EXPOSE 5000 ' > Dockerfile docker build -f Dockerfile . docker build æã« Context ãšããŠã«ã¬ã³ããã£ã¬ã¯ããªå
šäœãéããããããäžæãã£ã¬ã¯ããªãäœæããã®äžã§ docker build ãè¡ã£ãŠããŸãã çµãã CLINICS ã§ã¯äžèšã®ãããªææ®µã§äœæãã Docker ã€ã¡ãŒãžã Amazon EC2 Container Registry ã«ã¢ããããŒãã EB äžã§å®è¡ããŠããŸãã æ¬æ¥ã§ããã°ãã¢ããªã±ãŒã·ã§ã³ã slug ã«ããéšåãšãslug ãã€ã³ããŒãããéšåãåå²ããªããŠãè¯ããšæããŸãããCircleCI ã§ Docker ã€ã¡ãŒãžãäœæããé¢ä¿äžã§ãã®ãããªæ¹æ³ã«ãªããŸããã å
æ¥ GA ãšãªã£ã CircleCI 2.0 ã«ã¯ãŸã 察å¿ã§ããŠããªãã®ã§ãä»åŸã®èª²é¡ãšããããšæããŸãã ãç¥ãã ã¡ãã¬ãŒã§ã¯ãCLINICS ã ãã§ãªããå»çä»è·ã®æ±äººãµã€ãã ãžã§ãã¡ãã¬ãŒ ããå»åž«ãã¡ãã€ãããªã³ã©ã€ã³å»çäºå
žã MEDLEY ããå£ã³ãã§æ¢ããä»è·æœèšã®æ€çŽ¢ãµã€ãã ä»è·ã®ã»ãã ããªã©ã®ãããã¯ããæäŸããŠããŸãããããã®ãµãŒãã¹ã®æ¡å€§ãåããŠããã®æé·ãæ¯ãããšã³ãžãã¢ã»ãã¶ã€ããŒãåéããŠããŸãã ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp ã¡ãã¬ãŒã§äžç·ã«å»çäœéšãå€ãããããã¯ãäœãã«é¢ããããæ¹ã®ãé£çµ¡ãåŸ
ã¡ããŠãããŸãã
ã¯ãããŸããŠïŒæè¿ã¿ãã¿ã倪ãã ããŠã¯ãããã®ã®ããŸã æ©ã¯çããŠããªããšãã€ãšããã®ææããã£ãšå ªããŠããéçºæ¬éšã€ã±ã¡ã³æ
åœã®ãã¶ã€ããŒã»å°å±±ã§ãã ã¡ãã¬ãŒã§ã¯ TechLunch ãšãã瀟å
å匷äŒã宿œããŠããã®ã§ããã åç° ã«åŒãç¶ãç§ãçºè¡šããæ©äŒãããã ããŸããã®ã§ããã®å
容ã玹ä»ãããŠããã ããŸããããŒãã¯ãæèãšãã¶ã€ã³ã¹ãã«ãã§ããçºè¡šè³æã¯èšäºã®æåŸãã芧ãã ããã ããŒãã«å
¥ããŸãã«âŠ ã¿ãªãããé»éæ¯ãã£ãŠãåç¥ã§ããïŒ é»éæ¯ã¯çŸãããšãããç©ã®åœ¢ã«å
±éããŠã¿ãããæ¯çã§ãå€ãããçµµç»ã圫å»ã建ç¯ãªã©ã«äœ¿ãããŠããŸãããã¶ã€ããŒã§ããã°ãäžåºŠä»¥äžã¯äœ¿ã£ãããšããã®ã§ã¯ãªãã§ããããïŒç§ããã¶ã€ããŒãªã®ã§äœåºŠã䜿ã£ãŠããŸãã ãã 䜿ã£ãŠã¯ãããã®ã®ããªãçŸãããªãã®ãäžæã説æãã§ããŸãããåœããåã®ããã«äžã®äžã«åºãŸã£ãŠããŠãå°ã£ããšãã®é»éæ¯ïŒããšãã£ãå®æãªæèã§äœ¿ã£ãŠããŸããäžåè·¯ã軜ãè¶
ããã®ã§ããã§ã¯ãããªããšæããããã調ã¹ãŠã¿ãŸããã ããããé»éæ¯ã¯ãšãŠã¯ã¬ã€ãã¹ãšãããŠãŒã°ãªãã幟äœåŠãäœç³»åããæ°åŠè
ãèŠã€ããæ¯çãªã®ã§ããããã®ãšã圌ã¯ãé»éæ¯ïŒçŸããããšã¯æèšããŠããªãããã§ããèªç¶ç©ã人工ç©ã®åœ¢ã«ã¯äžå®ã®æ¯çã§æãç«ã£ãŠãããšèãããã®æ¯çã«é»éæ¯ãšåä»ãã ããšã®ããšã ãã®åŸããã®äœ¿ããããããè³ããšããã§æŽ»çšããããã®æ¯çã«èŠªãã¿ãèœçãå··ã§åãå
¥ããããããã«ãªããŸããã èªç¥å¿çåŠã§ã¯ããããã åçŽæ¥è§Šå¹æ ããšåŒã³ãŸããããããè§Šãããã¡ã«èŠªãã¿ãæ²žãæ©èœã人ã«ã¯ããšããšåãã£ãŠããŠãé»éæ¯ãã€ãã£ããã®ãçŸããèŠããã®ããã®åœ±é¿ã§ã¯ãªããïŒãšèšãããŠããŸãããã®èª¬ãèããæãåºç€çãªã®ã«åçãææ§ãªãã¶ã€ããŒã®ã¹ãã«ã®èŒªéããããã ãããããªããŠããŸããã ä»åã® TechLunch ã§ã¯ãææ§ã ã£ããã¶ã€ã³ã®ã¹ãã«ãäººã®æèãå¿ççŸè±¡ãšããèŠç¹ããæãçŽããŠã¿ããšãæ°ããçºèŠãããã®ããïŒãšèãããæèãšãã¶ã€ã³ã¹ãã«ãã®ããŒããéžã³ãŸããã ãæ©ãæèããšãé
ãæèã ãŸãæåã«äººã®æèãã©ãããæ§é ã«ãªã£ãŠãããæŽçããããšæããŸãã ïŒæèã®æãæ¹ã«ã¯å¹
ããããããä»å㯠Wikipedia ã§ãæèãã®ç矩ã«ããããæ
å ±åŠçãã®å
容ã«ãªããŸãã ããã§ 3 ã€ã®è³ªåãå·Šããé ã«çããŠãã ããã 倧æµã®äººã§ããã° 2 åç®ãŸã§ã¯ç¬æã«çããåºããšæããŸãã3 åç®ã¯ã©ãã§ããããïŒ 3 åç®ã¯ä»ãããæéãããã£ãããšæããŸããæ
å ±ãåŠçãããšãã®æèã«ã¯ 1 åç®ãš 2 åç®ã®ããã«ç¬æã«çãããã®ã¯ã æ©ãæè ãã3 åç®ã®ããã«å°ãæéã¯å¿
èŠãªã é
ãæè ãã® 2 ã€ããããŸãã è¡åçµæžåŠã§ã¯ããã®æ©ãæèãã ã·ã¹ãã 1 ããé
ãæèãã ã·ã¹ãã 2 ããšåŒãã§ããŸãã ã·ã¹ãã 1 ã¯ãèªåçã«çŽæã§åã ã§ã¯æ¬¡ã«ãã¡ããã芧ãã ããã ã©ã¡ãã®çŽç·ãé·ãã§ããããïŒçãã¯ã©ã¡ããåãã§ãããã®åé¡ããåç¥ã®æ¹ã§ãèŠãç¬é㯠A ãé·ãèŠããã®ã§ã¯ãªãã§ããããïŒ ã§ã¯ãã¡ãã§ã¯ã©ãã§ããããïŒ ãã¡ãã®æåãã¿ããšãã«ã海氎济ããŠããŠæººããŠããããããã¯ããã«è¿ãã·ãŒã³ãæãæµ®ãã¹ãŠãªãã§ããããïŒããã®äºèªã®ããã ã«ã¯ãããããããŸãããšãããããªçŽæ¥ã®çžé¢ã¯ãããŸãããããã«ããããããåºæ¥ãã°é¿ããããªããããªããšã§ãç¡æèã«é¢é£ã¥ããããã·ãŒã³ãæãæµ®ããã ã¯ãã§ãã ã·ã¹ãã 1 ã«ã¯ãããã»ã©ã®çŽç·ã®é·ãã®ããã«ééã£ãŠãããšããŠãã èŠããŸãŸ ããèªèããæ©èœãš 2 ã€ã®æåããã é¢é£ã¥ã ãããããªãã¹ããŒãªãŒãçµã¿ç«ãŠãæ©èœããããŸãããã®ã©ã¡ãããèªåã®æèãšã¯é¢ä¿ãªãèªåã§ãããã匷åã«åããŠããŸãã ã·ã¹ãã 2 ã¯ãæåã§è«ççã«åã æåã®äºæ¡ã®æãç®ãæãåºããŠãã ãããæ¥æ¬ã§ç®æ°ãåŠãã 人ã§ããã°ãäºæ¡ã®æãç®ã®ãšããèãããæ®µéã«ç§»ããšæããŸãããããã·ã¹ãã 2 ã®ã¹ã€ããã§ããã·ã¹ãã 1 ã¯åžžæã¹ã€ãããå
¥ã£ãŠããŠã»ãŒèªåã§çããåºããŸãããã·ã¹ãã 2 ã¯æèçã«ãèããããšããã¹ããããèžãŸãªããšåããŸãããã·ã¹ãã 1 ã¯èªåã§ãããã·ã¹ãã 2 ã¯æåã§ãã æåã®ããæéããããŸãããã·ã¹ãã 1 ã«ã¯ãªãçšå¿æ·±ããšæ
éãããããŸãããã¡ãã®åé¡ãã芧ãã ããã ã ããããšããŒã«ã§ 110 åããããã¯ããŒã«ãã 100 åé«ããããŒã«ã®å€æ®µã¯ïŒ ã å³çã§çãã人㯠10 åãšçããæ¹ãå€ãããã§ããããããåé¡ã«ã¯ã·ã¹ãã 2 ããã£ãŠã€ãã§ãè«ççãã€æ£ç¢ºã«çããåºãããšããŸããçã㯠5 åã§ãããªãã«ã¯é ã®åè»¢ãæ©ãå³çã§ãã人ãããã£ãããããšã ãšæããŸãããããªæ¹ã«ã¯ãã¡ãã®åé¡ãçããŠãã ã ããŸãããã 3 æ¥åããé£ã¹ãå€é£¯ã®ç®ç«ãå£ã«åºããŠçºè¡šããªãããã26x673ãã245x287ãã346x4546ãã® 3 åã 90 ç§ä»¥å
ã«è§£çããŠãã ããã ãããã§ããããïŒã·ã¹ãã 2 ã¯æåã§ãããè«ççã§æ£ç¢ºã«çãåºãããšããŸãããè€éãããæŒç®ããã«ãã¿ã¹ã¯ã«ãã£ãœã匱ãã¹ã¿ããããããŸããããããããŠé»åãå©ããæ¹ã¯ãã·ã¹ãã 2 ãã®ãã¢ãããããšããããšãããããŸããã ã·ã¹ãã 1 ãš 2 ã®ç¹åŸŽã¯ä»¥äžãã©ã¡ããè¯ããšãããšããã§ãªããšããããããŸãã ãã¶ã€ã³ãåæ§ç¯ ãããã·ã¹ãã 1&2 ã®ç¹æ§ãèžãŸããäžã§ç°¡åãªãã¥ãŒã¹èšäºã®ã¿ã€ãã°ã©ãã£ãæŽçããŠã¿ãŸããã çºè¡šè³æã® 58 ããŒãžããã芧ãã ããã speakerdeck.com ããšçްããæ
å ±ãã·ã¹ãã 1&2 ã®ãã£ã«ã¿ãŒãéãããšã§ãã¿ã€ãã«ããªãŒããæ¬æã®è¡éãæåãµã€ãºãããããã·ã¹ãã 2 ãæ
å ±ãçè§£ããããããããã®ïŒã€æ©èœãšããŠæããããšãã§ããŸããåœããåã«äœ¿ã£ãŠããã¹ãã«ãæ©èœãå¥ã®èŠç¹ã§æããããšã§éã£ãæ·±ãæå³ãèŠåºããããã«ãªãã倧ããªçºèŠã«ã€ãªãããŸããã ä»åã¯ã¿ã€ãã°ã©ãã£ã ã£ãã®ã§ã·ã¹ãã 2 å¯ãã®ãã®ã§ããããããžã¥ã¢ã«ã¢ã€ãã³ãã£ãã£ãåŒ·ãæœè±¡çãªãã¶ã€ã³ã¯ãæå³çã«ã·ã¹ãã 2 ãå°ã蟌ãã·ã¹ãã 1 ã®çŽææ§ãå©çšããŠå
容ãçè§£ããŠãããããšãã§ããŸãã ã·ã¹ãã 1&2 ã® 2 ã€ã®ç¹æ§ãèžãŸããŠäœ¿ãããªãããšã§ãã¹ãã«ã®æ·±ãçè§£ã¯ãã¡ããã§ãããæèŠãšã¯éããã¶ã€ã³ã®äŒãæ¹ã®æ°ãããã³ãã«ããªãããã§ãã ãããã« YouTube ã InstagramãLINE ã¯ã©ã¡ãããšãããšçŽææ§ãä¿ãã·ã¹ãã 1 ãæŽ»èºããã¢ããªã§ããããã ãã§ãªã身ã®åãã«ãããµãŒãã¹å
šäœããã®åŸåãšããå°è±¡ããããŸããã·ã¹ãã 1 ã¯æ®æ®µããã¹ã€ãããå
¥ã£ãŠãããããæ¯èŒçã«ç°¡æãªã¹ãããã§åããããããšãã§ããŸãã äžæ¹ã§ã·ã¹ãã 2 ã¯è€éãªæŒç®ã«ã¯èãããããã£ãããšã±ã¢ããªããã§ãªããšååãªéçšãã§ããŸããããã ã±ã¢ããã£ãããããšæ©æµã倧ãããšãããŸãã éèãæè²ãéçšããããŠå»çãšã20 幎åãšã¯æ¯èŒã«ãªããªãã»ã©ã€ã³ã¿ãŒãããã¯äººçã®ç¯ç®ã«æ·±ãé¢ããããã«ãªã£ãããã§ãã人çã«é¢ããéžæããããã§è¡ããšãã çŽæã ãã§ãªãã·ã¹ãã 2 ãåãããŠçèãçŽåŸã®ããæ±ºæãè¡ãããšãããããŠãŒã¶ãŒã®å©çã«ã€ãªãã ãšç§ã¯èããŠããŸãã ã¡ãã¬ãŒã§æäŸããŠãããµãŒãã¹ã¯ãŠãŒã¶ãŒã®äººçã«å°ãªãããé¢ããæ§è³ªããã£ãŠããŸããããã«çµè«ã¥ãããŠãããããããŠãŒã¶ãŒã«ãšã£ãŠæ£ãããšæãã倿ãã§ããããã«ã ã·ã¹ãã 2 ãããŸãåãããããšãã§ããç°å¢ããã¶ã€ããŒãšããŠã€ãã£ãŠãããã ãšæããŸãã ããŸã ä»åã®ããã¯ã©ã³ãã§åèã«ãããŠããã ããæžç±ã¯ä»¥äžã®ãã®ã«ãªããŸãã ã ãã¡ã¹ãïŒã¹ããŒïŒäžã»äžïŒ ããããšã«ã»ã«ãŒããã³ ã äºæ³éãã«äžåç ããã³ã»ã¢ãªãšãª ã é¯èŠã®ç§åŠ ãã¯ãªã¹ããã¡ãŒã»ãã£ãã«ã¹ïŒãããšã«ã»ã·ã¢ã³ãº ã UI ãã¶ã€ã³ã®å¿çåŠ ããžã§ãã»ãžã§ã³ãœã³ ä»åã®ã話ã¯ãæ¬åœã«æ¬åœã«è¡šé¢ã®éšåã«ãªããŸããæµãèªã¿ã§ãåèã«ãªãã®ã§æã«åã£ãŠèŠãŠãã ããããŸãããããããšã«èå³ãããããã¶ã€ããŒããã»ãšã³ãžãã¢ãããæ¯éæ¯éã¡ãã¬ãŒã«éã³ã«æ¥ãŠãã ããïŒïŒçµ¶è³åéäžã§ãïŒïŒ ãç¥ãã ã¡ãã¬ãŒã§ã¯ããžã§ãã¡ãã¬ãŒã ãã§ãªããå»åž«ãã¡ãã€ãããªã³ã©ã€ã³å»çäºå
žã MEDLEY ãããªã³ã©ã€ã³èšºçã¢ããªã CLINICS ããå£ã³ãã§æ¢ããä»è·æœèšã®æ€çŽ¢ãµã€ãã ä»è·ã®ã»ãã ããªã©ã®ãããã¯ããæäŸããŠããŸãããããã®ãµãŒãã¹ã®æ¡å€§ãåããŠããã®æé·ãæ¯ãããšã³ãžãã¢ã»ãã¶ã€ããŒãåéããŠããŸãã www.medley.jp ä»åŸãšãã¡ãã¬ãŒãããããããé¡ãããããŸãïŒ
ã¯ãããŸããŠïŒæè¿ã¿ãã¿ã倪ãã ããŠã¯ãããã®ã®ããŸã æ©ã¯çããŠããªããšãã€ãšããã®ææããã£ãšå ªããŠããéçºæ¬éšã€ã±ã¡ã³æ
åœã®ãã¶ã€ããŒã»å°å±±ã§ãã ã¡ãã¬ãŒã§ã¯ TechLunch ãšãã瀟å
å匷äŒã宿œããŠããã®ã§ããã åç° ã«åŒãç¶ãç§ãçºè¡šããæ©äŒãããã ããŸããã®ã§ããã®å
容ã玹ä»ãããŠããã ããŸããããŒãã¯ãæèãšãã¶ã€ã³ã¹ãã«ãã§ããçºè¡šè³æã¯èšäºã®æåŸãã芧ãã ããã ããŒãã«å
¥ããŸãã«âŠ ã¿ãªãããé»éæ¯ãã£ãŠãåç¥ã§ããïŒ é»éæ¯ã¯çŸãããšãããç©ã®åœ¢ã«å
±éããŠã¿ãããæ¯çã§ãå€ãããçµµç»ã圫å»ã建ç¯ãªã©ã«äœ¿ãããŠããŸãããã¶ã€ããŒã§ããã°ãäžåºŠä»¥äžã¯äœ¿ã£ãããšããã®ã§ã¯ãªãã§ããããïŒç§ããã¶ã€ããŒãªã®ã§äœåºŠã䜿ã£ãŠããŸãã ãã 䜿ã£ãŠã¯ãããã®ã®ããªãçŸãããªãã®ãäžæã説æãã§ããŸãããåœããåã®ããã«äžã®äžã«åºãŸã£ãŠããŠãå°ã£ããšãã®é»éæ¯ïŒããšãã£ãå®æãªæèã§äœ¿ã£ãŠããŸããäžåè·¯ã軜ãè¶
ããã®ã§ããã§ã¯ãããªããšæããããã調ã¹ãŠã¿ãŸããã ããããé»éæ¯ã¯ãšãŠã¯ã¬ã€ãã¹ãšãããŠãŒã°ãªãã幟äœåŠãäœç³»åããæ°åŠè
ãèŠã€ããæ¯çãªã®ã§ããããã®ãšã圌ã¯ãé»éæ¯ïŒçŸããããšã¯æèšããŠããªãããã§ããèªç¶ç©ã人工ç©ã®åœ¢ã«ã¯äžå®ã®æ¯çã§æãç«ã£ãŠãããšèãããã®æ¯çã«é»éæ¯ãšåä»ãã ããšã®ããšã ãã®åŸããã®äœ¿ããããããè³ããšããã§æŽ»çšããããã®æ¯çã«èŠªãã¿ãèœçãå··ã§åãå
¥ããããããã«ãªããŸããã èªç¥å¿çåŠã§ã¯ããããã åçŽæ¥è§Šå¹æ ããšåŒã³ãŸããããããè§Šãããã¡ã«èŠªãã¿ãæ²žãæ©èœã人ã«ã¯ããšããšåãã£ãŠããŠãé»éæ¯ãã€ãã£ããã®ãçŸããèŠããã®ããã®åœ±é¿ã§ã¯ãªããïŒãšèšãããŠããŸãããã®èª¬ãèããæãåºç€çãªã®ã«åçãææ§ãªãã¶ã€ããŒã®ã¹ãã«ã®èŒªéããããã ãããããªããŠããŸããã ä»åã® TechLunch ã§ã¯ãææ§ã ã£ããã¶ã€ã³ã®ã¹ãã«ãäººã®æèãå¿ççŸè±¡ãšããèŠç¹ããæãçŽããŠã¿ããšãæ°ããçºèŠãããã®ããïŒãšèãããæèãšãã¶ã€ã³ã¹ãã«ãã®ããŒããéžã³ãŸããã ãæ©ãæèããšãé
ãæèã ãŸãæåã«äººã®æèãã©ãããæ§é ã«ãªã£ãŠãããæŽçããããšæããŸãã ïŒæèã®æãæ¹ã«ã¯å¹
ããããããä»å㯠Wikipedia ã§ãæèãã®ç矩ã«ããããæ
å ±åŠçãã®å
容ã«ãªããŸãã ããã§ 3 ã€ã®è³ªåãå·Šããé ã«çããŠãã ããã 倧æµã®äººã§ããã° 2 åç®ãŸã§ã¯ç¬æã«çããåºããšæããŸãã3 åç®ã¯ã©ãã§ããããïŒ 3 åç®ã¯ä»ãããæéãããã£ãããšæããŸããæ
å ±ãåŠçãããšãã®æèã«ã¯ 1 åç®ãš 2 åç®ã®ããã«ç¬æã«çãããã®ã¯ã æ©ãæè ãã3 åç®ã®ããã«å°ãæéã¯å¿
èŠãªã é
ãæè ãã® 2 ã€ããããŸãã è¡åçµæžåŠã§ã¯ããã®æ©ãæèãã ã·ã¹ãã 1 ããé
ãæèãã ã·ã¹ãã 2 ããšåŒãã§ããŸãã ã·ã¹ãã 1 ã¯ãèªåçã«çŽæã§åã ã§ã¯æ¬¡ã«ãã¡ããã芧ãã ããã ã©ã¡ãã®çŽç·ãé·ãã§ããããïŒçãã¯ã©ã¡ããåãã§ãããã®åé¡ããåç¥ã®æ¹ã§ãèŠãç¬é㯠A ãé·ãèŠããã®ã§ã¯ãªãã§ããããïŒ ã§ã¯ãã¡ãã§ã¯ã©ãã§ããããïŒ ãã¡ãã®æåãã¿ããšãã«ã海氎济ããŠããŠæººããŠããããããã¯ããã«è¿ãã·ãŒã³ãæãæµ®ãã¹ãŠãªãã§ããããïŒããã®äºèªã®ããã ã«ã¯ãããããããŸãããšãããããªçŽæ¥ã®çžé¢ã¯ãããŸãããããã«ããããããåºæ¥ãã°é¿ããããªããããªããšã§ãç¡æèã«é¢é£ã¥ããããã·ãŒã³ãæãæµ®ããã ã¯ãã§ãã ã·ã¹ãã 1 ã«ã¯ãããã»ã©ã®çŽç·ã®é·ãã®ããã«ééã£ãŠãããšããŠãã èŠããŸãŸ ããèªèããæ©èœãš 2 ã€ã®æåããã é¢é£ã¥ã ãããããªãã¹ããŒãªãŒãçµã¿ç«ãŠãæ©èœããããŸãããã®ã©ã¡ãããèªåã®æèãšã¯é¢ä¿ãªãèªåã§ãããã匷åã«åããŠããŸãã ã·ã¹ãã 2 ã¯ãæåã§è«ççã«åã æåã®äºæ¡ã®æãç®ãæãåºããŠãã ãããæ¥æ¬ã§ç®æ°ãåŠãã 人ã§ããã°ãäºæ¡ã®æãç®ã®ãšããèãããæ®µéã«ç§»ããšæããŸãããããã·ã¹ãã 2 ã®ã¹ã€ããã§ããã·ã¹ãã 1 ã¯åžžæã¹ã€ãããå
¥ã£ãŠããŠã»ãŒèªåã§çããåºããŸãããã·ã¹ãã 2 ã¯æèçã«ãèããããšããã¹ããããèžãŸãªããšåããŸãããã·ã¹ãã 1 ã¯èªåã§ãããã·ã¹ãã 2 ã¯æåã§ãã æåã®ããæéããããŸãããã·ã¹ãã 1 ã«ã¯ãªãçšå¿æ·±ããšæ
éãããããŸãããã¡ãã®åé¡ãã芧ãã ããã ã ããããšããŒã«ã§ 110 åããããã¯ããŒã«ãã 100 åé«ããããŒã«ã®å€æ®µã¯ïŒ ã å³çã§çãã人㯠10 åãšçããæ¹ãå€ãããã§ããããããåé¡ã«ã¯ã·ã¹ãã 2 ããã£ãŠã€ãã§ãè«ççãã€æ£ç¢ºã«çããåºãããšããŸããçã㯠5 åã§ãããªãã«ã¯é ã®åè»¢ãæ©ãå³çã§ãã人ãããã£ãããããšã ãšæããŸãããããªæ¹ã«ã¯ãã¡ãã®åé¡ãçããŠãã ã ããŸãããã 3 æ¥åããé£ã¹ãå€é£¯ã®ç®ç«ãå£ã«åºããŠçºè¡šããªãããã26x673ãã245x287ãã346x4546ãã® 3 åã 90 ç§ä»¥å
ã«è§£çããŠãã ããã ãããã§ããããïŒã·ã¹ãã 2 ã¯æåã§ãããè«ççã§æ£ç¢ºã«çãåºãããšããŸãããè€éãããæŒç®ããã«ãã¿ã¹ã¯ã«ãã£ãœã匱ãã¹ã¿ããããããŸããããããããŠé»åãå©ããæ¹ã¯ãã·ã¹ãã 2 ãã®ãã¢ãããããšããããšãããããŸããã ã·ã¹ãã 1 ãš 2 ã®ç¹åŸŽã¯ä»¥äžãã©ã¡ããè¯ããšãããšããã§ãªããšããããããŸãã ãã¶ã€ã³ãåæ§ç¯ ãããã·ã¹ãã 1&2 ã®ç¹æ§ãèžãŸããäžã§ç°¡åãªãã¥ãŒã¹èšäºã®ã¿ã€ãã°ã©ãã£ãæŽçããŠã¿ãŸããã çºè¡šè³æã® 58 ããŒãžããã芧ãã ããã speakerdeck.com ããšçްããæ
å ±ãã·ã¹ãã 1&2 ã®ãã£ã«ã¿ãŒãéãããšã§ãã¿ã€ãã«ããªãŒããæ¬æã®è¡éãæåãµã€ãºãããããã·ã¹ãã 2 ãæ
å ±ãçè§£ããããããããã®ïŒã€æ©èœãšããŠæããããšãã§ããŸããåœããåã«äœ¿ã£ãŠããã¹ãã«ãæ©èœãå¥ã®èŠç¹ã§æããããšã§éã£ãæ·±ãæå³ãèŠåºããããã«ãªãã倧ããªçºèŠã«ã€ãªãããŸããã ä»åã¯ã¿ã€ãã°ã©ãã£ã ã£ãã®ã§ã·ã¹ãã 2 å¯ãã®ãã®ã§ããããããžã¥ã¢ã«ã¢ã€ãã³ãã£ãã£ãåŒ·ãæœè±¡çãªãã¶ã€ã³ã¯ãæå³çã«ã·ã¹ãã 2 ãå°ã蟌ãã·ã¹ãã 1 ã®çŽææ§ãå©çšããŠå
容ãçè§£ããŠãããããšãã§ããŸãã ã·ã¹ãã 1&2 ã® 2 ã€ã®ç¹æ§ãèžãŸããŠäœ¿ãããªãããšã§ãã¹ãã«ã®æ·±ãçè§£ã¯ãã¡ããã§ãããæèŠãšã¯éããã¶ã€ã³ã®äŒãæ¹ã®æ°ãããã³ãã«ããªãããã§ãã ãããã« YouTube ã InstagramãLINE ã¯ã©ã¡ãããšãããšçŽææ§ãä¿ãã·ã¹ãã 1 ãæŽ»èºããã¢ããªã§ããããã ãã§ãªã身ã®åãã«ãããµãŒãã¹å
šäœããã®åŸåãšããå°è±¡ããããŸããã·ã¹ãã 1 ã¯æ®æ®µããã¹ã€ãããå
¥ã£ãŠãããããæ¯èŒçã«ç°¡æãªã¹ãããã§åããããããšãã§ããŸãã äžæ¹ã§ã·ã¹ãã 2 ã¯è€éãªæŒç®ã«ã¯èãããããã£ãããšã±ã¢ããªããã§ãªããšååãªéçšãã§ããŸããããã ã±ã¢ããã£ãããããšæ©æµã倧ãããšãããŸãã éèãæè²ãéçšããããŠå»çãšã20 幎åãšã¯æ¯èŒã«ãªããªãã»ã©ã€ã³ã¿ãŒãããã¯äººçã®ç¯ç®ã«æ·±ãé¢ããããã«ãªã£ãããã§ãã人çã«é¢ããéžæããããã§è¡ããšãã çŽæã ãã§ãªãã·ã¹ãã 2 ãåãããŠçèãçŽåŸã®ããæ±ºæãè¡ãããšãããããŠãŒã¶ãŒã®å©çã«ã€ãªãã ãšç§ã¯èããŠããŸãã ã¡ãã¬ãŒã§æäŸããŠãããµãŒãã¹ã¯ãŠãŒã¶ãŒã®äººçã«å°ãªãããé¢ããæ§è³ªããã£ãŠããŸããããã«çµè«ã¥ãããŠãããããããŠãŒã¶ãŒã«ãšã£ãŠæ£ãããšæãã倿ãã§ããããã«ã ã·ã¹ãã 2 ãããŸãåãããããšãã§ããç°å¢ããã¶ã€ããŒãšããŠã€ãã£ãŠãããã ãšæããŸãã ããŸã ä»åã®ããã¯ã©ã³ãã§åèã«ãããŠããã ããæžç±ã¯ä»¥äžã®ãã®ã«ãªããŸãã ã ãã¡ã¹ãïŒã¹ããŒïŒäžã»äžïŒ ããããšã«ã»ã«ãŒããã³ ã äºæ³éãã«äžåç ããã³ã»ã¢ãªãšãª ã é¯èŠã®ç§åŠ ãã¯ãªã¹ããã¡ãŒã»ãã£ãã«ã¹ïŒãããšã«ã»ã·ã¢ã³ãº ã UI ãã¶ã€ã³ã®å¿çåŠ ããžã§ãã»ãžã§ã³ãœã³ ä»åã®ã話ã¯ãæ¬åœã«æ¬åœã«è¡šé¢ã®éšåã«ãªããŸããæµãèªã¿ã§ãåèã«ãªãã®ã§æã«åã£ãŠèŠãŠãã ããããŸãããããããšã«èå³ãããããã¶ã€ããŒããã»ãšã³ãžãã¢ãããæ¯éæ¯éã¡ãã¬ãŒã«éã³ã«æ¥ãŠãã ããïŒïŒçµ¶è³åéäžã§ãïŒïŒ ãç¥ãã ã¡ãã¬ãŒã§ã¯ããžã§ãã¡ãã¬ãŒã ãã§ãªããå»åž«ãã¡ãã€ãããªã³ã©ã€ã³å»çäºå
žã MEDLEY ãããªã³ã©ã€ã³èšºçã¢ããªã CLINICS ããå£ã³ãã§æ¢ããä»è·æœèšã®æ€çŽ¢ãµã€ãã ä»è·ã®ã»ãã ããªã©ã®ãããã¯ããæäŸããŠããŸãããããã®ãµãŒãã¹ã®æ¡å€§ãåããŠããã®æé·ãæ¯ãããšã³ãžãã¢ã»ãã¶ã€ããŒãåéããŠããŸãã www.medley.jp ä»åŸãšãã¡ãã¬ãŒãããããããé¡ãããããŸãïŒ
ã¯ãããŸããŠïŒæè¿ã¿ãã¿ã倪ãã ããŠã¯ãããã®ã®ããŸã æ©ã¯çããŠããªããšãã€ãšããã®ææããã£ãšå ªããŠããéçºæ¬éšã€ã±ã¡ã³æ
åœã®ãã¶ã€ããŒã»å°å±±ã§ãã ã¡ãã¬ãŒã§ã¯ TechLunch ãšãã瀟å
å匷äŒã宿œããŠããã®ã§ããã åç° ã«åŒãç¶ãç§ãçºè¡šããæ©äŒãããã ããŸããã®ã§ããã®å
容ã玹ä»ãããŠããã ããŸããããŒãã¯ãæèãšãã¶ã€ã³ã¹ãã«ãã§ããçºè¡šè³æã¯èšäºã®æåŸãã芧ãã ããã ããŒãã«å
¥ããŸãã«âŠ ã¿ãªãããé»éæ¯ãã£ãŠãåç¥ã§ããïŒ é»éæ¯ã¯çŸãããšãããç©ã®åœ¢ã«å
±éããŠã¿ãããæ¯çã§ãå€ãããçµµç»ã圫å»ã建ç¯ãªã©ã«äœ¿ãããŠããŸãããã¶ã€ããŒã§ããã°ãäžåºŠä»¥äžã¯äœ¿ã£ãããšããã®ã§ã¯ãªãã§ããããïŒç§ããã¶ã€ããŒãªã®ã§äœåºŠã䜿ã£ãŠããŸãã ãã 䜿ã£ãŠã¯ãããã®ã®ããªãçŸãããªãã®ãäžæã説æãã§ããŸãããåœããåã®ããã«äžã®äžã«åºãŸã£ãŠããŠãå°ã£ããšãã®é»éæ¯ïŒããšãã£ãå®æãªæèã§äœ¿ã£ãŠããŸããäžåè·¯ã軜ãè¶
ããã®ã§ããã§ã¯ãããªããšæããããã調ã¹ãŠã¿ãŸããã ããããé»éæ¯ã¯ãšãŠã¯ã¬ã€ãã¹ãšãããŠãŒã°ãªãã幟äœåŠãäœç³»åããæ°åŠè
ãèŠã€ããæ¯çãªã®ã§ããããã®ãšã圌ã¯ãé»éæ¯ïŒçŸããããšã¯æèšããŠããªãããã§ããèªç¶ç©ã人工ç©ã®åœ¢ã«ã¯äžå®ã®æ¯çã§æãç«ã£ãŠãããšèãããã®æ¯çã«é»éæ¯ãšåä»ãã ããšã®ããšã ãã®åŸããã®äœ¿ããããããè³ããšããã§æŽ»çšããããã®æ¯çã«èŠªãã¿ãèœçãå··ã§åãå
¥ããããããã«ãªããŸããã èªç¥å¿çåŠã§ã¯ããããã åçŽæ¥è§Šå¹æ ããšåŒã³ãŸããããããè§Šãããã¡ã«èŠªãã¿ãæ²žãæ©èœã人ã«ã¯ããšããšåãã£ãŠããŠãé»éæ¯ãã€ãã£ããã®ãçŸããèŠããã®ããã®åœ±é¿ã§ã¯ãªããïŒãšèšãããŠããŸãããã®èª¬ãèããæãåºç€çãªã®ã«åçãææ§ãªãã¶ã€ããŒã®ã¹ãã«ã®èŒªéããããã ãããããªããŠããŸããã ä»åã® TechLunch ã§ã¯ãææ§ã ã£ããã¶ã€ã³ã®ã¹ãã«ãäººã®æèãå¿ççŸè±¡ãšããèŠç¹ããæãçŽããŠã¿ããšãæ°ããçºèŠãããã®ããïŒãšèãããæèãšãã¶ã€ã³ã¹ãã«ãã®ããŒããéžã³ãŸããã ãæ©ãæèããšãé
ãæèã ãŸãæåã«äººã®æèãã©ãããæ§é ã«ãªã£ãŠãããæŽçããããšæããŸãã ïŒæèã®æãæ¹ã«ã¯å¹
ããããããä»å㯠Wikipedia ã§ãæèãã®ç矩ã«ããããæ
å ±åŠçãã®å
容ã«ãªããŸãã ããã§ 3 ã€ã®è³ªåãå·Šããé ã«çããŠãã ããã 倧æµã®äººã§ããã° 2 åç®ãŸã§ã¯ç¬æã«çããåºããšæããŸãã3 åç®ã¯ã©ãã§ããããïŒ 3 åç®ã¯ä»ãããæéãããã£ãããšæããŸããæ
å ±ãåŠçãããšãã®æèã«ã¯ 1 åç®ãš 2 åç®ã®ããã«ç¬æã«çãããã®ã¯ã æ©ãæè ãã3 åç®ã®ããã«å°ãæéã¯å¿
èŠãªã é
ãæè ãã® 2 ã€ããããŸãã è¡åçµæžåŠã§ã¯ããã®æ©ãæèãã ã·ã¹ãã 1 ããé
ãæèãã ã·ã¹ãã 2 ããšåŒãã§ããŸãã ã·ã¹ãã 1 ã¯ãèªåçã«çŽæã§åã ã§ã¯æ¬¡ã«ãã¡ããã芧ãã ããã ã©ã¡ãã®çŽç·ãé·ãã§ããããïŒçãã¯ã©ã¡ããåãã§ãããã®åé¡ããåç¥ã®æ¹ã§ãèŠãç¬é㯠A ãé·ãèŠããã®ã§ã¯ãªãã§ããããïŒ ã§ã¯ãã¡ãã§ã¯ã©ãã§ããããïŒ ãã¡ãã®æåãã¿ããšãã«ã海氎济ããŠããŠæººããŠããããããã¯ããã«è¿ãã·ãŒã³ãæãæµ®ãã¹ãŠãªãã§ããããïŒããã®äºèªã®ããã ã«ã¯ãããããããŸãããšãããããªçŽæ¥ã®çžé¢ã¯ãããŸãããããã«ããããããåºæ¥ãã°é¿ããããªããããªããšã§ãç¡æèã«é¢é£ã¥ããããã·ãŒã³ãæãæµ®ããã ã¯ãã§ãã ã·ã¹ãã 1 ã«ã¯ãããã»ã©ã®çŽç·ã®é·ãã®ããã«ééã£ãŠãããšããŠãã èŠããŸãŸ ããèªèããæ©èœãš 2 ã€ã®æåããã é¢é£ã¥ã ãããããªãã¹ããŒãªãŒãçµã¿ç«ãŠãæ©èœããããŸãããã®ã©ã¡ãããèªåã®æèãšã¯é¢ä¿ãªãèªåã§ãããã匷åã«åããŠããŸãã ã·ã¹ãã 2 ã¯ãæåã§è«ççã«åã æåã®äºæ¡ã®æãç®ãæãåºããŠãã ãããæ¥æ¬ã§ç®æ°ãåŠãã 人ã§ããã°ãäºæ¡ã®æãç®ã®ãšããèãããæ®µéã«ç§»ããšæããŸãããããã·ã¹ãã 2 ã®ã¹ã€ããã§ããã·ã¹ãã 1 ã¯åžžæã¹ã€ãããå
¥ã£ãŠããŠã»ãŒèªåã§çããåºããŸãããã·ã¹ãã 2 ã¯æèçã«ãèããããšããã¹ããããèžãŸãªããšåããŸãããã·ã¹ãã 1 ã¯èªåã§ãããã·ã¹ãã 2 ã¯æåã§ãã æåã®ããæéããããŸãããã·ã¹ãã 1 ã«ã¯ãªãçšå¿æ·±ããšæ
éãããããŸãããã¡ãã®åé¡ãã芧ãã ããã ã ããããšããŒã«ã§ 110 åããããã¯ããŒã«ãã 100 åé«ããããŒã«ã®å€æ®µã¯ïŒ ã å³çã§çãã人㯠10 åãšçããæ¹ãå€ãããã§ããããããåé¡ã«ã¯ã·ã¹ãã 2 ããã£ãŠã€ãã§ãè«ççãã€æ£ç¢ºã«çããåºãããšããŸããçã㯠5 åã§ãããªãã«ã¯é ã®åè»¢ãæ©ãå³çã§ãã人ãããã£ãããããšã ãšæããŸãããããªæ¹ã«ã¯ãã¡ãã®åé¡ãçããŠãã ã ããŸãããã 3 æ¥åããé£ã¹ãå€é£¯ã®ç®ç«ãå£ã«åºããŠçºè¡šããªãããã26x673ãã245x287ãã346x4546ãã® 3 åã 90 ç§ä»¥å
ã«è§£çããŠãã ããã ãããã§ããããïŒã·ã¹ãã 2 ã¯æåã§ãããè«ççã§æ£ç¢ºã«çãåºãããšããŸãããè€éãããæŒç®ããã«ãã¿ã¹ã¯ã«ãã£ãœã匱ãã¹ã¿ããããããŸããããããããŠé»åãå©ããæ¹ã¯ãã·ã¹ãã 2 ãã®ãã¢ãããããšããããšãããããŸããã ã·ã¹ãã 1 ãš 2 ã®ç¹åŸŽã¯ä»¥äžãã©ã¡ããè¯ããšãããšããã§ãªããšããããããŸãã ãã¶ã€ã³ãåæ§ç¯ ãããã·ã¹ãã 1&2 ã®ç¹æ§ãèžãŸããäžã§ç°¡åãªãã¥ãŒã¹èšäºã®ã¿ã€ãã°ã©ãã£ãæŽçããŠã¿ãŸããã çºè¡šè³æã® 58 ããŒãžããã芧ãã ããã speakerdeck.com ããšçްããæ
å ±ãã·ã¹ãã 1&2 ã®ãã£ã«ã¿ãŒãéãããšã§ãã¿ã€ãã«ããªãŒããæ¬æã®è¡éãæåãµã€ãºãããããã·ã¹ãã 2 ãæ
å ±ãçè§£ããããããããã®ïŒã€æ©èœãšããŠæããããšãã§ããŸããåœããåã«äœ¿ã£ãŠããã¹ãã«ãæ©èœãå¥ã®èŠç¹ã§æããããšã§éã£ãæ·±ãæå³ãèŠåºããããã«ãªãã倧ããªçºèŠã«ã€ãªãããŸããã ä»åã¯ã¿ã€ãã°ã©ãã£ã ã£ãã®ã§ã·ã¹ãã 2 å¯ãã®ãã®ã§ããããããžã¥ã¢ã«ã¢ã€ãã³ãã£ãã£ãåŒ·ãæœè±¡çãªãã¶ã€ã³ã¯ãæå³çã«ã·ã¹ãã 2 ãå°ã蟌ãã·ã¹ãã 1 ã®çŽææ§ãå©çšããŠå
容ãçè§£ããŠãããããšãã§ããŸãã ã·ã¹ãã 1&2 ã® 2 ã€ã®ç¹æ§ãèžãŸããŠäœ¿ãããªãããšã§ãã¹ãã«ã®æ·±ãçè§£ã¯ãã¡ããã§ãããæèŠãšã¯éããã¶ã€ã³ã®äŒãæ¹ã®æ°ãããã³ãã«ããªãããã§ãã ãããã« YouTube ã InstagramãLINE ã¯ã©ã¡ãããšãããšçŽææ§ãä¿ãã·ã¹ãã 1 ãæŽ»èºããã¢ããªã§ããããã ãã§ãªã身ã®åãã«ãããµãŒãã¹å
šäœããã®åŸåãšããå°è±¡ããããŸããã·ã¹ãã 1 ã¯æ®æ®µããã¹ã€ãããå
¥ã£ãŠãããããæ¯èŒçã«ç°¡æãªã¹ãããã§åããããããšãã§ããŸãã äžæ¹ã§ã·ã¹ãã 2 ã¯è€éãªæŒç®ã«ã¯èãããããã£ãããšã±ã¢ããªããã§ãªããšååãªéçšãã§ããŸããããã ã±ã¢ããã£ãããããšæ©æµã倧ãããšãããŸãã éèãæè²ãéçšããããŠå»çãšã20 幎åãšã¯æ¯èŒã«ãªããªãã»ã©ã€ã³ã¿ãŒãããã¯äººçã®ç¯ç®ã«æ·±ãé¢ããããã«ãªã£ãããã§ãã人çã«é¢ããéžæããããã§è¡ããšãã çŽæã ãã§ãªãã·ã¹ãã 2 ãåãããŠçèãçŽåŸã®ããæ±ºæãè¡ãããšãããããŠãŒã¶ãŒã®å©çã«ã€ãªãã ãšç§ã¯èããŠããŸãã ã¡ãã¬ãŒã§æäŸããŠãããµãŒãã¹ã¯ãŠãŒã¶ãŒã®äººçã«å°ãªãããé¢ããæ§è³ªããã£ãŠããŸããããã«çµè«ã¥ãããŠãããããããŠãŒã¶ãŒã«ãšã£ãŠæ£ãããšæãã倿ãã§ããããã«ã ã·ã¹ãã 2 ãããŸãåãããããšãã§ããç°å¢ããã¶ã€ããŒãšããŠã€ãã£ãŠãããã ãšæããŸãã ããŸã ä»åã®ããã¯ã©ã³ãã§åèã«ãããŠããã ããæžç±ã¯ä»¥äžã®ãã®ã«ãªããŸãã ã ãã¡ã¹ãïŒã¹ããŒïŒäžã»äžïŒ ããããšã«ã»ã«ãŒããã³ ã äºæ³éãã«äžåç ããã³ã»ã¢ãªãšãª ã é¯èŠã®ç§åŠ ãã¯ãªã¹ããã¡ãŒã»ãã£ãã«ã¹ïŒãããšã«ã»ã·ã¢ã³ãº ã UI ãã¶ã€ã³ã®å¿çåŠ ããžã§ãã»ãžã§ã³ãœã³ ä»åã®ã話ã¯ãæ¬åœã«æ¬åœã«è¡šé¢ã®éšåã«ãªããŸããæµãèªã¿ã§ãåèã«ãªãã®ã§æã«åã£ãŠèŠãŠãã ããããŸãããããããšã«èå³ãããããã¶ã€ããŒããã»ãšã³ãžãã¢ãããæ¯éæ¯éã¡ãã¬ãŒã«éã³ã«æ¥ãŠãã ããïŒïŒçµ¶è³åéäžã§ãïŒïŒ ãç¥ãã ã¡ãã¬ãŒã§ã¯ããžã§ãã¡ãã¬ãŒã ãã§ãªããå»åž«ãã¡ãã€ãããªã³ã©ã€ã³å»çäºå
žã MEDLEY ãããªã³ã©ã€ã³èšºçã¢ããªã CLINICS ããå£ã³ãã§æ¢ããä»è·æœèšã®æ€çŽ¢ãµã€ãã ä»è·ã®ã»ãã ããªã©ã®ãããã¯ããæäŸããŠããŸãããããã®ãµãŒãã¹ã®æ¡å€§ãåããŠããã®æé·ãæ¯ãããšã³ãžãã¢ã»ãã¶ã€ããŒãåéããŠããŸãã www.medley.jp ä»åŸãšãã¡ãã¬ãŒãããããããé¡ãããããŸãïŒ
ã¯ãããŸããŠïŒæè¿ã¿ãã¿ã倪ãã ããŠã¯ãããã®ã®ããŸã æ©ã¯çããŠããªããšãã€ãšããã®ææããã£ãšå ªããŠããéçºæ¬éšã€ã±ã¡ã³æ
åœã®ãã¶ã€ããŒã»å°å±±ã§ãã ã¡ãã¬ãŒã§ã¯ TechLunch ãšãã瀟å
å匷äŒã宿œããŠããã®ã§ããã åç° ã«åŒãç¶ãç§ãçºè¡šããæ©äŒãããã ããŸããã®ã§ããã®å
容ã玹ä»ãããŠããã ããŸããããŒãã¯ãæèãšãã¶ã€ã³ã¹ãã«ãã§ããçºè¡šè³æã¯èšäºã®æåŸãã芧ãã ããã ããŒãã«å
¥ããŸãã«âŠ ã¿ãªãããé»éæ¯ãã£ãŠãåç¥ã§ããïŒ é»éæ¯ã¯çŸãããšãããç©ã®åœ¢ã«å
±éããŠã¿ãããæ¯çã§ãå€ãããçµµç»ã圫å»ã建ç¯ãªã©ã«äœ¿ãããŠããŸãããã¶ã€ããŒã§ããã°ãäžåºŠä»¥äžã¯äœ¿ã£ãããšããã®ã§ã¯ãªãã§ããããïŒç§ããã¶ã€ããŒãªã®ã§äœåºŠã䜿ã£ãŠããŸãã ãã 䜿ã£ãŠã¯ãããã®ã®ããªãçŸãããªãã®ãäžæã説æãã§ããŸãããåœããåã®ããã«äžã®äžã«åºãŸã£ãŠããŠãå°ã£ããšãã®é»éæ¯ïŒããšãã£ãå®æãªæèã§äœ¿ã£ãŠããŸããäžåè·¯ã軜ãè¶
ããã®ã§ããã§ã¯ãããªããšæããããã調ã¹ãŠã¿ãŸããã ããããé»éæ¯ã¯ãšãŠã¯ã¬ã€ãã¹ãšãããŠãŒã°ãªãã幟äœåŠãäœç³»åããæ°åŠè
ãèŠã€ããæ¯çãªã®ã§ããããã®ãšã圌ã¯ãé»éæ¯ïŒçŸããããšã¯æèšããŠããªãããã§ããèªç¶ç©ã人工ç©ã®åœ¢ã«ã¯äžå®ã®æ¯çã§æãç«ã£ãŠãããšèãããã®æ¯çã«é»éæ¯ãšåä»ãã ããšã®ããšã ãã®åŸããã®äœ¿ããããããè³ããšããã§æŽ»çšããããã®æ¯çã«èŠªãã¿ãèœçãå··ã§åãå
¥ããããããã«ãªããŸããã èªç¥å¿çåŠã§ã¯ããããã åçŽæ¥è§Šå¹æ ããšåŒã³ãŸããããããè§Šãããã¡ã«èŠªãã¿ãæ²žãæ©èœã人ã«ã¯ããšããšåãã£ãŠããŠãé»éæ¯ãã€ãã£ããã®ãçŸããèŠããã®ããã®åœ±é¿ã§ã¯ãªããïŒãšèšãããŠããŸãããã®èª¬ãèããæãåºç€çãªã®ã«åçãææ§ãªãã¶ã€ããŒã®ã¹ãã«ã®èŒªéããããã ãããããªããŠããŸããã ä»åã® TechLunch ã§ã¯ãææ§ã ã£ããã¶ã€ã³ã®ã¹ãã«ãäººã®æèãå¿ççŸè±¡ãšããèŠç¹ããæãçŽããŠã¿ããšãæ°ããçºèŠãããã®ããïŒãšèãããæèãšãã¶ã€ã³ã¹ãã«ãã®ããŒããéžã³ãŸããã ãæ©ãæèããšãé
ãæèã ãŸãæåã«äººã®æèãã©ãããæ§é ã«ãªã£ãŠãããæŽçããããšæããŸãã ïŒæèã®æãæ¹ã«ã¯å¹
ããããããä»å㯠Wikipedia ã§ãæèãã®ç矩ã«ããããæ
å ±åŠçãã®å
容ã«ãªããŸãã ããã§ 3 ã€ã®è³ªåãå·Šããé ã«çããŠãã ããã 倧æµã®äººã§ããã° 2 åç®ãŸã§ã¯ç¬æã«çããåºããšæããŸãã3 åç®ã¯ã©ãã§ããããïŒ 3 åç®ã¯ä»ãããæéãããã£ãããšæããŸããæ
å ±ãåŠçãããšãã®æèã«ã¯ 1 åç®ãš 2 åç®ã®ããã«ç¬æã«çãããã®ã¯ã æ©ãæè ãã3 åç®ã®ããã«å°ãæéã¯å¿
èŠãªã é
ãæè ãã® 2 ã€ããããŸãã è¡åçµæžåŠã§ã¯ããã®æ©ãæèãã ã·ã¹ãã 1 ããé
ãæèãã ã·ã¹ãã 2 ããšåŒãã§ããŸãã ã·ã¹ãã 1 ã¯ãèªåçã«çŽæã§åã ã§ã¯æ¬¡ã«ãã¡ããã芧ãã ããã ã©ã¡ãã®çŽç·ãé·ãã§ããããïŒçãã¯ã©ã¡ããåãã§ãããã®åé¡ããåç¥ã®æ¹ã§ãèŠãç¬é㯠A ãé·ãèŠããã®ã§ã¯ãªãã§ããããïŒ ã§ã¯ãã¡ãã§ã¯ã©ãã§ããããïŒ ãã¡ãã®æåãã¿ããšãã«ã海氎济ããŠããŠæººããŠããããããã¯ããã«è¿ãã·ãŒã³ãæãæµ®ãã¹ãŠãªãã§ããããïŒããã®äºèªã®ããã ã«ã¯ãããããããŸãããšãããããªçŽæ¥ã®çžé¢ã¯ãããŸãããããã«ããããããåºæ¥ãã°é¿ããããªããããªããšã§ãç¡æèã«é¢é£ã¥ããããã·ãŒã³ãæãæµ®ããã ã¯ãã§ãã ã·ã¹ãã 1 ã«ã¯ãããã»ã©ã®çŽç·ã®é·ãã®ããã«ééã£ãŠãããšããŠãã èŠããŸãŸ ããèªèããæ©èœãš 2 ã€ã®æåããã é¢é£ã¥ã ãããããªãã¹ããŒãªãŒãçµã¿ç«ãŠãæ©èœããããŸãããã®ã©ã¡ãããèªåã®æèãšã¯é¢ä¿ãªãèªåã§ãããã匷åã«åããŠããŸãã ã·ã¹ãã 2 ã¯ãæåã§è«ççã«åã æåã®äºæ¡ã®æãç®ãæãåºããŠãã ãããæ¥æ¬ã§ç®æ°ãåŠãã 人ã§ããã°ãäºæ¡ã®æãç®ã®ãšããèãããæ®µéã«ç§»ããšæããŸãããããã·ã¹ãã 2 ã®ã¹ã€ããã§ããã·ã¹ãã 1 ã¯åžžæã¹ã€ãããå
¥ã£ãŠããŠã»ãŒèªåã§çããåºããŸãããã·ã¹ãã 2 ã¯æèçã«ãèããããšããã¹ããããèžãŸãªããšåããŸãããã·ã¹ãã 1 ã¯èªåã§ãããã·ã¹ãã 2 ã¯æåã§ãã æåã®ããæéããããŸãããã·ã¹ãã 1 ã«ã¯ãªãçšå¿æ·±ããšæ
éãããããŸãããã¡ãã®åé¡ãã芧ãã ããã ã ããããšããŒã«ã§ 110 åããããã¯ããŒã«ãã 100 åé«ããããŒã«ã®å€æ®µã¯ïŒ ã å³çã§çãã人㯠10 åãšçããæ¹ãå€ãããã§ããããããåé¡ã«ã¯ã·ã¹ãã 2 ããã£ãŠã€ãã§ãè«ççãã€æ£ç¢ºã«çããåºãããšããŸããçã㯠5 åã§ãããªãã«ã¯é ã®åè»¢ãæ©ãå³çã§ãã人ãããã£ãããããšã ãšæããŸãããããªæ¹ã«ã¯ãã¡ãã®åé¡ãçããŠãã ã ããŸãããã 3 æ¥åããé£ã¹ãå€é£¯ã®ç®ç«ãå£ã«åºããŠçºè¡šããªãããã26x673ãã245x287ãã346x4546ãã® 3 åã 90 ç§ä»¥å
ã«è§£çããŠãã ããã ãããã§ããããïŒã·ã¹ãã 2 ã¯æåã§ãããè«ççã§æ£ç¢ºã«çãåºãããšããŸãããè€éãããæŒç®ããã«ãã¿ã¹ã¯ã«ãã£ãœã匱ãã¹ã¿ããããããŸããããããããŠé»åãå©ããæ¹ã¯ãã·ã¹ãã 2 ãã®ãã¢ãããããšããããšãããããŸããã ã·ã¹ãã 1 ãš 2 ã®ç¹åŸŽã¯ä»¥äžãã©ã¡ããè¯ããšãããšããã§ãªããšããããããŸãã ãã¶ã€ã³ãåæ§ç¯ ãããã·ã¹ãã 1&2 ã®ç¹æ§ãèžãŸããäžã§ç°¡åãªãã¥ãŒã¹èšäºã®ã¿ã€ãã°ã©ãã£ãæŽçããŠã¿ãŸããã çºè¡šè³æã® 58 ããŒãžããã芧ãã ããã speakerdeck.com ããšçްããæ
å ±ãã·ã¹ãã 1&2 ã®ãã£ã«ã¿ãŒãéãããšã§ãã¿ã€ãã«ããªãŒããæ¬æã®è¡éãæåãµã€ãºãããããã·ã¹ãã 2 ãæ
å ±ãçè§£ããããããããã®ïŒã€æ©èœãšããŠæããããšãã§ããŸããåœããåã«äœ¿ã£ãŠããã¹ãã«ãæ©èœãå¥ã®èŠç¹ã§æããããšã§éã£ãæ·±ãæå³ãèŠåºããããã«ãªãã倧ããªçºèŠã«ã€ãªãããŸããã ä»åã¯ã¿ã€ãã°ã©ãã£ã ã£ãã®ã§ã·ã¹ãã 2 å¯ãã®ãã®ã§ããããããžã¥ã¢ã«ã¢ã€ãã³ãã£ãã£ãåŒ·ãæœè±¡çãªãã¶ã€ã³ã¯ãæå³çã«ã·ã¹ãã 2 ãå°ã蟌ãã·ã¹ãã 1 ã®çŽææ§ãå©çšããŠå
容ãçè§£ããŠãããããšãã§ããŸãã ã·ã¹ãã 1&2 ã® 2 ã€ã®ç¹æ§ãèžãŸããŠäœ¿ãããªãããšã§ãã¹ãã«ã®æ·±ãçè§£ã¯ãã¡ããã§ãããæèŠãšã¯éããã¶ã€ã³ã®äŒãæ¹ã®æ°ãããã³ãã«ããªãããã§ãã ãããã« YouTube ã InstagramãLINE ã¯ã©ã¡ãããšãããšçŽææ§ãä¿ãã·ã¹ãã 1 ãæŽ»èºããã¢ããªã§ããããã ãã§ãªã身ã®åãã«ãããµãŒãã¹å
šäœããã®åŸåãšããå°è±¡ããããŸããã·ã¹ãã 1 ã¯æ®æ®µããã¹ã€ãããå
¥ã£ãŠãããããæ¯èŒçã«ç°¡æãªã¹ãããã§åããããããšãã§ããŸãã äžæ¹ã§ã·ã¹ãã 2 ã¯è€éãªæŒç®ã«ã¯èãããããã£ãããšã±ã¢ããªããã§ãªããšååãªéçšãã§ããŸããããã ã±ã¢ããã£ãããããšæ©æµã倧ãããšãããŸãã éèãæè²ãéçšããããŠå»çãšã20 幎åãšã¯æ¯èŒã«ãªããªãã»ã©ã€ã³ã¿ãŒãããã¯äººçã®ç¯ç®ã«æ·±ãé¢ããããã«ãªã£ãããã§ãã人çã«é¢ããéžæããããã§è¡ããšãã çŽæã ãã§ãªãã·ã¹ãã 2 ãåãããŠçèãçŽåŸã®ããæ±ºæãè¡ãããšãããããŠãŒã¶ãŒã®å©çã«ã€ãªãã ãšç§ã¯èããŠããŸãã ã¡ãã¬ãŒã§æäŸããŠãããµãŒãã¹ã¯ãŠãŒã¶ãŒã®äººçã«å°ãªãããé¢ããæ§è³ªããã£ãŠããŸããããã«çµè«ã¥ãããŠãããããããŠãŒã¶ãŒã«ãšã£ãŠæ£ãããšæãã倿ãã§ããããã«ã ã·ã¹ãã 2 ãããŸãåãããããšãã§ããç°å¢ããã¶ã€ããŒãšããŠã€ãã£ãŠãããã ãšæããŸãã ããŸã ä»åã®ããã¯ã©ã³ãã§åèã«ãããŠããã ããæžç±ã¯ä»¥äžã®ãã®ã«ãªããŸãã ã ãã¡ã¹ãïŒã¹ããŒïŒäžã»äžïŒ ããããšã«ã»ã«ãŒããã³ ã äºæ³éãã«äžåç ããã³ã»ã¢ãªãšãª ã é¯èŠã®ç§åŠ ãã¯ãªã¹ããã¡ãŒã»ãã£ãã«ã¹ïŒãããšã«ã»ã·ã¢ã³ãº ã UI ãã¶ã€ã³ã®å¿çåŠ ããžã§ãã»ãžã§ã³ãœã³ ä»åã®ã話ã¯ãæ¬åœã«æ¬åœã«è¡šé¢ã®éšåã«ãªããŸããæµãèªã¿ã§ãåèã«ãªãã®ã§æã«åã£ãŠèŠãŠãã ããããŸãããããããšã«èå³ãããããã¶ã€ããŒããã»ãšã³ãžãã¢ãããæ¯éæ¯éã¡ãã¬ãŒã«éã³ã«æ¥ãŠãã ããïŒïŒçµ¶è³åéäžã§ãïŒïŒ ãç¥ãã ã¡ãã¬ãŒã§ã¯ããžã§ãã¡ãã¬ãŒã ãã§ãªããå»åž«ãã¡ãã€ãããªã³ã©ã€ã³å»çäºå
žã MEDLEY ãããªã³ã©ã€ã³èšºçã¢ããªã CLINICS ããå£ã³ãã§æ¢ããä»è·æœèšã®æ€çŽ¢ãµã€ãã ä»è·ã®ã»ãã ããªã©ã®ãããã¯ããæäŸããŠããŸãããããã®ãµãŒãã¹ã®æ¡å€§ãåããŠããã®æé·ãæ¯ãããšã³ãžãã¢ã»ãã¶ã€ããŒãåéããŠããŸãã www.medley.jp ä»åŸãšãã¡ãã¬ãŒãããããããé¡ãããããŸãïŒ
ã¯ãããŸããŠïŒæè¿ã¿ãã¿ã倪ãã ããŠã¯ãããã®ã®ããŸã æ©ã¯çããŠããªããšãã€ãšããã®ææããã£ãšå ªããŠããéçºæ¬éšã€ã±ã¡ã³æ
åœã®ãã¶ã€ããŒã»å°å±±ã§ãã ã¡ãã¬ãŒã§ã¯ TechLunch ãšãã瀟å
å匷äŒã宿œããŠããã®ã§ããã åç° ã«åŒãç¶ãç§ãçºè¡šããæ©äŒãããã ããŸããã®ã§ããã®å
容ã玹ä»ãããŠããã ããŸããããŒãã¯ãæèãšãã¶ã€ã³ã¹ãã«ãã§ããçºè¡šè³æã¯èšäºã®æåŸãã芧ãã ããã ããŒãã«å
¥ããŸãã«âŠ ã¿ãªãããé»éæ¯ãã£ãŠãåç¥ã§ããïŒ é»éæ¯ã¯çŸãããšãããç©ã®åœ¢ã«å
±éããŠã¿ãããæ¯çã§ãå€ãããçµµç»ã圫å»ã建ç¯ãªã©ã«äœ¿ãããŠããŸãããã¶ã€ããŒã§ããã°ãäžåºŠä»¥äžã¯äœ¿ã£ãããšããã®ã§ã¯ãªãã§ããããïŒç§ããã¶ã€ããŒãªã®ã§äœåºŠã䜿ã£ãŠããŸãã ãã 䜿ã£ãŠã¯ãããã®ã®ããªãçŸãããªãã®ãäžæã説æãã§ããŸãããåœããåã®ããã«äžã®äžã«åºãŸã£ãŠããŠãå°ã£ããšãã®é»éæ¯ïŒããšãã£ãå®æãªæèã§äœ¿ã£ãŠããŸããäžåè·¯ã軜ãè¶
ããã®ã§ããã§ã¯ãããªããšæããããã調ã¹ãŠã¿ãŸããã ããããé»éæ¯ã¯ãšãŠã¯ã¬ã€ãã¹ãšãããŠãŒã°ãªãã幟äœåŠãäœç³»åããæ°åŠè
ãèŠã€ããæ¯çãªã®ã§ããããã®ãšã圌ã¯ãé»éæ¯ïŒçŸããããšã¯æèšããŠããªãããã§ããèªç¶ç©ã人工ç©ã®åœ¢ã«ã¯äžå®ã®æ¯çã§æãç«ã£ãŠãããšèãããã®æ¯çã«é»éæ¯ãšåä»ãã ããšã®ããšã ãã®åŸããã®äœ¿ããããããè³ããšããã§æŽ»çšããããã®æ¯çã«èŠªãã¿ãèœçãå··ã§åãå
¥ããããããã«ãªããŸããã èªç¥å¿çåŠã§ã¯ããããã åçŽæ¥è§Šå¹æ ããšåŒã³ãŸããããããè§Šãããã¡ã«èŠªãã¿ãæ²žãæ©èœã人ã«ã¯ããšããšåãã£ãŠããŠãé»éæ¯ãã€ãã£ããã®ãçŸããèŠããã®ããã®åœ±é¿ã§ã¯ãªããïŒãšèšãããŠããŸãããã®èª¬ãèããæãåºç€çãªã®ã«åçãææ§ãªãã¶ã€ããŒã®ã¹ãã«ã®èŒªéããããã ãããããªããŠããŸããã ä»åã® TechLunch ã§ã¯ãææ§ã ã£ããã¶ã€ã³ã®ã¹ãã«ãäººã®æèãå¿ççŸè±¡ãšããèŠç¹ããæãçŽããŠã¿ããšãæ°ããçºèŠãããã®ããïŒãšèãããæèãšãã¶ã€ã³ã¹ãã«ãã®ããŒããéžã³ãŸããã ãæ©ãæèããšãé
ãæèã ãŸãæåã«äººã®æèãã©ãããæ§é ã«ãªã£ãŠãããæŽçããããšæããŸãã ïŒæèã®æãæ¹ã«ã¯å¹
ããããããä»å㯠Wikipedia ã§ãæèãã®ç矩ã«ããããæ
å ±åŠçãã®å
容ã«ãªããŸãã ããã§ 3 ã€ã®è³ªåãå·Šããé ã«çããŠãã ããã 倧æµã®äººã§ããã° 2 åç®ãŸã§ã¯ç¬æã«çããåºããšæããŸãã3 åç®ã¯ã©ãã§ããããïŒ 3 åç®ã¯ä»ãããæéãããã£ãããšæããŸããæ
å ±ãåŠçãããšãã®æèã«ã¯ 1 åç®ãš 2 åç®ã®ããã«ç¬æã«çãããã®ã¯ã æ©ãæè ãã3 åç®ã®ããã«å°ãæéã¯å¿
èŠãªã é
ãæè ãã® 2 ã€ããããŸãã è¡åçµæžåŠã§ã¯ããã®æ©ãæèãã ã·ã¹ãã 1 ããé
ãæèãã ã·ã¹ãã 2 ããšåŒãã§ããŸãã ã·ã¹ãã 1 ã¯ãèªåçã«çŽæã§åã ã§ã¯æ¬¡ã«ãã¡ããã芧ãã ããã ã©ã¡ãã®çŽç·ãé·ãã§ããããïŒçãã¯ã©ã¡ããåãã§ãããã®åé¡ããåç¥ã®æ¹ã§ãèŠãç¬é㯠A ãé·ãèŠããã®ã§ã¯ãªãã§ããããïŒ ã§ã¯ãã¡ãã§ã¯ã©ãã§ããããïŒ ãã¡ãã®æåãã¿ããšãã«ã海氎济ããŠããŠæººããŠããããããã¯ããã«è¿ãã·ãŒã³ãæãæµ®ãã¹ãŠãªãã§ããããïŒããã®äºèªã®ããã ã«ã¯ãããããããŸãããšãããããªçŽæ¥ã®çžé¢ã¯ãããŸãããããã«ããããããåºæ¥ãã°é¿ããããªããããªããšã§ãç¡æèã«é¢é£ã¥ããããã·ãŒã³ãæãæµ®ããã ã¯ãã§ãã ã·ã¹ãã 1 ã«ã¯ãããã»ã©ã®çŽç·ã®é·ãã®ããã«ééã£ãŠãããšããŠãã èŠããŸãŸ ããèªèããæ©èœãš 2 ã€ã®æåããã é¢é£ã¥ã ãããããªãã¹ããŒãªãŒãçµã¿ç«ãŠãæ©èœããããŸãããã®ã©ã¡ãããèªåã®æèãšã¯é¢ä¿ãªãèªåã§ãããã匷åã«åããŠããŸãã ã·ã¹ãã 2 ã¯ãæåã§è«ççã«åã æåã®äºæ¡ã®æãç®ãæãåºããŠãã ãããæ¥æ¬ã§ç®æ°ãåŠãã 人ã§ããã°ãäºæ¡ã®æãç®ã®ãšããèãããæ®µéã«ç§»ããšæããŸãããããã·ã¹ãã 2 ã®ã¹ã€ããã§ããã·ã¹ãã 1 ã¯åžžæã¹ã€ãããå
¥ã£ãŠããŠã»ãŒèªåã§çããåºããŸãããã·ã¹ãã 2 ã¯æèçã«ãèããããšããã¹ããããèžãŸãªããšåããŸãããã·ã¹ãã 1 ã¯èªåã§ãããã·ã¹ãã 2 ã¯æåã§ãã æåã®ããæéããããŸãããã·ã¹ãã 1 ã«ã¯ãªãçšå¿æ·±ããšæ
éãããããŸãããã¡ãã®åé¡ãã芧ãã ããã ã ããããšããŒã«ã§ 110 åããããã¯ããŒã«ãã 100 åé«ããããŒã«ã®å€æ®µã¯ïŒ ã å³çã§çãã人㯠10 åãšçããæ¹ãå€ãããã§ããããããåé¡ã«ã¯ã·ã¹ãã 2 ããã£ãŠã€ãã§ãè«ççãã€æ£ç¢ºã«çããåºãããšããŸããçã㯠5 åã§ãããªãã«ã¯é ã®åè»¢ãæ©ãå³çã§ãã人ãããã£ãããããšã ãšæããŸãããããªæ¹ã«ã¯ãã¡ãã®åé¡ãçããŠãã ã ããŸãããã 3 æ¥åããé£ã¹ãå€é£¯ã®ç®ç«ãå£ã«åºããŠçºè¡šããªãããã26x673ãã245x287ãã346x4546ãã® 3 åã 90 ç§ä»¥å
ã«è§£çããŠãã ããã ãããã§ããããïŒã·ã¹ãã 2 ã¯æåã§ãããè«ççã§æ£ç¢ºã«çãåºãããšããŸãããè€éãããæŒç®ããã«ãã¿ã¹ã¯ã«ãã£ãœã匱ãã¹ã¿ããããããŸããããããããŠé»åãå©ããæ¹ã¯ãã·ã¹ãã 2 ãã®ãã¢ãããããšããããšãããããŸããã ã·ã¹ãã 1 ãš 2 ã®ç¹åŸŽã¯ä»¥äžãã©ã¡ããè¯ããšãããšããã§ãªããšããããããŸãã ãã¶ã€ã³ãåæ§ç¯ ãããã·ã¹ãã 1&2 ã®ç¹æ§ãèžãŸããäžã§ç°¡åãªãã¥ãŒã¹èšäºã®ã¿ã€ãã°ã©ãã£ãæŽçããŠã¿ãŸããã çºè¡šè³æã® 58 ããŒãžããã芧ãã ããã speakerdeck.com ããšçްããæ
å ±ãã·ã¹ãã 1&2 ã®ãã£ã«ã¿ãŒãéãããšã§ãã¿ã€ãã«ããªãŒããæ¬æã®è¡éãæåãµã€ãºãããããã·ã¹ãã 2 ãæ
å ±ãçè§£ããããããããã®ïŒã€æ©èœãšããŠæããããšãã§ããŸããåœããåã«äœ¿ã£ãŠããã¹ãã«ãæ©èœãå¥ã®èŠç¹ã§æããããšã§éã£ãæ·±ãæå³ãèŠåºããããã«ãªãã倧ããªçºèŠã«ã€ãªãããŸããã ä»åã¯ã¿ã€ãã°ã©ãã£ã ã£ãã®ã§ã·ã¹ãã 2 å¯ãã®ãã®ã§ããããããžã¥ã¢ã«ã¢ã€ãã³ãã£ãã£ãåŒ·ãæœè±¡çãªãã¶ã€ã³ã¯ãæå³çã«ã·ã¹ãã 2 ãå°ã蟌ãã·ã¹ãã 1 ã®çŽææ§ãå©çšããŠå
容ãçè§£ããŠãããããšãã§ããŸãã ã·ã¹ãã 1&2 ã® 2 ã€ã®ç¹æ§ãèžãŸããŠäœ¿ãããªãããšã§ãã¹ãã«ã®æ·±ãçè§£ã¯ãã¡ããã§ãããæèŠãšã¯éããã¶ã€ã³ã®äŒãæ¹ã®æ°ãããã³ãã«ããªãããã§ãã ãããã« YouTube ã InstagramãLINE ã¯ã©ã¡ãããšãããšçŽææ§ãä¿ãã·ã¹ãã 1 ãæŽ»èºããã¢ããªã§ããããã ãã§ãªã身ã®åãã«ãããµãŒãã¹å
šäœããã®åŸåãšããå°è±¡ããããŸããã·ã¹ãã 1 ã¯æ®æ®µããã¹ã€ãããå
¥ã£ãŠãããããæ¯èŒçã«ç°¡æãªã¹ãããã§åããããããšãã§ããŸãã äžæ¹ã§ã·ã¹ãã 2 ã¯è€éãªæŒç®ã«ã¯èãããããã£ãããšã±ã¢ããªããã§ãªããšååãªéçšãã§ããŸããããã ã±ã¢ããã£ãããããšæ©æµã倧ãããšãããŸãã éèãæè²ãéçšããããŠå»çãšã20 幎åãšã¯æ¯èŒã«ãªããªãã»ã©ã€ã³ã¿ãŒãããã¯äººçã®ç¯ç®ã«æ·±ãé¢ããããã«ãªã£ãããã§ãã人çã«é¢ããéžæããããã§è¡ããšãã çŽæã ãã§ãªãã·ã¹ãã 2 ãåãããŠçèãçŽåŸã®ããæ±ºæãè¡ãããšãããããŠãŒã¶ãŒã®å©çã«ã€ãªãã ãšç§ã¯èããŠããŸãã ã¡ãã¬ãŒã§æäŸããŠãããµãŒãã¹ã¯ãŠãŒã¶ãŒã®äººçã«å°ãªãããé¢ããæ§è³ªããã£ãŠããŸããããã«çµè«ã¥ãããŠãããããããŠãŒã¶ãŒã«ãšã£ãŠæ£ãããšæãã倿ãã§ããããã«ã ã·ã¹ãã 2 ãããŸãåãããããšãã§ããç°å¢ããã¶ã€ããŒãšããŠã€ãã£ãŠãããã ãšæããŸãã ããŸã ä»åã®ããã¯ã©ã³ãã§åèã«ãããŠããã ããæžç±ã¯ä»¥äžã®ãã®ã«ãªããŸãã ã ãã¡ã¹ãïŒã¹ããŒïŒäžã»äžïŒ ããããšã«ã»ã«ãŒããã³ ã äºæ³éãã«äžåç ããã³ã»ã¢ãªãšãª ã é¯èŠã®ç§åŠ ãã¯ãªã¹ããã¡ãŒã»ãã£ãã«ã¹ïŒãããšã«ã»ã·ã¢ã³ãº ã UI ãã¶ã€ã³ã®å¿çåŠ ããžã§ãã»ãžã§ã³ãœã³ ä»åã®ã話ã¯ãæ¬åœã«æ¬åœã«è¡šé¢ã®éšåã«ãªããŸããæµãèªã¿ã§ãåèã«ãªãã®ã§æã«åã£ãŠèŠãŠãã ããããŸãããããããšã«èå³ãããããã¶ã€ããŒããã»ãšã³ãžãã¢ãããæ¯éæ¯éã¡ãã¬ãŒã«éã³ã«æ¥ãŠãã ããïŒïŒçµ¶è³åéäžã§ãïŒïŒ ãç¥ãã ã¡ãã¬ãŒã§ã¯ããžã§ãã¡ãã¬ãŒã ãã§ãªããå»åž«ãã¡ãã€ãããªã³ã©ã€ã³å»çäºå
žã MEDLEY ãããªã³ã©ã€ã³èšºçã¢ããªã CLINICS ããå£ã³ãã§æ¢ããä»è·æœèšã®æ€çŽ¢ãµã€ãã ä»è·ã®ã»ãã ããªã©ã®ãããã¯ããæäŸããŠããŸãããããã®ãµãŒãã¹ã®æ¡å€§ãåããŠããã®æé·ãæ¯ãããšã³ãžãã¢ã»ãã¶ã€ããŒãåéããŠããŸãã www.medley.jp ä»åŸãšãã¡ãã¬ãŒãããããããé¡ãããããŸãïŒ
ã¯ãããŸããŠïŒæè¿ã¿ãã¿ã倪ãã ããŠã¯ãããã®ã®ããŸã æ©ã¯çããŠããªããšãã€ãšããã®ææããã£ãšå ªããŠããéçºæ¬éšã€ã±ã¡ã³æ
åœã®ãã¶ã€ããŒã»å°å±±ã§ãã ã¡ãã¬ãŒã§ã¯ TechLunch ãšãã瀟å
å匷äŒã宿œããŠããã®ã§ããã åç° ã«åŒãç¶ãç§ãçºè¡šããæ©äŒãããã ããŸããã®ã§ããã®å
容ã玹ä»ãããŠããã ããŸããããŒãã¯ãæèãšãã¶ã€ã³ã¹ãã«ãã§ããçºè¡šè³æã¯èšäºã®æåŸãã芧ãã ããã ããŒãã«å
¥ããŸãã«âŠ ã¿ãªãããé»éæ¯ãã£ãŠãåç¥ã§ããïŒ é»éæ¯ã¯çŸãããšãããç©ã®åœ¢ã«å
±éããŠã¿ãããæ¯çã§ãå€ãããçµµç»ã圫å»ã建ç¯ãªã©ã«äœ¿ãããŠããŸãããã¶ã€ããŒã§ããã°ãäžåºŠä»¥äžã¯äœ¿ã£ãããšããã®ã§ã¯ãªãã§ããããïŒç§ããã¶ã€ããŒãªã®ã§äœåºŠã䜿ã£ãŠããŸãã ãã 䜿ã£ãŠã¯ãããã®ã®ããªãçŸãããªãã®ãäžæã説æãã§ããŸãããåœããåã®ããã«äžã®äžã«åºãŸã£ãŠããŠãå°ã£ããšãã®é»éæ¯ïŒããšãã£ãå®æãªæèã§äœ¿ã£ãŠããŸããäžåè·¯ã軜ãè¶
ããã®ã§ããã§ã¯ãããªããšæããããã調ã¹ãŠã¿ãŸããã ããããé»éæ¯ã¯ãšãŠã¯ã¬ã€ãã¹ãšãããŠãŒã°ãªãã幟äœåŠãäœç³»åããæ°åŠè
ãèŠã€ããæ¯çãªã®ã§ããããã®ãšã圌ã¯ãé»éæ¯ïŒçŸããããšã¯æèšããŠããªãããã§ããèªç¶ç©ã人工ç©ã®åœ¢ã«ã¯äžå®ã®æ¯çã§æãç«ã£ãŠãããšèãããã®æ¯çã«é»éæ¯ãšåä»ãã ããšã®ããšã ãã®åŸããã®äœ¿ããããããè³ããšããã§æŽ»çšããããã®æ¯çã«èŠªãã¿ãèœçãå··ã§åãå
¥ããããããã«ãªããŸããã èªç¥å¿çåŠã§ã¯ããããã åçŽæ¥è§Šå¹æ ããšåŒã³ãŸããããããè§Šãããã¡ã«èŠªãã¿ãæ²žãæ©èœã人ã«ã¯ããšããšåãã£ãŠããŠãé»éæ¯ãã€ãã£ããã®ãçŸããèŠããã®ããã®åœ±é¿ã§ã¯ãªããïŒãšèšãããŠããŸãããã®èª¬ãèããæãåºç€çãªã®ã«åçãææ§ãªãã¶ã€ããŒã®ã¹ãã«ã®èŒªéããããã ãããããªããŠããŸããã ä»åã® TechLunch ã§ã¯ãææ§ã ã£ããã¶ã€ã³ã®ã¹ãã«ãäººã®æèãå¿ççŸè±¡ãšããèŠç¹ããæãçŽããŠã¿ããšãæ°ããçºèŠãããã®ããïŒãšèãããæèãšãã¶ã€ã³ã¹ãã«ãã®ããŒããéžã³ãŸããã ãæ©ãæèããšãé
ãæèã ãŸãæåã«äººã®æèãã©ãããæ§é ã«ãªã£ãŠãããæŽçããããšæããŸãã ïŒæèã®æãæ¹ã«ã¯å¹
ããããããä»å㯠Wikipedia ã§ãæèãã®ç矩ã«ããããæ
å ±åŠçãã®å
容ã«ãªããŸãã ããã§ 3 ã€ã®è³ªåãå·Šããé ã«çããŠãã ããã 倧æµã®äººã§ããã° 2 åç®ãŸã§ã¯ç¬æã«çããåºããšæããŸãã3 åç®ã¯ã©ãã§ããããïŒ 3 åç®ã¯ä»ãããæéãããã£ãããšæããŸããæ
å ±ãåŠçãããšãã®æèã«ã¯ 1 åç®ãš 2 åç®ã®ããã«ç¬æã«çãããã®ã¯ã æ©ãæè ãã3 åç®ã®ããã«å°ãæéã¯å¿
èŠãªã é
ãæè ãã® 2 ã€ããããŸãã è¡åçµæžåŠã§ã¯ããã®æ©ãæèãã ã·ã¹ãã 1 ããé
ãæèãã ã·ã¹ãã 2 ããšåŒãã§ããŸãã ã·ã¹ãã 1 ã¯ãèªåçã«çŽæã§åã ã§ã¯æ¬¡ã«ãã¡ããã芧ãã ããã ã©ã¡ãã®çŽç·ãé·ãã§ããããïŒçãã¯ã©ã¡ããåãã§ãããã®åé¡ããåç¥ã®æ¹ã§ãèŠãç¬é㯠A ãé·ãèŠããã®ã§ã¯ãªãã§ããããïŒ ã§ã¯ãã¡ãã§ã¯ã©ãã§ããããïŒ ãã¡ãã®æåãã¿ããšãã«ã海氎济ããŠããŠæººããŠããããããã¯ããã«è¿ãã·ãŒã³ãæãæµ®ãã¹ãŠãªãã§ããããïŒããã®äºèªã®ããã ã«ã¯ãããããããŸãããšãããããªçŽæ¥ã®çžé¢ã¯ãããŸãããããã«ããããããåºæ¥ãã°é¿ããããªããããªããšã§ãç¡æèã«é¢é£ã¥ããããã·ãŒã³ãæãæµ®ããã ã¯ãã§ãã ã·ã¹ãã 1 ã«ã¯ãããã»ã©ã®çŽç·ã®é·ãã®ããã«ééã£ãŠãããšããŠãã èŠããŸãŸ ããèªèããæ©èœãš 2 ã€ã®æåããã é¢é£ã¥ã ãããããªãã¹ããŒãªãŒãçµã¿ç«ãŠãæ©èœããããŸãããã®ã©ã¡ãããèªåã®æèãšã¯é¢ä¿ãªãèªåã§ãããã匷åã«åããŠããŸãã ã·ã¹ãã 2 ã¯ãæåã§è«ççã«åã æåã®äºæ¡ã®æãç®ãæãåºããŠãã ãããæ¥æ¬ã§ç®æ°ãåŠãã 人ã§ããã°ãäºæ¡ã®æãç®ã®ãšããèãããæ®µéã«ç§»ããšæããŸãããããã·ã¹ãã 2 ã®ã¹ã€ããã§ããã·ã¹ãã 1 ã¯åžžæã¹ã€ãããå
¥ã£ãŠããŠã»ãŒèªåã§çããåºããŸãããã·ã¹ãã 2 ã¯æèçã«ãèããããšããã¹ããããèžãŸãªããšåããŸãããã·ã¹ãã 1 ã¯èªåã§ãããã·ã¹ãã 2 ã¯æåã§ãã æåã®ããæéããããŸãããã·ã¹ãã 1 ã«ã¯ãªãçšå¿æ·±ããšæ
éãããããŸãããã¡ãã®åé¡ãã芧ãã ããã ã ããããšããŒã«ã§ 110 åããããã¯ããŒã«ãã 100 åé«ããããŒã«ã®å€æ®µã¯ïŒ ã å³çã§çãã人㯠10 åãšçããæ¹ãå€ãããã§ããããããåé¡ã«ã¯ã·ã¹ãã 2 ããã£ãŠã€ãã§ãè«ççãã€æ£ç¢ºã«çããåºãããšããŸããçã㯠5 åã§ãããªãã«ã¯é ã®åè»¢ãæ©ãå³çã§ãã人ãããã£ãããããšã ãšæããŸãããããªæ¹ã«ã¯ãã¡ãã®åé¡ãçããŠãã ã ããŸãããã 3 æ¥åããé£ã¹ãå€é£¯ã®ç®ç«ãå£ã«åºããŠçºè¡šããªãããã26x673ãã245x287ãã346x4546ãã® 3 åã 90 ç§ä»¥å
ã«è§£çããŠãã ããã ãããã§ããããïŒã·ã¹ãã 2 ã¯æåã§ãããè«ççã§æ£ç¢ºã«çãåºãããšããŸãããè€éãããæŒç®ããã«ãã¿ã¹ã¯ã«ãã£ãœã匱ãã¹ã¿ããããããŸããããããããŠé»åãå©ããæ¹ã¯ãã·ã¹ãã 2 ãã®ãã¢ãããããšããããšãããããŸããã ã·ã¹ãã 1 ãš 2 ã®ç¹åŸŽã¯ä»¥äžãã©ã¡ããè¯ããšãããšããã§ãªããšããããããŸãã ãã¶ã€ã³ãåæ§ç¯ ãããã·ã¹ãã 1&2 ã®ç¹æ§ãèžãŸããäžã§ç°¡åãªãã¥ãŒã¹èšäºã®ã¿ã€ãã°ã©ãã£ãæŽçããŠã¿ãŸããã çºè¡šè³æã® 58 ããŒãžããã芧ãã ããã speakerdeck.com ããšçްããæ
å ±ãã·ã¹ãã 1&2 ã®ãã£ã«ã¿ãŒãéãããšã§ãã¿ã€ãã«ããªãŒããæ¬æã®è¡éãæåãµã€ãºãããããã·ã¹ãã 2 ãæ
å ±ãçè§£ããããããããã®ïŒã€æ©èœãšããŠæããããšãã§ããŸããåœããåã«äœ¿ã£ãŠããã¹ãã«ãæ©èœãå¥ã®èŠç¹ã§æããããšã§éã£ãæ·±ãæå³ãèŠåºããããã«ãªãã倧ããªçºèŠã«ã€ãªãããŸããã ä»åã¯ã¿ã€ãã°ã©ãã£ã ã£ãã®ã§ã·ã¹ãã 2 å¯ãã®ãã®ã§ããããããžã¥ã¢ã«ã¢ã€ãã³ãã£ãã£ãåŒ·ãæœè±¡çãªãã¶ã€ã³ã¯ãæå³çã«ã·ã¹ãã 2 ãå°ã蟌ãã·ã¹ãã 1 ã®çŽææ§ãå©çšããŠå
容ãçè§£ããŠãããããšãã§ããŸãã ã·ã¹ãã 1&2 ã® 2 ã€ã®ç¹æ§ãèžãŸããŠäœ¿ãããªãããšã§ãã¹ãã«ã®æ·±ãçè§£ã¯ãã¡ããã§ãããæèŠãšã¯éããã¶ã€ã³ã®äŒãæ¹ã®æ°ãããã³ãã«ããªãããã§ãã ãããã« YouTube ã InstagramãLINE ã¯ã©ã¡ãããšãããšçŽææ§ãä¿ãã·ã¹ãã 1 ãæŽ»èºããã¢ããªã§ããããã ãã§ãªã身ã®åãã«ãããµãŒãã¹å
šäœããã®åŸåãšããå°è±¡ããããŸããã·ã¹ãã 1 ã¯æ®æ®µããã¹ã€ãããå
¥ã£ãŠãããããæ¯èŒçã«ç°¡æãªã¹ãããã§åããããããšãã§ããŸãã äžæ¹ã§ã·ã¹ãã 2 ã¯è€éãªæŒç®ã«ã¯èãããããã£ãããšã±ã¢ããªããã§ãªããšååãªéçšãã§ããŸããããã ã±ã¢ããã£ãããããšæ©æµã倧ãããšãããŸãã éèãæè²ãéçšããããŠå»çãšã20 幎åãšã¯æ¯èŒã«ãªããªãã»ã©ã€ã³ã¿ãŒãããã¯äººçã®ç¯ç®ã«æ·±ãé¢ããããã«ãªã£ãããã§ãã人çã«é¢ããéžæããããã§è¡ããšãã çŽæã ãã§ãªãã·ã¹ãã 2 ãåãããŠçèãçŽåŸã®ããæ±ºæãè¡ãããšãããããŠãŒã¶ãŒã®å©çã«ã€ãªãã ãšç§ã¯èããŠããŸãã ã¡ãã¬ãŒã§æäŸããŠãããµãŒãã¹ã¯ãŠãŒã¶ãŒã®äººçã«å°ãªãããé¢ããæ§è³ªããã£ãŠããŸããããã«çµè«ã¥ãããŠãããããããŠãŒã¶ãŒã«ãšã£ãŠæ£ãããšæãã倿ãã§ããããã«ã ã·ã¹ãã 2 ãããŸãåãããããšãã§ããç°å¢ããã¶ã€ããŒãšããŠã€ãã£ãŠãããã ãšæããŸãã ããŸã ä»åã®ããã¯ã©ã³ãã§åèã«ãããŠããã ããæžç±ã¯ä»¥äžã®ãã®ã«ãªããŸãã ã ãã¡ã¹ãïŒã¹ããŒïŒäžã»äžïŒ ããããšã«ã»ã«ãŒããã³ ã äºæ³éãã«äžåç ããã³ã»ã¢ãªãšãª ã é¯èŠã®ç§åŠ ãã¯ãªã¹ããã¡ãŒã»ãã£ãã«ã¹ïŒãããšã«ã»ã·ã¢ã³ãº ã UI ãã¶ã€ã³ã®å¿çåŠ ããžã§ãã»ãžã§ã³ãœã³ ä»åã®ã話ã¯ãæ¬åœã«æ¬åœã«è¡šé¢ã®éšåã«ãªããŸããæµãèªã¿ã§ãåèã«ãªãã®ã§æã«åã£ãŠèŠãŠãã ããããŸãããããããšã«èå³ãããããã¶ã€ããŒããã»ãšã³ãžãã¢ãããæ¯éæ¯éã¡ãã¬ãŒã«éã³ã«æ¥ãŠãã ããïŒïŒçµ¶è³åéäžã§ãïŒïŒ ãç¥ãã ã¡ãã¬ãŒã§ã¯ããžã§ãã¡ãã¬ãŒã ãã§ãªããå»åž«ãã¡ãã€ãããªã³ã©ã€ã³å»çäºå
žã MEDLEY ãããªã³ã©ã€ã³èšºçã¢ããªã CLINICS ããå£ã³ãã§æ¢ããä»è·æœèšã®æ€çŽ¢ãµã€ãã ä»è·ã®ã»ãã ããªã©ã®ãããã¯ããæäŸããŠããŸãããããã®ãµãŒãã¹ã®æ¡å€§ãåããŠããã®æé·ãæ¯ãããšã³ãžãã¢ã»ãã¶ã€ããŒãåéããŠããŸãã www.medley.jp ä»åŸãšãã¡ãã¬ãŒãããããããé¡ãããããŸãïŒ
ã¯ãããŸããŠïŒæè¿ã¿ãã¿ã倪ãã ããŠã¯ãããã®ã®ããŸã æ©ã¯çããŠããªããšãã€ãšããã®ææããã£ãšå ªããŠããéçºæ¬éšã€ã±ã¡ã³æ
åœã®ãã¶ã€ããŒã»å°å±±ã§ãã ã¡ãã¬ãŒã§ã¯ TechLunch ãšãã瀟å
å匷äŒã宿œããŠããã®ã§ããã åç° ã«åŒãç¶ãç§ãçºè¡šããæ©äŒãããã ããŸããã®ã§ããã®å
容ã玹ä»ãããŠããã ããŸããããŒãã¯ãæèãšãã¶ã€ã³ã¹ãã«ãã§ããçºè¡šè³æã¯èšäºã®æåŸãã芧ãã ããã ããŒãã«å
¥ããŸãã«âŠ ã¿ãªãããé»éæ¯ãã£ãŠãåç¥ã§ããïŒ é»éæ¯ã¯çŸãããšãããç©ã®åœ¢ã«å
±éããŠã¿ãããæ¯çã§ãå€ãããçµµç»ã圫å»ã建ç¯ãªã©ã«äœ¿ãããŠããŸãããã¶ã€ããŒã§ããã°ãäžåºŠä»¥äžã¯äœ¿ã£ãããšããã®ã§ã¯ãªãã§ããããïŒç§ããã¶ã€ããŒãªã®ã§äœåºŠã䜿ã£ãŠããŸãã ãã 䜿ã£ãŠã¯ãããã®ã®ããªãçŸãããªãã®ãäžæã説æãã§ããŸãããåœããåã®ããã«äžã®äžã«åºãŸã£ãŠããŠãå°ã£ããšãã®é»éæ¯ïŒããšãã£ãå®æãªæèã§äœ¿ã£ãŠããŸããäžåè·¯ã軜ãè¶
ããã®ã§ããã§ã¯ãããªããšæããããã調ã¹ãŠã¿ãŸããã ããããé»éæ¯ã¯ãšãŠã¯ã¬ã€ãã¹ãšãããŠãŒã°ãªãã幟äœåŠãäœç³»åããæ°åŠè
ãèŠã€ããæ¯çãªã®ã§ããããã®ãšã圌ã¯ãé»éæ¯ïŒçŸããããšã¯æèšããŠããªãããã§ããèªç¶ç©ã人工ç©ã®åœ¢ã«ã¯äžå®ã®æ¯çã§æãç«ã£ãŠãããšèãããã®æ¯çã«é»éæ¯ãšåä»ãã ããšã®ããšã ãã®åŸããã®äœ¿ããããããè³ããšããã§æŽ»çšããããã®æ¯çã«èŠªãã¿ãèœçãå··ã§åãå
¥ããããããã«ãªããŸããã èªç¥å¿çåŠã§ã¯ããããã åçŽæ¥è§Šå¹æ ããšåŒã³ãŸããããããè§Šãããã¡ã«èŠªãã¿ãæ²žãæ©èœã人ã«ã¯ããšããšåãã£ãŠããŠãé»éæ¯ãã€ãã£ããã®ãçŸããèŠããã®ããã®åœ±é¿ã§ã¯ãªããïŒãšèšãããŠããŸãããã®èª¬ãèããæãåºç€çãªã®ã«åçãææ§ãªãã¶ã€ããŒã®ã¹ãã«ã®èŒªéããããã ãããããªããŠããŸããã ä»åã® TechLunch ã§ã¯ãææ§ã ã£ããã¶ã€ã³ã®ã¹ãã«ãäººã®æèãå¿ççŸè±¡ãšããèŠç¹ããæãçŽããŠã¿ããšãæ°ããçºèŠãããã®ããïŒãšèãããæèãšãã¶ã€ã³ã¹ãã«ãã®ããŒããéžã³ãŸããã ãæ©ãæèããšãé
ãæèã ãŸãæåã«äººã®æèãã©ãããæ§é ã«ãªã£ãŠãããæŽçããããšæããŸãã ïŒæèã®æãæ¹ã«ã¯å¹
ããããããä»å㯠Wikipedia ã§ãæèãã®ç矩ã«ããããæ
å ±åŠçãã®å
容ã«ãªããŸãã ããã§ 3 ã€ã®è³ªåãå·Šããé ã«çããŠãã ããã 倧æµã®äººã§ããã° 2 åç®ãŸã§ã¯ç¬æã«çããåºããšæããŸãã3 åç®ã¯ã©ãã§ããããïŒ 3 åç®ã¯ä»ãããæéãããã£ãããšæããŸããæ
å ±ãåŠçãããšãã®æèã«ã¯ 1 åç®ãš 2 åç®ã®ããã«ç¬æã«çãããã®ã¯ã æ©ãæè ãã3 åç®ã®ããã«å°ãæéã¯å¿
èŠãªã é
ãæè ãã® 2 ã€ããããŸãã è¡åçµæžåŠã§ã¯ããã®æ©ãæèãã ã·ã¹ãã 1 ããé
ãæèãã ã·ã¹ãã 2 ããšåŒãã§ããŸãã ã·ã¹ãã 1 ã¯ãèªåçã«çŽæã§åã ã§ã¯æ¬¡ã«ãã¡ããã芧ãã ããã ã©ã¡ãã®çŽç·ãé·ãã§ããããïŒçãã¯ã©ã¡ããåãã§ãããã®åé¡ããåç¥ã®æ¹ã§ãèŠãç¬é㯠A ãé·ãèŠããã®ã§ã¯ãªãã§ããããïŒ ã§ã¯ãã¡ãã§ã¯ã©ãã§ããããïŒ ãã¡ãã®æåãã¿ããšãã«ã海氎济ããŠããŠæººããŠããããããã¯ããã«è¿ãã·ãŒã³ãæãæµ®ãã¹ãŠãªãã§ããããïŒããã®äºèªã®ããã ã«ã¯ãããããããŸãããšãããããªçŽæ¥ã®çžé¢ã¯ãããŸãããããã«ããããããåºæ¥ãã°é¿ããããªããããªããšã§ãç¡æèã«é¢é£ã¥ããããã·ãŒã³ãæãæµ®ããã ã¯ãã§ãã ã·ã¹ãã 1 ã«ã¯ãããã»ã©ã®çŽç·ã®é·ãã®ããã«ééã£ãŠãããšããŠãã èŠããŸãŸ ããèªèããæ©èœãš 2 ã€ã®æåããã é¢é£ã¥ã ãããããªãã¹ããŒãªãŒãçµã¿ç«ãŠãæ©èœããããŸãããã®ã©ã¡ãããèªåã®æèãšã¯é¢ä¿ãªãèªåã§ãããã匷åã«åããŠããŸãã ã·ã¹ãã 2 ã¯ãæåã§è«ççã«åã æåã®äºæ¡ã®æãç®ãæãåºããŠãã ãããæ¥æ¬ã§ç®æ°ãåŠãã 人ã§ããã°ãäºæ¡ã®æãç®ã®ãšããèãããæ®µéã«ç§»ããšæããŸãããããã·ã¹ãã 2 ã®ã¹ã€ããã§ããã·ã¹ãã 1 ã¯åžžæã¹ã€ãããå
¥ã£ãŠããŠã»ãŒèªåã§çããåºããŸãããã·ã¹ãã 2 ã¯æèçã«ãèããããšããã¹ããããèžãŸãªããšåããŸãããã·ã¹ãã 1 ã¯èªåã§ãããã·ã¹ãã 2 ã¯æåã§ãã æåã®ããæéããããŸãããã·ã¹ãã 1 ã«ã¯ãªãçšå¿æ·±ããšæ
éãããããŸãããã¡ãã®åé¡ãã芧ãã ããã ã ããããšããŒã«ã§ 110 åããããã¯ããŒã«ãã 100 åé«ããããŒã«ã®å€æ®µã¯ïŒ ã å³çã§çãã人㯠10 åãšçããæ¹ãå€ãããã§ããããããåé¡ã«ã¯ã·ã¹ãã 2 ããã£ãŠã€ãã§ãè«ççãã€æ£ç¢ºã«çããåºãããšããŸããçã㯠5 åã§ãããªãã«ã¯é ã®åè»¢ãæ©ãå³çã§ãã人ãããã£ãããããšã ãšæããŸãããããªæ¹ã«ã¯ãã¡ãã®åé¡ãçããŠãã ã ããŸãããã 3 æ¥åããé£ã¹ãå€é£¯ã®ç®ç«ãå£ã«åºããŠçºè¡šããªãããã26x673ãã245x287ãã346x4546ãã® 3 åã 90 ç§ä»¥å
ã«è§£çããŠãã ããã ãããã§ããããïŒã·ã¹ãã 2 ã¯æåã§ãããè«ççã§æ£ç¢ºã«çãåºãããšããŸãããè€éãããæŒç®ããã«ãã¿ã¹ã¯ã«ãã£ãœã匱ãã¹ã¿ããããããŸããããããããŠé»åãå©ããæ¹ã¯ãã·ã¹ãã 2 ãã®ãã¢ãããããšããããšãããããŸããã ã·ã¹ãã 1 ãš 2 ã®ç¹åŸŽã¯ä»¥äžãã©ã¡ããè¯ããšãããšããã§ãªããšããããããŸãã ãã¶ã€ã³ãåæ§ç¯ ãããã·ã¹ãã 1&2 ã®ç¹æ§ãèžãŸããäžã§ç°¡åãªãã¥ãŒã¹èšäºã®ã¿ã€ãã°ã©ãã£ãæŽçããŠã¿ãŸããã çºè¡šè³æã® 58 ããŒãžããã芧ãã ããã speakerdeck.com ããšçްããæ
å ±ãã·ã¹ãã 1&2 ã®ãã£ã«ã¿ãŒãéãããšã§ãã¿ã€ãã«ããªãŒããæ¬æã®è¡éãæåãµã€ãºãããããã·ã¹ãã 2 ãæ
å ±ãçè§£ããããããããã®ïŒã€æ©èœãšããŠæããããšãã§ããŸããåœããåã«äœ¿ã£ãŠããã¹ãã«ãæ©èœãå¥ã®èŠç¹ã§æããããšã§éã£ãæ·±ãæå³ãèŠåºããããã«ãªãã倧ããªçºèŠã«ã€ãªãããŸããã ä»åã¯ã¿ã€ãã°ã©ãã£ã ã£ãã®ã§ã·ã¹ãã 2 å¯ãã®ãã®ã§ããããããžã¥ã¢ã«ã¢ã€ãã³ãã£ãã£ãåŒ·ãæœè±¡çãªãã¶ã€ã³ã¯ãæå³çã«ã·ã¹ãã 2 ãå°ã蟌ãã·ã¹ãã 1 ã®çŽææ§ãå©çšããŠå
容ãçè§£ããŠãããããšãã§ããŸãã ã·ã¹ãã 1&2 ã® 2 ã€ã®ç¹æ§ãèžãŸããŠäœ¿ãããªãããšã§ãã¹ãã«ã®æ·±ãçè§£ã¯ãã¡ããã§ãããæèŠãšã¯éããã¶ã€ã³ã®äŒãæ¹ã®æ°ãããã³ãã«ããªãããã§ãã ãããã« YouTube ã InstagramãLINE ã¯ã©ã¡ãããšãããšçŽææ§ãä¿ãã·ã¹ãã 1 ãæŽ»èºããã¢ããªã§ããããã ãã§ãªã身ã®åãã«ãããµãŒãã¹å
šäœããã®åŸåãšããå°è±¡ããããŸããã·ã¹ãã 1 ã¯æ®æ®µããã¹ã€ãããå
¥ã£ãŠãããããæ¯èŒçã«ç°¡æãªã¹ãããã§åããããããšãã§ããŸãã äžæ¹ã§ã·ã¹ãã 2 ã¯è€éãªæŒç®ã«ã¯èãããããã£ãããšã±ã¢ããªããã§ãªããšååãªéçšãã§ããŸããããã ã±ã¢ããã£ãããããšæ©æµã倧ãããšãããŸãã éèãæè²ãéçšããããŠå»çãšã20 幎åãšã¯æ¯èŒã«ãªããªãã»ã©ã€ã³ã¿ãŒãããã¯äººçã®ç¯ç®ã«æ·±ãé¢ããããã«ãªã£ãããã§ãã人çã«é¢ããéžæããããã§è¡ããšãã çŽæã ãã§ãªãã·ã¹ãã 2 ãåãããŠçèãçŽåŸã®ããæ±ºæãè¡ãããšãããããŠãŒã¶ãŒã®å©çã«ã€ãªãã ãšç§ã¯èããŠããŸãã ã¡ãã¬ãŒã§æäŸããŠãããµãŒãã¹ã¯ãŠãŒã¶ãŒã®äººçã«å°ãªãããé¢ããæ§è³ªããã£ãŠããŸããããã«çµè«ã¥ãããŠãããããããŠãŒã¶ãŒã«ãšã£ãŠæ£ãããšæãã倿ãã§ããããã«ã ã·ã¹ãã 2 ãããŸãåãããããšãã§ããç°å¢ããã¶ã€ããŒãšããŠã€ãã£ãŠãããã ãšæããŸãã ããŸã ä»åã®ããã¯ã©ã³ãã§åèã«ãããŠããã ããæžç±ã¯ä»¥äžã®ãã®ã«ãªããŸãã ã ãã¡ã¹ãïŒã¹ããŒïŒäžã»äžïŒ ããããšã«ã»ã«ãŒããã³ ã äºæ³éãã«äžåç ããã³ã»ã¢ãªãšãª ã é¯èŠã®ç§åŠ ãã¯ãªã¹ããã¡ãŒã»ãã£ãã«ã¹ïŒãããšã«ã»ã·ã¢ã³ãº ã UI ãã¶ã€ã³ã®å¿çåŠ ããžã§ãã»ãžã§ã³ãœã³ ä»åã®ã話ã¯ãæ¬åœã«æ¬åœã«è¡šé¢ã®éšåã«ãªããŸããæµãèªã¿ã§ãåèã«ãªãã®ã§æã«åã£ãŠèŠãŠãã ããããŸãããããããšã«èå³ãããããã¶ã€ããŒããã»ãšã³ãžãã¢ãããæ¯éæ¯éã¡ãã¬ãŒã«éã³ã«æ¥ãŠãã ããïŒïŒçµ¶è³åéäžã§ãïŒïŒ ãç¥ãã ã¡ãã¬ãŒã§ã¯ããžã§ãã¡ãã¬ãŒã ãã§ãªããå»åž«ãã¡ãã€ãããªã³ã©ã€ã³å»çäºå
žã MEDLEY ãããªã³ã©ã€ã³èšºçã¢ããªã CLINICS ããå£ã³ãã§æ¢ããä»è·æœèšã®æ€çŽ¢ãµã€ãã ä»è·ã®ã»ãã ããªã©ã®ãããã¯ããæäŸããŠããŸãããããã®ãµãŒãã¹ã®æ¡å€§ãåããŠããã®æé·ãæ¯ãããšã³ãžãã¢ã»ãã¶ã€ããŒãåéããŠããŸãã www.medley.jp ä»åŸãšãã¡ãã¬ãŒãããããããé¡ãããããŸãïŒ
ã¯ãããŸããŠïŒæè¿ã¿ãã¿ã倪ãã ããŠã¯ãããã®ã®ããŸã æ©ã¯çããŠããªããšãã€ãšããã®ææããã£ãšå ªããŠããéçºæ¬éšã€ã±ã¡ã³æ
åœã®ãã¶ã€ããŒã»å°å±±ã§ãã ã¡ãã¬ãŒã§ã¯ TechLunch ãšãã瀟å
å匷äŒã宿œããŠããã®ã§ããã åç° ã«åŒãç¶ãç§ãçºè¡šããæ©äŒãããã ããŸããã®ã§ããã®å
容ã玹ä»ãããŠããã ããŸããããŒãã¯ãæèãšãã¶ã€ã³ã¹ãã«ãã§ããçºè¡šè³æã¯èšäºã®æåŸãã芧ãã ããã ããŒãã«å
¥ããŸãã«âŠ ã¿ãªãããé»éæ¯ãã£ãŠãåç¥ã§ããïŒ é»éæ¯ã¯çŸãããšãããç©ã®åœ¢ã«å
±éããŠã¿ãããæ¯çã§ãå€ãããçµµç»ã圫å»ã建ç¯ãªã©ã«äœ¿ãããŠããŸãããã¶ã€ããŒã§ããã°ãäžåºŠä»¥äžã¯äœ¿ã£ãããšããã®ã§ã¯ãªãã§ããããïŒç§ããã¶ã€ããŒãªã®ã§äœåºŠã䜿ã£ãŠããŸãã ãã 䜿ã£ãŠã¯ãããã®ã®ããªãçŸãããªãã®ãäžæã説æãã§ããŸãããåœããåã®ããã«äžã®äžã«åºãŸã£ãŠããŠãå°ã£ããšãã®é»éæ¯ïŒããšãã£ãå®æãªæèã§äœ¿ã£ãŠããŸããäžåè·¯ã軜ãè¶
ããã®ã§ããã§ã¯ãããªããšæããããã調ã¹ãŠã¿ãŸããã ããããé»éæ¯ã¯ãšãŠã¯ã¬ã€ãã¹ãšãããŠãŒã°ãªãã幟äœåŠãäœç³»åããæ°åŠè
ãèŠã€ããæ¯çãªã®ã§ããããã®ãšã圌ã¯ãé»éæ¯ïŒçŸããããšã¯æèšããŠããªãããã§ããèªç¶ç©ã人工ç©ã®åœ¢ã«ã¯äžå®ã®æ¯çã§æãç«ã£ãŠãããšèãããã®æ¯çã«é»éæ¯ãšåä»ãã ããšã®ããšã ãã®åŸããã®äœ¿ããããããè³ããšããã§æŽ»çšããããã®æ¯çã«èŠªãã¿ãèœçãå··ã§åãå
¥ããããããã«ãªããŸããã èªç¥å¿çåŠã§ã¯ããããã åçŽæ¥è§Šå¹æ ããšåŒã³ãŸããããããè§Šãããã¡ã«èŠªãã¿ãæ²žãæ©èœã人ã«ã¯ããšããšåãã£ãŠããŠãé»éæ¯ãã€ãã£ããã®ãçŸããèŠããã®ããã®åœ±é¿ã§ã¯ãªããïŒãšèšãããŠããŸãããã®èª¬ãèããæãåºç€çãªã®ã«åçãææ§ãªãã¶ã€ããŒã®ã¹ãã«ã®èŒªéããããã ãããããªããŠããŸããã ä»åã® TechLunch ã§ã¯ãææ§ã ã£ããã¶ã€ã³ã®ã¹ãã«ãäººã®æèãå¿ççŸè±¡ãšããèŠç¹ããæãçŽããŠã¿ããšãæ°ããçºèŠãããã®ããïŒãšèãããæèãšãã¶ã€ã³ã¹ãã«ãã®ããŒããéžã³ãŸããã ãæ©ãæèããšãé
ãæèã ãŸãæåã«äººã®æèãã©ãããæ§é ã«ãªã£ãŠãããæŽçããããšæããŸãã ïŒæèã®æãæ¹ã«ã¯å¹
ããããããä»å㯠Wikipedia ã§ãæèãã®ç矩ã«ããããæ
å ±åŠçãã®å
容ã«ãªããŸãã ããã§ 3 ã€ã®è³ªåãå·Šããé ã«çããŠãã ããã 倧æµã®äººã§ããã° 2 åç®ãŸã§ã¯ç¬æã«çããåºããšæããŸãã3 åç®ã¯ã©ãã§ããããïŒ 3 åç®ã¯ä»ãããæéãããã£ãããšæããŸããæ
å ±ãåŠçãããšãã®æèã«ã¯ 1 åç®ãš 2 åç®ã®ããã«ç¬æã«çãããã®ã¯ã æ©ãæè ãã3 åç®ã®ããã«å°ãæéã¯å¿
èŠãªã é
ãæè ãã® 2 ã€ããããŸãã è¡åçµæžåŠã§ã¯ããã®æ©ãæèãã ã·ã¹ãã 1 ããé
ãæèãã ã·ã¹ãã 2 ããšåŒãã§ããŸãã ã·ã¹ãã 1 ã¯ãèªåçã«çŽæã§åã ã§ã¯æ¬¡ã«ãã¡ããã芧ãã ããã ã©ã¡ãã®çŽç·ãé·ãã§ããããïŒçãã¯ã©ã¡ããåãã§ãããã®åé¡ããåç¥ã®æ¹ã§ãèŠãç¬é㯠A ãé·ãèŠããã®ã§ã¯ãªãã§ããããïŒ ã§ã¯ãã¡ãã§ã¯ã©ãã§ããããïŒ ãã¡ãã®æåãã¿ããšãã«ã海氎济ããŠããŠæººããŠããããããã¯ããã«è¿ãã·ãŒã³ãæãæµ®ãã¹ãŠãªãã§ããããïŒããã®äºèªã®ããã ã«ã¯ãããããããŸãããšãããããªçŽæ¥ã®çžé¢ã¯ãããŸãããããã«ããããããåºæ¥ãã°é¿ããããªããããªããšã§ãç¡æèã«é¢é£ã¥ããããã·ãŒã³ãæãæµ®ããã ã¯ãã§ãã ã·ã¹ãã 1 ã«ã¯ãããã»ã©ã®çŽç·ã®é·ãã®ããã«ééã£ãŠãããšããŠãã èŠããŸãŸ ããèªèããæ©èœãš 2 ã€ã®æåããã é¢é£ã¥ã ãããããªãã¹ããŒãªãŒãçµã¿ç«ãŠãæ©èœããããŸãããã®ã©ã¡ãããèªåã®æèãšã¯é¢ä¿ãªãèªåã§ãããã匷åã«åããŠããŸãã ã·ã¹ãã 2 ã¯ãæåã§è«ççã«åã æåã®äºæ¡ã®æãç®ãæãåºããŠãã ãããæ¥æ¬ã§ç®æ°ãåŠãã 人ã§ããã°ãäºæ¡ã®æãç®ã®ãšããèãããæ®µéã«ç§»ããšæããŸãããããã·ã¹ãã 2 ã®ã¹ã€ããã§ããã·ã¹ãã 1 ã¯åžžæã¹ã€ãããå
¥ã£ãŠããŠã»ãŒèªåã§çããåºããŸãããã·ã¹ãã 2 ã¯æèçã«ãèããããšããã¹ããããèžãŸãªããšåããŸãããã·ã¹ãã 1 ã¯èªåã§ãããã·ã¹ãã 2 ã¯æåã§ãã æåã®ããæéããããŸãããã·ã¹ãã 1 ã«ã¯ãªãçšå¿æ·±ããšæ
éãããããŸãããã¡ãã®åé¡ãã芧ãã ããã ã ããããšããŒã«ã§ 110 åããããã¯ããŒã«ãã 100 åé«ããããŒã«ã®å€æ®µã¯ïŒ ã å³çã§çãã人㯠10 åãšçããæ¹ãå€ãããã§ããããããåé¡ã«ã¯ã·ã¹ãã 2 ããã£ãŠã€ãã§ãè«ççãã€æ£ç¢ºã«çããåºãããšããŸããçã㯠5 åã§ãããªãã«ã¯é ã®åè»¢ãæ©ãå³çã§ãã人ãããã£ãããããšã ãšæããŸãããããªæ¹ã«ã¯ãã¡ãã®åé¡ãçããŠãã ã ããŸãããã 3 æ¥åããé£ã¹ãå€é£¯ã®ç®ç«ãå£ã«åºããŠçºè¡šããªãããã26x673ãã245x287ãã346x4546ãã® 3 åã 90 ç§ä»¥å
ã«è§£çããŠãã ããã ãããã§ããããïŒã·ã¹ãã 2 ã¯æåã§ãããè«ççã§æ£ç¢ºã«çãåºãããšããŸãããè€éãããæŒç®ããã«ãã¿ã¹ã¯ã«ãã£ãœã匱ãã¹ã¿ããããããŸããããããããŠé»åãå©ããæ¹ã¯ãã·ã¹ãã 2 ãã®ãã¢ãããããšããããšãããããŸããã ã·ã¹ãã 1 ãš 2 ã®ç¹åŸŽã¯ä»¥äžãã©ã¡ããè¯ããšãããšããã§ãªããšããããããŸãã ãã¶ã€ã³ãåæ§ç¯ ãããã·ã¹ãã 1&2 ã®ç¹æ§ãèžãŸããäžã§ç°¡åãªãã¥ãŒã¹èšäºã®ã¿ã€ãã°ã©ãã£ãæŽçããŠã¿ãŸããã çºè¡šè³æã® 58 ããŒãžããã芧ãã ããã speakerdeck.com ããšçްããæ
å ±ãã·ã¹ãã 1&2 ã®ãã£ã«ã¿ãŒãéãããšã§ãã¿ã€ãã«ããªãŒããæ¬æã®è¡éãæåãµã€ãºãããããã·ã¹ãã 2 ãæ
å ±ãçè§£ããããããããã®ïŒã€æ©èœãšããŠæããããšãã§ããŸããåœããåã«äœ¿ã£ãŠããã¹ãã«ãæ©èœãå¥ã®èŠç¹ã§æããããšã§éã£ãæ·±ãæå³ãèŠåºããããã«ãªãã倧ããªçºèŠã«ã€ãªãããŸããã ä»åã¯ã¿ã€ãã°ã©ãã£ã ã£ãã®ã§ã·ã¹ãã 2 å¯ãã®ãã®ã§ããããããžã¥ã¢ã«ã¢ã€ãã³ãã£ãã£ãåŒ·ãæœè±¡çãªãã¶ã€ã³ã¯ãæå³çã«ã·ã¹ãã 2 ãå°ã蟌ãã·ã¹ãã 1 ã®çŽææ§ãå©çšããŠå
容ãçè§£ããŠãããããšãã§ããŸãã ã·ã¹ãã 1&2 ã® 2 ã€ã®ç¹æ§ãèžãŸããŠäœ¿ãããªãããšã§ãã¹ãã«ã®æ·±ãçè§£ã¯ãã¡ããã§ãããæèŠãšã¯éããã¶ã€ã³ã®äŒãæ¹ã®æ°ãããã³ãã«ããªãããã§ãã ãããã« YouTube ã InstagramãLINE ã¯ã©ã¡ãããšãããšçŽææ§ãä¿ãã·ã¹ãã 1 ãæŽ»èºããã¢ããªã§ããããã ãã§ãªã身ã®åãã«ãããµãŒãã¹å
šäœããã®åŸåãšããå°è±¡ããããŸããã·ã¹ãã 1 ã¯æ®æ®µããã¹ã€ãããå
¥ã£ãŠãããããæ¯èŒçã«ç°¡æãªã¹ãããã§åããããããšãã§ããŸãã äžæ¹ã§ã·ã¹ãã 2 ã¯è€éãªæŒç®ã«ã¯èãããããã£ãããšã±ã¢ããªããã§ãªããšååãªéçšãã§ããŸããããã ã±ã¢ããã£ãããããšæ©æµã倧ãããšãããŸãã éèãæè²ãéçšããããŠå»çãšã20 幎åãšã¯æ¯èŒã«ãªããªãã»ã©ã€ã³ã¿ãŒãããã¯äººçã®ç¯ç®ã«æ·±ãé¢ããããã«ãªã£ãããã§ãã人çã«é¢ããéžæããããã§è¡ããšãã çŽæã ãã§ãªãã·ã¹ãã 2 ãåãããŠçèãçŽåŸã®ããæ±ºæãè¡ãããšãããããŠãŒã¶ãŒã®å©çã«ã€ãªãã ãšç§ã¯èããŠããŸãã ã¡ãã¬ãŒã§æäŸããŠãããµãŒãã¹ã¯ãŠãŒã¶ãŒã®äººçã«å°ãªãããé¢ããæ§è³ªããã£ãŠããŸããããã«çµè«ã¥ãããŠãããããããŠãŒã¶ãŒã«ãšã£ãŠæ£ãããšæãã倿ãã§ããããã«ã ã·ã¹ãã 2 ãããŸãåãããããšãã§ããç°å¢ããã¶ã€ããŒãšããŠã€ãã£ãŠãããã ãšæããŸãã ããŸã ä»åã®ããã¯ã©ã³ãã§åèã«ãããŠããã ããæžç±ã¯ä»¥äžã®ãã®ã«ãªããŸãã ã ãã¡ã¹ãïŒã¹ããŒïŒäžã»äžïŒ ããããšã«ã»ã«ãŒããã³ ã äºæ³éãã«äžåç ããã³ã»ã¢ãªãšãª ã é¯èŠã®ç§åŠ ãã¯ãªã¹ããã¡ãŒã»ãã£ãã«ã¹ïŒãããšã«ã»ã·ã¢ã³ãº ã UI ãã¶ã€ã³ã®å¿çåŠ ããžã§ãã»ãžã§ã³ãœã³ ä»åã®ã話ã¯ãæ¬åœã«æ¬åœã«è¡šé¢ã®éšåã«ãªããŸããæµãèªã¿ã§ãåèã«ãªãã®ã§æã«åã£ãŠèŠãŠãã ããããŸãããããããšã«èå³ãããããã¶ã€ããŒããã»ãšã³ãžãã¢ãããæ¯éæ¯éã¡ãã¬ãŒã«éã³ã«æ¥ãŠãã ããïŒïŒçµ¶è³åéäžã§ãïŒïŒ ãç¥ãã ã¡ãã¬ãŒã§ã¯ããžã§ãã¡ãã¬ãŒã ãã§ãªããå»åž«ãã¡ãã€ãããªã³ã©ã€ã³å»çäºå
žã MEDLEY ãããªã³ã©ã€ã³èšºçã¢ããªã CLINICS ããå£ã³ãã§æ¢ããä»è·æœèšã®æ€çŽ¢ãµã€ãã ä»è·ã®ã»ãã ããªã©ã®ãããã¯ããæäŸããŠããŸãããããã®ãµãŒãã¹ã®æ¡å€§ãåããŠããã®æé·ãæ¯ãããšã³ãžãã¢ã»ãã¶ã€ããŒãåéããŠããŸãã www.medley.jp ä»åŸãšãã¡ãã¬ãŒãããããããé¡ãããããŸãïŒ
ä»åã®å
容ã«ã€ã㊠ã¡ãã¬ãŒéçºæ¬éšã® ç°äž ã§ãã å
æ¥ãProxy å±€ã Elastic Beanstalk äžã® Nginx ã§ãApp å±€ã EC2 ã€ã³ã¹ã¿ã³ã¹ã§æ§ç¯ããæ©äŒããããŸãããããã ãèŠããšãšãŠãæ®éã«èŠããŸãããå¶çŽãããããšã§èŠåŽããç¹ãããïŒ åç·šåç
§ ïŒãå¶çŽãä¹ãè¶ããããã®å·¥å€«ãå«ããŠã話ã§ããéãå
±æãããŠããã ããŸãã åç·šã§ã¯ Proxy å±€ã®æ§æãšããŠã䞻㫠Nginx ã䜿çšãã Path Based Routing åšãã«ã€ããŠã®ã話ã§ãããåŸç·šã§ã¯ App å±€ã§äœ¿çšãã EC2ã Systems Manager ãã©ã¡ãŒã¿ã¹ãã¢ãããã«ã€ããŠå
±æããããŸãã App å±€ã®æ§æ App å±€ã®æ¹éãæ§ç¯ã®æµãçããŸãšãããšä»¥äžã®éãã§ãã ãŽãŒã«ãã³ã€ã¡ãŒãžãšã㊠OS èšå®ããµãŒãã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ãã imageïŒAMIïŒãäœæããŠãã äžèšã® AMI ãå
ã«ãã¯ã©ã€ã¢ã³ãæ¯ã« EC2 ã€ã³ã¹ã¿ã³ã¹ãäœæãã ã€ã³ã¹ã¿ã³ã¹äœææã«å¿
èŠãª Tag ã®å€ãç°å¢å€æ°ãèšå®ããŠãã ç°å¢å€æ°ã¯ãã©ã¡ãŒã¿ã¹ãã¢ã«ç»é² EC2 ã€ã³ã¹ã¿ã³ã¹èµ·åæã«ãã¯ã©ã€ã¢ã³ãã«å¿ãã Tag ãç°å¢å€æ°ãããšã«ãµãŒãã¢ããªã±ãŒã·ã§ã³ã®ã»ããã¢ãããè¡ã èªèº«ã®å
éš IP ãš Tag ã«èšå®ããã¯ã©ã€ã¢ã³ãèå¥ ID ãå
ã« Route53 ã® PrivateDNS ã«ç»é²ãã ããã§ã¯ãããããã®è©³çްã«ã€ããŠèª¬æããŠãããããšæããŸãã AMI äœæ Packer ã䜿çšããŠåã€ã³ã¹ã¿ã³ã¹å
±éãšãªã AMI ãäœæããŸãã provisioners ã§æå®ããæ§ç¯çšã¹ã¯ãªããã§ OS èšå®ãå¿
èŠã©ã€ãã©ãªããŸãã¡ã€ã³ãšãªããµãŒãã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ããŸãããŸããcloud-init ã䜿çšããŠååèµ·åæã«åããã¹ã¯ãªããé¡ãã³ããŒããŠãããŸãã ãªããcloud-init ããå®è¡ããã¹ã¯ãªãã㯠Git ã S3 ãªã©ããåçã«ååŸããæ¹æ³ããããŸããããã»ã©ã¹ã¯ãªããã®å
容ã«å€æŽã¯çºçããªãç¹ãšãå
容çã«å€æŽããå Žå㯠image åäœæãã©ã¡ãã«ããŠãå¿
èŠã«ãªãããã ã£ãã®ã§å²ãåã£ãŠ image å
ã«å«ããããšã«ããŠããŸãã äœæãã packer.json ã® provisioners éšåãæç²ãããšãã®ãããªæãã«ãªããŸãïŒèª¬æã³ã¡ã³ãéšåã¯å®éã«ã¯èšèŒããŠããŸããïŒ "provisioners" : [ -- type: shell ãšããŠãæ§ç¯çšã¹ã¯ãªããæå®ããã«ãæã«å®è¡ããã { "type" : "shell" , "scripts" : [ "scripts/provision.sh" ] }, -- type: file ã§ã€ã³ã¹ã¿ã³ã¹èµ·åæã«å®è¡ãããã¹ã¯ãªãã矀ãã³ã㌠-- ãããã®ã¹ã¯ãªãã㯠cloud-init ããå®è¡ãããïŒcloud-init ã®èšå®ã¯å¥éã€ã³ã¹ã¿ã³ã¹äœææã«è¡ã£ãŠããïŒ { "type" : "file" , "source" : "./scripts" , "destination" : "/home/hoge" }, -- äžèšã®ã¹ã¯ãªããã«å¯ŸããŠå®è¡æš©éä»äž { "type" : "shell" , "inline" : [ "chmod +x /home/hoge/scripts/*" ] } ] packer build ã§ãã«ããã image ã AWS ã«ä»åã®å
±éã§äœ¿çšãã AMI ãšããŠç»é²ãããŸã EC2 ã€ã³ã¹ã¿ã³ã¹äœæ äœæãã AMI ãå
ã«ãã¯ã©ã€ã¢ã³ãããšã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãããªããã€ã³ã¹ã¿ã³ã¹äœæã¯ Terraform ã CloudFormation ãªã©ã¯äœ¿ãããAWS CLI ãå©çšããã¹ã¯ãªãããäœæããŠå®è¡ããŠããŸãã ã€ã³ã¹ã¿ã³ã¹äœæã¹ã¯ãªããã¯ãã®ãããªæµãã®åŠçãšãªããŸãã åŒæ°ã§ã¯ã©ã€ã¢ã³ãèå¥ ID ããã®ä»ãµãŒãã¢ããªã±ãŒã·ã§ã³ã»ããã¢ããã«å¿
èŠãšãªãç°å¢å€æ°ãæå® AWS CLI ã§ EC2 ã€ã³ã¹ã¿ã³ã¹äœæ åŒæ°ã§æå®ãããç°å¢å€æ°ã AWS CLI ã§ãã©ã¡ãŒã¿ã¹ãã¢ã«ç»é² ã€ã³ã¹ã¿ã³ã¹äœæ 以äžã®ããã«ã aws ec2 run-instances ã³ãã³ãã䜿çšããTag ã«ã¯ã©ã€ã¢ã³ãèå¥ ID ãæå®ããŠäœæããŠããŸãã ããã§æå®ããã¯ã©ã€ã¢ã³ãèå¥ ID ãå
ã«ãã©ã¡ãŒã¿ã¹ãã¢ããèªåçšã®ç°å¢å€æ°ãç»é²/ååŸããããPrivate DNS çšã®ãã¡ã€ã³ã«äœ¿çšããŸãã aws ec2 run-instances \ --image-id ${ AMI_ID } \ --key-name ${ KEY_NAME } --region ${ REGION } \ --subnet-id ${ SUBNET_ID } \ --security-group-ids ${ SECURITY_GROUP } \ --user-data file:// ${ USER_DATA } \ --instance-type ${ INSTANCE_TYPE } \ --tag-specifications "ResourceType=instance,Tags=[{Key=ClientId,Value=${ CLIENT_ID }}]" \ --iam-instance-profile "Arn=${ SERVICE_ROLE }" user-data ã«ã¯ååèµ·åæã«å®è¡ãããã¹ã¯ãªããïŒPacker ã§ãã«ãæã«ã³ããŒããŠãããã¹ã¯ãªããïŒãæå®ããŠããã ããšãªããŸãã #!/bin/bash /home/hoge/scripts/bootstrap.sh ãã©ã¡ãŒã¿ã¹ãã¢ã«ç°å¢å€æ°ç»é² 䜿çšããç°å¢å€æ°ã¯ãKey ã¯å
±éã§ããå€ãã¯ã©ã€ã¢ã³ãã«ãã£ãŠç°ãªããŸãããã®ãããHOGE ãšãã Key ã䜿çšããå Žåã <ã¯ã©ã€ã¢ã³ãèå¥ ID>.HOGE ãšãã圢åŒã§ãã©ã¡ãŒã¿ã¹ãã¢ã«ç»é²ããŠããŸãã ïŒæ³š. ãã©ã¡ãŒã¿ã¹ãã¢ã« éå±€ãã¿ã°ä»ãããµããŒãããã ãããããã®ãããã®æ§æã¯ä»åŸèŠçŽãäºå®ã§ãïŒ ç»é²ã¯ aws ssm put-parameter ãå®è¡ããŸã aws ssm put-parameter \ --name ${ KEY } \ --value ${ VALUE } \ --type ${ PARAMETER_TYPE } \ # StringãSecureString ãªã© --overwrite ããã§ã¯ã©ã€ã¢ã³ãããšã® EC2 ã€ã³ã¹ã¿ã³ã¹ãäœæãèµ·åãããŸããæ¬¡ã«ã€ã³ã¹ã¿ã³ã¹èµ·åæã®æµãã«ã€ããŠã§ãã EC2 ã€ã³ã¹ã¿ã³ã¹èµ·å èµ·åæã¯ãååèµ·åãšæ¯åèµ·åã§ãããã以äžã®ãããªåŠçãè¡ããŸãã åå: ãã©ã¡ãŒã¿ã¹ãã¢ããèªèº«ã«é¢é£ããç°å¢å€æ°ãååŸãããµãŒãã¢ããªã±ãŒã·ã§ã³ã®ã»ããã¢ãã æ¯å: èªèº«ã®å
éš IP ã Route53 ã® Private DNS ã«ç»é²/æŽæ° å
éš IP ã¯åºå®ããŠãããèµ·åæã«å²ãæ¯ããããããæ¯åæŽæ°ããããã«ããŠããŸãã ããã§ã¯ããããã®å
容ã«ã€ããŠèŠãŠãããŸãã ãã©ã¡ãŒã¿ã¹ãã¢ããç°å¢å€æ°ååŸ ç»é²æã®å
容ã§èšèŒããŸããããç°å¢å€æ°ã¯ <ã¯ã©ã€ã¢ã³ãèå¥ ID>.HOGE ãšãã圢åŒã§ç»é²ããŠããŸãããã®ããããŸãã¯èªèº«ã®ã¯ã©ã€ã¢ã³ãèå¥ ID ãå€å®ããåŸã«å¿
èŠãªç°å¢å€æ°ã aws ssm get-parameters ã§ååŸããŸãã # èªèº«ã®ã€ã³ã¹ã¿ã³ã¹ ID ãã¡ã¿ããŒã¿ããååŸ INSTANCE_ID =$( curl -s https://169.254.169.254/latest/meta-data/instance-id ) # ã¯ã©ã€ã¢ã³ãèå¥ ID ãã€ã³ã¹ã¿ã³ã¹äœææã«æå®ãã Tag ããååŸ # (describe-instances ã® filter ã«èªèº«ã®ã€ã³ã¹ã¿ã³ã¹ ID ãæå®) CLIENT_ID_TAG =$( aws ec2 describe-instances \ --region=${ REGION } \ --filters "Name=instance-id,Values=${ INSTANCE_ID }" \ | jq -r '.Reservations[].Instances[].Tags[] | select(.Key == "ClientId").Value' ) # ç°å¢å€æ°ãååŸ # ã¿ã€ãã SecureString ã«ããŠãã倿°ããããããäžåŸ --with-decryption ãªãã·ã§ã³ãæå®ããŠãã HOGE =$( aws ssm get-parameters \ --name "${ CLIENT_ID_TAG }.HOGE" \ --with-decryption --region ${ REGION } \ | jq -r ".Parameters[].Value" ) export HOGE =${ HOGE } å
éš IP ã Private DNS ã«ç»é² æåŸã«ãProxy å±€ãã Private DNS ã§åå解決ã§ããããã«èªèº«ã® IP ã Route 53 ã«ç»é²ããŠãããŸãã ãªããRoute53 ã«ã¯äºåã«å¯Ÿè±¡ã® Hosted Zone ã Private Hosted Zone for Amazon VPC ã¿ã€ããšããŠç»é²ããŠãããŸããããã§ã¯äŸãšã㊠Domain Name ã local ãšããŸãã EC2 ã€ã³ã¹ã¿ã³ã¹ããç»é²ããã RecordSet ã¯ä»¥äžã®åœ¢åŒãšããŸãã Name: <ã¯ã©ã€ã¢ã³ãèå¥ ID>.local Type: CNAME Value: EC2 ã€ã³ã¹ã¿ã³ã¹ã®å
éš IP ããããè¡ãã¹ã¯ãªããäŸã¯ä»¥äžãšãªããŸãã # å
éš IP ãååŸ # (describe-instances ã® filter ã«èªèº«ã®ã€ã³ã¹ã¿ã³ã¹ ID ãæå®) PRIVATE_IP =$( aws ec2 describe-instances \ --region=${ REGION } \ --filters "Name=instance-id,Values=${ INSTANCE_ID }" \ | jq -r '.Reservations[].Instances[].PrivateIpAddress' ) # Route53 ã®ç»é²å
Hosted Zone ID ãååŸ # SEARCH_KEY ã¯ä»åã®äŸã§ãããš 'local.' ã«ãªããŸã HOSTED_ZONE_ID =$( aws route53 list-hosted-zones \ --region=${ REGION } \ | jq -r ".HostedZones[] | select(.Name == \" ${ SEARCH_KEY } \" ).Id" ) # ãã®åŸã®ç»é²ã³ãã³ãã§æå®ããããã®å®çŸ©ãã¡ã€ã« # æ¯èµ·åæã®ç»é²çšïŒIP ãå€ããããïŒã«ãAction ã«ã¯ 'UPSERT' ãæå® RECORDSET_FILE = "/tmp/create_recordset.json" cat << EOT > ${ RECORDSET_FILE } { "Changes": [ { "Action": "UPSERT", "ResourceRecordSet": { "Name": "<ã¯ã©ã€ã¢ã³ãèå¥ ID>.local", "Type": "CNAME", "TTL": 300, "ResourceRecords": [ { "Value": "${ PRIVATE_IP }" } ] } } ] } EOT # äœæããå®çŸ©ãã¡ã€ã«ãæå®ããRoute53 ã«ç»é² aws route53 change-resource-record-sets \ --hosted-zone-id ${ HOSTED_ZONE_ID } \ --change-batch file:/// ${ RECORDSET_FILE } å®è¡ããã¹ãããã¯ããå€ãã§ããããã®ãããªæ§æããšãããšã§ VPC å
ã§ã¯ãã¡ã€ã³æå®ã§ã®ã¢ã¯ã»ã¹ãå¯èœãšãªããããIP ãæèããå¿
èŠããªããªãããæè»ãªæ§æã«ãªãããšæããŸãã ä»åã®ãŸãšã ããŸããã€ã³ã¹ã¿ã³ã¹ç«ãŠããšãããã©ããããªãããããšãæããªããè²ã
調ã¹ãŠæ§ç¯ããŸããããEC2 ãŸããã®ãµãŒãã¹ãå¢ããŠããã ãªãããªããŠæããŸããïŒç¹ã«ãã©ã¡ãŒã¿ã¹ãã¢ã¯ãšãŠã䟿å©ïŒ ãã©ã¡ãŒã¿ã¹ãã¢ä»¥å€ã«ã Systems Manager ã«ã¯ Run Command ã Patch Manager ãªã© EC2 ã€ã³ã¹ã¿ã³ã¹ã管çããäžã§ãšãŠã䟿å©ãªä»çµã¿ãæã£ãŠããŸãã®ã§ãã®ããããå°å
¥ããŠãããããšæããŸãã äœè«ã§ãããSystems Manager ã®ååšã¯ re:Invent 2016 ã§çºè¡šãããæããååã ãã¯ç¥ã£ãŠãŸããããä»åã®å¯Ÿå¿ãããŸã§ãã£ãšãªã³ãã¬å°çšã®ãµãŒãã¹ã ãšåéãããŠãŠèšæ¶ããæ¶ããããŠããŸããããã æåŸã« åç·šã Proxy å±€ ïŒNginxïŒãåŸç·šã App å±€ïŒEC2ïŒã«ã€ããŠæžãããŠããã ããŸããããããã ã£ãã§ããããã ããããã®èŠä»¶èªäœããã£ããç¹æ®ã ã£ãããããã®ã§ããªãã§ãããªæ§æã«ïŒã¿ãããªãšããããããç¥ããŸããããã©ãªããã®åèã«ãªãã°å¹žãã§ããããå°ãèããŠã¿ããããšãããã㯠wantedly ã®ã 話ãèããŠã¿ãã ããã¿ã³ããã©ããã â»åç·šããããããŠèªã¿ããæ¹ã¯ãã¡ãããã©ãã https://developer.medley.jp/entry/2017/08/24/120000_01 ãç¥ãã ã¡ãã¬ãŒã§ã¯ãå»åž«ãã¡ãã€ãããªã³ã©ã€ã³å»çäºå
žã MEDLEY ãããªã³ã©ã€ã³èšºçã¢ããªã CLINICS ããå»çä»è·ã®æ±äººãµã€ãã ãžã§ãã¡ãã¬ãŒ ããå£ã³ãã§æ¢ããä»è·æœèšã®æ€çŽ¢ãµã€ãã ä»è·ã®ã»ãã ããªã©ã®ãããã¯ããæäŸããŠããŸãããããã®ãµãŒãã¹ã®æ¡å€§ãåããŠããã®æé·ãæ¯ãããšã³ãžãã¢ã»ãã¶ã€ããŒãåéããŠããŸãã ã¡ãã¬ãŒã§äžç·ã«å»çäœéšãå€ãããããã¯ãäœãã«é¢ããããæ¹ã®ãé£çµ¡ãåŸ
ã¡ããŠãããŸãã ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp
ä»åã®å
容ã«ã€ã㊠ã¡ãã¬ãŒéçºæ¬éšã® ç°äž ã§ãã å
æ¥ãProxy å±€ã Elastic Beanstalk äžã® Nginx ã§ãApp å±€ã EC2 ã€ã³ã¹ã¿ã³ã¹ã§æ§ç¯ããæ©äŒããããŸãããããã ãèŠããšãšãŠãæ®éã«èŠããŸãããå¶çŽãããããšã§èŠåŽããç¹ãããïŒ åç·šåç
§ ïŒãå¶çŽãä¹ãè¶ããããã®å·¥å€«ãå«ããŠã話ã§ããéãå
±æãããŠããã ããŸãã åç·šã§ã¯ Proxy å±€ã®æ§æãšããŠã䞻㫠Nginx ã䜿çšãã Path Based Routing åšãã«ã€ããŠã®ã話ã§ãããåŸç·šã§ã¯ App å±€ã§äœ¿çšãã EC2ã Systems Manager ãã©ã¡ãŒã¿ã¹ãã¢ãããã«ã€ããŠå
±æããããŸãã App å±€ã®æ§æ App å±€ã®æ¹éãæ§ç¯ã®æµãçããŸãšãããšä»¥äžã®éãã§ãã ãŽãŒã«ãã³ã€ã¡ãŒãžãšã㊠OS èšå®ããµãŒãã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ãã imageïŒAMIïŒãäœæããŠãã äžèšã® AMI ãå
ã«ãã¯ã©ã€ã¢ã³ãæ¯ã« EC2 ã€ã³ã¹ã¿ã³ã¹ãäœæãã ã€ã³ã¹ã¿ã³ã¹äœææã«å¿
èŠãª Tag ã®å€ãç°å¢å€æ°ãèšå®ããŠãã ç°å¢å€æ°ã¯ãã©ã¡ãŒã¿ã¹ãã¢ã«ç»é² EC2 ã€ã³ã¹ã¿ã³ã¹èµ·åæã«ãã¯ã©ã€ã¢ã³ãã«å¿ãã Tag ãç°å¢å€æ°ãããšã«ãµãŒãã¢ããªã±ãŒã·ã§ã³ã®ã»ããã¢ãããè¡ã èªèº«ã®å
éš IP ãš Tag ã«èšå®ããã¯ã©ã€ã¢ã³ãèå¥ ID ãå
ã« Route53 ã® PrivateDNS ã«ç»é²ãã ããã§ã¯ãããããã®è©³çްã«ã€ããŠèª¬æããŠãããããšæããŸãã AMI äœæ Packer ã䜿çšããŠåã€ã³ã¹ã¿ã³ã¹å
±éãšãªã AMI ãäœæããŸãã provisioners ã§æå®ããæ§ç¯çšã¹ã¯ãªããã§ OS èšå®ãå¿
èŠã©ã€ãã©ãªããŸãã¡ã€ã³ãšãªããµãŒãã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ããŸãããŸããcloud-init ã䜿çšããŠååèµ·åæã«åããã¹ã¯ãªããé¡ãã³ããŒããŠãããŸãã ãªããcloud-init ããå®è¡ããã¹ã¯ãªãã㯠Git ã S3 ãªã©ããåçã«ååŸããæ¹æ³ããããŸããããã»ã©ã¹ã¯ãªããã®å
容ã«å€æŽã¯çºçããªãç¹ãšãå
容çã«å€æŽããå Žå㯠image åäœæãã©ã¡ãã«ããŠãå¿
èŠã«ãªãããã ã£ãã®ã§å²ãåã£ãŠ image å
ã«å«ããããšã«ããŠããŸãã äœæãã packer.json ã® provisioners éšåãæç²ãããšãã®ãããªæãã«ãªããŸãïŒèª¬æã³ã¡ã³ãéšåã¯å®éã«ã¯èšèŒããŠããŸããïŒ "provisioners" : [ -- type: shell ãšããŠãæ§ç¯çšã¹ã¯ãªããæå®ããã«ãæã«å®è¡ããã { "type" : "shell" , "scripts" : [ "scripts/provision.sh" ] }, -- type: file ã§ã€ã³ã¹ã¿ã³ã¹èµ·åæã«å®è¡ãããã¹ã¯ãªãã矀ãã³ã㌠-- ãããã®ã¹ã¯ãªãã㯠cloud-init ããå®è¡ãããïŒcloud-init ã®èšå®ã¯å¥éã€ã³ã¹ã¿ã³ã¹äœææã«è¡ã£ãŠããïŒ { "type" : "file" , "source" : "./scripts" , "destination" : "/home/hoge" }, -- äžèšã®ã¹ã¯ãªããã«å¯ŸããŠå®è¡æš©éä»äž { "type" : "shell" , "inline" : [ "chmod +x /home/hoge/scripts/*" ] } ] packer build ã§ãã«ããã image ã AWS ã«ä»åã®å
±éã§äœ¿çšãã AMI ãšããŠç»é²ãããŸã EC2 ã€ã³ã¹ã¿ã³ã¹äœæ äœæãã AMI ãå
ã«ãã¯ã©ã€ã¢ã³ãããšã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãããªããã€ã³ã¹ã¿ã³ã¹äœæã¯ Terraform ã CloudFormation ãªã©ã¯äœ¿ãããAWS CLI ãå©çšããã¹ã¯ãªãããäœæããŠå®è¡ããŠããŸãã ã€ã³ã¹ã¿ã³ã¹äœæã¹ã¯ãªããã¯ãã®ãããªæµãã®åŠçãšãªããŸãã åŒæ°ã§ã¯ã©ã€ã¢ã³ãèå¥ ID ããã®ä»ãµãŒãã¢ããªã±ãŒã·ã§ã³ã»ããã¢ããã«å¿
èŠãšãªãç°å¢å€æ°ãæå® AWS CLI ã§ EC2 ã€ã³ã¹ã¿ã³ã¹äœæ åŒæ°ã§æå®ãããç°å¢å€æ°ã AWS CLI ã§ãã©ã¡ãŒã¿ã¹ãã¢ã«ç»é² ã€ã³ã¹ã¿ã³ã¹äœæ 以äžã®ããã«ã aws ec2 run-instances ã³ãã³ãã䜿çšããTag ã«ã¯ã©ã€ã¢ã³ãèå¥ ID ãæå®ããŠäœæããŠããŸãã ããã§æå®ããã¯ã©ã€ã¢ã³ãèå¥ ID ãå
ã«ãã©ã¡ãŒã¿ã¹ãã¢ããèªåçšã®ç°å¢å€æ°ãç»é²/ååŸããããPrivate DNS çšã®ãã¡ã€ã³ã«äœ¿çšããŸãã aws ec2 run-instances \ --image-id ${ AMI_ID } \ --key-name ${ KEY_NAME } --region ${ REGION } \ --subnet-id ${ SUBNET_ID } \ --security-group-ids ${ SECURITY_GROUP } \ --user-data file:// ${ USER_DATA } \ --instance-type ${ INSTANCE_TYPE } \ --tag-specifications "ResourceType=instance,Tags=[{Key=ClientId,Value=${ CLIENT_ID }}]" \ --iam-instance-profile "Arn=${ SERVICE_ROLE }" user-data ã«ã¯ååèµ·åæã«å®è¡ãããã¹ã¯ãªããïŒPacker ã§ãã«ãæã«ã³ããŒããŠãããã¹ã¯ãªããïŒãæå®ããŠããã ããšãªããŸãã #!/bin/bash /home/hoge/scripts/bootstrap.sh ãã©ã¡ãŒã¿ã¹ãã¢ã«ç°å¢å€æ°ç»é² 䜿çšããç°å¢å€æ°ã¯ãKey ã¯å
±éã§ããå€ãã¯ã©ã€ã¢ã³ãã«ãã£ãŠç°ãªããŸãããã®ãããHOGE ãšãã Key ã䜿çšããå Žåã <ã¯ã©ã€ã¢ã³ãèå¥ ID>.HOGE ãšãã圢åŒã§ãã©ã¡ãŒã¿ã¹ãã¢ã«ç»é²ããŠããŸãã ïŒæ³š. ãã©ã¡ãŒã¿ã¹ãã¢ã« éå±€ãã¿ã°ä»ãããµããŒãããã ãããããã®ãããã®æ§æã¯ä»åŸèŠçŽãäºå®ã§ãïŒ ç»é²ã¯ aws ssm put-parameter ãå®è¡ããŸã aws ssm put-parameter \ --name ${ KEY } \ --value ${ VALUE } \ --type ${ PARAMETER_TYPE } \ # StringãSecureString ãªã© --overwrite ããã§ã¯ã©ã€ã¢ã³ãããšã® EC2 ã€ã³ã¹ã¿ã³ã¹ãäœæãèµ·åãããŸããæ¬¡ã«ã€ã³ã¹ã¿ã³ã¹èµ·åæã®æµãã«ã€ããŠã§ãã EC2 ã€ã³ã¹ã¿ã³ã¹èµ·å èµ·åæã¯ãååèµ·åãšæ¯åèµ·åã§ãããã以äžã®ãããªåŠçãè¡ããŸãã åå: ãã©ã¡ãŒã¿ã¹ãã¢ããèªèº«ã«é¢é£ããç°å¢å€æ°ãååŸãããµãŒãã¢ããªã±ãŒã·ã§ã³ã®ã»ããã¢ãã æ¯å: èªèº«ã®å
éš IP ã Route53 ã® Private DNS ã«ç»é²/æŽæ° å
éš IP ã¯åºå®ããŠãããèµ·åæã«å²ãæ¯ããããããæ¯åæŽæ°ããããã«ããŠããŸãã ããã§ã¯ããããã®å
容ã«ã€ããŠèŠãŠãããŸãã ãã©ã¡ãŒã¿ã¹ãã¢ããç°å¢å€æ°ååŸ ç»é²æã®å
容ã§èšèŒããŸããããç°å¢å€æ°ã¯ <ã¯ã©ã€ã¢ã³ãèå¥ ID>.HOGE ãšãã圢åŒã§ç»é²ããŠããŸãããã®ããããŸãã¯èªèº«ã®ã¯ã©ã€ã¢ã³ãèå¥ ID ãå€å®ããåŸã«å¿
èŠãªç°å¢å€æ°ã aws ssm get-parameters ã§ååŸããŸãã # èªèº«ã®ã€ã³ã¹ã¿ã³ã¹ ID ãã¡ã¿ããŒã¿ããååŸ INSTANCE_ID =$( curl -s https://169.254.169.254/latest/meta-data/instance-id ) # ã¯ã©ã€ã¢ã³ãèå¥ ID ãã€ã³ã¹ã¿ã³ã¹äœææã«æå®ãã Tag ããååŸ # (describe-instances ã® filter ã«èªèº«ã®ã€ã³ã¹ã¿ã³ã¹ ID ãæå®) CLIENT_ID_TAG =$( aws ec2 describe-instances \ --region=${ REGION } \ --filters "Name=instance-id,Values=${ INSTANCE_ID }" \ | jq -r '.Reservations[].Instances[].Tags[] | select(.Key == "ClientId").Value' ) # ç°å¢å€æ°ãååŸ # ã¿ã€ãã SecureString ã«ããŠãã倿°ããããããäžåŸ --with-decryption ãªãã·ã§ã³ãæå®ããŠãã HOGE =$( aws ssm get-parameters \ --name "${ CLIENT_ID_TAG }.HOGE" \ --with-decryption --region ${ REGION } \ | jq -r ".Parameters[].Value" ) export HOGE =${ HOGE } å
éš IP ã Private DNS ã«ç»é² æåŸã«ãProxy å±€ãã Private DNS ã§åå解決ã§ããããã«èªèº«ã® IP ã Route 53 ã«ç»é²ããŠãããŸãã ãªããRoute53 ã«ã¯äºåã«å¯Ÿè±¡ã® Hosted Zone ã Private Hosted Zone for Amazon VPC ã¿ã€ããšããŠç»é²ããŠãããŸããããã§ã¯äŸãšã㊠Domain Name ã local ãšããŸãã EC2 ã€ã³ã¹ã¿ã³ã¹ããç»é²ããã RecordSet ã¯ä»¥äžã®åœ¢åŒãšããŸãã Name: <ã¯ã©ã€ã¢ã³ãèå¥ ID>.local Type: CNAME Value: EC2 ã€ã³ã¹ã¿ã³ã¹ã®å
éš IP ããããè¡ãã¹ã¯ãªããäŸã¯ä»¥äžãšãªããŸãã # å
éš IP ãååŸ # (describe-instances ã® filter ã«èªèº«ã®ã€ã³ã¹ã¿ã³ã¹ ID ãæå®) PRIVATE_IP =$( aws ec2 describe-instances \ --region=${ REGION } \ --filters "Name=instance-id,Values=${ INSTANCE_ID }" \ | jq -r '.Reservations[].Instances[].PrivateIpAddress' ) # Route53 ã®ç»é²å
Hosted Zone ID ãååŸ # SEARCH_KEY ã¯ä»åã®äŸã§ãããš 'local.' ã«ãªããŸã HOSTED_ZONE_ID =$( aws route53 list-hosted-zones \ --region=${ REGION } \ | jq -r ".HostedZones[] | select(.Name == \" ${ SEARCH_KEY } \" ).Id" ) # ãã®åŸã®ç»é²ã³ãã³ãã§æå®ããããã®å®çŸ©ãã¡ã€ã« # æ¯èµ·åæã®ç»é²çšïŒIP ãå€ããããïŒã«ãAction ã«ã¯ 'UPSERT' ãæå® RECORDSET_FILE = "/tmp/create_recordset.json" cat << EOT > ${ RECORDSET_FILE } { "Changes": [ { "Action": "UPSERT", "ResourceRecordSet": { "Name": "<ã¯ã©ã€ã¢ã³ãèå¥ ID>.local", "Type": "CNAME", "TTL": 300, "ResourceRecords": [ { "Value": "${ PRIVATE_IP }" } ] } } ] } EOT # äœæããå®çŸ©ãã¡ã€ã«ãæå®ããRoute53 ã«ç»é² aws route53 change-resource-record-sets \ --hosted-zone-id ${ HOSTED_ZONE_ID } \ --change-batch file:/// ${ RECORDSET_FILE } å®è¡ããã¹ãããã¯ããå€ãã§ããããã®ãããªæ§æããšãããšã§ VPC å
ã§ã¯ãã¡ã€ã³æå®ã§ã®ã¢ã¯ã»ã¹ãå¯èœãšãªããããIP ãæèããå¿
èŠããªããªãããæè»ãªæ§æã«ãªãããšæããŸãã ä»åã®ãŸãšã ããŸããã€ã³ã¹ã¿ã³ã¹ç«ãŠããšãããã©ããããªãããããšãæããªããè²ã
調ã¹ãŠæ§ç¯ããŸããããEC2 ãŸããã®ãµãŒãã¹ãå¢ããŠããã ãªãããªããŠæããŸããïŒç¹ã«ãã©ã¡ãŒã¿ã¹ãã¢ã¯ãšãŠã䟿å©ïŒ ãã©ã¡ãŒã¿ã¹ãã¢ä»¥å€ã«ã Systems Manager ã«ã¯ Run Command ã Patch Manager ãªã© EC2 ã€ã³ã¹ã¿ã³ã¹ã管çããäžã§ãšãŠã䟿å©ãªä»çµã¿ãæã£ãŠããŸãã®ã§ãã®ããããå°å
¥ããŠãããããšæããŸãã äœè«ã§ãããSystems Manager ã®ååšã¯ re:Invent 2016 ã§çºè¡šãããæããååã ãã¯ç¥ã£ãŠãŸããããä»åã®å¯Ÿå¿ãããŸã§ãã£ãšãªã³ãã¬å°çšã®ãµãŒãã¹ã ãšåéãããŠãŠèšæ¶ããæ¶ããããŠããŸããããã æåŸã« åç·šã Proxy å±€ ïŒNginxïŒãåŸç·šã App å±€ïŒEC2ïŒã«ã€ããŠæžãããŠããã ããŸããããããã ã£ãã§ããããã ããããã®èŠä»¶èªäœããã£ããç¹æ®ã ã£ãããããã®ã§ããªãã§ãããªæ§æã«ïŒã¿ãããªãšããããããç¥ããŸããããã©ãªããã®åèã«ãªãã°å¹žãã§ããããå°ãèããŠã¿ããããšãããã㯠wantedly ã®ã 話ãèããŠã¿ãã ããã¿ã³ããã©ããã â»åç·šããããããŠèªã¿ããæ¹ã¯ãã¡ãããã©ãã https://developer.medley.jp/entry/2017/08/24/120000_01 ãç¥ãã ã¡ãã¬ãŒã§ã¯ãå»åž«ãã¡ãã€ãããªã³ã©ã€ã³å»çäºå
žã MEDLEY ãããªã³ã©ã€ã³èšºçã¢ããªã CLINICS ããå»çä»è·ã®æ±äººãµã€ãã ãžã§ãã¡ãã¬ãŒ ããå£ã³ãã§æ¢ããä»è·æœèšã®æ€çŽ¢ãµã€ãã ä»è·ã®ã»ãã ããªã©ã®ãããã¯ããæäŸããŠããŸãããããã®ãµãŒãã¹ã®æ¡å€§ãåããŠããã®æé·ãæ¯ãããšã³ãžãã¢ã»ãã¶ã€ããŒãåéããŠããŸãã ã¡ãã¬ãŒã§äžç·ã«å»çäœéšãå€ãããããã¯ãäœãã«é¢ããããæ¹ã®ãé£çµ¡ãåŸ
ã¡ããŠãããŸãã https://www.medley.jp/recruit/creative.html
ä»åã®å
容ã«ã€ã㊠ã¡ãã¬ãŒéçºæ¬éšã® ç°äž ã§ãã å
æ¥ãProxy å±€ã Elastic Beanstalk äžã® Nginx ã§ãApp å±€ã EC2 ã€ã³ã¹ã¿ã³ã¹ã§æ§ç¯ããæ©äŒããããŸãããããã ãèŠããšãšãŠãæ®éã«èŠããŸãããå¶çŽãããããšã§èŠåŽããç¹ãããïŒ åç·šåç
§ ïŒãå¶çŽãä¹ãè¶ããããã®å·¥å€«ãå«ããŠã話ã§ããéãå
±æãããŠããã ããŸãã åç·šã§ã¯ Proxy å±€ã®æ§æãšããŠã䞻㫠Nginx ã䜿çšãã Path Based Routing åšãã«ã€ããŠã®ã話ã§ãããåŸç·šã§ã¯ App å±€ã§äœ¿çšãã EC2ã Systems Manager ãã©ã¡ãŒã¿ã¹ãã¢ãããã«ã€ããŠå
±æããããŸãã App å±€ã®æ§æ App å±€ã®æ¹éãæ§ç¯ã®æµãçããŸãšãããšä»¥äžã®éãã§ãã ãŽãŒã«ãã³ã€ã¡ãŒãžãšã㊠OS èšå®ããµãŒãã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ãã imageïŒAMIïŒãäœæããŠãã äžèšã® AMI ãå
ã«ãã¯ã©ã€ã¢ã³ãæ¯ã« EC2 ã€ã³ã¹ã¿ã³ã¹ãäœæãã ã€ã³ã¹ã¿ã³ã¹äœææã«å¿
èŠãª Tag ã®å€ãç°å¢å€æ°ãèšå®ããŠãã ç°å¢å€æ°ã¯ãã©ã¡ãŒã¿ã¹ãã¢ã«ç»é² EC2 ã€ã³ã¹ã¿ã³ã¹èµ·åæã«ãã¯ã©ã€ã¢ã³ãã«å¿ãã Tag ãç°å¢å€æ°ãããšã«ãµãŒãã¢ããªã±ãŒã·ã§ã³ã®ã»ããã¢ãããè¡ã èªèº«ã®å
éš IP ãš Tag ã«èšå®ããã¯ã©ã€ã¢ã³ãèå¥ ID ãå
ã« Route53 ã® PrivateDNS ã«ç»é²ãã ããã§ã¯ãããããã®è©³çްã«ã€ããŠèª¬æããŠãããããšæããŸãã AMI äœæ Packer ã䜿çšããŠåã€ã³ã¹ã¿ã³ã¹å
±éãšãªã AMI ãäœæããŸãã provisioners ã§æå®ããæ§ç¯çšã¹ã¯ãªããã§ OS èšå®ãå¿
èŠã©ã€ãã©ãªããŸãã¡ã€ã³ãšãªããµãŒãã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ããŸãããŸããcloud-init ã䜿çšããŠååèµ·åæã«åããã¹ã¯ãªããé¡ãã³ããŒããŠãããŸãã ãªããcloud-init ããå®è¡ããã¹ã¯ãªãã㯠Git ã S3 ãªã©ããåçã«ååŸããæ¹æ³ããããŸããããã»ã©ã¹ã¯ãªããã®å
容ã«å€æŽã¯çºçããªãç¹ãšãå
容çã«å€æŽããå Žå㯠image åäœæãã©ã¡ãã«ããŠãå¿
èŠã«ãªãããã ã£ãã®ã§å²ãåã£ãŠ image å
ã«å«ããããšã«ããŠããŸãã äœæãã packer.json ã® provisioners éšåãæç²ãããšãã®ãããªæãã«ãªããŸãïŒèª¬æã³ã¡ã³ãéšåã¯å®éã«ã¯èšèŒããŠããŸããïŒ "provisioners" : [ -- type: shell ãšããŠãæ§ç¯çšã¹ã¯ãªããæå®ããã«ãæã«å®è¡ããã { "type" : "shell" , "scripts" : [ "scripts/provision.sh" ] }, -- type: file ã§ã€ã³ã¹ã¿ã³ã¹èµ·åæã«å®è¡ãããã¹ã¯ãªãã矀ãã³ã㌠-- ãããã®ã¹ã¯ãªãã㯠cloud-init ããå®è¡ãããïŒcloud-init ã®èšå®ã¯å¥éã€ã³ã¹ã¿ã³ã¹äœææã«è¡ã£ãŠããïŒ { "type" : "file" , "source" : "./scripts" , "destination" : "/home/hoge" }, -- äžèšã®ã¹ã¯ãªããã«å¯ŸããŠå®è¡æš©éä»äž { "type" : "shell" , "inline" : [ "chmod +x /home/hoge/scripts/*" ] } ] packer build ã§ãã«ããã image ã AWS ã«ä»åã®å
±éã§äœ¿çšãã AMI ãšããŠç»é²ãããŸã EC2 ã€ã³ã¹ã¿ã³ã¹äœæ äœæãã AMI ãå
ã«ãã¯ã©ã€ã¢ã³ãããšã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãããªããã€ã³ã¹ã¿ã³ã¹äœæã¯ Terraform ã CloudFormation ãªã©ã¯äœ¿ãããAWS CLI ãå©çšããã¹ã¯ãªãããäœæããŠå®è¡ããŠããŸãã ã€ã³ã¹ã¿ã³ã¹äœæã¹ã¯ãªããã¯ãã®ãããªæµãã®åŠçãšãªããŸãã åŒæ°ã§ã¯ã©ã€ã¢ã³ãèå¥ ID ããã®ä»ãµãŒãã¢ããªã±ãŒã·ã§ã³ã»ããã¢ããã«å¿
èŠãšãªãç°å¢å€æ°ãæå® AWS CLI ã§ EC2 ã€ã³ã¹ã¿ã³ã¹äœæ åŒæ°ã§æå®ãããç°å¢å€æ°ã AWS CLI ã§ãã©ã¡ãŒã¿ã¹ãã¢ã«ç»é² ã€ã³ã¹ã¿ã³ã¹äœæ 以äžã®ããã«ã aws ec2 run-instances ã³ãã³ãã䜿çšããTag ã«ã¯ã©ã€ã¢ã³ãèå¥ ID ãæå®ããŠäœæããŠããŸãã ããã§æå®ããã¯ã©ã€ã¢ã³ãèå¥ ID ãå
ã«ãã©ã¡ãŒã¿ã¹ãã¢ããèªåçšã®ç°å¢å€æ°ãç»é²/ååŸããããPrivate DNS çšã®ãã¡ã€ã³ã«äœ¿çšããŸãã aws ec2 run-instances \ --image-id ${ AMI_ID } \ --key-name ${ KEY_NAME } --region ${ REGION } \ --subnet-id ${ SUBNET_ID } \ --security-group-ids ${ SECURITY_GROUP } \ --user-data file:// ${ USER_DATA } \ --instance-type ${ INSTANCE_TYPE } \ --tag-specifications "ResourceType=instance,Tags=[{Key=ClientId,Value=${ CLIENT_ID }}]" \ --iam-instance-profile "Arn=${ SERVICE_ROLE }" user-data ã«ã¯ååèµ·åæã«å®è¡ãããã¹ã¯ãªããïŒPacker ã§ãã«ãæã«ã³ããŒããŠãããã¹ã¯ãªããïŒãæå®ããŠããã ããšãªããŸãã #!/bin/bash /home/hoge/scripts/bootstrap.sh ãã©ã¡ãŒã¿ã¹ãã¢ã«ç°å¢å€æ°ç»é² 䜿çšããç°å¢å€æ°ã¯ãKey ã¯å
±éã§ããå€ãã¯ã©ã€ã¢ã³ãã«ãã£ãŠç°ãªããŸãããã®ãããHOGE ãšãã Key ã䜿çšããå Žåã <ã¯ã©ã€ã¢ã³ãèå¥ ID>.HOGE ãšãã圢åŒã§ãã©ã¡ãŒã¿ã¹ãã¢ã«ç»é²ããŠããŸãã ïŒæ³š. ãã©ã¡ãŒã¿ã¹ãã¢ã« éå±€ãã¿ã°ä»ãããµããŒãããã ãããããã®ãããã®æ§æã¯ä»åŸèŠçŽãäºå®ã§ãïŒ ç»é²ã¯ aws ssm put-parameter ãå®è¡ããŸã aws ssm put-parameter \ --name ${ KEY } \ --value ${ VALUE } \ --type ${ PARAMETER_TYPE } \ # StringãSecureString ãªã© --overwrite ããã§ã¯ã©ã€ã¢ã³ãããšã® EC2 ã€ã³ã¹ã¿ã³ã¹ãäœæãèµ·åãããŸããæ¬¡ã«ã€ã³ã¹ã¿ã³ã¹èµ·åæã®æµãã«ã€ããŠã§ãã EC2 ã€ã³ã¹ã¿ã³ã¹èµ·å èµ·åæã¯ãååèµ·åãšæ¯åèµ·åã§ãããã以äžã®ãããªåŠçãè¡ããŸãã åå: ãã©ã¡ãŒã¿ã¹ãã¢ããèªèº«ã«é¢é£ããç°å¢å€æ°ãååŸãããµãŒãã¢ããªã±ãŒã·ã§ã³ã®ã»ããã¢ãã æ¯å: èªèº«ã®å
éš IP ã Route53 ã® Private DNS ã«ç»é²/æŽæ° å
éš IP ã¯åºå®ããŠãããèµ·åæã«å²ãæ¯ããããããæ¯åæŽæ°ããããã«ããŠããŸãã ããã§ã¯ããããã®å
容ã«ã€ããŠèŠãŠãããŸãã ãã©ã¡ãŒã¿ã¹ãã¢ããç°å¢å€æ°ååŸ ç»é²æã®å
容ã§èšèŒããŸããããç°å¢å€æ°ã¯ <ã¯ã©ã€ã¢ã³ãèå¥ ID>.HOGE ãšãã圢åŒã§ç»é²ããŠããŸãããã®ããããŸãã¯èªèº«ã®ã¯ã©ã€ã¢ã³ãèå¥ ID ãå€å®ããåŸã«å¿
èŠãªç°å¢å€æ°ã aws ssm get-parameters ã§ååŸããŸãã # èªèº«ã®ã€ã³ã¹ã¿ã³ã¹ ID ãã¡ã¿ããŒã¿ããååŸ INSTANCE_ID =$( curl -s https://169.254.169.254/latest/meta-data/instance-id ) # ã¯ã©ã€ã¢ã³ãèå¥ ID ãã€ã³ã¹ã¿ã³ã¹äœææã«æå®ãã Tag ããååŸ # (describe-instances ã® filter ã«èªèº«ã®ã€ã³ã¹ã¿ã³ã¹ ID ãæå®) CLIENT_ID_TAG =$( aws ec2 describe-instances \ --region=${ REGION } \ --filters "Name=instance-id,Values=${ INSTANCE_ID }" \ | jq -r '.Reservations[].Instances[].Tags[] | select(.Key == "ClientId").Value' ) # ç°å¢å€æ°ãååŸ # ã¿ã€ãã SecureString ã«ããŠãã倿°ããããããäžåŸ --with-decryption ãªãã·ã§ã³ãæå®ããŠãã HOGE =$( aws ssm get-parameters \ --name "${ CLIENT_ID_TAG }.HOGE" \ --with-decryption --region ${ REGION } \ | jq -r ".Parameters[].Value" ) export HOGE =${ HOGE } å
éš IP ã Private DNS ã«ç»é² æåŸã«ãProxy å±€ãã Private DNS ã§åå解決ã§ããããã«èªèº«ã® IP ã Route 53 ã«ç»é²ããŠãããŸãã ãªããRoute53 ã«ã¯äºåã«å¯Ÿè±¡ã® Hosted Zone ã Private Hosted Zone for Amazon VPC ã¿ã€ããšããŠç»é²ããŠãããŸããããã§ã¯äŸãšã㊠Domain Name ã local ãšããŸãã EC2 ã€ã³ã¹ã¿ã³ã¹ããç»é²ããã RecordSet ã¯ä»¥äžã®åœ¢åŒãšããŸãã Name: <ã¯ã©ã€ã¢ã³ãèå¥ ID>.local Type: CNAME Value: EC2 ã€ã³ã¹ã¿ã³ã¹ã®å
éš IP ããããè¡ãã¹ã¯ãªããäŸã¯ä»¥äžãšãªããŸãã # å
éš IP ãååŸ # (describe-instances ã® filter ã«èªèº«ã®ã€ã³ã¹ã¿ã³ã¹ ID ãæå®) PRIVATE_IP =$( aws ec2 describe-instances \ --region=${ REGION } \ --filters "Name=instance-id,Values=${ INSTANCE_ID }" \ | jq -r '.Reservations[].Instances[].PrivateIpAddress' ) # Route53 ã®ç»é²å
Hosted Zone ID ãååŸ # SEARCH_KEY ã¯ä»åã®äŸã§ãããš 'local.' ã«ãªããŸã HOSTED_ZONE_ID =$( aws route53 list-hosted-zones \ --region=${ REGION } \ | jq -r ".HostedZones[] | select(.Name == \" ${ SEARCH_KEY } \" ).Id" ) # ãã®åŸã®ç»é²ã³ãã³ãã§æå®ããããã®å®çŸ©ãã¡ã€ã« # æ¯èµ·åæã®ç»é²çšïŒIP ãå€ããããïŒã«ãAction ã«ã¯ 'UPSERT' ãæå® RECORDSET_FILE = "/tmp/create_recordset.json" cat << EOT > ${ RECORDSET_FILE } { "Changes": [ { "Action": "UPSERT", "ResourceRecordSet": { "Name": "<ã¯ã©ã€ã¢ã³ãèå¥ ID>.local", "Type": "CNAME", "TTL": 300, "ResourceRecords": [ { "Value": "${ PRIVATE_IP }" } ] } } ] } EOT # äœæããå®çŸ©ãã¡ã€ã«ãæå®ããRoute53 ã«ç»é² aws route53 change-resource-record-sets \ --hosted-zone-id ${ HOSTED_ZONE_ID } \ --change-batch file:/// ${ RECORDSET_FILE } å®è¡ããã¹ãããã¯ããå€ãã§ããããã®ãããªæ§æããšãããšã§ VPC å
ã§ã¯ãã¡ã€ã³æå®ã§ã®ã¢ã¯ã»ã¹ãå¯èœãšãªããããIP ãæèããå¿
èŠããªããªãããæè»ãªæ§æã«ãªãããšæããŸãã ä»åã®ãŸãšã ããŸããã€ã³ã¹ã¿ã³ã¹ç«ãŠããšãããã©ããããªãããããšãæããªããè²ã
調ã¹ãŠæ§ç¯ããŸããããEC2 ãŸããã®ãµãŒãã¹ãå¢ããŠããã ãªãããªããŠæããŸããïŒç¹ã«ãã©ã¡ãŒã¿ã¹ãã¢ã¯ãšãŠã䟿å©ïŒ ãã©ã¡ãŒã¿ã¹ãã¢ä»¥å€ã«ã Systems Manager ã«ã¯ Run Command ã Patch Manager ãªã© EC2 ã€ã³ã¹ã¿ã³ã¹ã管çããäžã§ãšãŠã䟿å©ãªä»çµã¿ãæã£ãŠããŸãã®ã§ãã®ããããå°å
¥ããŠãããããšæããŸãã äœè«ã§ãããSystems Manager ã®ååšã¯ re:Invent 2016 ã§çºè¡šãããæããååã ãã¯ç¥ã£ãŠãŸããããä»åã®å¯Ÿå¿ãããŸã§ãã£ãšãªã³ãã¬å°çšã®ãµãŒãã¹ã ãšåéãããŠãŠèšæ¶ããæ¶ããããŠããŸããããã æåŸã« åç·šã Proxy å±€ ïŒNginxïŒãåŸç·šã App å±€ïŒEC2ïŒã«ã€ããŠæžãããŠããã ããŸããããããã ã£ãã§ããããã ããããã®èŠä»¶èªäœããã£ããç¹æ®ã ã£ãããããã®ã§ããªãã§ãããªæ§æã«ïŒã¿ãããªãšããããããç¥ããŸããããã©ãªããã®åèã«ãªãã°å¹žãã§ããããå°ãèããŠã¿ããããšãããã㯠wantedly ã®ã 話ãèããŠã¿ãã ããã¿ã³ããã©ããã â»åç·šããããããŠèªã¿ããæ¹ã¯ãã¡ãããã©ãã https://developer.medley.jp/entry/2017/08/24/120000_01 ãç¥ãã ã¡ãã¬ãŒã§ã¯ãå»åž«ãã¡ãã€ãããªã³ã©ã€ã³å»çäºå
žã MEDLEY ãããªã³ã©ã€ã³èšºçã¢ããªã CLINICS ããå»çä»è·ã®æ±äººãµã€ãã ãžã§ãã¡ãã¬ãŒ ããå£ã³ãã§æ¢ããä»è·æœèšã®æ€çŽ¢ãµã€ãã ä»è·ã®ã»ãã ããªã©ã®ãããã¯ããæäŸããŠããŸãããããã®ãµãŒãã¹ã®æ¡å€§ãåããŠããã®æé·ãæ¯ãããšã³ãžãã¢ã»ãã¶ã€ããŒãåéããŠããŸãã ã¡ãã¬ãŒã§äžç·ã«å»çäœéšãå€ãããããã¯ãäœãã«é¢ããããæ¹ã®ãé£çµ¡ãåŸ
ã¡ããŠãããŸãã ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp
ä»åã®å
容ã«ã€ã㊠ã¡ãã¬ãŒéçºæ¬éšã® ç°äž ã§ãã å
æ¥ãProxy å±€ã Elastic Beanstalk äžã® Nginx ã§ãApp å±€ã EC2 ã€ã³ã¹ã¿ã³ã¹ã§æ§ç¯ããæ©äŒããããŸãããããã ãèŠããšãšãŠãæ®éã«èŠããŸãããå¶çŽãããããšã§èŠåŽããç¹ãããïŒ åç·šåç
§ ïŒãå¶çŽãä¹ãè¶ããããã®å·¥å€«ãå«ããŠã話ã§ããéãå
±æãããŠããã ããŸãã åç·šã§ã¯ Proxy å±€ã®æ§æãšããŠã䞻㫠Nginx ã䜿çšãã Path Based Routing åšãã«ã€ããŠã®ã話ã§ãããåŸç·šã§ã¯ App å±€ã§äœ¿çšãã EC2ã Systems Manager ãã©ã¡ãŒã¿ã¹ãã¢ãããã«ã€ããŠå
±æããããŸãã App å±€ã®æ§æ App å±€ã®æ¹éãæ§ç¯ã®æµãçããŸãšãããšä»¥äžã®éãã§ãã ãŽãŒã«ãã³ã€ã¡ãŒãžãšã㊠OS èšå®ããµãŒãã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ãã imageïŒAMIïŒãäœæããŠãã äžèšã® AMI ãå
ã«ãã¯ã©ã€ã¢ã³ãæ¯ã« EC2 ã€ã³ã¹ã¿ã³ã¹ãäœæãã ã€ã³ã¹ã¿ã³ã¹äœææã«å¿
èŠãª Tag ã®å€ãç°å¢å€æ°ãèšå®ããŠãã ç°å¢å€æ°ã¯ãã©ã¡ãŒã¿ã¹ãã¢ã«ç»é² EC2 ã€ã³ã¹ã¿ã³ã¹èµ·åæã«ãã¯ã©ã€ã¢ã³ãã«å¿ãã Tag ãç°å¢å€æ°ãããšã«ãµãŒãã¢ããªã±ãŒã·ã§ã³ã®ã»ããã¢ãããè¡ã èªèº«ã®å
éš IP ãš Tag ã«èšå®ããã¯ã©ã€ã¢ã³ãèå¥ ID ãå
ã« Route53 ã® PrivateDNS ã«ç»é²ãã ããã§ã¯ãããããã®è©³çްã«ã€ããŠèª¬æããŠãããããšæããŸãã AMI äœæ Packer ã䜿çšããŠåã€ã³ã¹ã¿ã³ã¹å
±éãšãªã AMI ãäœæããŸãã provisioners ã§æå®ããæ§ç¯çšã¹ã¯ãªããã§ OS èšå®ãå¿
èŠã©ã€ãã©ãªããŸãã¡ã€ã³ãšãªããµãŒãã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ããŸãããŸããcloud-init ã䜿çšããŠååèµ·åæã«åããã¹ã¯ãªããé¡ãã³ããŒããŠãããŸãã ãªããcloud-init ããå®è¡ããã¹ã¯ãªãã㯠Git ã S3 ãªã©ããåçã«ååŸããæ¹æ³ããããŸããããã»ã©ã¹ã¯ãªããã®å
容ã«å€æŽã¯çºçããªãç¹ãšãå
容çã«å€æŽããå Žå㯠image åäœæãã©ã¡ãã«ããŠãå¿
èŠã«ãªãããã ã£ãã®ã§å²ãåã£ãŠ image å
ã«å«ããããšã«ããŠããŸãã äœæãã packer.json ã® provisioners éšåãæç²ãããšãã®ãããªæãã«ãªããŸãïŒèª¬æã³ã¡ã³ãéšåã¯å®éã«ã¯èšèŒããŠããŸããïŒ "provisioners" : [ -- type: shell ãšããŠãæ§ç¯çšã¹ã¯ãªããæå®ããã«ãæã«å®è¡ããã { "type" : "shell" , "scripts" : [ "scripts/provision.sh" ] }, -- type: file ã§ã€ã³ã¹ã¿ã³ã¹èµ·åæã«å®è¡ãããã¹ã¯ãªãã矀ãã³ã㌠-- ãããã®ã¹ã¯ãªãã㯠cloud-init ããå®è¡ãããïŒcloud-init ã®èšå®ã¯å¥éã€ã³ã¹ã¿ã³ã¹äœææã«è¡ã£ãŠããïŒ { "type" : "file" , "source" : "./scripts" , "destination" : "/home/hoge" }, -- äžèšã®ã¹ã¯ãªããã«å¯ŸããŠå®è¡æš©éä»äž { "type" : "shell" , "inline" : [ "chmod +x /home/hoge/scripts/*" ] } ] packer build ã§ãã«ããã image ã AWS ã«ä»åã®å
±éã§äœ¿çšãã AMI ãšããŠç»é²ãããŸã EC2 ã€ã³ã¹ã¿ã³ã¹äœæ äœæãã AMI ãå
ã«ãã¯ã©ã€ã¢ã³ãããšã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãããªããã€ã³ã¹ã¿ã³ã¹äœæã¯ Terraform ã CloudFormation ãªã©ã¯äœ¿ãããAWS CLI ãå©çšããã¹ã¯ãªãããäœæããŠå®è¡ããŠããŸãã ã€ã³ã¹ã¿ã³ã¹äœæã¹ã¯ãªããã¯ãã®ãããªæµãã®åŠçãšãªããŸãã åŒæ°ã§ã¯ã©ã€ã¢ã³ãèå¥ ID ããã®ä»ãµãŒãã¢ããªã±ãŒã·ã§ã³ã»ããã¢ããã«å¿
èŠãšãªãç°å¢å€æ°ãæå® AWS CLI ã§ EC2 ã€ã³ã¹ã¿ã³ã¹äœæ åŒæ°ã§æå®ãããç°å¢å€æ°ã AWS CLI ã§ãã©ã¡ãŒã¿ã¹ãã¢ã«ç»é² ã€ã³ã¹ã¿ã³ã¹äœæ 以äžã®ããã«ã aws ec2 run-instances ã³ãã³ãã䜿çšããTag ã«ã¯ã©ã€ã¢ã³ãèå¥ ID ãæå®ããŠäœæããŠããŸãã ããã§æå®ããã¯ã©ã€ã¢ã³ãèå¥ ID ãå
ã«ãã©ã¡ãŒã¿ã¹ãã¢ããèªåçšã®ç°å¢å€æ°ãç»é²/ååŸããããPrivate DNS çšã®ãã¡ã€ã³ã«äœ¿çšããŸãã aws ec2 run-instances \ --image-id ${ AMI_ID } \ --key-name ${ KEY_NAME } --region ${ REGION } \ --subnet-id ${ SUBNET_ID } \ --security-group-ids ${ SECURITY_GROUP } \ --user-data file:// ${ USER_DATA } \ --instance-type ${ INSTANCE_TYPE } \ --tag-specifications "ResourceType=instance,Tags=[{Key=ClientId,Value=${ CLIENT_ID }}]" \ --iam-instance-profile "Arn=${ SERVICE_ROLE }" user-data ã«ã¯ååèµ·åæã«å®è¡ãããã¹ã¯ãªããïŒPacker ã§ãã«ãæã«ã³ããŒããŠãããã¹ã¯ãªããïŒãæå®ããŠããã ããšãªããŸãã #!/bin/bash /home/hoge/scripts/bootstrap.sh ãã©ã¡ãŒã¿ã¹ãã¢ã«ç°å¢å€æ°ç»é² 䜿çšããç°å¢å€æ°ã¯ãKey ã¯å
±éã§ããå€ãã¯ã©ã€ã¢ã³ãã«ãã£ãŠç°ãªããŸãããã®ãããHOGE ãšãã Key ã䜿çšããå Žåã <ã¯ã©ã€ã¢ã³ãèå¥ ID>.HOGE ãšãã圢åŒã§ãã©ã¡ãŒã¿ã¹ãã¢ã«ç»é²ããŠããŸãã ïŒæ³š. ãã©ã¡ãŒã¿ã¹ãã¢ã« éå±€ãã¿ã°ä»ãããµããŒãããã ãããããã®ãããã®æ§æã¯ä»åŸèŠçŽãäºå®ã§ãïŒ ç»é²ã¯ aws ssm put-parameter ãå®è¡ããŸã aws ssm put-parameter \ --name ${ KEY } \ --value ${ VALUE } \ --type ${ PARAMETER_TYPE } \ # StringãSecureString ãªã© --overwrite ããã§ã¯ã©ã€ã¢ã³ãããšã® EC2 ã€ã³ã¹ã¿ã³ã¹ãäœæãèµ·åãããŸããæ¬¡ã«ã€ã³ã¹ã¿ã³ã¹èµ·åæã®æµãã«ã€ããŠã§ãã EC2 ã€ã³ã¹ã¿ã³ã¹èµ·å èµ·åæã¯ãååèµ·åãšæ¯åèµ·åã§ãããã以äžã®ãããªåŠçãè¡ããŸãã åå: ãã©ã¡ãŒã¿ã¹ãã¢ããèªèº«ã«é¢é£ããç°å¢å€æ°ãååŸãããµãŒãã¢ããªã±ãŒã·ã§ã³ã®ã»ããã¢ãã æ¯å: èªèº«ã®å
éš IP ã Route53 ã® Private DNS ã«ç»é²/æŽæ° å
éš IP ã¯åºå®ããŠãããèµ·åæã«å²ãæ¯ããããããæ¯åæŽæ°ããããã«ããŠããŸãã ããã§ã¯ããããã®å
容ã«ã€ããŠèŠãŠãããŸãã ãã©ã¡ãŒã¿ã¹ãã¢ããç°å¢å€æ°ååŸ ç»é²æã®å
容ã§èšèŒããŸããããç°å¢å€æ°ã¯ <ã¯ã©ã€ã¢ã³ãèå¥ ID>.HOGE ãšãã圢åŒã§ç»é²ããŠããŸãããã®ããããŸãã¯èªèº«ã®ã¯ã©ã€ã¢ã³ãèå¥ ID ãå€å®ããåŸã«å¿
èŠãªç°å¢å€æ°ã aws ssm get-parameters ã§ååŸããŸãã # èªèº«ã®ã€ã³ã¹ã¿ã³ã¹ ID ãã¡ã¿ããŒã¿ããååŸ INSTANCE_ID =$( curl -s https://169.254.169.254/latest/meta-data/instance-id ) # ã¯ã©ã€ã¢ã³ãèå¥ ID ãã€ã³ã¹ã¿ã³ã¹äœææã«æå®ãã Tag ããååŸ # (describe-instances ã® filter ã«èªèº«ã®ã€ã³ã¹ã¿ã³ã¹ ID ãæå®) CLIENT_ID_TAG =$( aws ec2 describe-instances \ --region=${ REGION } \ --filters "Name=instance-id,Values=${ INSTANCE_ID }" \ | jq -r '.Reservations[].Instances[].Tags[] | select(.Key == "ClientId").Value' ) # ç°å¢å€æ°ãååŸ # ã¿ã€ãã SecureString ã«ããŠãã倿°ããããããäžåŸ --with-decryption ãªãã·ã§ã³ãæå®ããŠãã HOGE =$( aws ssm get-parameters \ --name "${ CLIENT_ID_TAG }.HOGE" \ --with-decryption --region ${ REGION } \ | jq -r ".Parameters[].Value" ) export HOGE =${ HOGE } å
éš IP ã Private DNS ã«ç»é² æåŸã«ãProxy å±€ãã Private DNS ã§åå解決ã§ããããã«èªèº«ã® IP ã Route 53 ã«ç»é²ããŠãããŸãã ãªããRoute53 ã«ã¯äºåã«å¯Ÿè±¡ã® Hosted Zone ã Private Hosted Zone for Amazon VPC ã¿ã€ããšããŠç»é²ããŠãããŸããããã§ã¯äŸãšã㊠Domain Name ã local ãšããŸãã EC2 ã€ã³ã¹ã¿ã³ã¹ããç»é²ããã RecordSet ã¯ä»¥äžã®åœ¢åŒãšããŸãã Name: <ã¯ã©ã€ã¢ã³ãèå¥ ID>.local Type: CNAME Value: EC2 ã€ã³ã¹ã¿ã³ã¹ã®å
éš IP ããããè¡ãã¹ã¯ãªããäŸã¯ä»¥äžãšãªããŸãã # å
éš IP ãååŸ # (describe-instances ã® filter ã«èªèº«ã®ã€ã³ã¹ã¿ã³ã¹ ID ãæå®) PRIVATE_IP =$( aws ec2 describe-instances \ --region=${ REGION } \ --filters "Name=instance-id,Values=${ INSTANCE_ID }" \ | jq -r '.Reservations[].Instances[].PrivateIpAddress' ) # Route53 ã®ç»é²å
Hosted Zone ID ãååŸ # SEARCH_KEY ã¯ä»åã®äŸã§ãããš 'local.' ã«ãªããŸã HOSTED_ZONE_ID =$( aws route53 list-hosted-zones \ --region=${ REGION } \ | jq -r ".HostedZones[] | select(.Name == \" ${ SEARCH_KEY } \" ).Id" ) # ãã®åŸã®ç»é²ã³ãã³ãã§æå®ããããã®å®çŸ©ãã¡ã€ã« # æ¯èµ·åæã®ç»é²çšïŒIP ãå€ããããïŒã«ãAction ã«ã¯ 'UPSERT' ãæå® RECORDSET_FILE = "/tmp/create_recordset.json" cat << EOT > ${ RECORDSET_FILE } { "Changes": [ { "Action": "UPSERT", "ResourceRecordSet": { "Name": "<ã¯ã©ã€ã¢ã³ãèå¥ ID>.local", "Type": "CNAME", "TTL": 300, "ResourceRecords": [ { "Value": "${ PRIVATE_IP }" } ] } } ] } EOT # äœæããå®çŸ©ãã¡ã€ã«ãæå®ããRoute53 ã«ç»é² aws route53 change-resource-record-sets \ --hosted-zone-id ${ HOSTED_ZONE_ID } \ --change-batch file:/// ${ RECORDSET_FILE } å®è¡ããã¹ãããã¯ããå€ãã§ããããã®ãããªæ§æããšãããšã§ VPC å
ã§ã¯ãã¡ã€ã³æå®ã§ã®ã¢ã¯ã»ã¹ãå¯èœãšãªããããIP ãæèããå¿
èŠããªããªãããæè»ãªæ§æã«ãªãããšæããŸãã ä»åã®ãŸãšã ããŸããã€ã³ã¹ã¿ã³ã¹ç«ãŠããšãããã©ããããªãããããšãæããªããè²ã
調ã¹ãŠæ§ç¯ããŸããããEC2 ãŸããã®ãµãŒãã¹ãå¢ããŠããã ãªãããªããŠæããŸããïŒç¹ã«ãã©ã¡ãŒã¿ã¹ãã¢ã¯ãšãŠã䟿å©ïŒ ãã©ã¡ãŒã¿ã¹ãã¢ä»¥å€ã«ã Systems Manager ã«ã¯ Run Command ã Patch Manager ãªã© EC2 ã€ã³ã¹ã¿ã³ã¹ã管çããäžã§ãšãŠã䟿å©ãªä»çµã¿ãæã£ãŠããŸãã®ã§ãã®ããããå°å
¥ããŠãããããšæããŸãã äœè«ã§ãããSystems Manager ã®ååšã¯ re:Invent 2016 ã§çºè¡šãããæããååã ãã¯ç¥ã£ãŠãŸããããä»åã®å¯Ÿå¿ãããŸã§ãã£ãšãªã³ãã¬å°çšã®ãµãŒãã¹ã ãšåéãããŠãŠèšæ¶ããæ¶ããããŠããŸããããã æåŸã« åç·šã Proxy å±€ ïŒNginxïŒãåŸç·šã App å±€ïŒEC2ïŒã«ã€ããŠæžãããŠããã ããŸããããããã ã£ãã§ããããã ããããã®èŠä»¶èªäœããã£ããç¹æ®ã ã£ãããããã®ã§ããªãã§ãããªæ§æã«ïŒã¿ãããªãšããããããç¥ããŸããããã©ãªããã®åèã«ãªãã°å¹žãã§ããããå°ãèããŠã¿ããããšãããã㯠wantedly ã®ã 話ãèããŠã¿ãã ããã¿ã³ããã©ããã â»åç·šããããããŠèªã¿ããæ¹ã¯ãã¡ãããã©ãã https://developer.medley.jp/entry/2017/08/24/120000_01 ãç¥ãã ã¡ãã¬ãŒã§ã¯ãå»åž«ãã¡ãã€ãããªã³ã©ã€ã³å»çäºå
žã MEDLEY ãããªã³ã©ã€ã³èšºçã¢ããªã CLINICS ããå»çä»è·ã®æ±äººãµã€ãã ãžã§ãã¡ãã¬ãŒ ããå£ã³ãã§æ¢ããä»è·æœèšã®æ€çŽ¢ãµã€ãã ä»è·ã®ã»ãã ããªã©ã®ãããã¯ããæäŸããŠããŸãããããã®ãµãŒãã¹ã®æ¡å€§ãåããŠããã®æé·ãæ¯ãããšã³ãžãã¢ã»ãã¶ã€ããŒãåéããŠããŸãã ã¡ãã¬ãŒã§äžç·ã«å»çäœéšãå€ãããããã¯ãäœãã«é¢ããããæ¹ã®ãé£çµ¡ãåŸ
ã¡ããŠãããŸãã ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp
ä»åã®å
容ã«ã€ã㊠ã¡ãã¬ãŒéçºæ¬éšã® ç°äž ã§ãã å
æ¥ãProxy å±€ã Elastic Beanstalk äžã® Nginx ã§ãApp å±€ã EC2 ã€ã³ã¹ã¿ã³ã¹ã§æ§ç¯ããæ©äŒããããŸãããããã ãèŠããšãšãŠãæ®éã«èŠããŸãããå¶çŽãããããšã§èŠåŽããç¹ãããïŒ åç·šåç
§ ïŒãå¶çŽãä¹ãè¶ããããã®å·¥å€«ãå«ããŠã話ã§ããéãå
±æãããŠããã ããŸãã åç·šã§ã¯ Proxy å±€ã®æ§æãšããŠã䞻㫠Nginx ã䜿çšãã Path Based Routing åšãã«ã€ããŠã®ã話ã§ãããåŸç·šã§ã¯ App å±€ã§äœ¿çšãã EC2ã Systems Manager ãã©ã¡ãŒã¿ã¹ãã¢ãããã«ã€ããŠå
±æããããŸãã App å±€ã®æ§æ App å±€ã®æ¹éãæ§ç¯ã®æµãçããŸãšãããšä»¥äžã®éãã§ãã ãŽãŒã«ãã³ã€ã¡ãŒãžãšã㊠OS èšå®ããµãŒãã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ãã imageïŒAMIïŒãäœæããŠãã äžèšã® AMI ãå
ã«ãã¯ã©ã€ã¢ã³ãæ¯ã« EC2 ã€ã³ã¹ã¿ã³ã¹ãäœæãã ã€ã³ã¹ã¿ã³ã¹äœææã«å¿
èŠãª Tag ã®å€ãç°å¢å€æ°ãèšå®ããŠãã ç°å¢å€æ°ã¯ãã©ã¡ãŒã¿ã¹ãã¢ã«ç»é² EC2 ã€ã³ã¹ã¿ã³ã¹èµ·åæã«ãã¯ã©ã€ã¢ã³ãã«å¿ãã Tag ãç°å¢å€æ°ãããšã«ãµãŒãã¢ããªã±ãŒã·ã§ã³ã®ã»ããã¢ãããè¡ã èªèº«ã®å
éš IP ãš Tag ã«èšå®ããã¯ã©ã€ã¢ã³ãèå¥ ID ãå
ã« Route53 ã® PrivateDNS ã«ç»é²ãã ããã§ã¯ãããããã®è©³çްã«ã€ããŠèª¬æããŠãããããšæããŸãã AMI äœæ Packer ã䜿çšããŠåã€ã³ã¹ã¿ã³ã¹å
±éãšãªã AMI ãäœæããŸãã provisioners ã§æå®ããæ§ç¯çšã¹ã¯ãªããã§ OS èšå®ãå¿
èŠã©ã€ãã©ãªããŸãã¡ã€ã³ãšãªããµãŒãã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ããŸãããŸããcloud-init ã䜿çšããŠååèµ·åæã«åããã¹ã¯ãªããé¡ãã³ããŒããŠãããŸãã ãªããcloud-init ããå®è¡ããã¹ã¯ãªãã㯠Git ã S3 ãªã©ããåçã«ååŸããæ¹æ³ããããŸããããã»ã©ã¹ã¯ãªããã®å
容ã«å€æŽã¯çºçããªãç¹ãšãå
容çã«å€æŽããå Žå㯠image åäœæãã©ã¡ãã«ããŠãå¿
èŠã«ãªãããã ã£ãã®ã§å²ãåã£ãŠ image å
ã«å«ããããšã«ããŠããŸãã äœæãã packer.json ã® provisioners éšåãæç²ãããšãã®ãããªæãã«ãªããŸãïŒèª¬æã³ã¡ã³ãéšåã¯å®éã«ã¯èšèŒããŠããŸããïŒ "provisioners" : [ -- type: shell ãšããŠãæ§ç¯çšã¹ã¯ãªããæå®ããã«ãæã«å®è¡ããã { "type" : "shell" , "scripts" : [ "scripts/provision.sh" ] }, -- type: file ã§ã€ã³ã¹ã¿ã³ã¹èµ·åæã«å®è¡ãããã¹ã¯ãªãã矀ãã³ã㌠-- ãããã®ã¹ã¯ãªãã㯠cloud-init ããå®è¡ãããïŒcloud-init ã®èšå®ã¯å¥éã€ã³ã¹ã¿ã³ã¹äœææã«è¡ã£ãŠããïŒ { "type" : "file" , "source" : "./scripts" , "destination" : "/home/hoge" }, -- äžèšã®ã¹ã¯ãªããã«å¯ŸããŠå®è¡æš©éä»äž { "type" : "shell" , "inline" : [ "chmod +x /home/hoge/scripts/*" ] } ] packer build ã§ãã«ããã image ã AWS ã«ä»åã®å
±éã§äœ¿çšãã AMI ãšããŠç»é²ãããŸã EC2 ã€ã³ã¹ã¿ã³ã¹äœæ äœæãã AMI ãå
ã«ãã¯ã©ã€ã¢ã³ãããšã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãããªããã€ã³ã¹ã¿ã³ã¹äœæã¯ Terraform ã CloudFormation ãªã©ã¯äœ¿ãããAWS CLI ãå©çšããã¹ã¯ãªãããäœæããŠå®è¡ããŠããŸãã ã€ã³ã¹ã¿ã³ã¹äœæã¹ã¯ãªããã¯ãã®ãããªæµãã®åŠçãšãªããŸãã åŒæ°ã§ã¯ã©ã€ã¢ã³ãèå¥ ID ããã®ä»ãµãŒãã¢ããªã±ãŒã·ã§ã³ã»ããã¢ããã«å¿
èŠãšãªãç°å¢å€æ°ãæå® AWS CLI ã§ EC2 ã€ã³ã¹ã¿ã³ã¹äœæ åŒæ°ã§æå®ãããç°å¢å€æ°ã AWS CLI ã§ãã©ã¡ãŒã¿ã¹ãã¢ã«ç»é² ã€ã³ã¹ã¿ã³ã¹äœæ 以äžã®ããã«ã aws ec2 run-instances ã³ãã³ãã䜿çšããTag ã«ã¯ã©ã€ã¢ã³ãèå¥ ID ãæå®ããŠäœæããŠããŸãã ããã§æå®ããã¯ã©ã€ã¢ã³ãèå¥ ID ãå
ã«ãã©ã¡ãŒã¿ã¹ãã¢ããèªåçšã®ç°å¢å€æ°ãç»é²/ååŸããããPrivate DNS çšã®ãã¡ã€ã³ã«äœ¿çšããŸãã aws ec2 run-instances \ --image-id ${ AMI_ID } \ --key-name ${ KEY_NAME } --region ${ REGION } \ --subnet-id ${ SUBNET_ID } \ --security-group-ids ${ SECURITY_GROUP } \ --user-data file:// ${ USER_DATA } \ --instance-type ${ INSTANCE_TYPE } \ --tag-specifications "ResourceType=instance,Tags=[{Key=ClientId,Value=${ CLIENT_ID }}]" \ --iam-instance-profile "Arn=${ SERVICE_ROLE }" user-data ã«ã¯ååèµ·åæã«å®è¡ãããã¹ã¯ãªããïŒPacker ã§ãã«ãæã«ã³ããŒããŠãããã¹ã¯ãªããïŒãæå®ããŠããã ããšãªããŸãã #!/bin/bash /home/hoge/scripts/bootstrap.sh ãã©ã¡ãŒã¿ã¹ãã¢ã«ç°å¢å€æ°ç»é² 䜿çšããç°å¢å€æ°ã¯ãKey ã¯å
±éã§ããå€ãã¯ã©ã€ã¢ã³ãã«ãã£ãŠç°ãªããŸãããã®ãããHOGE ãšãã Key ã䜿çšããå Žåã <ã¯ã©ã€ã¢ã³ãèå¥ ID>.HOGE ãšãã圢åŒã§ãã©ã¡ãŒã¿ã¹ãã¢ã«ç»é²ããŠããŸãã ïŒæ³š. ãã©ã¡ãŒã¿ã¹ãã¢ã« éå±€ãã¿ã°ä»ãããµããŒãããã ãããããã®ãããã®æ§æã¯ä»åŸèŠçŽãäºå®ã§ãïŒ ç»é²ã¯ aws ssm put-parameter ãå®è¡ããŸã aws ssm put-parameter \ --name ${ KEY } \ --value ${ VALUE } \ --type ${ PARAMETER_TYPE } \ # StringãSecureString ãªã© --overwrite ããã§ã¯ã©ã€ã¢ã³ãããšã® EC2 ã€ã³ã¹ã¿ã³ã¹ãäœæãèµ·åãããŸããæ¬¡ã«ã€ã³ã¹ã¿ã³ã¹èµ·åæã®æµãã«ã€ããŠã§ãã EC2 ã€ã³ã¹ã¿ã³ã¹èµ·å èµ·åæã¯ãååèµ·åãšæ¯åèµ·åã§ãããã以äžã®ãããªåŠçãè¡ããŸãã åå: ãã©ã¡ãŒã¿ã¹ãã¢ããèªèº«ã«é¢é£ããç°å¢å€æ°ãååŸãããµãŒãã¢ããªã±ãŒã·ã§ã³ã®ã»ããã¢ãã æ¯å: èªèº«ã®å
éš IP ã Route53 ã® Private DNS ã«ç»é²/æŽæ° å
éš IP ã¯åºå®ããŠãããèµ·åæã«å²ãæ¯ããããããæ¯åæŽæ°ããããã«ããŠããŸãã ããã§ã¯ããããã®å
容ã«ã€ããŠèŠãŠãããŸãã ãã©ã¡ãŒã¿ã¹ãã¢ããç°å¢å€æ°ååŸ ç»é²æã®å
容ã§èšèŒããŸããããç°å¢å€æ°ã¯ <ã¯ã©ã€ã¢ã³ãèå¥ ID>.HOGE ãšãã圢åŒã§ç»é²ããŠããŸãããã®ããããŸãã¯èªèº«ã®ã¯ã©ã€ã¢ã³ãèå¥ ID ãå€å®ããåŸã«å¿
èŠãªç°å¢å€æ°ã aws ssm get-parameters ã§ååŸããŸãã # èªèº«ã®ã€ã³ã¹ã¿ã³ã¹ ID ãã¡ã¿ããŒã¿ããååŸ INSTANCE_ID =$( curl -s https://169.254.169.254/latest/meta-data/instance-id ) # ã¯ã©ã€ã¢ã³ãèå¥ ID ãã€ã³ã¹ã¿ã³ã¹äœææã«æå®ãã Tag ããååŸ # (describe-instances ã® filter ã«èªèº«ã®ã€ã³ã¹ã¿ã³ã¹ ID ãæå®) CLIENT_ID_TAG =$( aws ec2 describe-instances \ --region=${ REGION } \ --filters "Name=instance-id,Values=${ INSTANCE_ID }" \ | jq -r '.Reservations[].Instances[].Tags[] | select(.Key == "ClientId").Value' ) # ç°å¢å€æ°ãååŸ # ã¿ã€ãã SecureString ã«ããŠãã倿°ããããããäžåŸ --with-decryption ãªãã·ã§ã³ãæå®ããŠãã HOGE =$( aws ssm get-parameters \ --name "${ CLIENT_ID_TAG }.HOGE" \ --with-decryption --region ${ REGION } \ | jq -r ".Parameters[].Value" ) export HOGE =${ HOGE } å
éš IP ã Private DNS ã«ç»é² æåŸã«ãProxy å±€ãã Private DNS ã§åå解決ã§ããããã«èªèº«ã® IP ã Route 53 ã«ç»é²ããŠãããŸãã ãªããRoute53 ã«ã¯äºåã«å¯Ÿè±¡ã® Hosted Zone ã Private Hosted Zone for Amazon VPC ã¿ã€ããšããŠç»é²ããŠãããŸããããã§ã¯äŸãšã㊠Domain Name ã local ãšããŸãã EC2 ã€ã³ã¹ã¿ã³ã¹ããç»é²ããã RecordSet ã¯ä»¥äžã®åœ¢åŒãšããŸãã Name: <ã¯ã©ã€ã¢ã³ãèå¥ ID>.local Type: CNAME Value: EC2 ã€ã³ã¹ã¿ã³ã¹ã®å
éš IP ããããè¡ãã¹ã¯ãªããäŸã¯ä»¥äžãšãªããŸãã # å
éš IP ãååŸ # (describe-instances ã® filter ã«èªèº«ã®ã€ã³ã¹ã¿ã³ã¹ ID ãæå®) PRIVATE_IP =$( aws ec2 describe-instances \ --region=${ REGION } \ --filters "Name=instance-id,Values=${ INSTANCE_ID }" \ | jq -r '.Reservations[].Instances[].PrivateIpAddress' ) # Route53 ã®ç»é²å
Hosted Zone ID ãååŸ # SEARCH_KEY ã¯ä»åã®äŸã§ãããš 'local.' ã«ãªããŸã HOSTED_ZONE_ID =$( aws route53 list-hosted-zones \ --region=${ REGION } \ | jq -r ".HostedZones[] | select(.Name == \" ${ SEARCH_KEY } \" ).Id" ) # ãã®åŸã®ç»é²ã³ãã³ãã§æå®ããããã®å®çŸ©ãã¡ã€ã« # æ¯èµ·åæã®ç»é²çšïŒIP ãå€ããããïŒã«ãAction ã«ã¯ 'UPSERT' ãæå® RECORDSET_FILE = "/tmp/create_recordset.json" cat << EOT > ${ RECORDSET_FILE } { "Changes": [ { "Action": "UPSERT", "ResourceRecordSet": { "Name": "<ã¯ã©ã€ã¢ã³ãèå¥ ID>.local", "Type": "CNAME", "TTL": 300, "ResourceRecords": [ { "Value": "${ PRIVATE_IP }" } ] } } ] } EOT # äœæããå®çŸ©ãã¡ã€ã«ãæå®ããRoute53 ã«ç»é² aws route53 change-resource-record-sets \ --hosted-zone-id ${ HOSTED_ZONE_ID } \ --change-batch file:/// ${ RECORDSET_FILE } å®è¡ããã¹ãããã¯ããå€ãã§ããããã®ãããªæ§æããšãããšã§ VPC å
ã§ã¯ãã¡ã€ã³æå®ã§ã®ã¢ã¯ã»ã¹ãå¯èœãšãªããããIP ãæèããå¿
èŠããªããªãããæè»ãªæ§æã«ãªãããšæããŸãã ä»åã®ãŸãšã ããŸããã€ã³ã¹ã¿ã³ã¹ç«ãŠããšãããã©ããããªãããããšãæããªããè²ã
調ã¹ãŠæ§ç¯ããŸããããEC2 ãŸããã®ãµãŒãã¹ãå¢ããŠããã ãªãããªããŠæããŸããïŒç¹ã«ãã©ã¡ãŒã¿ã¹ãã¢ã¯ãšãŠã䟿å©ïŒ ãã©ã¡ãŒã¿ã¹ãã¢ä»¥å€ã«ã Systems Manager ã«ã¯ Run Command ã Patch Manager ãªã© EC2 ã€ã³ã¹ã¿ã³ã¹ã管çããäžã§ãšãŠã䟿å©ãªä»çµã¿ãæã£ãŠããŸãã®ã§ãã®ããããå°å
¥ããŠãããããšæããŸãã äœè«ã§ãããSystems Manager ã®ååšã¯ re:Invent 2016 ã§çºè¡šãããæããååã ãã¯ç¥ã£ãŠãŸããããä»åã®å¯Ÿå¿ãããŸã§ãã£ãšãªã³ãã¬å°çšã®ãµãŒãã¹ã ãšåéãããŠãŠèšæ¶ããæ¶ããããŠããŸããããã æåŸã« åç·šã Proxy å±€ ïŒNginxïŒãåŸç·šã App å±€ïŒEC2ïŒã«ã€ããŠæžãããŠããã ããŸããããããã ã£ãã§ããããã ããããã®èŠä»¶èªäœããã£ããç¹æ®ã ã£ãããããã®ã§ããªãã§ãããªæ§æã«ïŒã¿ãããªãšããããããç¥ããŸããããã©ãªããã®åèã«ãªãã°å¹žãã§ããããå°ãèããŠã¿ããããšãããã㯠wantedly ã®ã 話ãèããŠã¿ãã ããã¿ã³ããã©ããã â»åç·šããããããŠèªã¿ããæ¹ã¯ãã¡ãããã©ãã https://developer.medley.jp/entry/2017/08/24/120000_01 ãç¥ãã ã¡ãã¬ãŒã§ã¯ãå»åž«ãã¡ãã€ãããªã³ã©ã€ã³å»çäºå
žã MEDLEY ãããªã³ã©ã€ã³èšºçã¢ããªã CLINICS ããå»çä»è·ã®æ±äººãµã€ãã ãžã§ãã¡ãã¬ãŒ ããå£ã³ãã§æ¢ããä»è·æœèšã®æ€çŽ¢ãµã€ãã ä»è·ã®ã»ãã ããªã©ã®ãããã¯ããæäŸããŠããŸãããããã®ãµãŒãã¹ã®æ¡å€§ãåããŠããã®æé·ãæ¯ãããšã³ãžãã¢ã»ãã¶ã€ããŒãåéããŠããŸãã ã¡ãã¬ãŒã§äžç·ã«å»çäœéšãå€ãããããã¯ãäœãã«é¢ããããæ¹ã®ãé£çµ¡ãåŸ
ã¡ããŠãããŸãã ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp