CIãšã¯äœã§ããïŒ
ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ã¯ãäœæ¥ã³ããŒã1æ¥ã«æ°åãå
±éã®ã¡ã€ã³éçºãã©ã³ãã«ããŒãžããé »ç¹ã«èªååããããããžã§ã¯ãã¢ã»ã³ããªãå®è¡ããŠæœåšçãªæ¬ é¥ãè¿
éã«ç¹å®ããçµ±ååé¡ã解決ãããœãããŠã§ã¢éçºãã©ã¯ãã£ã¹ã§ãã éçºè
ãã·ã¹ãã ã®ããŸããŸãªéšåã§ç¬ç«ããŠäœæ¥ããå
žåçãªãããžã§ã¯ãã§ã¯ãçµ±åãã§ãŒãºãæåŸã§ãã 圌女ã¯ä»äºã®å®äºãäºæ³å€ã«é
ãããããšãã§ããŸãã ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ãžã®ç§»è¡ã«ãããã€ã³ãã°ã¬ãŒã·ã§ã³ã®è€éãã軜æžããããšã©ãŒãççŸãæ©æã«æ€åºããŠæé€ã§ãããããããäºæž¬ãããããªããŸãã äž»ãªå©ç¹ã¯ãæ¬ é¥ãæ©æã«æ€åºã§ãããããæ¬ é¥ãä¿®æ£ããã³ã¹ããåæžã§ããããšã§ãã
ãããžã§ã¯ãã§CIãæ§æããæ¹æ³ãããããªãå Žåã¯ããã¢ã³ããŒã¶ã«ãããããå§ãããŸã
ã¹ã¿ã€ã«ãšè¡šèšæ³ãæãããã¹ãŠã®äººã«ãšã£ãŠãç§ã¯è°è«ããããªãå人çãªç¶æ³ãšçç±ã®ããã«ãè¡šèšæ³ãšèŠä»¶ãåžžã«é å®ããŠããããã§ã¯ãããŸããã ç§ã¯ReactãšJSã³ãã¥ããã£ã®èŠç¯ããæ€éããŠããããšãç¥ã£ãŠããã®ã§ãããã«ããªãã«ãããèš±ããèªç±ãèè
ã®æãè
ãšã¿ãªããããé¡ãããŸãã ç§ã®ç®æšã¯ãçµéšãå
±æããä»æ¥ã®CIã®æ§æãã©ãã»ã©ç°¡åãã人ã
ã«äŒããããšã§ããTravisãHerokãšã¯äœã®é¢ä¿ããããŸãããããã«ãHerokuã¯å¥œãã§ã¯ãããŸããã ããã«TLDRã
ãªãå¿
èŠãªã®ã
ãã®éçšã§ãå€ãã®å ŽåããµãŒãã¹ãæŽæ°ããå®å
ãµãŒããŒã«å±éããå¿
èŠããããŸãã ãããžã§ã¯ããå°ãªããšããããã¯å€§ããªåé¡ã§ã¯ãããŸããã§ããã ãªãªãŒã¹ã¯ãŸãã§ãå±éã¯ãŸãã§ããã ãã¹ãã¯æåã§å®è¡ãããŸããã æéãçµã€ã«ã€ããŠããããžã§ã¯ããšã¿ã¹ã¯ãå¢ããåæ§ã®ã¿ã¹ã¯ãå®äºããã®ã«æéããããå§ããŸããã ã»ãšãã©ã®äŒæ¥ã«é©ããå€å
žçãªåé¡è§£æ±ºããã»ã¹ãæ€èšããŠãã ããã
- ãªã¹ãããã¿ã¹ã¯ãååŸãã/åœå±ããåãåã
- gitã§æ°ãããã©ã³ããäœæãããªã¯ãšã¹ãããŒã«ãéããŸã
- ã³ãŒããæžã
- å人çã«ããŸãã¯ååã®å©ããåããŠãã³ãŒãã¬ãã¥ãŒãå®æœããŸãïŒ ã³ãŒãã¬ãã¥ãŒ -ã¬ãã¥ãŒ/ ã³ãŒãã¬ãã¥ãŒ ïŒ
- ãã¹ããå®è¡ãã
- ãã©ã³ãããã¹ã¿ãŒã«ããŒãžããŸã
- ãããžã§ã¯ããæ§ç¯ãã
- æ°ããã¢ã»ã³ããªãå
¬éãã
ãã®ããã»ã¹ã¯ã¿ã¹ã¯ããšã«ç¹°ãè¿ãããŸãã10æ¥éã³ãŒããèšè¿°ããã¢ã»ã³ããª/å±éã«1æéãè²»ãããå Žåãããã¯åççã§åŽåãããããªãããã«èŠããŸãã ãããã1åã§ãã€ããŒãã°ãä¿®æ£ããããå±éã«åãæéãè²»ãããå Žåã¯ã©ãã§ããããã ãã®ç¶æ³ã§ã¯ãããªãç¡é§ã«èŠããŸãã ãŸãã1æ¥ã«10ã20åã®ãã°ä¿®æ£ãå®è¡ããå¿
èŠãããå ŽåïŒ ãã°ä¿®æ£ ããã°ä¿®æ£ïŒïŒ
æåã®æ¹æ³ã¯ããªã¯ãšã¹ãã®ããŒã«ãæ¡å€§ãããã¹ã¿ãŒãžã®çµ±åãã§ããéãå°ãªãããããšã§ãã 2çªç®ã®æ¹æ³ã¯ããã¹ã/ãã«ã/å±éããã»ã¹ãèªåçã«å®è¡ãããããã«CIãæ§æããããšã§ãã 倧éã®ãªã¯ãšã¹ããã¬ãã¥ãŒããã®ã¯äžäŸ¿ãªã®ã§ã2çªç®ã®æ¹æ³ã䜿çšããŸãã
åé¡ã解決ããããã«äœã䜿çšããŸãã
2008幎ã«ãã®åé¡ãçºçãããšããåžå Žã«ã¯ã»ãšãã©ãœãªã¥ãŒã·ã§ã³ããããŸããã§ããããããã®ããã»ã¹ãèªååããã«ã¯ããµãŒããŒãå±éããæ£ããã©ã€ãã©ãªããŒãžã§ã³ãç£èŠãããããžã§ã¯ãããã«ãããã¹ã¯ãªãããäœæãããããžã§ã¯ãããµãŒããŒã«ã¢ããããŒãããã¹ã¯ãªãããäœæããªããã°ãªããŸããã§ãããä»ã®åŽåéçŽçãªæäœã ãã¹ãŠãããã·ã³ãã«ã«ãªããã»ãšãã©ã®ã¿ã¹ã¯ã¯èªååã«å¯Ÿå¿ãããããã解決ããå€ãã®ã¯ã©ãŠããµãŒãã¹ãåžå Žã«åºåã£ãŠããŸãã é·ãæ€çŽ¢ã®åŸãç§ã¯ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãtravis-ci.orgã«éäžããããšã«ããŸããã ãTravisãã¯ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã§ã¯ç¡æã§ãåçšå©çšã«ã¯ææãªãã·ã§ã³ããããŸãã ã»ããã¢ãããšäœ¿çšãç°¡åãªç¹ã§æ°ã«å
¥ã£ãŠããŸãã ããã§ãããããåºåã®ããã«èŠããªãããã«ãããšãã°CircleCI ã Codeshipãªã©ããã䟡å€ã®ãããµãŒãã¹ãåžå Žã«åºåã£ãŠããããšã«æ³šæããŠãã ããã
ãã¹ãçšã«ãJestã䜿çšããŠHerokuããããã€ããReactã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã èªè
ã¯åºæ¬çãªããã°ã©ãã³ã°ã®ç¥èãåºæ¬çãªè±èªãåºæ¬çãªç¥èœãæã¡ãèšå®ãããnode.jsç°å¢ãyarnã«ãã£ãŠã€ã³ã¹ããŒã«ãã github.com ã heroku.com ã travis-ci.orgã®ã¢ã«ãŠã³ããæã£ãŠããããããã»ã¹ã§ããããäœæã§ããããšãåæãšããŠããŸããã®ãã¥ãŒããªã¢ã«ãæž¡ããŸãã
ã¢ããªã±ãŒã·ã§ã³ãäœæãã
ãªããªã ãã®èšäºã¯è¥ãéçºè
ã察象ãšããŠããããããžã§ãã¬ãŒã¿ã䜿çšããŸã
ã¢ããªã±ãŒã·ã§ã³React- create-react-app ã°ããŒãã«ã«ã€ã³ã¹ããŒã«ããŸãïŒ
$ yarn global add create-react-app
ã€ã³ã¹ããŒã«åŸãã¢ããªã±ãŒã·ã§ã³ãäœæããŸããããšãã°ãçç£ã©ã€ã³ã管çããããã®Webã€ã³ã¿ãŒãã§ã€ã¹ãäœæããŸãã
$ create-react-app factory_line_manager
ãããžã§ã¯ããäœæãããã¹ãŠã®ã©ã€ãã©ãªãããŠã³ããŒããããããããžã§ã¯ããã©ã«ããŒã«ç§»åããŠå®è¡ããŸãã
cd factory_line_manager $ yarn start
ãã©ãŠã¶ãã¢ããªã±ãŒã·ã§ã³ã®ããŒãžãéãã¯ãã§ãã ããã©ã«ãã§ã¯ãããŒã3000ã空ããŠããå Žå- ããŒã«ã«ãã¹ãïŒ3000
ããã©ã«ãã§ã¯ã create-react-appã¯ãã«ãæ§æãªãã§ãããžã§ã¯ããäœæããŸããããã¯æ§æãªããæå³ããŸãã ãžã§ãã¬ãŒã¿ãŒã¯æšæºã®èšå®ãã¡ã€ã«ãäœæããŸãã®ã§ ã webpack ã jest ã babelããã³ãã®ä»ã®ã©ã€ãã©ãªãèšå®ããå¿
èŠã¯ãããŸããã 95ïŒ
ã®å Žåããããã®èšå®ã¯ãåå¿è
ãèªåã§æ§æã§ãããããåªãããããã¯ãªãŒã³ãªã³ãŒããçæããŸãã ãããã£ãŠããã®ä»çµã¿ãç解ãããŸã§ãæ§æããã®ãŸãŸã«ããŠããããšã匷ããå§ãããŸãã
èšå®ã®ä»çµã¿ã«èå³ãããå Žåãããžã§ã¯ãã®ã³ããŒãäœæããã³ã³ãœãŒã«ã§æ¬¡ã®ã³ãã³ããå®è¡ããŸã
$ yarn eject
æäœã確èªããŸãã ãžã§ãã¬ãŒã¿ãŒã¯ãæ§æãã¡ã€ã«ããããžã§ã¯ããã©ã«ããŒã«æœåºããŸãããããžã§ã¯ããã©ã«ããŒã§ã¯ãæ§æãã¡ã€ã«ã詳现ã«èª¿ã¹ãããšãã§ããŸãã
GITãæ¥ç¶ãã
gitã«æ
£ããŠãã人ã®ããã«ãæ°ãããªããžããªãäœæãããããžã§ã¯ããããã«æ¥ç¶ããŠã次ã®ç« ã«é²ã¿ãŸãã æ®ãã®ããã«-ã¹ããããã€ã¹ãããã§è¡ããŸãããã sshããŒã§ã¢ã¯ã»ã¹ãèšå®ããå¿
èŠããããŸããããããŸã è¡ã£ãŠããªãå Žåã¯ãä»ãtime- linkã§ãã
githubã«ç§»åããŠãæ°ãããªããžããªãäœæããŸãã 次ã®ãªããžããªhabrahabr_topic_352282ãäœæããŸããã
ãããžã§ã¯ããã©ã«ãã«ããã gitãåæåããŸãã
$ git init
ãããžã§ã¯ãã®ãã¹ãŠã®ãã¡ã€ã«ãgitã«è¿œå ããŸã
$ git add .
æåã®ã³ããããäœæããŸãã
$ git commit -m "First commit"
ããŒã«ã«ãã©ã«ããŒãgitäžã®ãªããžããªã«æ¥ç¶ããŸãã 泚æããŠã evilosa
ããããã¡ã€ã«ã«ã habrahabr_topic_352282
ãäœæãããªããžããªã®ååã«çœ®ãæããŠãã ããã
$ git remote add origin git@github.com:evilosa/habrahabr_topic_352282.git
ãããžã§ã¯ãããªã¢ãŒãgitãµãŒããŒã«å
¥åããŸãã
$ git push -u origin master
æåŸã®ã³ãã³ãã®åŸãéæ³ãçºçããã³ãŒããgitã®ãªããžããªã«ã¢ããããŒããããŸãã
CIãã«ã¹ã¿ãã€ãº
ãµã€ãtravis-ci.orgã«ã¢ã¯ã»ã¹ããgithubã¢ã«ãŠã³ãã§ãã°ã€ã³ããŸãïŒGithubã§ãµã€ã³ã€ã³ããŸãïŒã 衚瀺ããããŠã£ã³ããŠã§ãOAuthãä»ããŠã¢ããªã±ãŒã·ã§ã³ãæ¿èªããŸãã
[Authorize-CI]ãã¯ãªãã¯ããŠãTravisãããŒã¿ãgithubã¢ã«ãŠã³ããšåæãããŸã§åŸ
ã¡ãŸãã ãã®ããã»ã¹ãå®äºãããšã次ã®ããã«è¡šç€ºãããŸãã
ãªã¹ãããç®çã®ãªããžããªãéžæããŸããç§ã®å Žåã¯habrahabr_topic_352282
ããã°ã«ã¹ã€ããããªã³ã«ããååãã¯ãªãã¯ããŠãããžã§ã¯ãããŒãžã«ç§»åããŸãã
ã»ãšãã©ã®äœæ¥ãè¡ããŸããããä»åºŠã¯ã¢ã©ãŒã ã®æ§æãã¡ã€ã«ãäœæããå¿
èŠããããŸãã ãããžã§ã¯ãã®ãã©ã«ããŒã«æ¬¡ã®å
容ã®.travis.yml
ãã¡ã€ã«ãäœæããŸãã
sudo: false language: node_js node_js: - 9 branches: only: - master
gitã«å€æŽãè¿œå ãããµãŒããŒã«ã¢ããããŒãããŸãã
$ git add . $ git commit -m "Add travis config" $ git push -u origin master
æåã®CIã¹ããŒãžã®ã»ããã¢ãããå®äºããŸããã gitã«å€æŽãã¢ããããŒãããåŸãtravisã¯èšå®ã確èªãããããžã§ã¯ãã®ãã¹ããšã¢ã»ã³ããªãå®è¡ããå¿
èŠããããŸãã
travisãã°ã®æåŸã«ãæåãããã¹ãã®ã¹ããŒã¿ã¹ã衚瀺ãããŸãïŒ
ããã§ãmasterãã©ã³ããžã®ã³ãããããšã«ãã¢ã©ãŒã ã®ãã¹ãã®æ§ç¯ãšå®è¡ãèªåçã«éå§ãããŸãã ãã§ã«æªããªãã å
ã«é²ã¿ãŸãã 次ã®ã¹ãããã¯ãHerokuã§ãããžã§ã¯ããèªåçã«å
¬éããããšã§ãã
Herokuã«ç§»åããã¢ã«ãŠã³ããäœæããŠãã°ã€ã³ããŸãã mail.ruãã¡ã€ã³ããã®ã¡ãŒã«ã¯ãããã¯ãããŠããããšã«æ³šæããŠãã ããããµãŒãããŒãã£ã®ãµãŒãã¹ã䜿çšããŠãã ããã
æ°ãããŠãŒã¶ãŒã®å Žåã次ã®ãããªãã®ã衚瀺ãããŸãã
[æ°ããã¢ããªã®Create New App
]ãã¿ã³ãã¯ãªãã¯ããŠãæ°ããã¢ããªã±ãŒã·ã§ã³ãCreate New App
ãŸãã ã¢ããªã±ãŒã·ã§ã³åãšå Žæã®å°åãå
¥åããŸãã
Herokuäžã®ã¢ããªã±ãŒã·ã§ã³ã®ååããªããžããªåãšäžèŽããªãããšã«æ³šæããŠãã ããã
.travis.yml
èšå®ãã¡ã€ã«.travis.yml
ãŸãã 次ã®ã³ãŒããè¿œå ããŠãå€ã眮ãæããŸãã
deploy: provider: heroku app: " Heroku" api_key: secure: " API Heroku"
Heroku APIããŒãèŠã€ããæ¹æ³ãããã¡ã€ã«èšå®ã«ç§»åããŸããããã«ã¯ããããã¡ã€ã«ã¢ã€ã³ã³ãã¯ãªãã¯ããŠã[ã¢ã«ãŠã³ãèšå®]ãéžæããŸãã APIããŒé
ç®ãèŠã€ããŸãïŒ
[å
¬é]ãã¿ã³ãã¯ãªãã¯ãããšãããŒãã³ããŒã§ããããã«ãªããŸãã
gitã«å€æŽãè¿œå ãããµãŒããŒã«ã¢ããããŒãããŸãã
$ git add . $ git commit -m "Add Heroku deploy to travis" $ git push -u origin master
Travisã®ãã°ã確èªããŠãã ããã ãã¹ãŠãæ£ããè¡ããããšã次ã®ã¡ãã»ãŒãžã衚瀺ãããŸãã
httpsïŒ// <Herokuã®ã¢ããªã±ãŒã·ã§ã³å> .herokuapp.com /ãšãã圢åŒã®ãªã³ã¯ããã©ããšãReactã¢ããªã±ãŒã·ã§ã³ã衚瀺ãããŸãã
ãšã©ãŒãçºçããå Žåæ§ç¯äžã«ãã®ãšã©ãŒã衚瀺ãããå ŽåïŒ
ãã®ãããcreate-react-appãžã§ãã¬ãŒã¿ãŒã«å«ãŸããäžéšã®ããã±ãŒãžãæŽæ°ãããŸããã
ããã±ãŒãžã®ãªã¹ããããŒã«ã«ã§æŽæ°ãã次ã®ã³ãã³ãã䜿çšããŠå€æŽããŠã£ã¶ãŒãã«ã¢ããããŒãããŸãã
$ yarn install $ git add . $ git commit -m "Update yarn.lock" $ git push -u origin master
CIã®æºåãæŽããŸãããæŠéã§äœéšã§ããŸãã
次ã«ããããš
ãã®èšäºã¯ããŠãŒã¶ãŒã«CIã®åºæ¬ãç解ããŠãããããšãç®çãšããŠããããããªãå®éšã®åºçºç¹ãšããŠåœ¹ç«ã¡ãŸãã æ瀺ãããã¢ãããŒãã®æãããªæ¬ ç¹ã®ãã¡ãHeroku APIããŒã¯ãªãŒãã³ãªããžããªã«ãããŸãã ãã¥ãŒããªã¢ã«ãå®äºããåŸãæŽæ°ããããšã匷ããå§ãããŸãã å®éã®ãããžã§ã¯ãã®å ŽåãããŒã¯æå·åãããå€æ°ã«ãã£ãŠå®çŸ©ãããŸã ã詳现ã«ã€ããŠã¯ããã¡ããã芧ãã ãã ã
ããšãã°ãæ¬çªãã¹ããŒãžã³ã°ãªã©ãã¢ããªã±ãŒã·ã§ã³ã®è€æ°ã®ããŒãžã§ã³ãå
¬éããå¿
èŠãããå Žåã 次ã«ãgitã§ããã€ãã®ãã©ã³ããäœæãããã®ããã»ã¹ãå¶åŸ¡ããHerokuã®ããŸããŸãªã¢ããªã±ãŒã·ã§ã³ã«ããŸããŸãªãã©ã³ããå
¬éããŸãã次ã«äŸã瀺ããŸãã
deploy: provider: heroku app: master: my-staging-application production: my-production-application api_key: secure: " API Heroku"
ããã§ãæ§æãå€æŽãããã¹ããææ°åã§ããŸãããããžã§ã¯ããè©ŠããŠããããäœã«ã€ãªãããã確èªããŠãã ããã ã¢ããªã±ãŒã·ã§ã³ãããµãããããã¹ããäœæããŠãã ããã ãµãŒãã¹ãæ§æãããã¹ãŠã®æ©èœãšãã¥ã¢ã³ã¹ã«ã€ããŠã¯ãããã¥ã¡ã³ãã§è©³ãã説æããŠããŸãã
ããŒãã¹
ãŸããç§ãã¡ãã¯ãŒã«ãªããã°ã©ãã§ããããšã瀺ãããã«ããã«ãã¹ããŒã¿ã¹ãšãã¹ãã§ã®ã³ãŒãã®ã«ãã¬ããžã®å²åã瀺ã2ã€ã®ãããžããªããžããªã«äœæããŸã-
ãã°ã€ã³ããŠãgithubã¢ã«ãŠã³ãã§coveralls.ioã«ç»é²ããŸãã OAuthèªèšŒãæåããããå·ŠåŽã®ã¡ãã¥ãŒã§[ Add repos
] Add repos
ã¯ãªãã¯ããŸãã 衚瀺ããããªã¹ãã§ãç®çã®ãããžã§ã¯ãã®ãã°ã«ã¹ã€ãããåãæ¿ããŸãã
.travis.yml
ãã¡ã€ã«ã«æ¬¡ã®ã³ãŒããè¿œå ããŸãã
after_success: - cat ./coverage/lcov.info | ./node_modules/codecov.io/bin/codecov.io.js - cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js
readme.md
ãã¡ã€ã«ã®å
容ããªã³ã¯ã®å€ã«çœ®ãæããŸãã
# Factory line manager [![Travis][build-badge]][build] [![Coveralls][coveralls-badge]][coveralls] Awesome factory line manager! [build-badge]: https://img.shields.io/travis/< >/< >/master.png?style=flat-square [build]: https://travis-ci.org/< >/< > [coveralls-badge]: https://img.shields.io/coveralls/< >/< >/master.png?style=flat-square [coveralls]: https://coveralls.io/github/< >/< >
ã«ãã¬ããžãã£ã¬ã¯ããªã.gitignoreã«è¿œå ããŸã
ãã¹ãçšã®ãããžã§ã¯ãã§ã¯ãããã©ã«ãã§ãã¹ãã«ããã³ãŒãã«ãã¬ããžã®ãã¹ããè¿œå ããŸãã ãããè¡ãã«ã¯ã package.json
ãã¡ã€ã«ã§ãã³ãŒãã次ã®ããã«ä¿®æ£ããŸãã
... "scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test --env=jsdom --coverage --collectCoverageFrom=src/**/*js --collectCoverageFrom=!src/registerServiceWorker.js", ...
ãã®æ§æã§ã¯ããã¹ãã§ã³ãŒãã®ãã¹ãã«ãã¬ããžã®èµ·åãè¿œå ããŸãã ããã¯ããããžã®äœæã«å¿
èŠãªãã¡ã€ã«ãçæããããã«å¿
èŠã§ãã src/registerServiceWorker
ãã¡ã€ã«ãã¹ãã£ã³ããé€å€ããŸãã ãã®ãã¡ã€ã«ã¯åœç€ŸããæäŸãããŠããŸããã
ãããžã§ã¯ãã«å¿
èŠãªdeväŸåé¢ä¿ãã€ã³ã¹ããŒã«ãããã¹ãŠãgithubã«ã¢ããããŒãããŸãã
$ yarn add codecov.io coveralls --dev $ git add . $ git commit -m "Add coverage" $ git push -u origin master
thresã§ãããžã§ã¯ãããã«ãããåŸã®çµæïŒ
ãããã«
ã芧ã®ãšãããç¥èãåããæ¬æ ŒçãªCIã®ã»ããã¢ããã¯10å以å
ã§å®äºããè€éãªæ§æã§ã¯æ°æéãå Žåã«ãã£ãŠã¯æ°æ¥ãŸãã¯æ°é±éãè²»ããããšãã§ããŸãã ãããããã®ããã»ã¹ãèªååããããšã§ãã©ã®ãããã®æéãç¯çŽã§ããŸããïŒ ããã®èª°ãã圌ããããå¿
èŠãšãããã©ãããèªåã§æ±ºãããšæããŸãã
æçš¿ãã圹ã«ç«ãŠã°å¹žãã§ãããœãŒã¹ã³ãŒãã¯ãæ°ã«å
¥ã£ãå Žåã¯ããããå
¥æã§ããŸããããã§ãªãå Žåã¯ãéåžžã«åŠå®çãªãã®ã«ãªãå¯èœæ§ããããŸãã ã³ãŒãã£ã³ã°ãæåããããšãé¡ã£ãŠããŸãã ãã¹ãŠã®äººã«å¹³åãïŒ
PSç§ã¯ç¹ã«ãHerokuã§ãããžã§ã¯ããã©ã«ããŒããªããžããªåãããã³ã¢ããªã±ãŒã·ã§ã³åã«ç°ãªãååã䜿çšããŸããã APIããŒãåçæãããŸããã 誰ããèå³ãæã£ãŠãããªããç§ã®è£œåã§äžéãµãŒãã¹ãCIãã€ãã©ã€ã³ã«è¿œå ããŠDockerã³ã³ãããæ§ç¯ããæ¢è£œã®ã³ã³ãããswarmã¯ã©ã¹ã¿ã«å
¬éããŸãã