YAPC::Fukuoka 2017 HAKATAでロリポップのコアAPIについて話しました。
ʙ1FSMόϦόϦॻ͚Δͬͯਧ͍ͯϖύϘʹೖࣾ͠·ͨ͠ʙࢁԼ(.01FQBCP *OD:"1$'VLVPLB)","5"ϨΨγʔ1FSMͱʮࠓʯΛΈ߹Θͤɺ։ൃΛܧଓ͠ଓ͚Δํ๏
View Slide
IUUQTUFOTOBQPODPNνʔϑςΫχΧϧϦʔυࢁԼ!QZBNBϗεςΟϯάࣄۀ෦
IUUQTUOTKQ
࠷ॳʹ͓͑͠·͢ɺόʔδϣϯΞοϓ͠ͳ͍ଆͷਓؒͰ͢
ϩϦϙοϓͷ؆қγεςϜߏਤ1FSMϩϦϙοϓͷίΞ"1*1FSM.Z42-4FSWFS'SPOU"1*3BJMT;FOEਃ͠ࠐΈαΠτ ίΞ"1*ϑϩϯτ"1* ϗεςΟϯάαʔό܈.BJM4FSWFS8FC4FSWFSܖใαʔόใΛίϯτϩʔϧαʔόϓϩϏδϣχϯάͷ࣮ߦࢦࣔ
wඇৗʹγϯϓϧͳ"1*Ͱ͋ΔͨΊɺੵۃతͳόʔδϣϯΞοϓͷಈػ͕ͳ͔ͬͨw෦"1*ͳͷͰɺϑϩϯτܥαʔόͱൺΔͱɺόʔδϣϯΞοϓͷ༏ઌ͕Լ͕ͬͯ͠·͏w$1"/ͱͷဃ͕େ͖͘ͳΓɺͲΜͲΜόʔδϣϯΞοϓ͕ࠔʹͳ͍͖ͬͯɺಈ͖͕औΕͳ͍ϖύϘݻ༗ͷࣄͳͥ1FSM
wόʔδϣϯΞοϓίετΛ͏ʹͯ͠ɺ1FSMͷॻ͖खΛूΊΔ͜ͱ͕ͦΕͳΓʹࠔͰ͋Δw৽ن։ൃҊ݅Ͱ1FSM͕બࢶʹೖΓͮΒ͍͜ͱ͔Βࢢʹগͳ͍wࣾʹ͓͍ͯϝϯςφ͕ඇৗʹݶΒΕ͖ͯͭͭ͋Γɺݹࢀϝϯόʔ͔ଞݴޠͰͦΕͳΓʹ࿅͕͋ΔΤϯδχΞ1FSMͷࣄͳͥ1FSM
ϩϦϙοϓʂ·ͩ·ͩաఔαʔϏε͕ਐԽ͢ΔͳΒɺ"1*ܧଓత։ൃ͕ඞཁ
ܧଓత։ൃΛߦ͏ͨΊʹΓӽ͑ͨͷwڞ༻αʔόΛར༻ͨ͠։ൃڥwϝϯςφϯε͞Ε͍ͯͳ͍ϢχοτςετwΦϖϨʔγϣϯͷΦʔτϝʔγϣϯԽ
ڞ༻αʔόΛར༻ͨ͠։ൃڥ
ڞ༻αʔόΛར༻ͨ͠։ൃڥ%FW"1*.Z42-4FSWFS.BJM4FSWFS8FC4FSWFSैདྷ։ൃڥΛίϯςφԽ͠ɺڞ༻ʹΑΔϦιʔεڝ߹Λແ͘͢$POUBJOFSݱࡏ%FW"1*.Z42-4FSWFS.PDL.BJM.PDL8FC
ڞ༻αʔόΛར༻ͨ͠։ൃڥ1FSMͷڥ͔ΒUBSH[ͰϞδϡʔϧΛશͯநग़͠ίϯςφԽ$ tar zcvf site_perl.tar.gz /usr/lib64/perl5/site_perl/5.8.8# in docker# tar zxvf site_perl.tar.gz# docker commit xxxxx private.pepabo.com/coreapi:latest
ϝϯςφϯε͞Ε͍ͯͳ͍Ϣχοτςετ
ϝϯςφϯε͞Ε͍ͯͳ͍Ϣχοτςετଞͷίϯϙʔωϯτͱີ݁߹ͳͷͰςετ͕ॻ͖ͮΒ͍ɺࣦഊ͍͢͠%FW"1*8FC4FSWFSXFCFYBNQMFKQਃ͠ࠐΈ8FCαʔόʹFYBNQMFKQͷσΟϨΫτϦΛ࡞8FCαʔόͷਃࠐΈςετFYBNQMFKQͷਃࠐใ͕%#ʹ͋Δͳ͍8FC4FSWFSͱଓ͞Ε͍ͯΔ͍ͳ͍8FC4FSWFSͷσΟϨΫτϦ͋Δͳ͍
ϝϯςφϯε͞Ε͍ͯͳ͍Ϣχοτςετ.PDLԽ%#ͷঢ়ଶΛ࣋ͨͳ͍
ϝϯςφϯε͞Ε͍ͯͳ͍Ϣχοτςετ5FTU.PDL(VBSEΛར༻͠ɺ֎෦ίϯϙʔωϯτશͯ.PDLԽmy $mock =mock_guard(‘Hosting::Server::API::Ext', +{run => sub {my($self, $params) = @_;switch ($params->{'parameters'}) {case /—domain=example.com/ {return {key => $dummy_key,};}}},});
ϝϯςφϯε͞Ε͍ͯͳ͍Ϣχοτςετ5FTUNZTRMEΛར༻͠ɺςετσʔλͷিಥΛճආ͢Δsub new {my %self;my $class = shift;$self->{mysqld} = Test::mysqld->new(my_cnf => {'port' => '3306'}, copy_data_from => 't/data/mysql');$self->{dbh} = DBI->connect($self->{mysqld}->dsn, '', '') or die 'cannot connect to db';return bless $self, $class;}UEBUBNZTRM.Z42-UFTUDBTF"UFTUDBTF#.Z42-ϕʔεσʔλΛݩʹ৽نΠϯελϯεىಈςετέʔε͝ͱʹ༻͢Δ%#͕ҟͳΔͨΊΫϦʔχϯά͕ෆཁ
ϝϯςφϯε͞Ε͍ͯͳ͍Ϣχοτςετ5FTU%#MPBE@pYUVSFΛར༻͠ɺςετϨίʔυͷ४උΛ༰қʹͨ͠UEBUBNZTRM.Z42-UFTUDBTF"UFTUDBTF#.Z42-ϕʔεσʔλΛݩʹ৽نΠϯελϯεىಈDBTF@BZNMEPNBJOFYBNQMFDPNVTFSVTFS@QBUIIPNFVTFS@ʜ
ϝϯςφϯε͞Ε͍ͯͳ͍Ϣχοτςετ%SPOFJPͰࣗಈςετ࣮ߦIUUQTXXXTMJEFTIBSFOFUVE[VSBESPOFJPPQFOTUBDL%PDLFS4XBSN7.ESPOFJP7. 7. 7. 7. 7. 7.
ΦϖϨʔγϣϯͷΦʔτϝʔγϣϯԽ
ΦϖϨʔγϣϯͷΦʔτϝʔγϣϯԽMJHIUIUUQEͷ੍͕͋ΓɺखಈͰσϓϩΠ͢Δӡ༻σϓϩΠαʔόʹϩάΠϯ͠ɺHJUDMPOFEFQMPZTIΛ࣮ߦ͢ΔରతϓϩϯϓτʹΑΓHJUQVMMͳͲΛ࣮ߦSTZODͰσϓϩΠઌʹػܥαʔόͷGBTUDHJɺMJHIUUQEΛ࠶ىಈखಈͰಈ࡞֬ೝݱ༻ܥαʔόͷGBTUDHJɺMJHIUUQEΛ࠶ىಈσϓϩΠखॱखॱ͕ଟ͘ɺ͕͔͔࣌ؒΔɺଋറ͞ΕΔಈ࡞֬ೝ͕ਓʹґଘ͍ͯ͠Δ࠶ىಈ࿙ΕͳͲΛ͙͜ͱ͕ग़དྷͳ͍՝
$BQJTUSBOP
ΦϖϨʔγϣϯͷΦʔτϝʔγϣϯԽ$BQJTUSBOPΛར༻͠ɺσϓϩΠ͔Βಈ࡞֬ೝ·ͰΛࣗಈԽCVOEMFFYFDTUBHJOHEFQMPZKFOLJOKPC TMBDLOPUJGZCVOEMFFYFDQSPEVDUJPOEFQMPZεςʔδϯάσϓϩΠޙɺMJHIUUQEGBTUDHJͷ࠶ىಈࣗಈͰΠϯςάϨʔγϣϯςετΛ࣮ߦςετͷ݁ՌΛ4MBDL௨ ਖ਼ৗͰ͋Εຊ൪ڥσϓϩΠ
ΦϖϨʔγϣϯͷΦʔτϝʔγϣϯԽ͋ΒΏΔΦϖϨʔγϣϯΛ3BLFͰ࣮ݱɾSBLFEFQMPZσϓϩΠͷҰ࿈ͷྲྀΕΛ࣮ߦɾSBLFEPDLFS։ൃڥͷEPDLFSΛىಈɾSBLFEC%#εΩʔϚͷߋ৽
͜Ε͘Β͍Δͱɺʮ͜ΕͳΜ͔։ൃग़དྷΔΜ͡ΌͶʁʯײ͕ৢ͞ΕΔ
ʑ։ൃӡ༻͢Δٕज़ΑΓྑ͍ͷΛબͼ͍ͨ։ൃ͕ग़དྷΔঢ়ଶʹͳͬͨͱָͯ͠؍తͳঢ়گͰͳ͍w1FSMΛ͍ଓ͚Δ߹ɺ࠷৽ͷઃܭɺϞδϡʔϧΛར༻͢Δػձͳ͍wϝϯςφ͕ݮΔͱ͍͏͜ͱɺকདྷతʹةػతঢ়گΛট͘Մೳੑ͕͋Δ
/FYU4UFQ(PMBOH
8IZ3VTUͱൺͯใྔ͕ଟ͍͜ͱɺग़དྷΔ͜ͱͷࠩҟ͕গͳ͍wੈքతʹීٴͨ͠എܠ͕͋Γɺຊޠͷใ๛Ͱ͋ΔwՄൖੑ͕ඇৗʹߴ͍ͨΊɺӡ༻4IFMMͷஔ͖͑ʹద͍ͯ͠ΔwϗεςΟϯάαʔό͕ࡐͳͷͰɺςετͷͳ͍πʔϧ͍ͨ͘ͳ͍wงғؾͰ͍͍ͩͨߴʹಈ͘
ϑϨʔϜϫʔΫͷબطଘͷॲཧ͕ඇৗʹγϯϓϧͰ͋ΔͨΊ&DIPΛબͨ͠wখ͞ͳϓϩδΣΫτͰ3FWFMͱ&DIPΛൺֱ։ൃͨ͠w3FWFMόονॲཧͳͲαϙʔτ͓ͯ͠Γɺ3BJMTͬΆ͕͋ͬͨ͞ɺ֮͑Δ͜ͱଟ͍w&DIP࣮͕ബ͘ɺϛυϧΣΞ͕ॻ͖͍͢ɺ͋ΔఔεΫϦϓςΟϯά͕ඞཁͳ͜ͱͰϝϯόʔͷ(PMBOHͷशಘʹͪΐ͏Ͳྑ͍ϘϦϡʔϜʹࢥ͑ͨ
ࠔ͍ͬͯΔ͜ͱ(PMBOHͰ03.݁ߏͭΒ͍w42-ΛͳΔ͘ॻ͖ͨ͘ͳ͔ͬͨͷͰɺHPSNΛબͨ͠w"DUJWF3FDPSEͰҭͬͨͷͰɺϦϨʔγϣϯͷख͕ؒ݁ߏͭΒ͍w3FMBUFE1SFMPBEͳͲϦϨʔγϣϯઌͷϨίʔυΛऔಘ͢Δํ๏͕ෳ͋ͬͯɺ(PMBOHͬΆ͘ͳ͍wϞσϧͷҾ͕੩తܕ͚ͳͨΊѻ͍ͮΒ͍͜ͱ͔Βɺ$POUSPMMFS͕%#ʹؔ৺Λ࣮͕࣋ͭੈͷதʹଟ͍
CVU͔͠͠
݁Ռͱͯ͠গͮͭ͠ΠϯϑϥνʔϜʹ(PMBOH͕͖ࠜॳΊɺςετΛॻ͘श׳͍͖ͭͯͨ
࠷ޙʹwܧଓత։ൃ͕Մೳͳঢ়گ͕࡞ΕΔɺηΩϡϦςΟతͳཁ͕݅ͳ͚ΕແཧʹόʔδϣϯΛ্͛Δඞཁͳ͍wࡢࠓͷݴޠͷݯྲྀ1FSMʹ͋Δͱײ͡Δ͘Β͍1FSMʹϞδϡʔϧॆ࣮ͯ͠ΔͷͰࠓ෩ʹͳΕΔw/FYU4UFQྲྀߦΓ͚ͩͰͳ͘ɺνʔϜϚονϯάߟ͑ͨબΛ͠Α͏
܅ϖύϘͰಇ͔ͳ͍͔ʁ࠷৽ͷ࠾༻ใΛνΣοΫˠ !QC@SFDSVJU