PHPカンファレンス関西 2018 CircleCI 2.0 を使い倒そうというタイトルでトークしたものです
$JSDMF$*Λ͍ͦ͏QIQDPOGFSFODF,BOTBJLVOJU
View Slide
ࣗݾհ✓!LVOJU✓ߴڮ✓OFDPNPSJ--$✓ʮ1)1ϚχϡΞϧΛಡ͏ʯQPEDBTU✓IUUQQIQNBOVBMOFDPNPSJBTJB✓QIQPOEPD✓ฌݿݝग़
Կ͓͍ͯ✓ݱࡏɺདྷͷ$BLF'FTUΛͲ͜Ͱ։࠵͢Δ͔ͱ͍͏։࠵ͷථ͕ߦΘΕ͍ͯ·͢✓ͦͷީิʹͳΜͱຊؚ͕·Ε͓ͯΓ·͢ͷͰͥͻօ͞ΜථΛ͓ئ͍͠·͢ʂ✓IUUQTDBLFGFTUPSH✓ථʹ.Z$BLF1)1αΠτͷొ͕ඞཁͱͳΔͷͰͦͷ͚͓ͩؾΛ͚͍ͭͩ͘͞ʂ
ͦͦ$*ͱ✓8JLJQFEJB͞ΜʹΑΕ✓$POUJOVPVT*OUFHSBUJPOͷུ✓ܧଓతΠϯςάϨʔγϣϯ✓ओʹϓϩάϥϚʔͷΞϓϦέʔγϣϯ࡞࣌ͷ࣭վળೲظͷॖͷͨΊͷश׳ͷ͜ͱͰ͋ΔɻΤΫετϦʔϜɾϓϩάϥϛϯά 91ͷϓϥΫςΟεͷҰͭͰɺڱٛʹϏϧυςετɺΠϯεϖΫγϣϯͳͲΛܧଓతʹ࣮ߦ͍ͯ͘͜͠ͱΛҙຯ͢Δ
݁ہ$*ͬͯͳʹ͢Μͩʁ✓ԿΒ͔ͷτϦΨʔΛड͚ͯ✓ܾΊΒΕͨॲཧΛߦ͏
τϦΨʔͱͳΔͷ✓(JU)VCʹίʔυΛQVTIͨ͠ͱ͖ʹىಈ✓ܾΊΒΕͨ࣌ؒʹىಈ✓खಈͰىಈ
࣮ߦ͢Δॲཧྫ✓ඞཁͳϥΠϒϥϦͷΠϯετʔϧ✓DPNQPTFSJOTUBMMతͳ✓ίʔσΟϯάελΠϧνΣοΫ✓߹ʹΑͬͯίʔυϑΥϚοτ͔͚ͯ͠·͏✓จ๏νΣοΫ✓ίϯύΠϧϦϯΫ 1)1Ͱͳ͍͚Ͳ✓ςετ ୯ମ&&✓σϓϩΠ
$JSDMF$*ʹ͍ͭͯ✓ͱͱ͍͏όʔδϣϯҧ͍ͷαʔϏε͕͋Δ✓དྷ݄ ʹऴྃ͢Δ✓͍͠ͱ͍͏ΛΑ͘ฉ͘✓͍ͭ࠷ۙ$JSDMF$*+BQBO͕Ͱ͖ͯɺࠓπΠολʔͰઈࢍΤΰαʔν͞ΕͯΔͷͰɺ࣭ͨ͠Β͙͢ʹ৯͍͍ͭͯΒ͑Δ͔Βνϟϯεʂ
͞ΑͳΒ$JSDMF$*✓6CVOUVͰͭ͘ΒΕͨશ෦ೖΓͷ7.্ͰςετΛߦ͏✓QIQFOW͕ΘΕ͍ͯͯඞཁʹԠͯ͡όʔδϣϯΛΓସ͑Δ✓.Z42-3FEJTඞཁʹԠͯ͑͡Δ✓σϑΥϧτͷڍಈ͕͋ΓɺͦΕΛͦͷ··͑ྑ͍ͷͰ͋Εઃఆ͕͋·Γඞཁͳ͔ͬͨ✓ͳΕͨਓ͔Β͢Δͱͱͯ؆୯
Α͏ͦ͜$JSDMF$*✓ಉ༷ͷ7.ϕʔεͷॲཧͰ͖Δ͕ਪ͞Εͯͳ͍✓ਪ͞ΕΔͷ%PDLFSΠϝʔδΛ͏ͷ✓%PDLFSͷ͕ࣝඞཁͱͳΔͷͰ֮͑Δ͜ͱ͕૿͑ͨ✓.Z42-3FEJTΛ͔ͭ͏ͳΒɺͦΕ༻ͷ%PDLFSΠϝʔδΛ͏ඞཁ͕͋Δ✓Θ͔ͬͯ͠·͑ɺԿ͔ίϯτϩʔϧͰ͖ΔͷͰศརͳͷ͕ͩɺ֮͑Δ͜ͱ͕૿͑ͨͷͰͱ͖ͬͭʹ͍͍͘͠ͱ͍͍ͬͯΔͻͱ͕ଟ͍
$JSDMF$*ͷར༻ྉۚʁ✓ແྉ͕͋Δͷͬͯ͠·ͨ͠ʁ✓ίϯςφ✓ฒྻ࣮ߦͰ͖ͳ͍✓݄·ͰॲཧՄೳ✓ຊ֨తʹ͏ͱ͍͍ײ͡ʹ͍Δ࣌ؒ✓ରϦϙδτϦ࣮ߦϢʔβ͕ෳͰ͍͍✓ϓϥΠϕʔτϦϙδτϦͰ͍͍✓ฒྻɺ࣮ߦίϯςφʹԠͯ͡՝ۚ͞ΕΔ✓ίϯςφ૿͢͝ͱʹ݄✓·ͩҰൠެ։͞Εͯͳ͍͕ɺैྔ՝ۚϓϥϯՃ͞ΕΔ༧ఆ
$JSDMF$*Ͱͷಈ࡞Πϝʔδ✓%PDLFSΠϝʔδΛऔಘ͠ɺίϯςφΛىಈ✓ىಈͨ͠ίϯςφ্ʹιʔεΛHJUDMPOF✓ىಈͨ͠ίϯςφ্ͰDPNQPTFSJOTUBMMΛ࣮ߦ✓ىಈͨ͠ίϯςφ্ͰQIQDTΛͬͯίʔσΟϯάελΠϧνΣοΫ✓ىಈͨ͠ίϯςφ্Ͱ1IBOΛͬͯ੩తղੳͯ͠จ๏νΣοΫ✓ىಈͨ͠ίϯςφ্Ͱ1)16OJUΛͬͯ୯ମςετ✓͜͜·Ͱͷॲཧ͕ޭ͔ͨ͠Ͳ͏͔ΛTMBDLʹ௨
$JSDMF$*ͱͷ࿈ܞํ๏✓ઃఆϑΝΠϧɺϦϙδτϦͷτοϓʹDJSDMFDJͱ͍͏σΟϨΫτϦΛ࡞ΓɺͦͷதʹDPOpHZNMͱ͍͏ϑΝΠϧΛஔ͘ͱͦΕΛͬͯ$*͕࣮ߦ͞ΕΔ✓DPOpHZNMͷॻ͖ํΛ؆୯ʹઆ໌͍͖ͯ͠·͢
DJSDMFDJDPOpHZNMversion: 2jobs:build:docker:- image: circleci/php:7.1-apache-browsers- image: circleci/mysql:5.7steps:- checkout- restore_cache:keys:- composer-{{ arch }}—{{ checksum "composer.lock" }}- run: composer install- save_cache:key: composer-{{ arch }}—{{ checksum "composer.lock" }}paths:- ~/.composer/cache- run: ./vendor/bin/phpcs —standard=PSR2 ./app- run: mkdir ~/phpunit- run: ./vendor/bin/phpunit --log-junit ~/phpunit/junit.xml- store_test_results:path: ~/phpunit- store_artifacts:path: ~/phpunit
DJSDMFDJDPOpHZNM✓ઃఆ͢ΔηΫγϣϯ✓KPCT✓ෳͷδϣϒΛઃఆ͢Δ✓XPSLqPXT✓ෳͷδϣϒΛͲͷΑ͏ʹ࣮ߦ͢Δ͔Λઃఆ͢Δ
KPCT✓δϣϒΛઃఆ͢Δ δϣϒෳ͋ͬͯྑ͍✓δϣϒ໊ ௨ৗCVJMEͱ͍͏໊લʹ͢Δ✓ޙ΄Ͳग़ͯ͘ΔXPSLqPXͰ༻͢Δ✓FYFDVUPSΛઃఆ✓EPDLFS✓NBDIJOF ಉ༷ͷ7.ڥ✓NBDPT✓TUFQTͰࡉ͔͍࣮ߦ༰Λઃఆ͢Δ
TUFQT✓DIFDLPVU✓ιʔεΛDIFDLPVU͢Δ✓SVO✓ίϚϯυΛ࣮ߦ͢Δ✓SFTUPSF@DBDIFTBWF@DBDIF✓DPNQPTFSCVOEMFSΛຖճ͍ͬͯΔͱ࣌ؒͷΉͩͳͷͰɺదͳΩʔΛͬͯΩϟογϡ͢Δ✓TUPSF@UFTU@SFTVMUTTUPSF@BSUJGBDUT✓ςετ݁ՌΛ$*ͷ݁Ռදࣔʹөͤ͞Δ
SVO✓ίϚϯυΛ࣮ߦ͢Δͷ͕ͩɺ࣮ߦը໘Ͱදࣔ͢ΔจࣈྻΛઃఆͰ͖Δ- run: ./vendor/bin/phpunit --log-junit ~/phpunit/junit.xml- run:name: run testscommand: ./vendor/bin/phpunit --log-junit ~/phpunit/junit.xml- run:name: run testscommand: |./vendor/bin/phpunit --log-junit ~/phpunit/junit.xml
ෳͷ%PDLFSΠϝʔδΛ͏✓EPDLFSFYFDVUPSͷઃఆͰෳͷΠϝʔδΛࢦఆ͢Δ✓ͭʹࢦఆͨ͠Πϝʔδ͕ϓϥΠϚϦΠϝʔδʹͳΓɺTUFQTҎ߱ͷίϚϯυͦͷΠϝʔδʹର࣮ͯ͠ߦ͞ΕΔ✓ͦͷଞͷίϯςφͷϓϩηεʹɺ ϙʔτ൪߸ͰΞΫηεͰ͖Δversion: 2jobs:build:docker:- image: php:7.1-apache- image: circleci/mysql:5.7environment:MYSQL_ROOT_PASSWORD: rootMYSQL_DATABASE: test_appMYSQL_USER: testMYSQL_PASSWORD: test- image: redis:3.2
XPSLqPX✓ෳͷδϣϒΛͲͷΑ͏ͳґଘؔ ॱ൪Ͱ࣮ߦ͢Δ͔ΛఆٛͰ͖Δ✓ྫ͑ɺQIQDTͰΤϥʔ͕ͳ͍߹ͷΈɺQIQVOJUΛΒ͍ͤͨͱ͔✓ܾ·ͬͨ࣌ؒʹδϣϒΛ࣮ߦ͢Δػೳ͋Δ
DJSDMFDJDPOpHZNMversion: 2jobs:phpcs: ...test: ...deploy: ...workflows:version: 2phpcs_test_deploy_workflow:jobs:- phpcs- test:requires:- phpcs- deployfilters:branches:only:- masterrequires:- test
DJSDMFDJDPOpHZNMversion: 2jobs:daily_job: ...workflows:version: 2cron_workflow:triggers:- schedule:cron: “0 18 * * *”filters:branches:only:- developjobs:- daily_job
$JSDMF$*✓ઃఆʹؔͯ͠ɺ࣮ߦ͍ͨ͠ίϚϯυΛSVOͰฒ͍͚͍͍͚ͯͩͳͷͰͦΜͳʹ͘͠ͳ͍✓ϩʔΧϧͰಈ࡞νΣοΫ͢ΔDJSDMFDJίϚϯυ͕४උ͞Ε͍ͯΔ✓ඍົʹڍಈ͕͓͔͍͠✓XPSLqPXʹରԠͯ͠ͳ͍ɾɾɾ
$JSDMF$*✓ಈ࡞Πϝʔδͱઃఆํ๏͕Θ͔ͬͯ؊৺ͷ%PDLFSͷ͜ͱ͕Θ͔Βͳ͍ͷͰɺͲ͏ͨ͠Βྑ͍͔Θ͔Βͳ͍✓ͱ͍͏͜ͱͰɺ͔͜͜Β%PDLFSೖ
࣌ؒνΣοΫ͜͜·Ͱͩͱྑ͍ͳɾɾɾ
%PDLFSͷқ✓%PDLFSͷқஈ֊ʹ͔ΕΔͷͰͳ͍͔ʁ✓ୈҰஈ֊͞Ε͍ͯΔΠϝʔδΛར༻͢Δ͚ͩ✓ୈೋஈ֊ࣗͰΠϝʔδΛ࡞ͯͦ͠ΕΛར༻͢Δ
Πϝʔδ✓%PDLFS)VCͱ͍͏࡞ࡁΈΠϝʔδΛ͢Δॴ͕͋Δ✓ͦ͜ʹͨ͘͞ΜͷΠϝʔδ͕ஔ͔Ε͍ͯΔͷͰͦΕΛར༻͢Δ͚ͩͰ͔ͳΓͷ͜ͱ͕Ͱ͖Δ✓ײ֮తʹCSFXJOTUBMMͰNZTRMΛϩʔΧϧʹೖΕΔΈ͍ͨͳؾͰ͔ͭ͑Δ
࣮ࡍʹͬͯΈΔ✓1)1BQBDIFΛ%PDLFSͰಈ͔ͯ͠ΈΔ˞EPDLFSίϚϯυͷΦϓγϣϯ͕͓΅͑ΒΕΜͷΜ͡Όʔͱ͍͏͝ҙݟʹಉҙ͠·͢ɻ͍͋͢͝ΔͷͰɾɾɾdocker container run -it --rm -p 80:80 -v ~/Study/phpkansai/demo/htdocs:/var/www/html php:7.1-apache
Πϝʔδ✓ͨͩ͠ɺࣗͷ༻్ʹશʹ߹க͍ͯ͠ΔͱݶΒͳ͍✓ྫ͑ɺ1)1ͷΦϑΟγϟϧΠϝʔδʹJOUM֦ுYEFCVHೖͬͯͳ͍✓ΦϑΟγϟϧΠϝʔδ͋Δఔ৴༻Ͱ͖Δ͕ɺྑΠϝʔδجຊతʹ৴༻Ͱ͖ͳ͍✓͍ͭ࠷ۙɺ%PDLFS)VCͰ͞Ε͍ͯͨΠϝʔδʹʮ҉߸௨՟࠾۷Ϙοτʯ͕ೖ͍ͬͯͨ͜ͱ͕χϡʔεʹͳͬͯͨ✓IUUQTKQUFDIDSVODIDPNUBJOUFEDSZQUPNJOJOHDPOUBJOFSTQVMMFEGSPNEPDLFSIVC
ͳΒࣗͰͭ͘Ζ͏✓%PDLFSΠϝʔδΛࣗͰͭ͘Ζ͏ͱ͢ΔͱҎԼͷ͕ࣝඞཁ✓%PDLFSࣗମͷཧղ✓-JOVYσΟετϦϏϡʔγϣϯͷཧղ✓ZVNͱ͔BQUͱ͔✓-JOVYίϚϯυͷཧղ✓֤ιϑτΣΞͷNBLFํ๏ͷཧղ
ٸʹϋʔυϧ͕͕͋Δ✓ઌఔ͍͕ͬͨɺ%PDLFS)VCͰΦϑΟγϟϧΠϝʔδ͕͞Ε͍ͯΔ✓͋ΘͤͯΠϝʔδΛ࡞͢ΔͱͱͳΔ%PDLFSpMF͕ެ։͞Ε͍ͯΔͷ͕͋Δ✓ެ։͞Ε͍ͯΔ%PDLFSpMFΛΈΔ͚ͩͰ͔ͳΓͷ͕ࣝಘΒΕΔ✓ͳͷͰ࠷ॳΦϑΟγϟϧΠϝʔδΛݩʹɺখมߋͨ͠ΠϝʔδΛ࡞Δͱ͜Ζ͔Β࢝ΊΔͷ͕͍͍✓1)1ͷΦϑΟγϟϧΠϝʔδʹYEFCVH֦ுΛ͍Ε͚ͨͩͷΠϝʔδΛ࡞Δͱ͔
ࣗͰΠϝʔδΛ࡞ΔϝϦοτ✓ྫ͑ɺ$JSDMS$*Ͱɺ1)1ͷΦϑΟγϟϧΠϝʔδΛͦͷ··͏ͱɺຖճ$*Λճͨ͢ͼʹJOUM֦ுΛೖΕΔॲཧΛΒͤΔඞཁ͕͋Δ✓$*ͷ͕࣌ؒ৳ͼΔ✓༧ΊJOUM֦ு͕ೖͬͨΠϝʔδΛ࡞͓͚ͬͯɺͦͷ͚࣌ؒͩ$*ͷ͕࣌ؒॖͰ͖Δ
%PDLFSʹ͍ͭͯ✓ࠓճͷηογϣϯͰΑ͘Θ͔ΒΜ͔ͬͨํɺͥͻͱ͘͞ΒΠϯλʔωοτॴଐͷલဠ͞ΜͷࢿྉΛࢀর͍ͯͨͩ͘͠ͷ͕͍͍͔ͱࢥ͍·͢✓લဠ͞Μͷࢿྉ%PDLFSʹֶ͍ͭͯͿͷʹ࠷దͩͱࢥ͍·͢ ࢲେม͓ੈʹͳ͓ͬͯΓ·͢✓IUUQTXXXTMJEFTIBSFOFU[FNCVUTV
ϚϯΨͰΘ͔Δ%PDLFS✓ື͍͋͞Μ͕ϚϯΨͰΘ͔Δ%PDLFSͱ͍͏ࢠΛॻ͔Εͯ·͢✓͜Εଓ͖Ͱࠓޙଓ͘Έ͍ͨͳͷͰ͜Ε͔Β࢝ΊΑ͏ͱ͍͏ํʹͪΐ͏Ͳ͍͍͔ʂ✓IUUQTOPUFNVMMNJOBUPMMOOGECFGGD
ͯ͞ɺ%PDLFSͱ✓%PDLFSࣾ چEPU$MPVEΛத৺ʹΦʔϓϯιʔεͱͯ͠։ൃ͞Ε͍ͯΔίϯςφܕԾԽٕज़✓ͷय़ʹόʔδϣϯͷ͚ํ͕มߋ͞Εͯɺ%PDLFS$&ͱ͍ͬͨܗʹͳͬͨ✓ͦΕ·Ͱɺ%PDLFSΈ͍ͨͳײͩͬͨ͡
7.ͱͷҧ͍✓7.࣮ࡍͷϋʔυΣΞΛΤϛϡϨʔγϣϯ͠ɺͦͷ্Ͱ࣮ࡍͷ04ΛՔಇͤ͞Δ✓ίϯςφܕԾԽٕज़Ͱɺطʹಈ͍͍ͯΔ04ͷϦιʔεΛͬͯɺ৽ͨͳڥΛىಈ͢Δ
7.ͱͷҧ͍)804)ZQFSWJTPS)8 )804 04"QBDIF 3FEJT1)1"QQT)804.Z42-7.)804%PDLFS&OHJOF"QBDIF 3FEJT1)1"QQT.Z42-%PDLFS
Կ͕خ͍͠ͷʁ✓ىಈ͕͍࣌ؒ✓Ծ)8͓Αͼ04ͷىಈ෦͕ͳ͍✓ফඅϦιʔε͕গͳ͍
%PDLFSͷಈ࡞Registry image containerdocker image pulldocker image pushdocker container rundocker container commitDockerfiledocker image builddocker container exec
3FHJTUSZͱ✓%PDLFS)VCͷΑ͏ʹɺ%PDLFSΠϝʔδΛ͢ΔͷΛ3FHJTUSZͱ͍͏✓%PDLFS)VC%PDLFS͕ࣾӡӦ͍ͯ͠Δ3FHJTUSZ✓"84ʹ&$3ɺ(PPHMF$MPVEʹ($3ͱ͍͏3FHJTUSZ͕͋Δ✓%PDLFS)VCͰ͞ΕͯΔͷ✓$FOU04VCVOUVͷ04ͷΠϝʔδ✓1)13VCZͷݴޠؚ͕·ΕΔΠϝʔδ✓&MBTUJD4FBSDI5FOTPS'MPXͷιϑτΣΞؚ͕·ΕΔΠϝʔδ
࣮ࡍͲ͏͏ͷ͔ʁ✓%PDLFS)VC͔Β%PDLFSΠϝʔδΛऔಘ͢Δ✓औಘͨ͠ΠϝʔδΛ࣮ߦ͢Δͱ࣮ߦڥίϯςφͱͯ͠ಈ࡞͢Δ✓7.ͱҧͬͯɺ࣮ߦΛऴྃ͢Δͱίϯςφʹର͢Δมߋഁغ͞ΕΔ✓࣮ߦ͢Δͨͼʹಉ͡ঢ়ଶ͔Βಈ࡞͢Δ✓ͦΕͰࠔΔ߹ ·͊ɺ΄ͱΜͲ͕ͩɺϩʔΧϧͷϑΝΠϧγεςϜΛϚϯτͯͦ͜͠ʹσʔλΛӬଓԽ͢Δ
Πϝʔδͱίϯςφ✓࠷ॳΑͬͪ͘͝ΌʹͳΔ✓%PDLFSΛ֮͑Δࡍͷ࠷ॳͷϋʔυϧ✓࣮ࡍʹಈ͔ͯ͠ײ֮Λ֮͑Δ✓1)1ͱ1)1ͷΠϝʔδΛऔಘͯ͠ίϯςφΛಈ͔ͯ͠ΈΔ
ࣗͰJNBHFΛCVJME✓%PDLFS)VCͰ͞Ε͍ͯΔΠϝʔδΛݩʹಠࣗʹΧελϚΠζͨ͠ΠϝʔδΛ࡞͢Δ✓%PDLFS)VCͰ͞Ε͍ͯΔ1)1ͷΠϝʔδ൚༻తͳͷͰɺྫ͑JOUM֦ுೖ͍ͬͯͳ͍ͷͰɺ࠷ۙͷϑϨʔϜϫʔΫΛಈ͔ͦ͏ͱ͢ΔͱɺಠࣗCVJME͢Δඞཁ͕͋Δ✓ͦ͏͍ͬͨ߹ʹ͏ͷ͕%PDLFSpMF
Ξϯνύλʔϯ✓طʹ7BHSBOUBOTJCMFͷڥ͕͋Δ߹ʹɺ%PDLFSΠϝʔδͷ࡞ʹBOTJCMFͷϓϨΠϒοΫΛ͑ͳ͍͔ࢼ͢✓·ΔͷͰΊͨ΄͏͕͍͍✓গͳ͘ͱࢲ·ͬͨ✓Ͳͬͪʹ͕͋ͬͯಈ͔ͳ͍ͷ͔Θ͔Βͳ͘ͳΔ✓ૉʹ%PDLFSpMF͔Β࡞Δํ๏Λ࠷ॳʹशಘ͠·͠ΐ͏✓BOTJCMFͱͷΈ߹ΘͤΛࢼ͢ͷͦͷޙͰ͍͍
%PDLFSpMF✓'30.36/"%%$01:ͷগͷίϚϯυΛͬͯɺΠϝʔδΛ࡞͢ΔखॱΛࣔ͢ϑΝΠϧ✓ඞཁͳࣝͱͯ͠TIεΫϦϓτΛॻ͘ײ͡✓࣮ߦ͍ͯ͘͠ίϚϯυΛॱ൪ʹهड़͍ͯ͘͠ײ͡✓͜ͷϑΝΠϧΛݩʹΠϝʔδΛCVJME͢Δ
%PDLFSpMFͱCVJMEํ๏FROM php:7.2-cliRUN pecl install xdebug-2.6.0 \&& docker-php-ext-enable xdebugdocker build -t kunit/php:7.2-cli .docker run -it --rm kunit/php:7.2-cli php -vdocker run -it --rm php:7.2-cli php -v
͜Θ͘ͳ͍Αʂ✓$JSDMF$*%PDLFSͳΕΔͱͱͯศར✓ಛʹ%PDLFSؔ࿈ͷٕज़ࠓޙͲΜͲΜ্͕͍ͬͯ͘ͱࢥ͏ͷͰ͜ΕΛػձʹ֮͑Δͷ͕͍͍ͱࢥ͏
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠