։ൃ͢ΔΑ͏ʹӡ༻͢ΔΠϯϑϥ,BJ[FO1MBUGPSN*ODɹډɹਖ਼ߦ+"84%":4
View Slide
ࣗݾհډɹਖ਼ߦ (@m_doi)Kaizen Platform Inc ΠϯϑϥΤϯδχΞ• ͜Ε·Ͱ• ϑΟʔνϟʔϑΥϯͷιϑτΣΞ։ൃ• SNS/ιγϟήܥͷωοτϫʔΫ / αʔόΤϯδχΞ• ࢹγεςϜɺӡ༻ͷͨΊͷιϑτΣΞ։ൃ• ͓ؾʹೖΓͷAWSαʔϏε• DynamoDB ͱ Kinesis
ࠓͷ͓• Kaizen Platform ͷ։ൃଆͷϫʔΫϑϩʔ• Kaizen Platform ͷӡ༻ଆͷϫʔΫϑϩʔ• ͜ΕΒͷϫʔΫϑϩʔʹࠐΊͨࢥ• ͓·͚
EC2 InstanceVPCELBRoute 53S3GlacierCloudFrontRDSElastiCacheDynamoDB
• ཧը໘• A/Bςετ࣮ߦ༻ͷ JavaScript ͷ৴• A/Bςετͷܭଌ
։ൃଆͷϫʔΫϑϩʔ
• Work In Progress Ͱ Pull Request• ։ൃ• ϨϏϡʔ• QA• ຊ൪ϦϦʔε։ൃϓϩηε
masterQAຊ൪։ൃϒϥϯν2"ϓϩηε։࢝ຊ൪ڥʹσϓϩΠ։ൃϓϩηε
Pull Request
ϨϏϡʔґཔPull Request ͷ ID Λఴ͑ͯϨϏϡʔґཔ
ϨϏϡʔPRͰɺҙΛఴ͑ͯϨϏϡΞʔʹϝϯγϣϯ
ϨϏϡʔ
masterQAຊ൪։ൃϒϥϯν2"ϓϩηε։࢝ຊ൪ڥʹσϓϩΠϦϦʔεϓϩηε
ϦϦʔεϓϩηεE2E TestDeployUnit Test
• CI ͷ SaaS• fooϒϥϯνʹpushͨ͠Βbar͢Δ• foo, bar ͷ෦Λࡉ੍͔͘ޚՄೳ• ୯७ͳίϚϯυΛ࣮ߦ͢Δ• ࣗ࡞ͨ͠ҙͷγΣϧεΫϦϓτΛ࣮ߦ͢ΔCircleCI
• CI ͷ SaaS• fooϒϥϯνʹpushͨ͠Βbar͢Δ• foo, bar ͷ෦Λࡉ੍͔͘ޚՄೳ• ୯७ͳίϚϯυΛ࣮ߦ͢Δ• ࣗ࡞ͨ͠ҙͷγΣϧεΫϦϓτΛ࣮ߦ͢ΔCircleCIͭ·ΓɺGitHub ͷҙͷϒϥϯνͷ push Λܖػʹɺ༷ʑͳϫʔΫϑϩʔΛఆٛͰ͖Δɻ
ϦϦʔεϓϩηεmaster ϒϥϯνͷ push Λܖػʹ Unit Test Λ࣮ߦe2e ϒϥϯνͷ push Λܖػʹ E2E Test Λ࣮ߦE2E TestDeployUnit Testdeploy ϒϥϯνͷ push Λܖػʹ Deploy Λ࣮ߦ
ϦϦʔε࡞ۀ։࢝σϓϩΠ༻ͷ Pull Request Λ࡞νϟοτͰίϚϯυΛୟ͘ͱͬͯ͘ΕΔ
ϦϦʔε࡞ۀQAڥʹσϓϩΠ͞ΕΔಉ࣌ʹຊ൪σϓϩΠͷ Pull Request ͕࡞͞ΕΔ
ϦϦʔε࡞ۀຊ൪σϓϩΠͷ Pull Request ʹνΣοΫϦετ͕Ͱ͖ΔͦΕͧΕͷίϛοτͷಈ࡞֬ೝΛऴ͑ͨΒνΣοΫΛ͚Δ
E2E ςετheadless browser ͰγφϦΦΛςετ
E2E ςετQAڥͰ࣮ࢪ
E2E ςετΠϯϑϥΤϯδχΞνϟοτ͔Β؆୯ʹ࣮ߦͰ͖Δ͜Ε͕ޙʑʹཱͭ
ϦϦʔε࡞ۀͯ͢ͷ֬ೝ࡞ۀ͕ऴΘΔͱɺຊ൪σϓϩΠ༻ͷϒϥϯνΛmergeຊ൪ڥʹσϓϩΠ͕։࢝͞ΕΔ
ϒϥϯνͷ push/merge ΛτϦΨʹmasterQAຊ൪։ൃϒϥϯνUnit Test ͕Δ
ϒϥϯνͷ push / merge ΛτϦΨʹmasterQAຊ൪2"ϓϩηε։࢝NBTUFS2"ͷ1VMM3FRVFTU࡞NFSHF2"ڥʹσϓϩΠ
ϒϥϯνͷ push / merge ΛτϦΨʹmasterQAຊ൪֤ࣗɺಈ࡞֬ೝ&&ςετ࣮ߦ
ϒϥϯνͷ push / merge ΛτϦΨʹmasterQAຊ൪2"ຊ൪ͷ1VMM3FRVFTUΛNFSHFຊ൪ڥʹσϓϩΠ
• GitHub Λத৺ͱͨ͠։ൃϑϩʔ• CircleCI Λத৺ͱͨ͠ϦϦʔεϑϩʔ• GitHub ͱ CircleCI ͱ νϟοτͷૢ࡞Ͱ݁·ͱΊΔͱ
ӡ༻ଆͷϫʔΫϑϩʔ
ߏཧ
• Work In Progress Ͱ Pull Request• ߏมߋΛ Chef recipe ʹམͱ͜͠Ή• ϨϏϡʔ• ߏஙςετ• ຊ൪ద༻ӡ༻ϓϩηε
ߏཧ1. recipe ͷ࡞2. push3. ࢼݧߏஙٴͼServerspec ʹΑΔݕূ4. ߏங༻ϒϥϯνͷ merge Λܖػʹຊ൪ڥʹద༻
ߏཧ1. recipe ͷ࡞2. push 3. push ΛܖػʹࢼݧߏஙٴͼServerspec ʹΑΔݕূ5. ߏங༻ϒϥϯνͷ merge Λܖػʹຊ൪ڥʹద༻4. νϟοτͰ ߏங༻ϒϥϯνͷ mergeΛࢦࣔ
ߏมߋΛมߋΛ Chef recipe ʹམͱ͜͠Ήߏཧ
push ͯ͠ CI Λ࣮ߦ & ͳ͚Ε master mergeߏཧ
Chat Ͱߏங༻ϒϥϯνͷ merge Λࢦࣔߏཧ
ߏཧhubot ͕ ߏங༻ pull request Λ࡞Δ
มߋͷৄࡉͯ͢pull request ͷதʹΔߏཧ
࡞ۀͷৄࡉͯ͢νϟοτͱCircleCIʹΔߏཧ
ߏཧ࡞ۀͷৄࡉͯ͢νϟοτͱCircleCIʹΔ
ߏมߋޙͷE2E ςετେ͖ͳߏมߋΛՃ͑ͯɺෆ҆ͳ߹E2EςετΛࣗͰճͯ͠ɺαʔϏεͷਖ਼ৗੑΛ֬ೝ
ߏมߋޙͷE2E ςετେ͖ͳߏมߋΛՃ͑ͯɺෆ҆ͳ߹E2EςετΛࣗͰճͯ͠ɺαʔϏεͷਖ਼ৗੑΛ֬ೝΠϯϑϥΤϯδχΞతࢹͰɺ͜Ε͕ͱͯศརΠϯϑϥΤϯδχΞ͚ͩͰɺ͋ΔఔαʔϏεͷਖ਼ৗੑ͕֬ೝͰ͖Δ
ϒϥϯνͷ push/merge ΛτϦΨʹmasterQAຊ൪։ൃϒϥϯνࢼݧߏங / Serverspec ʹΑΔCI
ϒϥϯνͷ push / merge ΛτϦΨʹmastercook/QADPPLຊ൪ߏมߋΛ2"ڥʹద༻ͯ֬͠ೝNBTUFSDPPL2"ͷ1VMM3FRVFTU࡞NFSHF2"ڥʹ৽͍͠SFDJQFͰDPPLhubot cook run qa-***
ϒϥϯνͷ push / merge ΛτϦΨʹmasterQAຊ൪NBTUFSDPPLຊ൪ͷ1VMM3FRVFTUΛNFSHF৽͍͠SFDJQFͰຊ൪ڥΛDPPL
ϒϥϯνͷ push / merge ΛτϦΨʹmasterQAຊ൪ద༻݁Ռ֬ೝ&&ςετ࣮ߦ
• GitHub Λத৺ͱͨ͠ߏཧϑϩʔ• CircleCI Λத৺ͱͨ͠มߋద༻ϑϩʔ• GitHub ͱ CircleCI ͱ νϟοτͷૢ࡞Ͱ݁·ͱΊΔͱ
։ൃϓϩηεͱӡ༻ϓϩηεͷൺֱ
• Work In Progress Ͱ Pull Request• ߏཧπʔϧΛ༻ͨ͠ߏஙखॱ࡞• ϨϏϡʔ• ߏஙςετ• ຊ൪ద༻ӡ༻ϓϩηε
• ։ൃ• GitHub Λத৺ͱͨ͠։ൃϑϩʔ• CircleCI Λத৺ͱͨ͠ϦϦʔεϑϩʔ• GitHub ͱ CircleCI ͱ νϟοτͷૢ࡞Ͱ݁• ӡ༻• GitHub Λத৺ͱͨ͠ߏཧϑϩʔ• CircleCI Λத৺ͱͨ͠มߋద༻ϑϩʔ• GitHub ͱ CircleCI ͱ νϟοτͷૢ࡞Ͱ݁ൺֱ
ϓϩηεΛ߹ΘͤΔϝϦοτ• ։ൃଆΠϯϑϥͷมߋΛ͢Δ͜ͱ͕ग़དྷΔ• ٯ·ͨવΓ• ։ൃଆͰΓͨ͘ͳΔมߋ• ϦόʔεϓϩΩγͰ̋̋ϔομ͚͍ͨ• ̋̋ϑΝΠϧΛஔ͍ͨ͠• ՃػೳͷͨΊʹ̋̋ύοέʔδΛೖΕ͍ͨ
ϓϩηεΛ߹ΘͤΔϝϦοτ• ։ൃଆΠϯϑϥͷมߋΛ͢Δ͜ͱ͕ग़དྷΔ• ։ൃଆͰΓͨ͘ͳΔมߋ• ϦόʔεϓϩΩγͰ̋̋ϔομ͚͍ͨ• ̋̋ϑΝΠϧΛஔ͍ͨ͠• ՃػೳͷͨΊʹ̋̋ύοέʔδΛೖΕ͍ͨDev < ͜ΕೖΕ͍ͨͰ͢Ops < ҰճϛʔςΟϯά͠·͠ΐ͏͔ʙϛʔςΟϯάʙ Dev < ͜ΕೖΕ͍ͨͰ͢Ops < ͦͦͳΜͰඞཁͳΜͰ͚ͨͬ͠Dev < ͔͔͔͔͘͘͠͡Ops < Ͱௐͯ͠ɺ݄̋☓ʹೖΕ·͠ΐ͏ɻ୲ऀ̋̋͞ΜΞαΠϯͰɻଓ͘…
ϓϩηεΛ߹ΘͤΔϝϦοτ• ։ൃଆΠϯϑϥͷมߋΛ͢Δ͜ͱ͕ग़དྷΔ• ։ൃଆͰΓͨ͘ͳΔมߋ• ϦόʔεϓϩΩγͰ̋̋ϔομ͚͍ͨ• ̋̋ϑΝΠϧΛஔ͍ͨ͠• ՃػೳͷͨΊʹ̋̋ύοέʔδΛೖΕ͍ͨɾͦ͜·ͰෳࡶͳมߋͰͳ͍ɾಈ͖ʹΠϯύΫτΛ༩͑Δͱͯ͠ΠϯϑϥΤϯδχΞΛ௨ͨ͠ϨϏϡʔͰνΣοΫ
KAIZEN ΤϯδχΞߦಈࢦ
ݖҖతʹͳΒͳ͍DevOps Day Tokyo 2013 @mirakui ͞ΜͷεϥΠυΑΓҾ༻
• डཧͯ͠ڐՄΛग़ཱ͢ͷਓؒݖҖతʹͳΓ͕ͪ• ීஈ͔Βҙࣝ͠ͳ͍ͱࣗͰͦ͏ͳΔ͕࣌͋ΔݖҖతʹͳΒͳ͍
• ։ൃͱӡ༻ͷϓϩηεΛग़དྷΔ͚ͩ߹ΘͤΔ• ։ൃ͕ӡ༻ʹࢀՃ͢ΔෑډΛԼ͛Δ• Ζ͏ͱࢥ͑Ͱ͖Δͱ͍͏ڥ• ΠϯϑϥΤϯδχΞ͜Θ͘ͳ͍·ͱΊΔͱ
͔͜͜Β͓·͚
• ຊ৭ʑ͋Γ·ͨ͠• དྷ৭ʑ͋ΔͰ͠ΐ͏ηΩϡϦςΟΞοϓσʔτ
ηΩϡϦςΟΞοϓσʔτνϟοτ͔ΒηΩϡϦςΟΞοϓσʔτΛࢦࣔ
ηΩϡϦςΟΞοϓσʔτyum --secuity check-update ͷ݁ՌΛऔಘ
ηΩϡϦςΟΞοϓσʔτͦͷ༰͔Β Pull Request Λ࡞ͯ͠ɺΠϯϑϥϝϯόʔʹϝϯγϣϯ
ηΩϡϦςΟΞοϓσʔτϨϏϡʔͯ͠ͳ͚Ε୲ऀ͕ Pull Request Λ merge
ηΩϡϦςΟΞοϓσʔτmerge Λܖػʹɺରͷαʔόʹରͯ͠ yum --security -y update
ηΩϡϦςΟΞοϓσʔτE2E ςετͷ࣮ߦChatܦ༝ͰՄೳͳͷͰɺಉ࣌ʹ࣮ߦࠓճͷߋ৽͕ΞϓϦέʔγϣϯͷಈ࡞ʹӨڹΛ༩͍͑ͯͳ͍͔νΣοΫ
ݱߦͷӡ༻ϓϩηεͷ՝
CircleCI ͕ϘτϧωοΫ
͍ͬͯΔ SaaS Ͱྑ͔ͬͨͷ
BugsnagΤϥʔΛݕͯ͠ɺݟ͘͢μογϡϘʔυʹ·ͱΊͯ͘ΕΔ
BugsnagSlack ͷνϟοτʹ௨ग़ͤΔԿճ·Ͱڐ༰͢Δ or ͜ͷύλʔϯεϧʔ͢ΔͳͲͷௐՄೳ
Pingdomhttp(s) ͷΤϯυϙΠϯτͷ֎෦͔Βࢹෳͷڌ͔ΒࢹΛߦ͏
PagerDutyো࣌ͷ௨Λߦͬͯ͘ΕΔαʔϏεon-call schedule ʹैͬͯి / SMS / εϚʔτϑΥϯΞϓϦͷ௨
PagerDutySensu Pingdom ͱͷ Integration ؆୯
PagerDutyࠓ̋̋͞ΜٳΈ͔ͩΒɺon-call εέδϡʔϧม͓͑ͯ͜͏ͳͲͷௐ༰қ
We’re Hiring!https://kaizenplatform.com/hiring/engineer.html