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

選択と集中 - 少人数で効率的にアプリケーション・サービスを開発運用するために考えたいこと /...

選択と集中 - 少人数で効率的にアプリケーション・サービスを開発運用するために考えたいこと / developer summit kansai 2019

Developer summit kansai 2019 A-3

Hidetaka Okamoto

September 27, 2019
Tweet

More Decks by Hidetaka Okamoto

Other Decks in Technology

Transcript

  1. બ ୒ ͱ ू த গ ਓ ਺ Ͱ ޮ

    ཰ త ʹ Ξ ϓ Ϧ έ ʔ γ ϣ ϯ ɾ α ʔ Ϗ ε Λ ։ ൃ ӡ ༻ ͢ Δ ͨ Ί ʹ ߟ ͑ ͨ ͍ ͜ ͱ D e v e l o p e r s S u m m i t K a n s a i 2 0 1 9
  2. H i d e t a k a O k

    a m o t o • Digitalcube Co. Ltd. • Alexa Campions • AWS Samurai 2017 in Japan • ask sdk(Node.js) Core contributor
  3. ޮ ཰ త ͳ ։ ൃ Λ ਐ Ί Δ

    ্ Ͱ · ͣ ҙ ࣝ ͠ ͨ ͍ ͜ ͱ
  4. A g e n d a • Step1: SaaSΛ࢖ͬͯɺʮ΍Βͳ͍͜ͱʯΛ૿΍͢ •

    ࣗࣾͰ։ൃ͢΂͖఺ͱSaaSΛར༻͢Δ఺ͷҧ͍͸ͳʹ͔ʁ • Step2: ࣾ಺ͷ։ൃΛSaaSϥΠΫʹͭ͘Δ • APIυϦϒϯͳϚΠΫϩαʔϏεΛߏங͢Δ • Conclusion: ԕ͘ʹߦ͔͘ɺૣ͘ߦ͔͘
  5. A g e n d a • Step1: SaaSΛ࢖ͬͯɺʮ΍Βͳ͍͜ͱʯΛ૿΍͢ •

    ࣗࣾͰ։ൃ͢΂͖఺ͱSaaSΛར༻͢Δ఺ͷҧ͍͸ͳʹ͔ʁ • Step2: ࣾ಺ͷ։ൃΛSaaSϥΠΫʹͭ͘Δ • APIυϦϒϯͳϚΠΫϩαʔϏεΛߏங͢Δ • Conclusion: ԕ͘ʹߦ͔͘ɺૣ͘ߦ͔͘
  6. S a a S Λ ࢖ ͬͯɺ ʮ ΍ Β

    ͳ ͍ ͜ ͱ ʯ Λ ૿ ΍ ͢ • ࣗ෼Ͱ΍Δ΂͖͔ɺ΍Δ·͍͔ • Ϗδωεͷத਻ͱඞཁͳ΋ͷͷҧ͍ • ShifterͰબΜͩ΋ͷɾબ͹ͳ͔ͬͨ΋ͷ • ΍Βͳ͍͜ͱͰɺݟ͑Δ͜ͱ
  7. Making Your Own Power Doesn't Make Your Beer Taste Better

    ࣗ෼ͷྗͰ΍Δ = ࠷্ͱ͸ݶΒͳ͍ ੲ: Ϗʔϧ޻৔͸ࣗલͰൃిػΛॴ༗ ࠓ: ిؾ͸ൃిॴ͔Βങ͏΋ͷ -> ిؾͷॴ༗͔Βར༻΁ͷมԽ
  8. ʮ ͋ Δ ػ ೳ ʯ ͷ ॴ ༗ ͱ

    ར ༻ • ઃඋΛ༻ҙ͢Δ͜ͱͰɺࣗڅࣗ଍͕ՄೳʹͳΔ -> ॴ༗ • ΦϯϓϨαʔόʔ / ࣗࣾ։ൃ / ϑϧεΫϥον • ୈࡾऀ͕༻ҙͨ͠΋ͷΛೖख͢Δ -> ར༻ • Ϋϥ΢υαʔόʔ / SaaS / ϑϨʔϜϫʔΫ
  9. ʮ ͋ Δ ػ ೳ ʯ ͷ ॴ ༗ ͱ

    ར ༻ : ϝ Ϧ ο τ ͱ σϝ Ϧ ο τ • ॴ༗ɿ҆৺ײ΍ॊೈͳΧελϚΠζੑͷ֬อͳͲ͕ظ଴Ͱ͖Δ • ॴ༗ɿ४උʹ࣌ؒͱίετ͕͔͔Δ / ϝϯςφϯεͷඞཁੑ • ར༻ɿඞཁͳ࣌ʹඞཁͳ͚ͩखʹೖΕΔ͜ͱ͕Ͱ͖Δ • ར༻ɿαʔϏεଆͷ࢓༷΁ͷґଘ / ো֐ͷυϛϊ౗͠
  10. ࣗ ෼ Ͱ ༻ ҙ ͢ Δ ͔ ɺ Կ

    ͔ Λ ར ༻ ͢ Δ ͔ • APIϕʔεͷαʔϏεͷ૿ՃɿStripe / Auth0 / AWS / etc… • ෳ਺ͷAPIΛ૊Έ߹ΘͤͰɺϏδωεϩδοΫͷߏங͕Մೳʹ • ඞཁͳ෦඼Λ֎஫ͭͭ͠ɺࣗ෼ͷ঎඼Λ૊ΈཱͯΔ • ʮ૊Έཱ͍ͯͨ΋ͷʯͷͨΊʹ࢖͑Δ΋ͷ͸ͳʹ͔ʁ
  11. S a a S Λ ࢖ ͬͯɺ ʮ ΍ Β

    ͳ ͍ ͜ ͱ ʯ Λ ૿ ΍ ͢ • ࣗ෼Ͱ΍Δ΂͖͔ɺ΍Δ·͍͔ • Ϗδωεͷத਻ͱඞཁͳ΋ͷͷҧ͍ • ShifterͰબΜͩ΋ͷɾબ͹ͳ͔ͬͨ΋ͷ • ΍Βͳ͍͜ͱͰɺݟ͑Δ͜ͱ
  12. ॴ ༗ ͢΂ ͖ ػ ೳ ͱ ඞ ཁ ͳ

    ػ ೳ • ͦͷϏδωεͷجװ -> ࣗલͰ༻ҙ͢Δඞཁ͕͋Δ • αʔϏεԽ͢ΔͨΊʹඞཁͳػೳ -> ར༻Λݕ౼͢Δ • ΞΧ΢ϯτ؅ཧ / ܾࡁ / αʔόʔ / GUI / etc… • ʮͳ͍ͱࠔΔ͕ɺͲͷϏδωεͰ΋ඞཁͳ΋ͷʯ
  13. Ͳ ͜ · Ͱ Λ ॴ ༗ ͱ ͢ Δ

    ͔ ʁ • ίΞͱͳΔγεςϜ͸ࣗ෼Ͱ࡞Δ͔͠ͳ͍ • γεςϜΛߏ੒͢Δ΋ͷ͸ɺSaaSΛར༻Ͱ͖Δ • ೝূ / ೝՄ / ܾࡁͳͲɺʮඞਢ͚ͩͲίΞ͡Όͳ͍ʯΛݟۃΊΔ • ίΞ෦෼ͷ։ൃʹूத͢ΔͨΊʹɺSaaSΛར༻͢Δ
  14. S a a S Λ ࢖ ͬͯɺ ʮ ΍ Β

    ͳ ͍ ͜ ͱ ʯ Λ ૿ ΍ ͢ • ࣗ෼Ͱ΍Δ΂͖͔ɺ΍Δ·͍͔ • Ϗδωεͷத਻ͱඞཁͳ΋ͷͷҧ͍ • ShifterͰબΜͩ΋ͷɾબ͹ͳ͔ͬͨ΋ͷ • ΍Βͳ͍͜ͱͰɺݟ͑Δ͜ͱ
  15. S a a S Λ ࢖ ͬͯ Α ͔ ͬ

    ͨ ͜ ͱ • ։ൃ଎౓͕ͱʹ͔͘ૣ͍ • ʮ͜ͷػೳཉ͍͠ʯ -> ʮAPI͋ΔͶʯ -> ʮ͡Ό͋ͦΕΑͿΘʯ • SaaSଆͷϞσϧΛϕʔεʹγεςϜͷઃܭ͕Ͱ͖Δ • ϩά / Ϣʔβʔ؅ཧ / ϚωίϯͳͲͷʮ͋Δͱخ͍͠ʯػೳ͕͋Δ • ࣗલͰ࡞Δͱ͍͍ͩͨޙճ͠ʹ͞Ε͕ͪͳ΋ͷ͕͍͍ͩͨ͋Δ • GDPR / PCI DSSͳͲͷΊΜͲ͍͘͞ ॏཁͳػೳ΋͍͍ͩͨαϙʔτ
  16. S a a S Λ ࢖ ͬͯ ͭ Β ͍

    ͜ ͱ • SaaSͷ࢓༷΍੍໿͕ͦͷ··ϓϩμΫτͷ੍ݶʹͳΔ • ্ݶ΍੍ݶͷ֬ೝ࿙ΕͰ੝େͳ࢓༷࠶ઃܭ͕͓͖Δ͜ͱ΋ • ্ݶ΍੍ݶ͸ඞͣ֬ೝ͔ͯ͠Βಈ͘ɻಈ࡞΋ࢼ͓ͯ͘͠ • ো֐ͷϐλΰϥεΠον • 1 SaaSͷো֐ͷר͖ఴ͑Ͱશମ͕མͪΔՄೳੑ͕͋Δ • API͕ΤϥʔΛฦͨ࣌͠ͷᷖճ࿏͸͋Δ͔ʁ͚ͦͩ͜ࡴͤΔ͔ʁ
  17. S a a S Ͱ ࢼ ͠ ɺ μϝ ͳ

    Β͢ ͙ ࣺ ͯ Δ • ࢼݧӡ༻͢ΔػೳΛҰ͔Β࡞Δͷ͸ϦεΫ͕େ͖͍ • ैྔ՝ۚܥSaaS͸ࣙΊ΍͘͢ɺτϥΠΞϧ͕͋Δ͜ͱ΋ଟ͍ • ʮ·ͣSaaSͰࢼ͢ʯ -> ʮ෺଍Γͳ͍͔Β࡞Δʯͱ͍͏൑அ • SaaSΛ׆͔͢͜ͱͰɺΞδϦςΟΛߴΊΔ
  18. S a a S Λ ࢖ ͬͯɺ ʮ ΍ Β

    ͳ ͍ ͜ ͱ ʯ Λ ૿ ΍ ͢ • ࣗ෼Ͱ΍Δ΂͖͔ɺ΍Δ·͍͔ • Ϗδωεͷத਻ͱඞཁͳ΋ͷͷҧ͍ • ShifterͰબΜͩ΋ͷɾબ͹ͳ͔ͬͨ΋ͷ • ΍Βͳ͍͜ͱͰɺݟ͑Δ͜ͱ
  19. Ϣ ʔ β ʔ ͸ ʮ ମ ݧ ʯ ʹ

    ͓ ۚ Λ ෷ ͏ • ΧλϩάεϖοΫ΍ੑೳ͚ͩͰબͿέʔε͕ݮগ • ʮͦΕΛ࢖͏͜ͱͰɺͲΜͳମݧ͕Ͱ͖Δ͔ʁʯ • ϢʔβʔͷٻΊΔମݧ͸ৗʹมԽ͢Δ • มԽ͢Δظ଴ʹԠ͑ΔͨΊʹ΋ɺSaaSԽͯ͠ܧଓతͳؔ܎Λ໨ࢦ͢
  20. A g e n d a • Step1: SaaSΛ࢖ͬͯɺʮ΍Βͳ͍͜ͱʯΛ૿΍͢ •

    ࣗࣾͰ։ൃ͢΂͖఺ͱSaaSΛར༻͢Δ఺ͷҧ͍͸ͳʹ͔ʁ • Step2: ࣾ಺ͷ։ൃΛSaaSϥΠΫʹͭ͘Δ • APIυϦϒϯͳϚΠΫϩαʔϏεΛߏங͢Δ • Conclusion: ԕ͘ʹߦ͔͘ɺૣ͘ߦ͔͘
  21. a s a S e r v i c e

    Խ ͭ͠ ͭ ͋ Δ ੈ ք https://boxil.jp/mag/a3600/
  22. a s a S e r v i c e

    Խ ͭ͠ ͭ ͋ Δ ੈ ք • Backend as a Service • Platform as a Service • Infrastructure as a Service • Software as a Service • etc…
  23. D i g i t a l c u b

    e ͷ a s a S e r v i c e Խ • AWS Marketplace AMI (AMIMOTO): Machine Imageͷఏڙ • AMIMOTO Managed: ϚωʔδυϗεςΟϯάʢSaaSԽʣ • Shifter: WordPressͷSaaSԽʢମݧʹϑΥʔΧεʣ
  24. খ ͞ ͳ α ʔ Ϗ ε ͷ ू ·

    Γ ʢ ܈ ʣ ͷ Α ͏ ʹ ͭ ͘Δ • υϝΠϯ / ػೳϨϕϧͰ̍ͭͷαʔϏεԽ • API ΍ ΠϕϯτϕʔεͰαʔϏεΛར༻͢Δ • microͳserviceΛ૊Έ߹Θͤͨߏ੒ -> microservices • খ͞ͳSaaS / FaaSΛ࡞ͬͯɺͦΕΛ૊Έ߹ΘͤΔܗͷ࣮૷
  25. • React (SPA / GUI) • Serverless FW (API) •

    Netlify (Server) • AWS (APP Server) User Interface
  26. m i c ro s e r v i c

    e s ͷ ϝ Ϧ ο τ • αʔϏε୯ҐͰͷσϓϩΠɾมߋ͕ՄೳʹͳΔ • ґଘؔ܎ΛݮΒ͢͜ͱͰɺςετ͠΍͘͢ͳΔ • ػೳ΍νʔϜɺαʔϏεͷੑ࣭ʹٕ͋ͬͨज़͕ར༻Ͱ͖Δ • ΠϕϯτυϦϒϯʹ͢Δ͜ͱͰɺαʔϏεؒͷґଘ΋ݮΒͤΔ
  27. m i c ro s e r v i c

    e s ͷ σϝ Ϧ ο τ • ίʔυϕʔε / Ϧιʔεͷ਺͕๲େʹͳΔ • ґଘؔ܎ΛݮΒ͢͜ͱͰɺςετ͠΍͘͢ͳΔ • ػೳ΍νʔϜɺαʔϏεͷੑ࣭ʹٕ͋ͬͨज़͕ར༻Ͱ͖Δ • ΠϕϯτυϦϒϯʹ͢Δ͜ͱͰɺαʔϏεؒͷґଘ΋ݮΒͤΔ
  28. m i c ro s e r v i c

    e s ͷ σϝ Ϧ ο τ • ίʔυϕʔε / Ϧιʔεͷ਺͕๲େʹͳΔ • ݁߹ςετͷෳࡶԽ • ػೳ΍νʔϜɺαʔϏεͷੑ࣭ʹٕ͋ͬͨज़͕ར༻Ͱ͖Δ • ΠϕϯτυϦϒϯʹ͢Δ͜ͱͰɺαʔϏεؒͷґଘ΋ݮΒͤΔ
  29. m i c ro s e r v i c

    e s ͷ σϝ Ϧ ο τ • ίʔυϕʔε / Ϧιʔεͷ਺͕๲େʹͳΔ • ݁߹ςετͷෳࡶԽ • ʮͦͷਓ͔͠Θ͔Βͳ͍ΞϓϦʯͷ஀ੜ • ΠϕϯτυϦϒϯʹ͢Δ͜ͱͰɺαʔϏεؒͷґଘ΋ݮΒͤΔ
  30. m i c ro s e r v i c

    e s ͷ σϝ Ϧ ο τ • ίʔυϕʔε / Ϧιʔεͷ਺͕๲େʹͳΔ • ݁߹ςετͷෳࡶԽ • ʮͦͷਓ͔͠Θ͔Βͳ͍ΞϓϦʯͷ஀ੜ • ϐλΰϥεΠονతͳෆ۩߹ͷՄೳੑ
  31. m i c ro s e r v i c

    e s ͸ ۜ ͷ ஄ ؙ Ͱ ͸ ͳ ͍ • ࠓ·Ͱखؒͩͬͨ࡞ۀΛޮ཰ԽͰ͖Δ • microservicesͷͨΊͷ࡞ۀ͕৽͘ൃੜ͢Δ • ϞϊϦγοΫͷ؅ཧίετ vs microservicesͷ؅ཧίετ
  32. m i c ro s e r v i c

    e s ͷ ؅ ཧ ί ε τ Λ ͍ ͔ ʹ ཈ ͑Δ ͔ • ୭Ͱ΋ಉ͡Α͏ʹ࣮૷ͤ͟ΔΛಘͳ͍؀ڥΛ࡞Δ • ܕ΍ϦϯτπʔϧʹΑΔه๏ͷඪ४Խ • ςετ΍ܕʹΑΔഁյతมߋͷݕ஌ɾ༧๷ • CIαʔϏεΛ࢖ͬͨʮୈࡾऀʹΑΔࡋఆʯ • υΩϡϝϯτΛ࢒͢
  33. m i c ro s e r v i c

    e s ͷ ؅ ཧ ί ε τ Λ ͍ ͔ ʹ ཈ ͑Δ ͔ • ୭Ͱ΋ಉ͡Α͏ʹ࣮૷ͤ͟ΔΛಘͳ͍؀ڥΛ࡞Δ • ϦϯτπʔϧʹΑΔه๏ͷඪ४Խ • ςετ΍ܕʹΑΔഁյతมߋͷݕ஌ɾ༧๷ • CIαʔϏεΛ࢖ͬͨʮୈࡾऀʹΑΔࡋఆʯ • υΩϡϝϯτΛ࢒͢
  34. Ϧ ϯ τπ ʔ ϧ ʹ Α Δ ه ๏

    ͷ ඪ ४ Խ • ESLintͰίʔσΟϯάελΠϧΛඪ४Խ • ϧʔϧ͸JavaScript Standard StyleͰڞ௨Խ • git hook΍CIͰνΣοΫ͠ɺϧʔϧҧ൓ΛϦδΣΫτ͢Δ • ॻ͖ํͷΫηΛۉ͢͜ͱͰɺ୭Ͱ΋ಡΊΔɾ৮ΕΔίʔυʹ͢Δ
  35. m i c ro s e r v i c

    e s ͷ ؅ ཧ ί ε τ Λ ͍ ͔ ʹ ཈ ͑Δ ͔ • ୭Ͱ΋ಉ͡Α͏ʹ࣮૷ͤ͟ΔΛಘͳ͍؀ڥΛ࡞Δ • ϦϯτπʔϧʹΑΔه๏ͷඪ४Խ • ςετ΍ܕʹΑΔഁյతมߋͷݕ஌ɾ༧๷ • CIαʔϏεΛ࢖ͬͨʮୈࡾऀʹΑΔࡋఆʯ • υΩϡϝϯτΛ࢒͢
  36. ςε τ ΍ ܕ ʹ Α Δ ഁ յ త

    ม ߋ ͷ ݕ ஌ ɾ ༧ ๷ • ࣮૷ऀ͕ʮ͜͏࢖͑͹͜͏ಈ͘ʯͱ͍͏ه࿥Λ࢒͢ • ؔ਺୯ҐͷϢχοτςετɾαʔϏε୯Ґͷ݁߹ςετ • ଞͷ࣮૷ऀ͕৮Δ࣌ɺͳʹΛյ͔ͨ͠ΛΘ͔Γ΍͘͢͢Δ • ςετέʔεΛݟΔ͜ͱͰɺ࣮૷ͷ೺Ѳ΋Ͱ͖Δ • ಉ༷ʹܕΛ͚ͭΔ͜ͱͰɺޡͬͨܕΛࢦఆͨ͜͠ͱʹ΋ؾ͚ͮΔ
  37. m i c ro s e r v i c

    e s ͷ ؅ ཧ ί ε τ Λ ͍ ͔ ʹ ཈ ͑Δ ͔ • ୭Ͱ΋ಉ͡Α͏ʹ࣮૷ͤ͟ΔΛಘͳ͍؀ڥΛ࡞Δ • ϦϯτπʔϧʹΑΔه๏ͷඪ४Խ • ςετ΍ܕʹΑΔഁյతมߋͷݕ஌ɾ༧๷ • CIαʔϏεΛ࢖ͬͨʮୈࡾऀʹΑΔࡋఆʯ • υΩϡϝϯτΛ࢒͢
  38. ࣮ ૷ ͢ Δ ͷ ͕ ໨ త ɺ फ

    ڭ ઓ ૪ ͸ ͠ ͨ ͘ ͳ ͍ • ʮϧʔϧʹै͍ͬͯΔ͔൱͔ʯͷࡋఆ͸ػցతʹߦ͏ • GitHubͰmasterϒϥϯνΛอޢ • CIͷpassΛmergeͷ৚݅ʹ͢Δ • ʮCI͕μϝͬͯݴͬͯΔ͔Β࢓ํͳ͍ʯ • ػցతʹͰ͖ͳ͍ϨϏϡʔͷΈਓྗͰ͓͜ͳ͏
  39. m i c ro s e r v i c

    e s ͷ ؅ ཧ ί ε τ Λ ͍ ͔ ʹ ཈ ͑Δ ͔ • ୭Ͱ΋ಉ͡Α͏ʹ࣮૷ͤ͟ΔΛಘͳ͍؀ڥΛ࡞Δ • ϦϯτπʔϧʹΑΔه๏ͷඪ४Խ • ςετ΍ܕʹΑΔഁյతมߋͷݕ஌ɾ༧๷ • CIαʔϏεΛ࢖ͬͨʮୈࡾऀʹΑΔࡋఆʯ • υΩϡϝϯτΛ࢒͢
  40. ࣮ ૷ ͠ ͨ ਓ ͸ ͩ ͍ ͨ ͍

    Կ Λ ॻ ͍ ͨ ͔ ֮ ͑ͯ ͍ ͳ ͍ • TSDocͳͲͰιʔεʹίϝϯτΛ࢒͢ • API͸SwaggerͰϦΫΤετ / ϨεϙϯεΛ໌ࣔ • Lambda͸InvokeαϯϓϧΛ༻ҙ͢Δ • λεΫͷҙਤ΍࡞ۀΛBacklog΍GitHubͷIssue / PRʹ࢒͢
  41. A g e n d a • Step1: SaaSΛ࢖ͬͯɺʮ΍Βͳ͍͜ͱʯΛ૿΍͢ •

    ࣗࣾͰ։ൃ͢΂͖఺ͱSaaSΛར༻͢Δ఺ͷҧ͍͸ͳʹ͔ʁ • Step2: ࣾ಺ͷ։ൃΛSaaSϥΠΫʹͭ͘Δ • APIυϦϒϯͳϚΠΫϩαʔϏεΛߏங͢Δ • Conclusion: ԕ͘ʹߦ͔͘ɺૣ͘ߦ͔͘
  42. ϚΠΫ ϩ α ʔ Ϗ ε ͡ Ό ͳ ͍

    ํ ͕ Α ͍ ͜ ͱ ΋ ͋ Δ • WordPress / DrupalͳͲͰૉૣ͘࡞Δͷ΋༗ޮͳखஈ • ϞϊϦγοΫ͔ͭख׳Εͨߏ੒Ͱૉૣ͘ϦϦʔε͢Δ • APIΤϯυϙΠϯτΛఏڙ͢Δ͜ͱͰɺas a ServiceԽ΋Մೳ • ૉૣ͘࡞ͬͯϦϦʔε -> APIԽ -> ϚΠΫϩαʔϏε΁෼ׂ
  43. ૣ ͘ ਐ Ή ΂ ͖ ͔ ɺ ԕ ͘

    Λ ໨ ࢦ ͢΂ ͖ ͔ • ̌ -> 1ͷ଎౓͸ϞϊϦγοΫ͕ૣ͘ͳΓ΍͍͢ • CMS / FWͳͲͷڊਓͷݞʹ৐ΕΔ༏Ґੑ • API / ϚΠΫϩαʔϏεԽ͢Δ͜ͱͰɺʮ̍ͭͷ͜ͱΛ͏·͘΍Δʯ • ͋ͳͨͷߦ͖͍ͨ৔ॴ΁͸Ͳ͏΍ͬͯਐΈ·͔͢ʁ • Far Together