WordCamp Kansai 2016 のセッション「WordPress テーマの継続的インテグレーション」の登壇資料です。 CI = Continuous Integration ( 継続的インテグレーション ) の入門的な位置づけとして自作の WordPress テーマで試した事例などを紹介しています。
(JU)VCͱ5SBWJT$*Ͱ8PSE1SFTTςʔϚΛςετɺϏϧυɺͦͯࣗ͠ಈԽ8PSE$BNQ,BOTBJ ӋΊ͙Έ
View Slide
ࣗݾհ@ӋΊ͙Έ!GFBUIFSQMBJO
ͭͬͨ͘ͷࣗݾհ@
ࣗݾհ"NFUIZTU@
ࣗݾհ"NFUIZTU@ࡢ݄ʹެ։8PSE1SFTTPSHެࣜσΟϨΫτϦܝࡌςʔϚ"NFUIZTU
ࣗݾհ"NFUIZTU@͡ΊͯࣗͰͭͬͨ͘ςʔϚ@T ςʔϚͷͻͳܗΛϕʔεʹ࡞'PVOEBUJPOͷάϦουγεςϜ4BTTͷιʔεϑΝΠϧಉࠝ'POU"XFTPNF(FOFSJDPOT
͜ͷ"NFUIZTUΛࣄྫʹɺ8PSE1SFTTςʔϚͷςετʹ͍͓ͭͯ͠·͢
Ωʔϫʔυͭ@(JU)VCͱ5SBWJT$*Ͱ8PSE1SFTTςʔϚΛςετɺϏϧυɺͦͯࣗ͠ಈԽ$*ɾςετɾࣗಈԽ
͓͠ͳ͕͖@ࣗ࡞ͷςʔϚ"NFUIZTUΛྫʹɺܧଓతΠϯςάϨʔγϣϯʹ͍͓ͭͯ͠·͢ ͖͔͚ͬ $*ͱ ͳͥΔͷ͔ Ͳ͏ͬͯΔͷ͔⁃ ςετհฤ⁃ $*࣮ߦɾӡ༻ฤ ·ͱΊऴΘΓʹ
͖͔͚ͬಋೖ5SBWJT$*ͰϏϧυ
IUUQTpSFHPCZKQBSDIJWFT͋ΔλΠϜϥΠϯͰ@
8PSE1SFTTͷςʔϚΛ5SBWJT$*ͰϏϧυ͢Δɻͱ͍͏هࣄʜ5SBWJT$*
5SBWJT$*@IUUQTUSBWJTDJPSH
5SBWJT$*@(JU)VC্ͷϦϙδτϦͱ࿈ܞͯ͠Կ͔Λ͢ΔαʔϏεͱΓ͋͑ͣࠓ͜ΕͰ0,
هࣄʹΔ
هࣄͷ༰@HVMQͰςʔϚΛ։ൃ͢Δͷ͕ͨΓલຊ൪ϦϦʔεʹෆཁͳϑΝΠϧϏϧυ࡞ۀ͕ඞཁ5SBWJT$*ͰࣗಈͰϏϧυ
ͬͯΈͨ@NBTUFSʹQVTI͢ΔͱϏϧυ͕ൃՐϏϧυͨ͠ςʔϚ͔ΒෆཁϑΝΠϧΛআϏϧυͨ͠ςʔϚผϒϥϯνʹQVTI
Ͱ͖ͨຬͯ͠͠Βͦ͘ͷ··
ͬͯΈ·͢ݱঢ়ςʔϚΛϏϧυ͍ͯ͠Δ͕ɺ$*ͱݴ͑ͳ͍ςετͷࣗಈԽΈࠐΜͰΈͨΒ
$*ͬͯͳΜͩΖ͏ຊ
$*ͱ͔͜͜Βຊ
$*ͱ@ܧଓతΠϯςάϨʔγϣϯ$POUJOVPVT*OUFHSBUJPO
$*ͱ@ओʹϓϩάϥϚʔͷΞϓϦέʔγϣϯ࡞࣌ͷ࣭վળೲظͷॖͷͨΊͷश׳ͷ͜ͱͰ͋ΔɻΤΫετϦʔϜɾϓϩάϥϛϯά 91ͷϓϥΫςΟεͷҰͭͰɺڱٛʹϏϧυςετɺΠϯεϖΫγϣϯͳͲΛܧଓతʹ࣮ߦ͍ͯ͘͜͠ͱΛҙຯ͢Δ<>ɻಛʹɺޙҎ߱ͷ։ൃʹ͓͍ͯɺܧଓతΠϯςάϨʔγϣϯΛαϙʔτ͢ΔιϑτΣΞΛ༻͢Δ͕ڧ·͖ͬͯͨɻܧଓతΠϯςάϨʔγϣϯ8JLJQFEJBUUQTKBXJLJQFEJBPSHXJLJ&#&#"&"&"&#&&#&"$&#$&#&"&#
$*ͱ@श׳͍ؒ܁Γฦͯ͠ɺܾ·ΓͷΑ͏ʹͳͬͨϞϊɾίτɺਓʑͷ͍͋ͩͰී௨ʹߦΘΕΔࣄͷΓํ
࣭վળೲظͷॖͷͨΊʹɺԿ͔Λश׳Խ͓ͯ͜͠ͳ͏Ϗϧυςετɺݕূ$*ͱ@$*ٕज़Ͱͳ͍
ͳͥΔͷ͔
Ϗϧυ࣭อ࣋ਓ
࣭อ࣋@wಈ࡞อূwৗʹΞοϓσʔτwՃ͞ΕΔػೳwόά
࣭อ࣋@
ਓ@w ༷ʑͳਓ͔ΒૹΒΕͯ͘Δ13wίʔυͷΫηwϨϏϡʔͷखؒwݟམͱ͠
ਓ@
ਓ@༨ஊެࣜσΟϨΫτϦʹొ͢ΔʹɺϨϏϡϫʔͷνΣοΫʹ௨Δඞཁ
Ϗϧυ@w HVMQHSVOUͰ։ൃw ίϯύΠϧ͞ΕΔ4BTT+4ϑΝΠϧw ΖΖͷઃఆϑΝΠϧ܈ຊ൪ڥͰͷϦϦʔε࣌ɺެࣜςʔϚʹෆཁͳϑΝΠϧɾσΟϨΫτϦ͕େྔੜ
Ϗϧυ࣭อ࣋ਓίʔυͷςετΛ͠ɺ࣭Λ୲อ͢ΔͦΕΛܧଓԽɾࣗಈԽ͓ͯ͜͠ͳ͏
ςετհฤͲ͏ͬͯΔͷ͔
$*ͷେ·͔ͳྲྀΕ@ίʔυͷݕূɾಈ࡞νΣοΫ13 ςετ Ϛʔδ ϏϧυඞཁͳϑΝΠϧ͚ͩ
$*ͷେ·͔ͳྲྀΕ@13 ςετ Ϛʔδ ϏϧυԿ͢Δͷʁ
8PSE1SFTTͷίʔσΟϯάنʹԊ͍ͬͯΔ͔ςετςετ@1)1ͷ੩తղੳະఆٛͷมɺ༻͞Εͯͳ͍มɺؔΛݕग़4BTT TDTTϑΝΠϧͷจ๏νΣοΫ+4ͷจ๏νΣοΫಋೖ͕؆୯ͳςετΛհ͠·͢
1)1$PEF4OJGGFS 1)1$4@8PSE1SFTTͷίʔσΟϯάنʹԊ͍ͬͯΔ͔ςετ1)1ͷ੩తղੳະఆٛͷมɺ༻͞Εͯͳ͍มɺؔΛݕग़4BTT TDTTϑΝΠϧͷจ๏νΣοΫ+4ͷจ๏νΣοΫ
IUUQTHJUIVCDPNTRVJ[MBCT1)1@$PEF4OJGGFS1)1$PEF4OJGGFS 1)1$4@
1)1$4@ࢦఆͨ͠ίʔσΟϯάن 4UBOEBSETʹ४ڌ͍ͯ͠Δ͔Ͳ͏͔νΣοΫ͢ΔπʔϧछྨͷεΫϦϓτQIQDTنʹ४ڌ͍ͯ͠Δ͔ఆQIQDCGίʔσΟϯάελΠϧΛܗ
1)1$4@ϑϨʔϜϫʔΫ͝ͱʹϧʔϧηοτΛઃఆͯ͠͏$BLF1)1'VFM1)1ͳͲ
1)1$4@ઃఆϑΝΠϧYNMઃఆ͍ͨ͠نɺϓϩδΣΫτʹඞཁͳ͍ɺআ֎͍ͨ͠ϧʔϧͳͲΛهड़ͯ͠ΧελϚΠζ8PSE1SFTTͷ߹Ͳ͏͢Δͷ
8PSE1SFTT$PEJOH4UBOEBSET@IUUQTNBLFXPSEQSFTTPSHDPSFIBOECPPLCFTUQSBDUJDFTDPEJOHTUBOEBSET1)1)5.-$44+BWB4DSJQU
(JU)VCʹϦϙδτϦ͕͋ΔIUUQTHJUIVCDPN8PSE1SFTT$PEJOH4UBOEBSET8PSE1SFTT$PEJOH4UBOEBSET8PSE1SFTT$PEJOH4UBOEBSET@
8PSE1SFTT$PEJOH4UBOEBSET@8PSE1SFTT$PSFओཁͳϧʔϧηοτ8PSE1SFTT&YUSBϕετϓϥΫςΟε8PSE1SFTT%PDTΠϯϥΠϯυΩϡϝϯτͷՃϧʔϧηοτ8PSE1SFTT7*18PSE1SFTTDPNͷ7*1༻ͷ֦ுϧʔϧηοτ8PSE1SFTTશ෦ೖΓ
1)1$4@
1)1$4@IFBEFSQIQͰΤϥʔεΫϦϓτFORVFVFͯ͠Ͷ
GVODUJPOTQIQͰFORVFVF͢Δ1)1$4@IFBEFSQIQͰΤϥʔ
1)1$4@DPOUFOUTFBSDIQIQΤεέʔϓͯ͠Ͷ$PEFYͷ%BUB7BMJEBUJPOΛݟͯͶ
1)1$4@DPOUFOUTFBSDIQIQFTD@IUNM Λ͏Α͏ʹ͢Δ
1)1$4@ίϝϯτେจࣈͰॳΊͯɺ۟ಡͰऴΘΔΑ͏ʹ͢Δ3FRVJSFNFOUͰͳ͍͕ɺରԠ͢Δͷ͕ϕετɾϓϥΫςΟε
1)1.FTT%JUFDUPS 1)1.%@8PSE1SFTTͷίʔσΟϯάنʹԊ͍ͬͯΔ͔ςετ1)1ͷ੩తղੳະఆٛͷมɺ༻͞Εͯͳ͍มɺؔΛݕग़4BTT TDTTϑΝΠϧͷจ๏νΣοΫ+4ͷจ๏νΣοΫ
1)1.%@IUUQTQIQNEPSH
1)1.%@ϧʔϧηοτछྨ$MFBO$PEF͖Ε͍ͳίʔυ͔Ͳ͏͔$POUSPWFSTJBM໋໊نଇ%FTJHOઃܭ্ͷ/BNJOHա͗Δ͗͢Δม6OVTFEDPEFΘΕ͍ͯͳ͍ίʔυ$PEFTJ[Fίʔυͷෳࡶ͞
1)1.%@͍ͬͯͳ͍ύϥϝʔλ
1)1.%@ඞཁͳ͍FMTF
1)1.%@DBNFM$BTFͰͳ͍ม໊
1)1.%@ඞཁͳ͍ϧʔϧηοτ͋Δ8PSE1SFTTDPEJOH4UBOEBSETͰਪ͞Ε͍ͯΔ໋໊نଇMPXFSDBTFGVODUJPOTPNF@OBNF TPNF@WBS\^GVODUJPOTPNF@OBNF TPNF7BS\^
TDTTMJOUTBTTMJOU@8PSE1SFTTͷίʔσΟϯάنʹԊ͍ͬͯΔ͔ςετ1)1ͷ੩తղੳະఆٛͷมɺ༻͞Εͯͳ͍มɺؔΛݕग़4BTT TDTTϑΝΠϧͷจ๏νΣοΫ+4ͷจ๏νΣοΫ
TDTTMJOUTBTTMJOU@4BTTͷίʔσΟϯάελΠϧͷνΣοΫΛߦ͏ઃఆϑΝΠϧZNMTDTTMJOU3VCZ͕ඞཁHFNJOTUBMM·ͨCVOEMFJOTUBMMTBTTMJOUOQNJOTUBMM
JEΛΘͤͳ͍JNQPSUBOUΛΘͤͳ͍ΫΦʔτͷઃఆ໋໊نଇͳͲ৭ʑͳઃఆ͕Ͱ͖ΔTDTTMJOUTBTTMJOU@
TDTTMJOUTBTTMJOU@݅ͷܯࠂ
TDTTMJOUTBTTMJOU@ͦͷ··͏ͱɺඦ݅ϨϕϧͰΤϥʔطଘͷͷʹಋೖ͢Δͱ͖ɺج४ΛΏΔͯ͘͠ɺঃʑʹϧʔϧΛ͍͑ͯ͘ϓϩδΣΫτʹෆཁͳϧʔϧ͋ΔͷͰɺΧελϚΠζඞਢ
+4)JOU@8PSE1SFTTͷίʔσΟϯάنʹԊ͍ͬͯΔ͔ςετ1)1ͷ੩తղੳະఆٛͷมɺ༻͞Εͯͳ͍มɺؔΛݕग़4BTT TDTTϑΝΠϧͷจ๏νΣοΫ+4ͷจ๏νΣοΫ
+4)JOU@IUUQTHJUIVCDPNKTIJOUKTIJOU
+4)JOU@+BWB4DSJQUίʔυͷ੩తղੳઃఆϑΝΠϧKTIJOUSDKTPOܗࣜͰهड़͢Δ
+4)JOU@αϯϓϧςετWBSΛ͚ͭͳ͍
+4)JOU@݁ՌΛΈͯΈΔVOEFpOFE
+4)JOU@WBSΛ͚ͭΔԿݴΘΕͳ͘ͳͬͨ
·ͱΊ@ϝϦοτίʔσΟϯάελΠϧ͕ҰఆʹอͨΕΔҰಋೖͯ͠͠·͑ػց͕ͬͯ͘ΕΔͷͰָઃఆϑΝΠϧ͕ίʔσΟϯάϧʔϧͷΘΓʹͳΓɺHJUͰཧͰ͖Δ
·ͱΊ@ςετͦͷ··Ͱͳ͘ɺϓϩδΣΫτʹ͋ͬͨϧʔϧηοτΛద༻͢ΔͦͷͨΊʹɺެࣜυΩϡϝϯτΛಡΜͰςʔϚͷઃܭͱরΒ͠߹ΘͤΔඞཁ1)1.%1)1ࣗମͷղੳͳͷͰɺςʔϚͷ࡞ΓํʹΑͬͯద༻͢ΔϧʔϧมΘΔҙ
Ͳ͏ͬͯΔͷ͔$*࣮ߦɾӡ༻ฤ
ςʔϚͰͷ$*ͷେ·͔ͳྲྀΕ@13 ςετ Ϛʔδ Ϗϧυ͜ͷҰ࿈ͷྲྀΕΛܧଓత͔ͭࣗಈԽ͢Δʹख࡞ۀͰΔͷେมʜ
5SBWJT$*@5SBWJT$*ɺ$*ͷࢧԉαʔϏεIUUQTUSBWJTDJPSH
5SBWJT$*@(JU)VC্ͷϦϙδτϦͱ࿈ܞͯ͠$*Λ͓͜ͳ͏͜ͱ͕Ͱ͖ΔαʔϏε(JUͷίϛοτΛࢹ༷ͯ͠ʑͳςετϏϧυΛ࣮ߦͯ͘͠ΕΔઃఆϑΝΠϧUSBWJTZNM
5SBWJT$*@ݴޠόʔδϣϯϒϥϯνςετͷηοτΞοϓςετ࣮ߦͷεΫϦϓτͳͲ
5SBWJT$*@13ΛૹΔͱࣗಈͰςετ͕Δ˞QVTIͰ0,
IUUQTUSBWJTDJPSH8PSE1SFTTUXFOUZTJYUFFOCVJMET5SBWJT$*5XFOUZTJYUFFO@
5SBWJT$*'PVOEBUJPO@IUUQTUSBWJTDJPSH[VSCGPVOEBUJPOTJUFTCVJMET
5SBWJT$*#PPUTUSBQ@IUUQTUSBWJTDJPSHUXCTCPPUTUSBQ
IUUQTUSBWJTDJPSHHVMQKTHVMQ5SBWJT$*HVMQ@
KPC͝ͱʹϩά͕ͯ͢ݟΒΕΔ5SBWJT$*HVMQ@IUUQTUSBWJTDJPSHHVMQKTHVMQKPCT
13 ςετ Ϛʔδ Ϗϧυ۩ମతͳྲྀΕΛհ͠·͢5SBWJT$*ςʔϚ@
EFWFMPQ135SBWJT$*ʹΑΔςετ࣮ߦ
EFWFMPQNBTUFS13։ൃྃϚʔδ5SBWJT$*ʹΑΔςετ࣮ߦ
EFWFMPQNBTUFSSFMFBTF135SBWJT$*ʹΑΔϏϧυ࣮ߦ։ൃྃϚʔδ5SBWJT$*ʹΑΔςετ࣮ߦ
EFWFMPQNBTUFSSFMFBTFϦϦʔε135SBWJT$*ʹΑΔϏϧυ࣮ߦ։ൃྃϚʔδඞཁϑΝΠϧΛσϞαΠτʹࣗಈσϓϩΠ˞σϓϩΠαʔϏεΛར༻5SBWJT$*ʹΑΔςετ࣮ߦ
EFWFMPQNBTUFS13։ൃˣςετ։ൃϑϩʔͷҰ෦श׳Խ
5SBWJT$*ςʔϚ@EFWFMPQʹ13͕དྷͨΒςετ࣮ߦςετ1)1$4 81$PEJOH4UBOEBSET1)1.%4BTT-JOUNBTUFSʹQVTI͞ΕͨΒϏϧυΛ࣮ߦSFMFBTFϒϥϯνʹQVTI
֤ςετͷηοτΞοϓΛ͢Δ5SBWJT$*ςʔϚ@
5SBWJT$*ςʔϚ@ςετ࣮ߦ
5SBWJT$*ςʔϚ@Ϗϧυ༻ͷεΫϦϓτ
5SBWJT$*ςʔϚ@ࠓ͜͜·Ͱ
·ͱΊ
$*ͱ@ίʔυͷ࣭ΛอͪɺೲظॖͷͨΊͷश׳8PSE1SFTTͷίʔσΟϯάنʹԊͬͨɺ҆શͰՄಡੑͷߴ͍ςʔϚͰ͋Γଓ͚ΔͨΊͷश׳ίʔυಈ͔͚ͩ͢͡Όͳ͘ɺಡΉͷͰ͋ΔࣗಈԽେࣄ
$*ͱ@$*༷ʑͳϓϩδΣΫτͰߦΘΕ͍ͯΔ8PSE1SFTT͡Όͳͯ͘ɺظϝϯς͕ඞཁͳͷɺΦʔϓϯιʔεϓϩδΣΫτʹͥͻऔΓೖΕͯΈͯ
ͳͥΔͷ͔@Ϗϧυ࣭อ࣋ਓ
ςετ@1)1$4Y8PSE1SFTT$PEJOH4UBOEBSETࡉ͔͍ͱࢥ͏ϧʔϧηοτ͋Δ͔͠Εͳ͍8PSE1SFTT7*1Ҏ֎ద༻ͤ͞Δͷ͕ϕετ༗ঈςʔϚ7*1ద༻ͤ͞Δͱɺίʔυͷ࣭໘Ͱͷ৴པੑ͕61
ςετ@1)1.%ςʔϚͷઃܭGVODUJPOTͷॻ͖ํ࣍ୈͰɺඞཁͳϧʔϧηοτมΘͬͯ͘Δ1)1ࣗମͷ੩తղੳΛ͢ΔެࣜυΩϡϝϯτಡΈ·͠ΐ͏
5SBWJT$*@ศར͜Ε͚ͩ
͍͞͝ʹ
۩ମతͳίʔυ͕Γ͍ͨͰ͔͢
ιʔε(JU)VCʹ͋Γ·͢GFBUIFSQMBJOBNFUIZTU
5IBOLZPV