DevLove関西 - esaとDocBaseのサービス開発のDiffの話 https://devlove-kansai.doorkeeper.jp/events/33527
でお話させていただきました(\( ⁰⊖⁰)/)
(\esa/)2015-11-28 DevLOVEؔͨͷ͍͠
View Slide
ࣗݾհ2
3શࣾһ(2໊)Ͱདྷ·ͨ͠ (\( ⁰⊖⁰)/)ϓϩάϥϚͷํˠσβΠφʔͷํˠ
https://esa.io
esa.ioͱ5
• νʔϜͷͨΊͷใڞ༗αʔϏε• ϚʔΫμϯͰॻ͚Δ• WikiͬΆ͍ઃܭࢥ• ॻ͘ෑډΛԼ͛ɺָ͑͘͠Δ• ๛ͳΠϯςάϨʔγϣϯ• (\( ⁰⊖⁰)/)ͬ͘͟Γ
7શࣾһ(2໊)Ͱདྷ·ͨ͠ (\( ⁰⊖⁰)/)ϓϩάϥϚͷํˠσβΠφʔͷํˠ
ಛతͳػೳ͜ͷΜ
ใΛҭ͍ͯͨ9
10ใΛҭ͍ͯͨ
11ใΛҭ͍ͯͨ• ࠷ॳ͔ΒᘳΛࢦͣ͞• ͱΓ͋͑ͣ࠷ॳग़͚ͩͩͯ͢͠• ޙ͔ΒΑ͍͚͍͍ͯ͘͠͡ΌΜ• Done is better than perfect
WIP12
WIPʹ Work in Progressਐߦதɾ࡞ۀதɾॲཧதɾະෆશͰ͋Δ͜ͱΛप͢Δه߸ͱͯ͠ΘΕΔřŎŕŲƅ
ͱΓ͋͑ͣɺڞ༗ࡶʹڞ༗·ͩͰ͖ͯͳ͍͚Ͳڞ༗
อଘϘλϯ͕2ͭʁʁ
࡞ۀதͷͱ͖ɺWIPͰอଘԼॻ͖ஈ֊͔Βଞਓʹݟ͑ΔΑ͏ʹͳͬͯΔ
8*1Ͱอଘ͢ΔͱɺλΠτϧ͕άϨʔΞτw 8*1Ͱߋ৽ͯ͠8FCIPPLͰ4MBDLͱ͔ʹ௨͕ඈͳ͍w Կߋ৽͢Δ͜ͱ͕Ͱ͖Δʢ㵰4ʣw ϩʔΧϧͷΤσΟλʹॻ࣌͘Έ͍ͨͳײ͡Ͱॻ͚Δw ΈΜͳʹੵۃతʹΒͤ͠ͳ͍͚Ͳɺڵຯ͋ΔਓΘ͟Θ͟ݟʹདྷΕݟΔ͜ͱ͕Ͱ͖Δঢ়ଶ
͍͍ͩͨͰ͖ͨΒɺShip It!
Ship It! ͢ΔͱWebhook ͷ௨͕ඈͿ ƻΈΜͳ͕ݟʹདྷΔ
͜Μͳײ͡ͷ͜ͱΛߟ͍͑ͯΔ͚Ͳɺ·ͩ'*9͡Όͳ͍ΜͰɻ͜Ε͔Βͬͱྑ͘ͳΔΜͰɻ8*1Λ͚ͭΔͱ͖ͷ͖ͪ• ͳͷͰࡉ͔͗͢Δποίϛ·ͩצหͯ͠Ͷ• ͚ͲɺؒҧͬͯͨΒڭ͑ͯͶ• ࠔͬͯͨΒॿ͚ͯͶ• Δؾ͋ͬͯ͜Ε͔ΒΔͭΓͰ͋ΔΜͩΑ• ͬ͘͟Γ͜͏͍͏͜ͱߟ͑ͯΔ͔ΒͳΜͱͳͬͯͯ͘Ͷ• େମ߹ͬͯͨΒ͞Γؾͳ͘΄Ίͯ͘ΕͨΒΔؾग़Δ͔• ·ͣࣗͷϝϞతʹॻ͍ͯΔ͚ͩͳΜͩ
ͭ·Γɺ8*1ͱΤΫεΩϡʔζͷҰछʢݴ͍༁ɾหղʣExcuse me
ΤΫεΩϡʔζҙਤతͳ੍ݶΛՃ͠ɺΈʹ͋ΔछͷʮϢϧ͞ʯΛ༩͑Δ͜ͱͰɺ݁Ռɺ͏ਓָ͕͍͖͍͖͘͠ͱ͢Δw ࠓ·Ͱݴ͑ͳ͔ͬͨ͜ͱ͕ݴ͑Δw ॻ͚ͳ͔ͬͨਓ͕ॻ͚Δw Ͱ͖ͳ͔ͬͨ͜ͱ͕Ͱ͖Δ
• ϩʔΧϧͷςΩετΤσΟλ• ݸਓ༻ͷEvernote• ࣗѼͯͷϝʔϧࣗͷͨΊʹॻ͘ʮυΩϡϝϯτʯඋɾϝϞɾTODOϦετɾاըΞΠσΞɾઃܭΞΠσΞ༩݅ͷཧɾվળҊɾࠒࢥ͍ͬͯΔ͜ͱɾॻ్͖தͷΖΖ…ྫ͑͜Μͳͱ͜Ζʹ
ࣗͷΛཧͯ͠ΠϯλʔωοτʹUP͘͢͢͠ΔΤϯδϯ
Ϣʔβʔʹ͍ͭͯ25
Ϣʔβʔଐੑ• νʔϜن: 1~126 Ϣʔβʔ• ༗ྉར༻ͷׂ߹• νʔϜ: 200 / 1200• Ϣʔβʔ: 1700 / 7500• શ༗ྉνʔϜͷ30%͕ ݸਓར༻26
։ൃνʔϜҎ֎ͷ৭ʑͳΘΕํ• 1ਓϢʔβʔ͕ଟ͍• ϝϞཧɾΞΠσΞ·ͱΊɾݪߘࣥච • alt Evernote?• ʮՈఉesaʯ්ΧοϓϧͰͷར༻• ҭࣇ༦৯ͷ࿈བྷ• ήʔϜɾझຯͷू·Γɾֶੜஂମɾ࣏ஂମɾNPOɹ27
ϓϩάϥϚ͚ʁ28
ϓϩάϥϚΈͷػೳɾઃܭඇϓϩάϥϚ͠Έ͍͢ϧοΫε29Ұݟ૬͢Δ͜ͱΛଥڠ͠ͳ͍Ͱ྆ํେࣄʹ͍ͨ͠
ϓϩάϥϚΈͷػೳɾઃܭ• ߴ͍ΧελϚΠζੑ• (but Α͍σϑΥϧτΛ༻ҙ)• API• γϯϓϧͰϑϥοτͳઃܭ• UIجຊӳޠ30
ϓϩάϥϚΈʹ͍ͨ͠ཧ༝ϓϩάϥϚ͕Πέͯͳ͍ͱࢥ͏ͷΛɺϓϩάϥϚҎ֎ͷਓͷͨΊʹզຫͯ͠͏ϓϩάϥϚ͕߹ཧతͩͱࢥ͑Δಓ۩ΛϓϩάϥϚҎ֎͑ΔΑ͏ʹͳΔ31☓• ϓϩάϥϚ͕͖ͳͷׂͱָ͕͍ࣗͨͪͬͯͯ͠• ใπʔϧʹର͢ΔϓϩάϥϚͷηϯεͩ͜ΘΓʹର͢Δ৴པ• ϓϩάϥϚʹ͔ΕΔΑ͏ͳಓ۩Λ࡞Γ͍ͨ (e.g. GitHub)
ඇϓϩάϥϚͰ͠Έ͍͢• ͔Θ͍͞• (\( ⁰⊖⁰)/)• ࣄΆ͘ͳ͍• ϊϯόʔόϧͰײతͳUI• ӳޠͰͳΜͱͳ͑͘Δ32
։ൃͷ༷ࢠ33
34ָ͍͔͠Βɺຖ࡞Γ͚ͭͮͯΔ5713 commits3995 issues1932 Pull Requests1728 Deployed982 feedbacks from users10.2 commits/day7.1 issues/day3.4 PR/day3.1 Deploys/day
352015ͷ2݄·ͰfukayatsuϑϧλΠϜͰesaͱผͷࣄΛ͍͕ͯͨ͠ɺ࣠ΛesaʹҠͯ͠Ҏ߱ͷํ͕commitͰݟΔͱগͳ͍ɻ
36͕׆ൃɾ࣍Ͱ༵ʢཧ༝͕Ṗʁʣ
37100 Release notes / year (1~2 notes / week)
ϦϦʔεαΠΫϧ• ৽ػೳϢʔβʔϑΟʔυόοΫ → GitHub Issues• GitHub Flowʹ͕ͨͬͯ͠ϒϥϯνΛ࡞Γɺదٓpush͠ͳ͕Β࣮• pushຖʹCIΛߦ͍ɺςετͷΧόϨοδ͕90%ΛԼճ͍ͬͯͨ߹ʹςετ͕ࣦഊ• ςετ͕ͯ͢ޭ͍ͯ͠Δ߹ͷΈ master branchʹϚʔδՄೳ• ػೳ͕ग़དྷ্͕ͬͨΒɺmaster branchʹϚʔδ → ຊ൪σϓϩΠ• ϦϦʔεϊʔτެ։ → @esa_io ͰπΠʔτ38
ຖ͕υοΫϑʔσΟϯά• पғͷؒͨͪͱesaͰใΛڞ༗• ۀҕୗઌͷձࣾͰesa• esaࣾͷesa• ࣮Ոͷ࿈བྷesa39
εέδϡʔϧɾϊϧϚͳ͠• కΊΓʹΑΔ৺ཧతෛ୲ΛݮΒͯ͠ɺΑΓΑ͍બΛ͍ͨ͠ɻ• ͦͷ࣌ʹ࡞Γ͍ͨͷΛ࡞Δͷ͕ޮతΑ͘ɺ࠷ऴతʹօ͕ͤʹͳΕΔͱ৴͍ͯ͡Δɻ• அΛΒͤΔͱΑ͍ղܾࡦΛࢥ͍ͭ͘͜ͱ͋Δ• ͬ͘͟Γͨ͜͠Ε͔ΒΓ͍ͨ͜ͱϦετ͋Δ• →Ϣʔβʔʹڞ༗͍ͨ͠40
bundle updateͷࣗಈԽ41
Stagingڥ• ·ͩͳ͍• ຊͷσʔλͰ֬ೝ• ։ൃऀݶఆϦϦʔεΛ͢Δ͜ͱ͋Δ42
ӡ༻ͷ༷ࢠ43
44stackshare.io/esa/esa
Heroku• Πϯϑϥۀͷෛ୲Λେ෯ʹݮΒ͢• USϦʔδϣϯ• ΩϟύγςΟΛεέδϡʔϦϯά45
োࢹ• Pingdom +PagerDuty• αʔϏεμϯͨ͠߹ ిֻ͕͔ͬͯ͘Δ• status.esa.io46
ϦϦʔεϊʔτ• esa্ͰӡӦͯ͠υοΫϑʔσΟϯά• webhookͰड͚औΔ͜ͱ͕Ͱ͖Δ• ϝʔϧͰϦϦʔεϊʔτΛૹΒͳ͍47
ΧελϚʔαΫηε48
Ϣʔβʔͱզʑ͕ͤʹͳΔ͜ͱΛͳΜͰ• ยํ͚ͩͤͰଓ͖͠ͳ͍• खஈʹनΘΕͳ͍49
ϑΟʔυόοΫʹ5Ͱฦ৴͢Δ• 5ͨͩͷ҆• Ͱ͖Δ͚ͩ͘͢• ஸೡͳݴ༿ݣ͍͋Δఔ٘ਜ਼ʹ͢Δ50
࣭ʹରͯ͠ɺʮ͍/͍͍͑ʯΑΓྑ͍ฦࣄ͕͋Δ• ʮ̋̋ػೳ͋Γ·͔͢ʁʯ• ϢʔβʔͷͳΜͩΖ͏͔• ͦΕΛݱঢ়ͷػೳͰղܾͰ͖ΔͩΖ͏͔• ଞʹԠٸॲஔతͳࡦ͋Δ͔51
όάमਖ਼؆୯ͰޮՌతͳػೳՃͦͷͰ࣮͙ͯ͢͠ʹϦϦʔε͢Δ• αϙʔτத͋ΔҙຯҰ൪Ϟνϕʔγϣϯ͕ߴ͍• ϢʔβʔʹզʑʹΑ͍Өڹ• ҉ࠇ໘ʹͱΒΘΕΔͱແବػೳΛ࡞Γ͕ͪ52
͍Ζ͍ΖͳνϟϯωϧΛ͏• Web/e-mail/Twitter/• ࠷ऴతʹGitHub Issuesʹू• Τΰαʔν53
એɾใ54
ΠϕϯτͰϓϨθϯΛ͢Δ• ಛʹٕज़ܥͷΠϕϯτͰͷొஃ• ࢀՃऀ͕Ϣʔβʔͱ͍ۙ• ͦ͏͍͏ΠϕϯτʹࢀՃ͢Δͷָ͕͍͠55
ٕज़ܥͷΠϕϯτɾίϛϡχςΟʹπʔϧఏڙͷεϙϯαʔΛ͢Δ• ӡӦνʔϜ͚ʹ esa ͷ1νʔϜΛແঈఏڙ͢Δ• ౦ژNodeֶԂࡇ2015• RubyKaigi 2015• WikiΨν͔ΒͷϑΟʔυόοΫ56
WebࠂΛग़͞ͳ͍• ͋·Γ͖Ͱͳ͍ͷͰ...• Կ͔ผͷܗͰ໘ന͍ࠂΛग़͍ͨ͠• (\( ⁰⊖⁰)/) ͕ग़ͯͨΒָ͍͠ॴ57
TwitterͰ༡Ϳ• (\( ⁰⊖⁰)/)͕దͳ͜ͱΛ֯ΧφͰtweet• ϦϦʔεϊʔτͷ͓Βͤ• Τΰαʔν͔ΒͷϢʔβʔαϙʔτ• ࡞ۀ࣌ͷؾస58
Ϟνϕʔγϣϯ59
motivated teams=Α͍νʔϜ
61࠷ॳ “for small teams” ͩͬͨͷ͚ͩͲɺेਓنͷνʔϜͰશવ͍͑ͯͨͷͰɺ͜͜ʹೖΔ͖୯ޠΛվΊͯߟ͑ͳ͓ͨ͠ɻϫϨϫϨͲΜͳνʔϜʹͬͯཉ͍͠ͷ͔ʁʢesaΛ͏ͱͲΜͳνʔϜʹͳΔͷ͔ʁʣ
Ϟνϕʔγϣϯ͕େ62͏ਓ࡞Δਓ
ϑΟʔυόοΫΛΒ͏• ΫϨʔϜๅ• ͲΜͳʹݫ͍͠ҙݟͰɺࣗͷαʔϏεʹ͍ͭͯݴٴ͍͚ͯͨͩ͠Δͷ͋Γ͕͍ͨ• ҙతͳײຊʹخ͍͠63
ϦϦʔεϊʔτॻ͖͍ͨ• ॻ͘ͷָ͕ɺָ͍͠• ϦϦʔεϊʔτۦಈ։ൃ• ݄ؒ࠷ଟ: 15ຊ(2015/01)64
(\( ⁰⊖⁰)/)άοζΛࢁͭ͘Δ• shop.esa.io• εςοΧʔ/؈όοδ/Tγϟπ/ύʔΧʔ/τʔτόοά/ম͖ҹ(new)• ʮԿ͔ͷؒҧ͍Ͱάοζͷച্͚ͩͰੜ׆Ͱ͖ΔΑ͏ʹͳΒͳ͍͔ͳʯ65
Γ͍ͨ࣌ʹΓ͍ͨࣄΛΔ• ແཧͳָ͘͘͠• Ұ൪ޮత66
esaΒ͠͞67
ʮesaΒ͍͠ʯ͜ͱ• ্͔ΒԿ͔Λڧ੍͠ͳ͍ɺϑϥοτͳઃܭ• ͲΜͳཱͰָ͠ΜͰؾ࣋Α͑͘Δ• ࣄͰͬͯΔπʔϧͳͷʹࣄײ͕ͳ͍• ŰƃŜŞ (\( ⁰⊖⁰)/) ͰͭͿ͘68
ʮesaΒ͠͞ʯ࠷ॳʹ͖ͪΜͱϧʔϧΛઃఆͨ͠Θ͚Ͱͳ͘ؾ͍ͮͨΒͦ͜ʹ͋ͬͨ• ͕ࣗͨͪղܾ͢Δͱ͖ͷύλʔϯߟ͑ํɺʮͳͥʁʯΛ͍ଓ͚Δ͏ͪʹɺঃʑʹͦͷྠֲ͕͖ͬΓ͖ͯͨ͠ײ͡• ݟ͖͑ͯͨྠֲΛ͔ͬ͠Γั·͑ͯʮ໋Λ༩͑Δʯ• ͳΜͱͳ͘طʹͦ͜ʹ͋ΔࢥΛͰ͖Δ͚ͩݴޠԽ͢Δ• → ϙΤϜۦಈ։ൃ• Ωϟϥ (\( ⁰⊖⁰)/) ϏδϡΞϥΠζॏཁͳͷ͔69
70
71
esaΒ͠͞ = ʮແ໊ͷ࣭ʯʁ72
esa LLC ʹ͍ͭͯ73
74ϓϩάϥϚͱσβΠφͷ2໊ϓϩάϥϚͷํˠσβΠφʔͷํˠ
2ਓͰ৭ʑΔ• ։ൃऀͰ͋Γ• اըऀͰ͋Γ• ΧελϚʔαϙʔτͰ͋Γ• ӦۀͰ͋Γ• ܦӦऀͰ͋Γ• ϢʔβʔͰ͋Δ752ਓͱ
2ਓͩͱ։ൃεϐʔυ͍ʁ• ҙࢥܾఆεϐʔυͷ͞• ฉͰͳ͘ਖ਼֬ͳҰ࣍ใʹ৮ΕΒΕΔ• ৭ʑͳαʔϏεΛར༻ͯ͠ޮԽ (e.g. Heroku, MFΫϥυ)• ٕज़ސɾ֎෦ͷΞυόΠβʔ• ଟগۤखͩͬͨ͜ͱΕΔˠࢹ͕Δ• Ք͙͖͓͕ۚগͳͯ͘ࡁΉ• ܾఆݖ50ɾ5076ݱஈ֊Ͱͦ͏Ͱͳ͍ײ͡
ͱͱझຯ͔Β͡Ίͨ• 20145݄ ։ൃ߹॓• पғͷ༑ୡͱใڞ༗ʹ͏• 2014 Ն͔ΒΓ߹͍ͷձࣾʹͬͯΒ͏• 2014 11݄ ๏ਓԽ & Φʔϓϯβ• 20151݄ ਖ਼ࣜ༗ྉ൛ϦϦʔε77
ձࣾΑΓϓϩμΫτ͕ઌ78esaͷαʔϏείϯηϓτͦͷ··esaࣾͷߟ͑ํ• ָ͠͞• Ϟνϕʔγϣϯ• Done is better than perfect• ͔Θ͍Έ
ΦϑΟεʢ෦ࣨʣ• ෦൪߸͕404• ਓ(ࣾ)ͰआΓͯΔ෦• ͨ·ΓΆ͍ײ͡• ॎʹͨΒ͍79
We are not startup.• ग़ࢿΛड͚͓ͯΒͣɺٸܹͳΛࢦ͍ͯ͠ͳ͍• ͲͪΒ͔ͱݴ͏ͱɺதখاۀʁ• esaͱɺesaΛ࡞ΔզʑͱɺesaΛ͏ਓʑ͕ݎ࣮ʹ͍ͯ͘͜͠ͱΛࢦ͍ͨ͠80
ܦࡁঢ়گ• डୗ ͱ esa ͷऩӹൺ → डୗͷํ͕·ͩଟ͍• िʹελʔτΞοϓͷ͓ख͍• ϑϧίϛοτͷडୗड͚ΒΕͳ͍• esaͷऩӹ͚ͩͰ৯͍ͯ͘͜ͱ͕໘ͷඪ81
͜Ε͔Β82
͜Ε͔Β• ωΠςΟϒΞϓϦ( Mac, iPhone, Android• ܾࡁ࿈݁ػೳ• ݕࡧվળ• εϐʔυΞοϓ• alt Wiki తͳՄೳੑ83
ʮָ͍͠esaʯͰ͋Γ͍ͨ84
ָ͘͠85͏࡞Δָ͘͠ esa
झຯ͔Β͡Ίͨʮָ͠͞ʯΛͲ͜·Ͱҡ͍࣋ͨ͠ɻ86
87(\esa/)ͨͷ͍͠