Cookpad TechConf 2018 の登壇資料です。 社内での開発サイクルの回し方や、注意しているポイントについてお話しました
৽Ҫ ߁ฏձһࣄۀ෦ ΤϯδχΞΫοΫύουͷ“ମܥత” αʔϏε։ൃ
View Slide
ࣗݾհ2৽Ҫ ߁ฏ@SpicyCoffee66ɾ2017 ৽ଔೖࣾ ΤϯδχΞɾαʔϏε։ൃ෦ ͕͢͞νʔϜଐɹ* ݕূͷΈཱ͔ͯΒ࣮ɾੳ·Ͱɹ* cookpad studio ͷɹ αʔόʔαΠυϝΠϯΤϯδχΞɾࠓظ͔Βձһࣄۀ෦ଐɾRails, SQL
ຊͷओΫοΫύουͰͲͷΑ͏ʹ։ൃαΠΫϧΛճ͍ͯ͠Δ͔3
αʔϏε։ൃ͍͠4
αʔϏε։ൃͷ͠͞ɾϢʔβʔͷ࣋ͭཉٻɺຊਓΛؚΊͯ୭ʹΘ͔Βͳ͍ɾϢʔβʔͷ࣋ͭཉٻɺ࣌ؒͱͱʹมΘ͍ͬͯ͘5ΰʔϧ͕Θ͔Βͳ͍ࠓ͍Δॴ͕Θ͔Βͳ͍ɾ։ൃऀࣗͷαʔϏεΛਖ਼͘͠ཧղͰ͖͍ͯͳ͍
αʔϏε։ൃͷ͠͞6ΰʔϧ͕نఆͰ͖Δઃܭΰʔϧ͕نఆͰ͖ͳ͍αʔϏε։ൃ
αʔϏε։ൃͷ͠͞7ΰʔϧ͕نఆͰ͖ͳ͍αʔϏε։ൃ։ൃαΠΫϧֶͼͷαΠΫϧԾઆΛཱ࣮ͯͯߦͯ͠ϢʔβʔͷԠΛݟΔ
ֶͼͷαΠΫϧ8BML ϧʔϓMeasureLearnproductideadataBuildԾઆ͔ΒϓϩμΫτʹϓϩμΫτ͔Βσʔλʹσʔλ͔ΒԾઆʹ
ֶͼͷαΠΫϧ ʙཧʙ9BML ϧʔϓMeasureLearnproductideadataBuild࠷Ͱ࠷খͷϓϩμΫτA/B ςετͰޮՌଌఆ৫ʹݟڞ༗
ֶͼͷαΠΫϧ ʙݱ࣮ʙ10BML ϧʔϓMeasureLearnproductideadataBuild͍͍ͩͨͲͷϑΣʔζͰࣦഊ͢Δ
Case: 111
ֶͼͷαΠΫϧࣦഊྫ12Push ௨ͬͯͲͷ͘Β͍ޮՌ͕͋Δͷ͔Γ͍࣮ͨͯ͠ݕূͯ͠Έ·͠ΐ͏Push ௨ͷޮՌ͕Γ͍ͨ Push ௨ͷ࣮ʹ
ֶͼͷαΠΫϧࣦഊྫ13Ͳ͏ͤͳΒը૾͚͍ͭͨͰ͢ͶPush ௨ͷޮՌ͕Γ͍ͨPush ௨ͷ࣮≦Push ௨ʹը૾
ֶͼͷαΠΫϧࣦഊྫ14Ϩγϐ͕Ϧίϝϯυग़དྷΔΑ͏ʹͳΓ·ͨ͠ʂͦͷػೳͤ·͠ΐ͏ʂPush ௨ͷޮՌ͕Γ͍ͨPush ௨ͷ࣮< Push ௨ʹը૾Ϧίϝϯυػೳ
ֶͼͷαΠΫϧࣦഊྫ15Push ௨ͷޮՌ͕Γ͍ͨPush ௨ͷ࣮<<< Push ௨ʹը૾Ϧίϝϯυػೳ͡Ό͋ઐ༻ͷ LP ࡞Γ·͠ΐ͏ʂʂʂઐ༻ LP!ʁʁʁ
ֶͼͷαΠΫϧࣦഊྫ16Build ͷࣦഊɾϓϩμΫτ͕ෆඞཁʹେ͖͘ͳ࣮ͬͯʹ͕͔͔࣌ؒΔɾݕূ͍ͨ͠Ծઆͱͨ͠ϓϩμΫτͷػೳ͕טΈ߹͍ͬͯͳ͍ɾͦͦԾઆʹߟྀ࿙Ε͕͋Δ
Case: 217
ֶͼͷαΠΫϧࣦഊྫ18ػೳͷ࣮ϩάຒ·ͬͯͳ͔ͬͨʂʂʂ
ֶͼͷαΠΫϧࣦഊྫ19Measure ͷࣦഊɾ͍͟ܭଌ͠Α͏ͱ͢Δͱϩά͕ຒ·͍ͬͯͳ͍ɾෳͷ A/B ςετ͕িಥͯ͠ܭଌ݁ՌʹӨڹ͕ग़Δɾूܭ SQL ʹؒҧ͍͕͋Γɺ࠷ѱͷ߹ͦΕʹؾ͕͔ͭͳ͍
Case: 320
ֶͼͷαΠΫϧࣦഊྫ21TOP ͷόφʔΛม͑ͯೖձ͕ ○○% ૿͑·ͨ͠ʂʂʂʂͦΕ……ଟ͍ΜͰ͠ΐ͏͔ʁͲ͏ͳΜͰ͠ΐ͏……·͊ࣈ্͕ͬͯΔ͠࠾༻͠·͔͢……
ֶͼͷαΠΫϧࣦഊྫ22Learn ͷࣦഊɾग़͖ͯͨࣈΛͲ͏ղऍ͢Ε͍͍͔ΠϚΠνΘ͔Βͳ͍ɾࣈಈֶ͍͕ͨͼΛಘΒΕ͔ͨͱݴΘΕΔͱͦ͏Ͱͳ͍ɾಘΒΕͨݟ͕ଐਓతʹͳΔɺ͋Δ͍ҋʹফ͑Δ
͜͏ͳΒͳ͍ͨΊʹ23
ֶͼͷαΠΫϧͷӡ༻ϙΠϯτ24લ͔Βॱ൪ʹΖ͏ͱ͠ͳ͍
ֶͼͷαΠΫϧͷӡ༻ϙΠϯτ25લ͔Βॱ൪ʹΖ͏ͱ͠ͳ͍खΓͷࢭ ޮతͳֶͼ
ֶͼͷαΠΫϧͷӡ༻ϙΠϯτ26લ͔Βॱ൪ʹΖ͏ͱ͠ͳ͍ɾஞ࣍తʹΖ͏ͱ͢Δͱɺ݁ߏେ͖ͳखΓʹܨ͕ΔɾલͷϑΣʔζ͕ऴΘͬͯͳͯ࣍͘ͷϑΣʔζͷ͜ͱߟ͑ΒΕΔɾֶͼͷαΠΫϧࣗମΛҰͭͷϓϩδΣΫτͱߟ͑ΔͱɹΉ͠Ζ࠷ॳʹαΠΫϧશମΛઃܭ͢Δ͖खΓͷࢭ
ֶͼͷαΠΫϧͷӡ༻ϙΠϯτ27લ͔Βॱ൪ʹΖ͏ͱ͠ͳ͍MeasureproductBuildideadataɾϩά͕Γͳ͍ɾͲ͏͍͏Λɹܭଌ͢Δͷ͔ෆ໌ྎखΓͷࢭ
ֶͼͷαΠΫϧͷӡ༻ϙΠϯτ28લ͔Βॱ൪ʹΖ͏ͱ͠ͳ͍MeasureproductBuildLearnideadataɾࣈͷղऍ͕Θ͔Βͳ͍ɾͲͷͰࢪࡦΛɹධՁ͢Δ͔ܾ·ͬͯͳ͍खΓͷࢭ
ֶͼͷαΠΫϧͷӡ༻ϙΠϯτ29લ͔Βॱ൪ʹΖ͏ͱ͠ͳ͍MeasureproductBuildLearndataideaԾઆΛཱͯΔஈ֊ͰαΠΫϧͷઌʹؔ͢Δ͜ͱܾΊΕΔͷܾΊͯ͠·͏खΓͷࢭMeasureproductBuildLearndata
ֶͼͷαΠΫϧͷӡ༻ϙΠϯτ30αʔϏεʹର͢Δཧղ ݱֶ࣮ͼલ͔Βॱ൪ʹΖ͏ͱ͠ͳ͍ ޮతͳֶͼ
ֶͼͷαΠΫϧͷӡ༻ϙΠϯτ31αʔϏεʹର͢Δཧղ ݱֶ࣮ͼࢪࡦ݁Ռͷ༧ ࢪࡦͷ݁ՌࢥͬͨΑΓ ྑ͍ / ѱ͍ͦΕͳ͔ͥʁલ͔Βॱ൪ʹΖ͏ͱ͠ͳ͍ ޮతͳֶͼ
ֶͼͷαΠΫϧͷӡ༻ϙΠϯτ33αʔϏεʹର͢Δཧղ ݱ࣮ࢪࡦ݁Ռͷ༧ ࢪࡦͷ݁Ռલ͔Βॱ൪ʹΖ͏ͱ͠ͳ͍ ޮతͳֶͼ
֤ϑΣʔζͷઃܭ34
֤ϑΣʔζͷઃܭ ʙBuildʙ35Build ʹ͍ͭͯલ͓ͬͯͬͯ͘͜ͱɾઈରʹݕূ͍ͨ͠Ծઆͷ໌֬Խɾݕূഎܠͷཧɾݕূ༰ɾҙͷཧ
֤ϑΣʔζͷઃܭ ʙMeasureʙ36Measure ʹ͍ͭͯલ͓ͬͯͬͯ͘͜ͱɾܭଌख๏ͷબఆɾKPI ͷܾఆɹ* ଞʹӨڹΛ༩͑Δࢦඪ͕ͳ͍͔֬ೝ͢Δɾϩάͷ֬ೝɺSQL ͷ࣮ߦɹ* ࣮ࡍʹҰ SQL Λୟ͍ͯΈΔ
֤ϑΣʔζͷઃܭ ʙLearnʙ37Learn ʹ͍ͭͯલ͓ͬͯͬͯ͘͜ͱɾࢦඪղऍͷཧɹ* ͜ͷ͕ߴͯ͘͜ͷ͕͍ͱ͖ͲΜͳͱ͖ͩΖ͏͔ɾ݁Ռͷఆɹ* ଌఆࢦඪ͕Ͳͷ͘Β͍ͷࣈʹͳͬͨΒͲ͏͢Δ͔ɹ*ʮͳΜͱͳ͘GO ʯΛආ͚Δʢ࡞ͬͨͷग़ͨ͘͠ͳΔʣɾʮޭͷΠϝʔδʯΛڞ༗͢Δ
ֶͼͷαΠΫϧͷӡ༻ϙΠϯτʙ࣮ྫʙ38ࢪࡦલʹ͓͜ͳ͏ٞͷྫ
ࣾͰར༻͞ΕΔπʔϧϑϨʔϜϫʔΫͷհ39
Build40
ࣾϑϨʔϜϫʔΫͷհ ʙ Build ʙ41ՁԾઆγʔτ
ࣾϑϨʔϜϫʔΫͷհ ʙ Build ʙ42ՁԾઆγʔτ
ࣾϑϨʔϜϫʔΫͷհ ʙ Build ʙ43ChankoɾϓϩτλΠϓ։ൃΛαϙʔτ͢Δ Rails ϓϥάΠϯɾϢʔβʔηάϝϯτ͝ͱͷϩδοΫద༻ɾΤϥʔൃੜ࣌ͷϑΥʔϧόοΫɾhttps://github.com/cookpad/chankoEazyAbɾA/B ςετ༻ Chanko ֦ு
Measure44
ࣾϑϨʔϜϫʔΫͷհ ʙ Measure ʙ45Hakari2ɾϩΪϯάɾKPI ཧπʔϧɾΩʔϫʔυΛઃఆͯ͠ΠϕϯτΛϩΪϯάͰ͖ΔɾࣗಈͰ dashboard ͕࡞͞ΕΔ
ࣾϑϨʔϜϫʔΫͷհ ʙ Measure ʙ46papa dashboardɾHakari2 ͷϩάΛͱʹूܭ݁ՌΛՄࢹԽɾ༗ҙ͕ࠩ͋Γͦ͏͔Ͳ͏͔ͷ҆
Learn47
ࣾϑϨʔϜϫʔΫͷհ ʙ Learn ʙ48Report.mdɾࢪࡦͷੳϨϙʔτΛ Markdown Ͱ࡞ɾPull Request ܗࣜͰӡ༻ɾνʔϜͷϨϙδτϦʹɺϨϏϡʔͷ௨ͬͨݟΛϓʔϧ
ࣾϑϨʔϜϫʔΫͷհ ʙ Learn ʙ49Report.md1. ࢪࡦͷੳϨϙʔτΛ Markdown Ͱ࡞͠ɺPR Λఏग़
ࣾϑϨʔϜϫʔΫͷհ ʙ Learn ʙ50Report.md2. νʔϜϝϯόʔΛத৺ʹϨϙʔτΛϨϏϡʔ
ࣾϑϨʔϜϫʔΫͷհ ʙ Learn ʙ51Report.md3. ϨϏϡʔ͕௨ͬͨΒϚʔδͯ͠ϨϙʔτΛϓʔϧ
ࣾϑϨʔϜϫʔΫͷհ ʙ Learn ʙ52Report.mdɾݟͷϓʔϧՕॴ͕໌֬ʹͳΔ͜ͱͰࢀরੑ্͕͕ΔɾϨϏϡʔΛ௨͢͜ͱͰɺݟͷਫ਼্͕͕ΔɾϨϏϡʔࣗମʹΑͬͯɺͷߴ͍ঢ়ଶͰҰݟ͕ڞ༗͞ΕΔɾϨϏϡϫʔͷࢪࡦɾαʔϏεʹର͢Δཧղ͕ਂ·ΔɾPR ্ͷ͔ٞΒࢪࡦͷলΞΠσΟΞ͕ੜ·ΕΔ
·ͱΊ53
·ͱΊ54ɾαʔϏε։ൃͰɺԾઆͷ࣮ߦ͔ΒֶͼΛಘΔαΠΫϧ͕࠷ॏཁɾஞ࣍తʹ࣮ߦͤͣɺ࠷ॳʹαΠΫϧશମΛઃܭ͢Δɾ֤ϑΣʔζͰదͳϑϨʔϜϫʔΫΛ͏