Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Webサービスにて200週連続で新機能をリリースする舞台裏 / builderscon tokyo 2018

Webサービスにて200週連続で新機能をリリースする舞台裏 / builderscon tokyo 2018

KASUYA, Daisuke

September 05, 2018
Tweet

More Decks by KASUYA, Daisuke

Other Decks in Technology

Transcript

  1. WebαʔϏεʹͯ200ि࿈ଓͰ
    ৽ػೳΛϦϦʔε͢Δ෣୆ཪ
    2018-09-07
    builderscon tokyo 2018
    גࣜձࣾ͸ͯͳ | പ୩ େี (@daiksy)

    View Slide

  2. Who are you?
    പ୩ େี(@daiksy)
    ▸ גࣜձࣾ͸ͯͳ.
    ▸ Mackerel σΟϨΫλʔ
    ▸ ScalaMatsuri, Scalaؔ੢Summit
    ▸ ૉਓDJ

    View Slide

  3. Who are you?
    ஶॻ

    View Slide

  4. ͓खݩͷQRίʔυ͔Βɺ
    ͥͻϑΟʔυόοΫΛ͓ئ͍͠·͢

    View Slide

  5. https://mackerel.io
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  6. https://mackerel.io
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  7. https://mackerel.io
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  8. https://mackerel.io
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  9. Mackerel
    ▸ 2013೥11݄ʹ࠷ॳͷίϛοτ
    ▸ 2014೥5݄8೔ βϦϦʔε
    ▸ 2014೥9݄17೔ ਖ਼ࣜϦϦʔε
    ▸ 2014೥11݄1೔ daiksyೖࣾ
    ▸ 2016೥6݄10೔ 100ि࿈ଓϦϦʔε
    ▸ 2018೥7݄2೔ 200ि࿈ଓϦϦʔε
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  10. ࿈ଓϦϦʔε

    View Slide

  11. ࿈ଓϦϦʔε
    ▸ ϢʔβʔʹͱͬͯՁ஋ͷ͋ΔػೳΛຖिඞͣϦϦʔε͢Δ
    ▸ όάϑΟοΫε΍ϝϯςφϯεϦϦʔε͸ʮ࿈ଓϦϦʔεʯ
    ͷఆٛʹ͸ؚ·ͳ͍
    ▸ ຖि݄༵೔ʢੲ͸ຖि༵ۚ೔ʣʹ৽ػೳͷ͓஌ΒͤΛϒϩά
    Ͱप஌ˍϝʔϦϯάϦετ഑৴
    ▸ ͨͩ͠೥຤೥࢝/ΰʔϧσϯ΢ΟʔΫ/͓ຍظؒ͸আ͘ʢզʑ
    ͸ϗϫΠτاۀͳͷͰ
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  12. ࿈ଓϦϦʔε
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  13. ͳΜͷͨΊʹ࿈ଓϦϦʔε
    Λ΍͍ͬͯͨͷ͔

    View Slide

  14. ▸ Mackerel͸ͱͯ΋ϛχϚϜͳঢ়ଶ͔Βελʔτͨ͠
    ▸ Slack௨஌ -> ਖ਼ࣜϦϦʔεͷ2िؒޙ
    ▸ αʔϏεϝτϦοΫͷ؂ࢹ -> ਖ਼ࣜϦϦʔεͷ3ϲ݄ޙ
    ▸ ࠓͰ͸౰ͨΓલͷػೳͷ΄ͱΜͲ͸ະ࣮૷ͷঢ়ଶͰελʔ
    τ
    ͳͥʁ
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  15. ▸ ౰ॳ͸ػೳ։ൃͷεϐʔυײ͕ސ٬ʹରͯ͠໿ଋͰ͖Δ਺গ
    ͳ͍Ձ஋ͷͻͱͭͰ͋Γɺ༏Ґੑͩͬͨ
    ▸ ౰ॳ͸࿈ଓϦϦʔεΛҙ͍ࣝͯ͠ͳ͔͕ͬͨɺ͋Δ࣌਺͑ͨ
    Β50ि࿈ଓϦϦʔε໨લͩͬͨ
    ▸ ຖि࿈ଓϦϦʔεΛΞϐʔϧͨ͠ͱ͜Ζɺސ٬֫ಘͷେ͖ͳ
    ෢ثͱͳͬͨ
    ▸ ·ͣ͸100िɺ࣍͸150िͱগͣͭ͠໨ඪΛ৳͹ͨ͠
    ͳͥʁ
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  16. Ͳ͏΍ͬͯ
    ࿈ଓϦϦʔεΛҡ͔࣋ͨ͠

    View Slide

  17. Mackerel ͷγεςϜߏ੒
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  18. Mackerel ͷϚΠΫϩαʔϏείϯϙʔωϯτ
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  19. Mackerel ͷϦϦʔεࠂ஌ର৅ൣғ
    ▸ mackerelຊମ
    ▸ WebγεςϜ
    ▸ ֎ܗ؂ࢹ, AWS, AzureͳͲͷΫϩʔϥ
    ▸ ҟৗݕ஌ίϯϙʔωϯτ
    ▸ ͸ͯͳࣾ಺ʹͯ։ൃ
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  20. ▸ OSS
    ▸ mackerel-agent
    ▸ mackerel-agent-plugins
    ▸ go-check-plugins
    ▸ mkr (CLIπʔϧ)
    ▸ ͸ͯͳࣾ಺Ͱͷ։ൃ + ϢʔβʔʹΑΔίϯτϦϏϡʔτ
    ▸ OSSͷΈͷϦϦʔε͸200࿈ଓϦϦʔεதʹ໿30ճ΄Ͳ
    Mackerel ͷϦϦʔεࠂ஌ର৅ൣғ
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  21. ▸ ϓϩμΫτΦʔφʔ
    ▸ σΟϨΫλʔ ← ΅͘͸͜͜
    ▸ ΤϯδχΞ
    ▸ σβΠφ
    ▸ CRE
    ▸ ຋༁
    ։ൃνʔϜͷମ੍
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  22. ▸ ΤϯδχΞ
    ▸ 5 ~ 8໊ (಺1໊͕ςοΫϦʔυʣ
    ▸ σβΠφ
    ▸ 1ʙ2໊
    ։ൃνʔϜͷମ੍
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  23. ▸ ఆظϦϦʔε͸ि2ճ
    ▸ Րɾ໦
    ▸ ϦϦʔε೔͕ॕલ೔ͷ৔߹͸ௐ੔
    ։ൃνʔϜͷମ੍
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  24. ։ൃνʔϜͷମ੍
    staging؀ڥ
    PullRequest࡞੒ & ϨϏϡʔ
    ࣗಈςετOK -> staging؀ڥʹࣗಈ൓ө
    ຖिՐɾ໦ʹͦͷ࣌఺ͷstaging؀ڥͱͷࠩ෼͕ຊ൪൓ө͞ΕΔ
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  25. ▸ ि࣍౰൪ (ϩʔςʔγϣϯ)
    ▸ ϦϦʔε୲౰ (Ր)
    ▸ ϦϦʔε୲౰ (໦)
    ▸ αϙʔτ୲౰
    ▸ OSS܎
    ։ൃνʔϜͷମ੍
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  26. ▸ ि࣍౰൪ (ϩʔςʔγϣϯ)
    ▸ ϦϦʔε୲౰
    ▸ ϦϦʔε࡞ۀͷओ୲౰
    ▸ αϙʔτ୲౰
    ▸ Ϣʔβʔ͔Βͷ͓໰͍߹Θͤͷٕज़ௐࠪΛ୲౰
    ▸ OSS܎
    ▸ Ϣʔβʔ͔Βͷmackerel-agentͳͲ΁ͷPull Request, IssueΛݟΔ୲౰
    ։ൃνʔϜͷମ੍
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  27. ։ൃνʔϜͷମ੍
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  28. ▸ staging؀ڥͰͷಈ࡞֬ೝ
    ▸ ֤छϝτϦοΫɾΤϥʔϩάͳͲͷ؍࡯
    ▸ ຊ൪؀ڥʹσϓϩΠ
    ▸ ຊ൪؀ڥͰͷಈ࡞֬ೝ
    ▸ ֤छϝτϦοΫͷ؍࡯ɾΤϥʔϩάͳͲͷ؍࡯
    ▸ ҟৗ͕͋Ε͹ϩʔϧόοΫ͢Δ
    ▸ શମͷॴཁ࣌ؒ͸2࣌ؒ΄Ͳ
    ϦϦʔεखॱ
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  29. ▸ 2िؒεϓϦϯτͷεΫϥϜܗࣜ(มଇత)
    ▸ εϓϦϯτܭը
    ▸ ։ൃ
    ▸ Րɾ໦ʹఆظϦϦʔε
    ▸ ݄༵೔ʹࠂ஌
    ▸ 2िؒͷ࠷ޙͷ༵ۚ೔ʹৼΓฦΓ
    ։ൃͷϦζϜ
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  30. ▸ ϓϩμΫτΦʔφ͕࡞੒͢Δதɾ௕ظͷϩʔυϚοϓ
    ▸ 3೥ͷ௕ظϩʔυϚοϓ
    ▸ ࢛൒ظ͝ͱͷதظϩʔυϚοϓ
    ▸ CREʹΑΔϢʔβʔώΞϦϯάɻαϙʔτʹدͤΒΕΔཁ๬
    ▸ ΤϯδχΞ͔ΒϘτϜΞοϓͰఏҊ͞ΕΔվળʢΞϓϦέʔ
    γϣϯϑϨʔϜϫʔΫ΍ϛυϧ΢ΣΞͷόʔδϣϯΞοϓͳ
    Ͳʣ
    ܭը ʢ։ൃͷΠϯϓοτʣ
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  31. ▸ ௕ظλεΫ
    ▸ ։ൃʹ௕͍ظؒΛཁ͢Δ։ൃλεΫ (਺ϲ݄~1೥)
    ▸ ࠷ۙͩͱҟৗݕ஌ػೳ, ίϯςφରԠͳͲ͕͜Εʹ֘౰
    ▸ ओ୲౰ΤϯδχΞΛΞαΠϯ͠ɺϓϩδΣΫτԽ
    ▸ ௕ظλεΫ΋ࡉ͔͍୯ҐͰϓϧϦΫΤετ͕࡞ΒΕͯɺຖिϚʔδ & ϦϦʔ
    ε͞Ε͍ͯ·͢
    ▸ ୹ظλεΫ
    ▸ 1εϓϦϯτ಺(਺೔)Ͱ։ൃ͕ऴΘΔλεΫ
    ܭը ʢ։ൃλεΫͷ෼ྨʣ
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  32. ▸ ݄: ΞαΠϯ͞Ε͍ͯΔ௕ظλεΫΛਐΊΔ
    ▸ Ր: ޕલ: ϦϦʔε౰൪, ޕޙ: ௕ظλεΫΛਐΊΔ
    ▸ ਫ: ޕલ: ৽ϝϯόʔͱϖΞϓϩ, ޕޙ: ௕ظλεΫΛਐΊΔ
    ▸ ໦: དྷिࠂ஌༧ఆͷ୹ظλεΫΛਐΊΔ
    ▸ ۚ: ޕલ: 1࣌ؒ΄ͲͰऴΘΓͦ͏ͳόάमਖ਼Λ΍Δ, ޕޙ: ։
    ൃݴޠͷόʔδϣϯΞοϓʹνϟϨϯδͯ͠ΈΔ
    ͱ͋ΔΤϯδχΞͷ1िؒͷ༷ࢠ
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  33. ▸ όοΫϩάʹରͯ͠ΤϯδχΞͷ100%ՔಇΛٻΊͳ͍
    ▸ ͍͍ͩͨ20~30%͘Β͍͸༨ྗ͕࢒ΔΑ͏ʹܭը͢Δ
    ▸ ٕज़తෛ࠴ͷฦࡁͳͲɺΤϯδχΞ͕ࣗओతʹऔΓ૊Ί
    Δ׆ಈͷ༨஍Λ࢒͓ͯ͘͠
    ▸ ༨ྗͰ͜ͳͨ͠খ͞ͳλεΫ͕ɺຖिࠂ஌ͷ༗༻ͳωλʹͳ
    Δͱ͖΋͋Δ
    ։ൃܭըͷϙΠϯτ
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  34. ▸ ϚΠΫϩϚωδϝϯτ͸ઈରͩΊ
    ▸ ΨνΨνʹܭըͯ͠͠·͏ͱɺ͔͑ͬͯ਎ಈ͖͕औΕͳ͘ͳ
    Δ
    ▸ ࣗ཯ͨ͠νʔϜΛ࡞ΔͨΊʹ͸ԿΑΓ΋༨ྗ͕ඞཁ
    ։ൃܭըͷϙΠϯτ
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  35. ▸ ௕͘։ൃ͍ͯ͠Δͱɺҟಈɾୀ৬ͳͲͰϝϯόʔ͸͚ͬ͜͏
    ೖΕସΘΔ
    ▸ ि୯ҐͰϦϦʔεΛܧଓ͍ͯ͠ΔͱɺϝϯόʔೖΕସ͑ʹΑ
    Δҡ࣋తͳઓྗͷ௿Լ΋͚ͬ͜͏ӨڹΛड͚Δ
    ▸ ޮ཰Α͘։ൃ͢ΔͨΊʹɺϝϯόʔͷಘखɾෆಘखΛ೺Ѳ͠
    ͓ͯ͘ͷ͸ॏཁ
    ϝϯόʔͷೖΕସΘΓ
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  36. εΩϧϚοϓ
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  37. ▸ νʔϜ͕ҡ࣋͢΂͖εΩϧͷՄࢹԽ
    ▸ ҟಈ΍ୀ৬ʹΑͬͯಛఆͷεΩϧ͕஌ΒͣʹࣦΘΕΔͱ͍͏
    ͜ͱ͕ͳ͍
    ▸ νʔϜͷεΩϧόϥϯεΛ೺Ѳ͢Δ͜ͱͰɺޮ཰తͳ։ൃΛ
    ܭը͢Δ͜ͱ͕Ͱ͖Δ
    εΩϧϚοϓ
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  38. ▸ ຖिࠂ஌ΛνʔϜͷ࠷ॏཁίϛοτϝϯτͱҐஔ͚ͮɺνʔϜશһ͕ͦ
    ΕΛ໨ࢦͯ͠ຖ೔࢓ࣄΛ͢Δ
    ▸ ͍͟ͱ͍͏ͱ͖ʹඋ͑ͯɺ1೔, 2೔͘Β͍Ͱ࣮૷Ͱ͖ͦ͏ͳ༏ઌ౓͕ͦ
    Ε΄Ͳߴ͘ͳ͍λεΫΛ͍͔ͭ͘ετοΫ͓ͯ͘͠
    ▸ ίϛϡχςΟͷखॿ͚ΊͪΌͪ͘Ό͋Γ͕͍ͨͰ͢… (OSS΁ͷίϯτ
    ϦϏϡʔτ)
    ▸ ͚ͩ͜͜ͷ࿩ɺ࣮૷͸ऴΘ͍ͬͯΔ͚Ͳདྷिͷωλ͕ͳ͍͔Β·ͩϦϦʔ
    ε͠ͳ͍Ͱ͓͜͏ɺͱ͍͏͜ͱ΋ͯ͠·ͨ͠ʢ࡞Γஔ͖ͱݺΜͰ͍ͨ
    ຖिϦϦʔεΛܧଓ͢Δίπ
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  39. 200िΛ۠੾Γʹ
    ࿈ଓϦϦʔεΛ΍Ί·͢

    View Slide

  40. ▸ ϓϩμΫτͱͯ͠ɺओཁͳػೳ͕ग़ἧͬͨ
    ▸ ॳ୅ϓϩμΫτΦʔφʔͷߏ૝ͨ͠ػೳΛ͋Β͔࣮ͨ૷͠
    ऴ͑ͨ
    ▸ εϐʔυײ΋େ੾͕ͩɺࠊΛਾ͑ͨػೳ։ൃͷํ͕ސ٬ʹͱͬ
    ͯେ͖ͳՁ஋ʹͳΔϑΣʔζʹདྷͨͱ൑அ
    ▸ ελʔτΞοϓظͷऴྃ
    ͳͥຖिϦϦʔεΛࢭΊͨͷʁ
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  41. ▸ ଍ճΓͷվળ͕΍Γ΍͘͢ͳͬͨ
    ▸ Playframework, Scala, sbtͷόʔδϣϯ͕Ұؾʹ৽͘͠
    ͳͬͨ
    ▸ νʔϜʹ·ͩຖिϦϦʔεͷهԱ͕࢒͍ͬͯΔͷͰɺεϐʔ
    υײΛҡ࣋ͭͭ͠ࠊΛਾ͑ͨ։ൃ͕Ͱ͖Δ
    ▸ 1८ͯ͠ʮຖिϦϦʔεΛ΍Βͳ͍ͷ͕౰ͨΓલʯʹͳͬͨ
    ͱ͖ʹͲ͏ͳΔ͔ͳʁ
    ຖिϦϦʔεΛऴ͑ͯΈͯ
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide

  42. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠
    WebαʔϏεʹͯ200ि࿈ଓͰ৽ػೳΛϦϦʔε͢Δ෣୆ཪ

    View Slide