Slide 1

Slide 1 text

Ϣχοτςετ͕ೖΕΒΕͳ͍ ϨΨγʔͳιʔεͰ $*͕ճͤΔΑ͏ʹͳͬͨ PHP ΧϯϑΝϨϯε 2018 2018/12/15 ΫʔίϜגࣜձࣾ ࡾӜɹࠀߒ

Slide 2

Slide 2 text

ࣗݾ঺հ •໊લɿࡾӜ ࠀߒ •Twitter IDɿ@MiuraKatsu •࢓ࣄɿCTOతͳ •޷͖ͳϑϨʔϜϫʔΫɿ LaravelɺSails.js • ॕӜ࿨Ϩοζఱߖഋ༏উɿ

Slide 3

Slide 3 text

ձһ੍॓ധɾϨϯλΧʔ༧໿αΠτ ʮ50$00ʂʯ IUUQTXXXUPDPPKQ

Slide 4

Slide 4 text

w Ұൠతͳ॓ധ༧໿αΠτɿ॓ധඅʴࢪઃ͔Βख਺ྉ w 50$00ɿ॓ധඅͷΈɻख਺ྉͳ͠ͷԷ஋ w ͦͷ͔ΘΓɿϢʔβ͕༗ྉ೥ձඅ w .8$ .FNCFSTIJQ8IPMFTBMF$MVC Ϟσϧ w αϒεΫϦϓγϣϯϞσϧ 50$00ͷϏδωεϞσϧ

Slide 5

Slide 5 text

ख਺ྉ ॓ധඅʢؚख਺ྉ ॓ധඅʢؚख਺ྉ ख਺ྉ ॓ധඅʢؚख਺ྉ ॓ധඅʢؚख਺ྉ ख਺ྉ ॓ധඅʢؚख਺ྉ ॓ധඅʢؚख਺ྉ Ұൠతͳ॓ധ༧໿αΠτ

Slide 6

Slide 6 text

೥ձඅ ॓ധඅͷΈ ॓ധඅͷΈ 5PDPP ॓ധඅͷΈ ॓ധඅͷΈ ॓ധඅͷΈ ॓ധඅͷΈ

Slide 7

Slide 7 text

w Πϯϑϥ؀ڥ͕ΦϯϓϨϛεɻ w ೥݄Ͱσʔλɾηϯλʔͷܖ໿ຬྃɻ w ߋ৽ͤͣʹ"84΁ͷҠߦΛܾஅɻ w Ϋϥεϝιου͞ΜʹɺΠϯϑϥߏஙίϯαϧґཔ w ࣗ෼ͨͪ͸ΞϓϦͷվमʹूத ϨΨγʔ୤٫ͷ͖͔͚ͬ IUUQTDMBTTNFUIPEKQDBTFTDPPDPN Πϯϑϥଆͷࣄྫ঺հˠ

Slide 8

Slide 8 text

w ιʔε؅ཧɿHJUMBCɺTWOɺHJUIVCೖΓཚΕΔ w ੈ୅؅ཧɿσΟϨΫτϦؙ͝ͱ w ؀ڥ؅ཧɿσΟϨΫτϦΛ෼͚ͯ w σϓϩΠɿGUQͰαʔό୆ͮͭखಈσϓϩΠ ΞϓϦέʔγϣϯଆͷ՝୊

Slide 9

Slide 9 text

ϨΨγʔΏ͑ʹͰ͖͍ͯͨ w %FW؀ڥɿෳࡶͳσΟϨΫτϦߏ଄ w ̍αʔόʹෳ਺؀ڥ͕όʔδϣϯҧ͍ͰଘࡏͰ͖͍ͯͨ w ख࡞ۀͷ഑ஔͳͷͰɺࣗ༝౓͕ߴ͍

Slide 10

Slide 10 text

ϨΨγʔ୤٫΁ͷୈҰา w ιʔε؅ཧΛ(JUIVCʹू໿ɺϒϥϯνӡ༻ w ෳ਺%FW؀ڥ΋༻ҙɿ%FWʙ%FW·Ͱ४උ w +FOLJOTʹΑΔࣗಈ%FQMPZͷಋೖ w %FQMPZFS QIQ $BQJTUSBOPΈ͍ͨͳ΍ͭͷ1)1൛ w %FWʙ%FWʹͦΕͧΕϒϥϯνࢦఆͰ%FQMPZՄೳ w 7BHSBOUͰͷ-PDBM؀ڥɿݸਓͷ։ൃ؀ڥ͸͜͜ɻ

Slide 11

Slide 11 text

։ൃͷखॱͷมԽ w (JUIVCͰϒϥϯνӡ༻ɿϓϧϦΫͱϨϏϡʔͷಋೖ w +FOLJOTɺຊ൪%FQMPZ+PC͸NBTUFSϒϥϯν͚ͩ w (JUIVCɺϨϏϡʔ௨Βͳ͍ͱNBTUFSʹ.FSHFͰ͖ͳ͍ઃఆ w ࢓૊Έͷಋೖɹˠɹ͜ͷจԽʹ׳ΕΔ

Slide 12

Slide 12 text

w (JUIVCͰ13ͷ$IFDL͕(SFF͡Όͳ͍ͱ.FSHFͰ͖ͳ͘ ͯɺ+FOLJOTͰࢦఆͨ͠؀ڥʹ#SBODIΛબΜͰ%FQMPZͰ ͖Δ༻ʹͳͬͨΒɾɾɾ w $*Λճ͍ͨ͠ΑͶɻ w Ͱ΋Ϣχοτςετ͸ͱͯ΋ೖΕΒΕͳ͍ɿιʔεతʹ ࣍ͷ45&1

Slide 13

Slide 13 text

$PEFDFQUJPO IUUQTDPEFDFQUJPODPN

Slide 14

Slide 14 text

$PEFDFQUJPO w ςετϑϨʔϜϫʔΫ w l୯ମςετɺػೳςετɺड͚ೖΕςετΛͭͷํ๏Ͱ ͙͢ʹॻ͚ΔΑ͏ʹͳΔͨΊͷπʔϧͳͷͰ͢ɻz IUUQTQJDDBHMJBOJHJUIVCJP$PEFDFQUJPOEPDTKB@+1

Slide 15

Slide 15 text

ड͚ೖΕςετ ʢBDDFQUBODFUFTUʣ w ϢʔβςετɺΞΫηϓλϯεςετ w ϒϥ΢βΛ࣮ࡍʹಈ͔͢&&ͷςετ w ϑϨʔϜϫʔΫɺݴޠɺσʔλϕʔεʹΑΒͳ͍ w ϒϥοΫϘοΫεςετ

Slide 16

Slide 16 text

̎छྨͷϒϥ΢β w 1)1#SPXTFS1)1ͱD63-͚ͩͰͲΜͳ؀ڥͰ΋࣮ߦ Ͱ͖Δɻ+BWBTDSJQU͕࣮ߦͰ͖ͳ͍ɻ w 4FMFOJVN8FC%SJWFS4FMFOJVN4FSWFS͕ඞཁɻ .PCJMF&NVMBUF͕Ͱ͖ͳ͍ɻʢ8FC%SJWFSͷ໰୊ʁʣ

Slide 17

Slide 17 text

w 4FMFOJVNͰςετ͍͚ͨ͠Ͳɺ4FMFOJVNαʔόཱͯΔͷΊΜͲ͍͘͞ w %PDLFS)VCʹ͋ͬͨɻIUUQTIVCEPDLFSDPNVTFMFOJVN w $PEFDFQUJPOͷ࣮ߦ؀ڥߏங͠ͳ͍ͱ͚ͩͲɺαʔόཱͯΔͷΊΜͲ͍͘͞ w %PDLFS)VCʹ͋ͬͨɻIUUQTIVCEPDLFSDPNSDPEFDFQUJPO DPEFDFQUJPO w %PDLFSDPNQPTFͰ࡞Εͦ͏ɻ %PDLFS)VCʹ͋ͬͨɻ

Slide 18

Slide 18 text

EPDLFSDPNQPTFZNM version: '2' services: codecept: image: codeception/codeception depends_on: - chrome - firefox volumes: - './tests:/project/tests' - './codeception.yml:/project/codeception.yml' chrome: image: 'selenium/standalone-chrome-debug:2.53.1' ports: - '5901:5900' firefox: image: 'selenium/standalone-firefox-debug:2.53.1' ports: - '5902:5900'

Slide 19

Slide 19 text

ίϚϯυ w TFMFOJVNαʔό্ཱͪ͛ >docker-compose up -d chrome firefox w EPDLFS಺ͷCSPXTFSͷڍಈ֬ೝ 7/$ >open vnc://x:[email protected]:5901 w $PEFDFQUJPOͰͷςετ࣮ߦ >docker-compose run codecept run -x optional -vv -- html=_report.html --env firefox --env chrome --env phpbrowser -g all

Slide 20

Slide 20 text

.BLFpMF .PHONY: all DOCKER_COMPOSE ?= docker-compose GROUP ?= all all: ##@test [TEST] shorthand for $(MAKE) up run-tests up: ##@development start stack $(DOCKER_COMPOSE) up -d chrome firefox run-tests: ##@test run tests $(DOCKER_COMPOSE) run codecept run -x optional -vv -- html=_report.html --env firefox --env chrome --env phpbrowser -g ${GROUP}

Slide 21

Slide 21 text

%PDLFSͱ$PEFDFQUJPOΛ࢖ͬͯ&&ςετ Λ؆୯ʹ࣮ߦ΋$*΋Ͱ͖Δ؀ڥΛ࡞ͬͯΈͨɻ w IUUQTRJJUBDPN.JVSB,BUTVJUFNT EBBEC w IUUQTHJUIVCDPN.JVSB,BUTV DPEFDFQUJPO@FBTZ@BDDFQUBODF

Slide 22

Slide 22 text

σϞ ͕࣌ؒ͋Ε͹ɾɾɾ

Slide 23

Slide 23 text

$JSDMF$* w $*͸$JSDMF$*Ͱճ͢ɻ+FOLJOT͸%FQMPZʹઐ೦ɻ w $JSDMF$*Ͱ΋ಉ͡EPDLFSDPNQPTFΛ࢖͍͍ͨ w ࣮ߦλΠϓ͸EPDLFS͡Όͳͯ͘ɺNBDIJOF w DJSDMFDJDPOpHZNM಺ʹಉ͡EPDLFSDPNQPTFίϚϯυ

Slide 24

Slide 24 text

$*ͷྲྀΕ w (JUIVCͰNBTUFSʹ13 w ˠ+FOLJOTͰ%FW؀ڥʹ%FQMPZ w ˠ$JSDMF$*Ͱ$PEFDFQUJPOͰ"DDFQUBODF5FTUΛ%FW̌؀ڥͰ࣮ߦ 1VMM3FRVFTU 8FCIPPL %FQMPZ "DDFQUBODF5FTU %FW̌؀ڥ

Slide 25

Slide 25 text

޻෉ w ౎౓%PDLFS*NBHFΛ1VMM͢Δͱ͕͔͔࣌ؒΔ w %PDLFS*NBHFͷ$BDIF࡞͓ͬͯ͘ w ࢀߟɹ$JSDMF$JͰ%PDLFSΠϝʔδΛΩϟογϡ͠Ϗ ϧυΛര଎Ͱߦ͏IUUQTRJJUBDPNUBLFDPSF!HJUIVC JUFNTBCFC

Slide 26

Slide 26 text

޻෉̎ w EFW؀ڥͳͷͰIUUQͷΞΫηε΋*1ߜͬͯΔ w ςετͷ౎౓ηΩϡϦςΟάϧʔϓʹ௥Ճɾ࡟আ #!/bin/sh export AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} export AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} export AWS_DEFAULT_REGION="ap-northeast-1" #dev-circleci-codeception-sg COMSECURITYGROUP=“sg-yoursecuritygroupid“ MYIP=`curl -s ifconfig.me` aws ec2 authorize-security-group-ingress --group-id ${COMSECURITYGROUP} -- protocol tcp --port 443 --cidr ${MYIP}/32 aws ec2 revoke-security-group-ingress --group-id ${COMSECURITYGROUP} -- protocol tcp --port 443 --cidr ${MYIP}/32

Slide 27

Slide 27 text

ॻ͍͍ͯΔςετ w ࠷௿ݶͷػೳ τοϓϖʔδͷදࣔɺӳ೔தؖ੾Γସ͑ɺ ݕࡧɺϩάΠϯ౳ʣͷςετ͚ͩ࡞੒ w $*ͷ໨తɿσάϨɾطଘ΁ͷӨڹ͕ͳ͍͔ͷνΣοΫɻ

Slide 28

Slide 28 text

ͪΐͬͱ͚ͩ ϨΨγʔ͔Β୤٫

Slide 29

Slide 29 text

·ͱΊ w ϨΨγʔ؀ڥͰ͸ɺແཧʹϢχοτςετ͡Όͳͯ͘΋ &&ͷड͚ೖΕςετ͔Β͸͡Ίͯ͸Ͳ͏ͩΖ͏͔ɻ w &&Ͱͷ$*ɺࣗಈ%FQMPZͷ࢓૊Έ͑͞੔͑ΒΕΕ͹ɺͳ Μͱ͔ͳΔɻ w ϨΨγʔͰ΋$*͸ճͤΔɻ

Slide 30

Slide 30 text

ຊ֨తʹϨΨγʔ͔Βͷ୤٫ w ൈຊతվमɻͱ͍͏͔࡞Γସ͑ɻ w 1)1 $BLF1)1 "VSPSB .ZTRM "NB[PO-JOVY w Ϣχοτςετ΋ಋೖ༧ఆ w ΋ͪΖΜड͚ೖΕςετ΋

Slide 31

Slide 31 text

ΤϯδχΞืूத IUUQTXXXXBOUFEMZDPNDPNQBOJFTUPDPP