Rails Developers Meetup 2018: Day 2 https://techplay.jp/event/655769
> この発表ではesa の開発や運用・ユーザーサポート等について、技術的/心理的な側面から、様々なリソースが制限されている中でどのように自分達なりに工夫してきたかを共有できれば幸いです。
esaΛࢧ͑Δٕज़ͱؾ࣋ͪRails DM 2018 day-2esa LLC ਂ୩ಞੜ (@fukayatsu)
View Slide
contents• ࣗݾհɾձࣾհɾϓϩμΫτհ• before esa• esaʹࢸΔ·Ͱͷٕज़ͱؾ࣋ͪ• after esa• esaʹՃ͞Ε͍ٕͯͬͨज़ͱؾ࣋ͪ(ผ)• ·ͱΊ2
3• ߹ಉձࣾ esa• ߹ܭ3໊• ΤϯδχΞ2໊• σβΠφʔ1໊• શһ͕ίʔυΛॻ͘• શһ͕ձࣾද• ۀ4
esa LLC͕͍ͬͯΔ͜ͱ• esa.ioͷ։ൃɾӡӦ• pplog.netͷ։ൃɾӡӦ• ଞͷձࣾͷ։ൃσβΠϯͷ͓ख͍4
esa LLC͕Βͳ͍͜ͱ• αʔϏεձࣾͷٸܹͳࢦ͞ͳ͍• ࢿड͚ͳ͍• (ۜߦ͔Βগֹͷ༥ࢿड͚ͨ͜ͱ͕͋Δ)• Web ࠂग़ͣ͞ɺޱίϛ͕ϝΠϯ5
esa.ioͱ?6
7
8• ݱࡏɺ2,200νʔϜ͕ར༻த• ITاۀΛத৺ͱͨ͠ձࣾɾஂମɾݸਓʢن: 1ਓʙ300ਓఔʣ• ΤϯδχΞɾσβΠφʔΛத৺ʹɺاըɾӦۀ৬ɾࣄܥͷํར༻• ݸਓ͝ՈఉɺେֶͷݚڀࣨɺझຯͷஂମଟUserAbout esa.io• MarkdownͰॻ͚ΔɺνʔϜͷͨΊͷใڞ༗πʔϧ• ใɾٞࣄɾϝϞɾΞΠσΞɾ༷ॻɾاըॻɺνʔϜͰͷυΩϡϝϯτڞ༗Ͱར༻
9• ݱࡏɺ2,000νʔϜҎ্͕༗ྉར༻• ITاۀΛத৺ͱͨ͠ձࣾɾஂମɾݸਓʢن: 1ਓʙ300ਓఔʣ• ΤϯδχΞɾσβΠφʔΛத৺ʹɺاըɾӦۀ৬ɾࣄܥͷํར༻• ݸਓ͝ՈఉɺझຯͷஂମଟUserConcept: ใΛɺҭ͍ͯͨɻ• υΩϡϝϯτ࠷ॳ͔ΒᘳͰͳ͘ɺ࣌ؒΛ͔͚ͯΑ͍ͷʹҭ͍ͬͯ͘• ݸਓ͕ΏΔ͍ΞΠσΞΛग़͘͢͠ɺΈΜͳͰܧଓతʹվળ͍͢͠Έ• ্͔Βͷԡ͚͠Ͱͳ͘ϘτϜΞοϓͰࣗൃతʹใൃ৴͢ΔΑ͏ʹͳΔ͜ͱ͕ɺΑΓ͍͖͍͖ͱͨࣗ͠తͳνʔϜͮ͘Γʹͭͳ͕Δ
before esa10
େֶ࣌ͷݪମݧ• ֶ෦ػցܥ͕ͩͬͨɺ͕ͦΜͳʹྑ͘ͳ͔ͬͨͷͰرͷݚڀࣨʹೖΕͳ͔ͬͨ• ͨ·ͨ·ೖͬͨݚڀࣨ์ࣹઢͷݚڀΛ͍ͯ͠Δͱ͜Ζͩͬͨ• ݚڀʹ͋·Γڵຯ͕͔ͣɺݚڀࣨʹߦͬͯݚڀʹؔͳ͍࡞ϓϩάϥϛϯάΛ͍ͯͨ͠ (ڭतීஈผ౩ͳͷͰ)11
େֶ࣌ͷݪମݧ• ྠ͚ͷ(ͩ͘Βͳ͍)WindowsΞϓϦΛ࡞ͬͯຖࣗͨͪͰ͍ͳ͕Βվળ͍ͯͬͨ͠• ͱָ͔ͯͬͨ͠ɻ12
৽ଔब׆࣌ͷPRεϥΠυΑΓൈਮ
ࣾձਓʹͳ͔ͬͯΒ• ब৬͔ͯ͠Β৭ʑڵຯ͕͋ΔͷΛย͔ͬΒ࡞ͬͯΈͨΓͨ͠• ࡞͍ͬͯ͘͏ͪʹपลͷٕज़Λࣗવʹֶश͍ͯͬͨ͠• ͦͷ࣌ࣄͰ͍ͬͯΔ͜ͱͷपล͕झຯͷ։ൃʹͭͳ͕Γɺझຯͷ։ൃͷՌ͕ࣄʹϑΟʔυόοΫ͞ΕΔ• => Α͍॥15
ͦͷࠒझຯͰ࡞ͬͯͨͷ• Ոి(iRemocon/IRKit)Roombaͷૢ࡞ؔ࿈• Ruby gems• Chrome Extension / Chrome Apps• LTTM, markdown-linker, …• AndroidΞϓϦ16
pplogͱͷؔΘΓ• ࡞ͬͯΈͨ͏ͪͷҰ͕ͭpplogͷඇެࣜAndroidΫϥΠΞϯτͩͬͨ• ͦͷԑͰpplogք۾ͷਓʑͱग़ձ͍ɺ։ൃ߹॓Λܦͯesa͕ੜ·Εͨ• ޙʹesa LLCͰpplogΛӡӦ͢Δ͜ͱʹͳΔͷ͕ͩɺͦΕ·ͨผͷ͓17
after esa19(͜ͷลͰ12͙Β͍ඪ)
2014• members: 10 / teams: -• ։ൃ߹॓ (5/9 ~ 5/11)• ຊ൪ڥͰ࠷ॳͷهࣄ͕࡞͞ΕΔ (5/10)• νʔϜػೳ͕Ճ͞ΕΔ (6݄)• esa LLCઃཱ (11݄)20
esaΛࢧ͑Δؾ࣋ͪ(2014)• େֶ࣌ͷݪମݧͱಉ༷ʹɺ10ਓఔͰ͍ͳ͕ΒຖͷΑ͏ʹϑΟʔυόοΫΛΒ͍ɺͦΕΛө͍ͯ͘͠ͷָ͕͔ͨͩͨͩͬͨ͠• ࣌ϑϧλΠϜͰRailsͷࣄΛ͍͕ͯͨ͠ɺ͋·ΓۤʹͳΒͳ͔ͬͨ• ͲͪΒRailsͳͷͰ૬ޓʹྑ͍Өڹ͋ͬͨ21
esaΛࢧ͑Δٕज़(2014)• Ruby / Rails / ֤छGem• Heroku ͱ֤छaddon• AWS S3 / CloudFront• ଟগͷϑϩϯτΤϯυٕज़• GitHub / Idobata22Heroku্Ͱಈ͘ී௨ͷRailsΞϓϦ
2015• members: 2,300 / teams: 900• ਖ਼ࣜϦϦʔε (ݩ୴)• ֎෦ެ։ػೳ (1݄)• TeXه๏ͷαϙʔτ (4݄)• APIͷఏڙ։࢝ (5݄)• ͓·͚: લ৬ΛΊͯesaʹ࣠ΛҠ͢(2݄)23
esaΛࢧ͑Δؾ࣋ͪ(2015)• ༗ྉԽޙܧଓͯ͘͠ΕΔਓ͕ଟͯ͘خ͍͠• ͏·͍͚͘esa͚ͩͰੜ׆Ͱ͖Δ͔ʁ• ΑΓศརʹɺΑΓշదʹ͑ΔΑ͏ʹ͍ͨ͠• ͦ͏ͨ͠ΒΑΓͬͱͬͱਓʹͬͯΒ͑ΔͷͰʁ24
esaΛࢧ͑Δٕज़(2015)• ϦϦʔεϊʔτۦಈ։ൃ• ϑΟʔυόοΫۦಈ։ൃ• ग़Ք͗25
ϦϦʔεϊʔτۦಈ։ൃ• ϦϦʔεϊʔτΛग़͍ͨ͠ؾ࣋ͪΛར༻ͯ͠։ൃ͢Δ• લ৬Λୀ৬͕ͯ࣌ؒ͠Ͱ͖ͨΓɺ·ͩ࡞Δ͖ػೳ͕ͨ͘͞Μ͋ͬͨΓɺesaͰϦϦʔεϊʔτΛॻ͘ͷ͕؆୯ͩͬͨΓͯ͠201588ճϦϦʔεϊʔτ͕ॻ͔Εͨ26
ϑΟʔυόοΫۦಈ։ൃ• ϑΟʔυόοΫΛ͘ΕͨਓΛ͍͍ҙຯͰڻ͔͍ͤͨؾ࣋ͪΛར༻ͯ͠։ൃ͢Δ• 5Ͱฦ৴ͨ͠Γɺ1࣌ؒҎʹमਖ਼ྃͨ͠Γ• masterϒϥϯνʹϚʔδͰຊ൪σϓϩΠ͞ΕΔͷͰɺग़ઌͰεϚϗ͔ΒGitHub্Ͱฤूͯ͠ରԠՄೳ• ʮͰ͖ͨΒ30Γ͍ͨʯͱ͔͍͏λΠϜΞλοΫͷΑ͏ͳཁૉ͋Δ27
ग़Ք͗• ͜ͷࠒ͔ΒݱࡏʹࢸΔ·Ͱɺि2ճଞࣾͷνʔϜʹࠞͬͯ͡RailsʹΑΔ։ൃΛख͍ͬͯΔ• ॳظओʹӡసࢿۚͷͨΊ• ్த͔Βͷٕज़τϨϯυʹऔΓ͞ΕΔϦεΫΛݮΒ͢ͱ͍͏ҙຯ߹͍͋ͬͨ• ·ͨɺग़Ք͗ઌͷձࣾesaΛͬͯ͘Ε͓ͯΓɺݱͰϑΟʔυόοΫΛड͚ΒΕΔར͋Δ28
2016• members: 5,500 / teams: 1,300• Heroku => AWS ECS (3݄)• PlantUML (10݄)• ElasticsearchԽ (11݄)• ͓·͚: ଣੴఠग़खज़ͰೖӃ (8݄)29(͜ͷลͰ20͙Β͍ඪ)
esaΛࢧ͑Δؾ࣋ͪ(2016)• ʮϖʔδͷද͕͍ࣔΑʯʮݕࡧ͕͍Αʯ• ʮਃ͠༁Ͷ͐ʯͱ͍͏ؾ࣋ͪ• ʮUMLਤΛॻ͖͍ͨͰ͢ʯ• ʮΑʔ͠ɺΔ͔ʔʯͱ͍͏ؾ࣋ͪ• (ݸผͷਓ͔Βݸผͷ࣌ظʹෳདྷΔϑΟʔυόοΫ༗༻ੑ͕ߴ͍)30
esaΛࢧ͑Δؾ࣋ͪ(2016)• ࠇࣈԽ • ͜ͷ࣌·ͩ2໊ମͰɺһใु͔ͳΓ߇͑Ίʹ͍͍ͯͨͤ͠Ͱ͋Δ• ؾ࣋ͪʹଟগ༨༟͕ੜ·Εͨ31
esaΛࢧ͑Δٕज़(2016)• Docker + AWS ECS• Elasticsearch• PlantUML32
ΠϯϑϥେҾͬӽ͠• Heroku͔ΒAWS ECSʹҠߦ• ଞͷλεΫΛฒߦͰקΊͳ͕Βɺ࡞ۀࣗମ1ϲ݄ఔͰྃ• ͜ͷ࣌ʹDockerԽ͓͍ͯͨ͜͠ͱͰɺޙͷαϒγεςϜͷՃ͕Γ͘͢ͳͬͨ33
ΠϯϑϥେҾͬӽ͠34docs.esa.io/posts/179
Ҡߦޙͷߏ35
ݕࡧv2• PostgresqlͰແཧΓશจݕࡧ͍ͯͨ͠ͷΛElasticsearchʹஔ͖͑ͨ• Elasticsearchʹ࠶ೖ͠ͳ͕Β2ϲ݄ఔͰϦϦʔε• ϦϦʔεޙҠߦظؒΛઃ͚ͯ৻ॏʹସ36
PlantUMLରԠ• PlantUMLJavaͷϓϩμΫτ• ͍͔ͭ͘ཁΛ͍ͬͯͨ࣌ʹɺJRuby +Sinatra Ͱ࣮͢Δ͜ͱΛࢥ͍͖ͭ1Ͱ࣮• ECSͷΓସ͑ޙͩͬͨͨΊɺDockerԽ͑ͯ͞͠͠·͑ϦϦʔε؆୯ͩͬͨ37
͓·͚: ଣੴͷఠग़खज़ͰೖӃ• ࣃҩऀͰࣃ͕ͳ͍͔ϨϯτήϯΛऔͬͨ࣌ʹଣӷથʹ1.5cmఔͷੴ͕ݟ͔ͭΓɺେֶපӃΛհ͞ΕΔ• 8݄ʹશຑਲԼͷखज़Ͱଣӷથ͔ΒੴΛऔͬͯΒ͍ɺ3ധ4ͰແࣄୀӃ• खज़தԿ͔͋ͬͯରԠͰ͖ͳ͍ͷͰɺೖӃલʹো࣌ͷࣗಈ෮چػߏChatOpsͷඋΛؤுͬͨ38
2017• members: 10,000 / teams: 1,700• @ppworks join (2݄)• WebPay => PAY.JP (4݄)• Ruby bizάϥϯϓϦಛผ (12݄)39
esaΛࢧ͑Δؾ࣋ͪ(2017)• օʹesaͰهࣄΛॻ͘ͷΛָ͠ΜͰ΄͍͠• ͦΕ͕Α͍ใڞ༗ʹͭͳ͕Δͱ࠷ߴ• Ruby bizάϥϯϓϦಛผ • ࠓ·Ͱ͖ͬͯͨ͜ͱ͕·ͨҰͭใΘΕͨؾ࣋ͪʹ40
esaΛࢧ͑Δٕज़(2017)• ֤ࣗΓ͍ͨ࣌ʹΓ͍ͨ͜ͱΛओମతʹΔ• Կ͔ΛΔͱ͖Ϟνϕʔγϣϯ্͕͕ͬͨλΠϛϯάͰΔͷ͕ޮ͕Α͘ෛ୲গͳ͍• ͪΖΜਵ࣌ଞͷϝϯόʔͷαϙʔτ͢Δ41
esaΛࢧ͑Δٕज़(2017)• ֤ࣗΓ͍ͨ࣌ʹΓ͍ͨ͜ͱΛओମతʹΔ• fukayatsu: ܾࡁγεςϜҠߦɺࡉ͔͍վળ• ppwoks: ϚϧνϩάΠϯɺΧελϜֆจࣈ• taea: σβΠϯௐɺΞΧσϛοΫϓϥϯ42
2018• members: 16,000 / teams: 2,200• ʁ• ʁ• ʁ43
esaΛࢧ͑Δؾ࣋ͪ(2018)• কདྷతʹؾ͕࣋ͪͲ͏ͳΔ͔༧ଌࠔͳͷͰ͋·Γߟ͍͑ͯͳ͍• ؾ࣋ͪΑ͘esaΛଓ͚ΒΕΔΑ͏ͳڥΛվળ͠ଓ͚Δ͜ͱʹूத͢Δ• ͦͷͨΊʹٕज़Λຏ͖ɺखࡳΛ૿͍ͯ͘͠44
esaΛࢧ͑Δ༧ఆͷٕज़(2018)• Πϯϑϥؔ࿈ / ϑϩϯτΤϯυؔ࿈• ϞόΠϧΞϓϦ• ಉ࣌ฤूͷͨΊͷૢ࡞ม(OT)45※ݸਓͷݟղͰ͢
·ͱΊ46
·ͱΊ• খ͘͞ϦϦʔε͠ɺϑΟʔυόοΫΛಓඪʹͯ͠ҭ͍ͯͯ͘ઓུ• αʔϏεΛҭ͍ͯͯΔͱɺ͍ͭͷؒʹ͔ࣗαʔϏεʹҭͯΒΕ͍ͯΔ (ٕज़తʹਫ਼ਆతʹ)• ͜Ε͔ΒesaΛͬͯ͘ΕΔօ͞ΜͱڞʹαʔϏεΛҭ͍͖͍ͯͯͨ47