はてな Mackerel チームの開発フローについて
@motemen2014-10-09Workflow at Hatena Mackerel Team
View Slide
ࢲʹ͍ͭͯ• id:motemen / @motemen• גࣜձࣾͯͳ νʔϑΤϯδχΞ• Mackerel νʔϜ σΟϨΫλʔ• Vim ͱ Go ͕͖Ͱ͢
Agenda• Mackerel νʔϜʹ͍ͭͯ• From Perl to Scala• Mackerel νʔϜʹ͓͚ΔεΫϥϜ• ϦϞʔτ
1About Mackerel Team
Mackerel
Mackerelhttps://mackerel.io/
Mackerel• ͯͳ ৽αʔϏε• 09/17 ਖ਼ࣜԽ• ৽͍͠ΫϥυύϑΥʔϚϯεཧαʔϏε Mackerelਖ਼ࣜϦϦʔεͷ͓Βͤ• αʔόཧɾࢹπʔϧ• πʔϧͷݟΛαʔϏεԽ
Mackerel ͷྺ࢙• ࣾϏδωεϓϥϯίϯςετ• CTO id:stanaka ʮΫϥυࢹπʔϧʯ
Mackerel νʔϜͷྺ࢙• 2013-11ʙ ϓϩτλΠϓ։ൃ• P + 1 engineer + α• 2014-04ʙ ਖ਼ࣜʹνʔϜԽ• P + 5 engineers + 1 designer• ࠓʹࢸΔ
2From Perl To Scala
Hatena ❤ Perl• ΄ͱΜͲͷαʔϏε Perl • ۀ (2001) ʙ ݱࡏ (2014)• ͯͳϒοΫϚʔΫɺͯͳϒϩάɺ…
Why Perl• ߴͳ Trial & Error• ߴͳ։ൃ
Mackerel Chose Scala• Perl ͷ࣍ͷݴޠ• தن։ൃʹ͑ɺݎ࿚ͳͷ• Ϧʔυ։ൃऀͷझຯ• ʢຊ Haskell ͕Α͔ͬͨʣ
ৄ͘͠• id:hakobe932 — YAPC::Asia Tokyo 2014
Perl … ਆͷ࣌• No ίϯύΠϧ• Fast σϓϩΠ• ۃΊ͍ͯ։ൃαΠΫϧ
Scala• ੩తܕ͚ͷ҆৺ײ• ϨϏϡʔ• ϦϑΝΫλϦϯά• Slow ίϯύΠϧ• Slow ίϯύΠϧ
Not-So Hotfix• σϓϩΠྃ• ʮ͋ɺͪΐͬͱϛεͬͯ·͢Ͷ…ʯ• ʮΑ͠ٸ͍Ͱͦ͏ʯ• ʢ2࣌ؒܦաʣ• ʮΓ·ͨ͠ʯ
“ScalaShock”• ΈΜͳͰγϣοΫΛड͚ͨ• “ͷΜͼΓͱͨ͠։ൃ”• ίϯύΠϧͷؒʹϨϏϡʔͱ͔• σϓϩΠ։࢝ૣΊʹ• ࠓͰ30ఔͰྃ
࠷ۙͷσϓϩΠ
3Scrum inMackerel Team
Scrum• “εΫϥϜʢӳ: ScrumʣɺιϑτΣΞ։ൃʹ͓͚Δ෮తͰ૿తͳΞδϟΠϧιϑτΣΞ։ൃख๏ͷ1ͭͰ͋Δɻத৺ʮ։ൃνʔϜ͕Ұମʹ͢Δͱڞ༗͞Ε͍ͯΔతΛ͍ٻΊΔॊೈͳϓϩμΫτ։ൃετϥςδʔʯͰ͋Δɻ”• — Wikipedia: εΫϥϜ
Scrum• ܾ·ͬͨظؒʢεϓϦϯτʣ• εϓϦϯτ։࢝࣌ʹλεΫΛೖՙ• εϓϦϯτྃ࣌ʹৼΓฦΔ• վળ͠ͳ͕ΒεϓϦϯτΛ܁Γฦ͢
༧श
Team Configuration• ։ൃνʔϜ• ϓϩμΫτΦʔφʔ id:stanaka• εΫϥϜϚελʔ id:motemen• 3+α ΞϓϦΤϯδχΞ / 1 σβΠφ / 1 Πϯϑϥ• εϓϦϯτ: 2 weeks• ։࢝ॳ 1 week
εϓϦϯτͷ։࢝: ୨Է͠ձ• ݄༵ͷே 2 ࣌ؒఔ• ϓϩμΫτόοΫϩάΛݕ౼• ࠓεϓϦϯτͰΔ͜ͱΛ۩ମԽ• ԿΛ͢Ε͍͍͔໌֬ʹͳΔ
୨Է͠: ϓϩμΫτόοΫϩά• Google Spreadsheet• ༏ઌॱɺޙΖͷํͪ͝Όͪ͝Ό
୨Է͠: λεΫͷݕ౼• ۩ମతͳλεΫʹׂ• ཻ = 1 Pull Request ʹͰ͖Δ͘Β͍• ྫ:ʮϗετͷੜࢮࢹػೳʯ• ࢹίΞ෦• ΞϥʔτʹରԠ͢ΔϞσϧ• ϝʔϧૹ৴• ը໘࣮
εϓϦϯτͷऴྃ: ;Γ͔͑Γձ• ༵ۚͷ༦ํ 1 ࣌ؒ• εϓϦϯτͷୡΛৼΓฦΔ• ݸਓɾνʔϜͷ KPT Λ͓͜ͳ͏• ࠓޙͷ֎෦తͳεέδϡʔϧΛ֬ೝ
ࣜ࣍ୈ• ձͷਐΊํࢦΛॻ͍͓͍ͯͨ• Εͳ͍Α͏ʹ• motemen ͕αϘΕΔΑ͏ʹ
Mackerel νʔϜͱ Scrum• ϓϩμΫτνʔϜθϩ͔Β• Γ͍ͨ͜ͱΛண࣮ʹਐΊ͍ͯ͘• KPT ͠ͳ͕ΒมԽ͍ͯͬͨ͠
εϓϦϯτத: GitHub• λεΫ GitHub Issue ʹ• 1 εϓϦϯτ = 1 ϚΠϧετʔϯ
Milestones
Milestones• ࣍ͷεϓϦϯτ:• ࠓεϓϦϯτͰͰ͖ͳͦ͏͚ͩͲ͙͢Γ͍ͨ• ΞΠσΞஔ͖:• Γ͍͚ͨͲ༏ઌະఆ
قઅײͷ͋ΔεϓϦϯτ• ೋे࢛અؾΛεϓϦϯτ໊ʹ• ʮཱ࣍ळεϓϦϯτͰ͢ʢ8݄ʣʯ ʮ͟Θ…ʢ͏ळ͔…ʣʯͪͳΈʹࠓिפ࿐εϓϦϯτͰ͢
λεΫঢ়ଶϥϕϧ• PR ͕ͨ͠Β “ϨϏϡʔґཔ”• “ϨϏϡʔྃ” ʹͳͬͨΒ Ϛʔδ or मਖ਼
Based on• id:shiba_yu36 — GitHub Kaigi
ݟੵΓϥϕϧ• Issue ͷετʔϦʔϙΠϯτΛϥϕϧԽ• ͜ΕҎ্Ͱ͔͍ͷλεΫԽ͠ͳ͍
Burn-down Chart• radekstepan/github-burndown-chart
ͦͷଞ• λεΫΛ·ͱΊΔ Issue• ٞ༻• ٞ༻ʢdrunkʣ
VS ϗϫΠτϘʔυᝦ• جຊతʹ GitHub• Ұཡੑ͕͢͞• λεΫฆࣦʢཧʣ• ϦϞʔτແཧ
4Working Remote
ͯͳ౦ژ։ൃηϯλʔ• 2012: ։ઃ• ʢɹʈωʈʣɾɾɾ• 2014: גࣜձࣾͯͳʹೖࣾ͠·ͨ͠ | ͓ͦΒͦ͘Ε͑͞ฏຌͳʑ • → Mackerel νʔϜଐ
ड͚ೖΕ४උ• ͱͱϦϞʔτͷ༧ఆʢ1ਓʣ• πʔϧݕ౼ͯ͋ͬͨ͠• ࠷ॳͷ2िؒɺژ• ϖΞϓϩͱ Λ܁Γฦ͢
༧श• 37 Signals• ϦϞʔτ࠷ߴʂΈ͍ͨͳຊ
ʮ͋ͷਓ࠷ۙଘࡏײͳ͍Ͷʯ• Έ͍ͨʹ͠ͳ͍ • ژ 5 : ౦ژ 1
งғؾΛἧ͑Δ• ΦϑΟεϦϞʔτ• ग़ࣾ͢Δ͚Ͳωοτӽ͠ʹձ• ேձͷલʹࡶஊ
Remote Tools• Zoom• Sqwiggle• GitHub & Slack• Polycom
ேձ: Zoom• Google Hangouts ͔ΒҠߦ• શһͷإ͕ҰͰ͖Δ
ීஈ Sqwiggle & Slack & GitHub• ΄ͱΜͲจࣈͰࣄΓͯΔ
To Be Continued• ·ͩ࢝·͔ͬͨΓ• ػࡐ͕େࣄͦ͏• ϝϯόʔશһ͕ϦϞʔτΛҙࣝ͢Δ
Ҏ্• Mackerel νʔϜͷ։ൃମ੍Ͱͨ͠• ྑ͍ϚΠΫใ͓͓ͪͯ͠Γ·͢
We are Hiring!