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

productbook2023_slide.pdf

 productbook2023_slide.pdf

株式会社ギフティのProduct Book 2023年版。RubyKaigi 2023向けに作成しスポンサーブースで配布しました。企画から執筆まで社内のエンジニアたちで制作しました。
プロダクトづくりへの想いが伝わると嬉しいです。

giftee tech division

August 08, 2023
Tweet

More Decks by giftee tech division

Other Decks in Technology

Transcript

  1. Vision: ࢲ͕͍ͨͪͨ͜͠ͱ Mission: ࢲ͕ͨͪΊ͟͢͜ͱ e ΪϑτΛ࣠ͱͯ͠ɺਓɺاۀɺ֗ͷؒʹɺ ͞·͟·ͳԑΛҭΉαʔϏεΛఏڙ͢Δɻ ΩϞνͷ॥ ؀Λଅ ਐ͢Δ͜ͱͰɺ

    ΑΓΑ͍ؔ ܎Ͱͭͳ͕ͬͨࣾ ձΛͭ͘Δɻ eΪϑτΛૹ৴ ଃΓओ͕ΦϯϥΠϯߪೖ͠ૹ෇͢Δ डऔओ͕঎඼ͱަ׵͢Δ ଃΓओ डऔओ ۙ͘ͷళฮ ·ͨ͸ECαΠτ νέοτΛఏࣔ ର৅঎඼ͱަ׵ [http://giftee.co/r/f aPGfbJ] ͷΑ͏ͳ จࣈྻͰϢχʔΫͳURLͱͯ͠ੜ੒͞Ε·͢ͷͰɺ ϝʔϧ΍SNSͰ؆୯ʹૹ৴Ͱ͖·͢ eΪϑτͱ͸ ΪϑςΟ͕໨ࢦ͢ੈք ҿ৯ɾখചళฮͳͲͰ঎඼΍αʔϏεͱަ׵͢Δ͜ͱ͕Ͱ͖ΔɺσδλϧͷΪϑτνέοτͰ͢ɻ ར༻ऀ͕૿͑Δ΄ͲັྗతͳeΪϑτ͕૿Ճ eΪϑτ͕૿͑Δ΄Ͳར༻ऀ͕૿Ճ eΪϑτ ϓϥοτϑΥʔϜ eGift System eGift API ҿ৯ ྲྀ௨ খച APIఏڙ SaaSఏڙ eΪϑτͷར༻ eΪϑτͷఏڙ ফࠐ ൃ݊ ྲྀ௨ ݸਓ޲͚ ҿ৯ɾখച ޲͚ ๏ਓ޲͚ eΪϑτϓϥοτϑΥʔϜͷ࢓૊Έ શࠃͷҿ৯ɾྲྀ௨ɾখചࣄۀऀʹରͯ͠e ΪϑτΛൃ݊͢Δ࢓૊ΈΛSaaSͰఏڙ͠ɺൃ݊ͨ͠ eΪϑτΛɺݸਓ޲͚ ɾ๏ਓ޲͚ͷ༷ʑͳΦϯϥΠϯνϟωϧͰྲྀ௨ɻeΪϑτͷൃ͔݊Βྲྀ௨· ͰҰؾ௨؏ͨ͠ϏδωεϞσϧΛܗ੒͍ͯ͠·͢ɻ ୭͔ͱͭͳ͕Δ͜ͱ͕ɺ͔ͬ͢Γखܰʹͳͬͨࠓɺ ୯ʹͭͳ͕Δ͚ͩͰͳ͘ɺ৺͋Δͭͳ͕Γ͕ٻΊΒΕ͍ͯΔΑ͏ʹࢥ͍·͢ɻ ͔͠͠ݱ࣮ͷࣾձ͸ɺ߹ཧੑ΍ޮ཰Λॏࢹ͗ͯ͢͠υϥΠͳؔ܎ʹͳΓ͕ͪɻ ΩϞνΛಧ͚ͨΓɺड͚औͬͨΓɺผͷਓʹ෼͚ͨΓɺ ͦΜͳਓؒతͳ݁ͼ͖ͭ͸ɺΉ͠Ζݮ͍ͬͯΔͷ͔΋͠Ε·ͤΜɻ ΪϑςΟ͸ɺeΪϑτΛ͸͡Ίͱ͢ΔαʔϏεΛఏڙ͢Δ͜ͱͰɺ ਓ΍اۀɺ֗ͳͲͷɺ͍ΖΜͳԑΛҭΈ͍ͨɻ ੈͷதʹͦ͏͍͏ɺԹ౓ײͷ͋Δͭͳ͕Γ͕૿͑Ε͹ɺ ;ͱͨ͠ΩϞν΋ɺදʹग़΍͘͢ͳΔɻ ΍͕ͯͦΕ͸εϜʔζʹ॥؀͠͸͡Ίɺ ΑΓΑ͍ؔ܎Ͱͭͳ͕ΔࣾձΛͭͬͯ͘͘ΕΔ͸ͣɻ ͦ͏৴ͯ͡ɺࢲͨͪ͸લ΁ͱਐΈ·͢ɻ ΩϞν͕॥؀͢Δࣾձ΁ Product Book P.3 RubyKaigi2023 P.2
  2. g i f t e e ͸ΦϯϥΠϯͰख ܰʹΪϑτΛଃ ΕΔ αʔϏεɻ

    ʮ͋Γ͕ͱ͏ʯ ʮ͓ΊͰͱ͏ʯ ʮ͓͔ͭΕ ͞·ʯͳͲͷΩϞνʹఴ͙͑ͯ͢ʹଃΕΔΧδϡ ΞϧΪϑτΛऔΓଗ͍͑ͯ·͢ɻϝʔϧ΍ LINEɺ Twitter ͳͲΛհ͠ɺ௚઀ձ͑ͳ͍૬ख΍ɺॅॴ Λ஌Βͳ͍૬खʹ΋ؾܰʹଃΔ͜ͱ͕Ͱ͖·͢ɻ giftee ͸ C2C ͷϓϩμΫτͳͷͰɺΪϑτΛड͚ औΔଆ͚ͩͰͳ͘ଃΔଆͷϢʔβʔମݧʹ΋ϑΥʔ Χεͯ͠ߟ͑Δ͜ͱΛେࣄʹ͍ͯ͠·͢ɻ ݸਓ޲͚αʔϏεͰ͸ɺ Ϣʔβʔ͕ԿΛٻΊ͍ͯΔ ͷ͔ɺਖ਼ղ͕෼͔ΓͮΒ͍෦෼΋͋Γ·͢ɻ·ͨػ ೳ։ൃʹ͋ͨͬͯ͸ɺϢʔβʔ͔ΒಘΒΕΔϑΟʔ υόοΫ͚ͩͰͳ͘ɺજࡏతͳχʔζΛԾఆ࣮ͯ͠ ૷͢Δ͜ͱ΋͋ΔͷͰɺͦΕ͕ඞͣ͠΋ਖ਼ղͰ͸ͳ ͍ͱ͍͏͜ͱ΋͋Γ·͢ɻ͜ͷͨΊػೳΛ࡞ͬͯϦ Ϧʔε͢Δ͚ͩͰͳ͘ɺϢʔβʔʹྑ͍ମݧΛఏڙ Ͱ͖͍ͯΔͷ͔Λ೺Ѳ͢ΔͨΊɺৗʹޮՌଌఆ͢Δ ͜ͱΛେࣄʹ͍ͯ͠·͢ɻͦͷଞʹ΋ɺTwitter ্ ͰͷϢʔβʔͷ౤ߘ΍ΞϓϦͷϨϏϡʔɺϝʔϧͰ ͷΞϯέʔτ౳ͰϢʔβʔͷ੠ΛूΊɺମݧͷվ ળʹ׆͔͍ͯ͠·͢ɻ ௚઀Ϣʔβʔͷํ͔ΒಛఆͷػೳͷχʔζΛฉ͘͜ͱ͕Ͱ͖ΔΘ͚ Ͱ͸ͳ͍ͷͰɺϢʔβʔͷମݧΛԾઆ͔Βߟ͑Δࣄ͕ଟ͘ɺ૝૾ྗ Λಇ͔ͤΔ༨஍͕͘͢͝େ͖͍ͷ͸ָ͍͠ͱ͜ΖͰ͢ͶɻϢʔβʔಛ ੑͷཧղ͕ਂ·Γɺͦͷ্Ͱ૝ఆ͕ϑΟοτͨ͠ͱ͖͸ຊ౰ʹ໘ന͍ Ͱ͢͠ɺ τϥΠΞϯυΤϥʔΛ܁Γฦͯ͠ճ౴Λ୳͠ʹߦ͘໘ന͕͞ ͋Γ·͢ɻ ·ͨɺ஌Γ߹͍͕࢖͍ͬͯΔͷΛݟͨΓฉ͍ͨΓ͢Δͱخ͍͠Ͱ͢ Ͷɻࣗ෼ͷ஌Βͳ͍ͱ͜ΖͰ࢖ΘΕ͍ͯ ͯɺΪϑτΛଃΓ߹͏ͱ͍͏୭΋ଛ͠ͳ ͍ମݧΛࣗ෼ͨͪͷ࡞ͬͨ΋ͷͰੜΈग़ ͍ͯ͠Δ͜ͱ͕ײ͡ΒΕΔͱɺͱͯ΋΍Γ ͕͍Λײ͡·͢ɻ ࠓޙͷ՝୊ͱͯ͠͸ɺ঎඼·Ͱͷಈઢ΍αδΣετΛ޻෉͢Δ͜ͱ͕ ڍ͛ΒΕ·͢ɻ೥ʑ঎඼ͷϥΠϯφοϓ͕ॆ࣮͍ͯͯ͠ɻͦΕࣗମ͸ ͱͯ΋ྑ͍͜ͱͳͷͰ͕͢ɺϢʔβʔ͕΋ͬͱ͍ΖΜͳ঎඼ʹ৮ΕΒ ΕΔΑ͏ʹɺվળ͍͖͍ͯͨ͠ͱࢥ͍ͬͯ·͢ɻ ٕज़બఆͷ൑அࡐྉΛจষͱͯ͠࢒ͨ͢ΊʹɺADRʢΞʔ ΩςΫνϟ ɾσγδϣϯɾ Ϩίʔυʣ Λಋೖ͍ͯ͠·͢ɻϦϙδ τϦ಺ʹADRΛ࢒͢͜ͱͰ ʮͳͥ͜ͷ࢓༷ʹͳ͍ͬͯΔͷ͔ʯ ʮҰݟ A ͷ΄͏͕ྑͦ͞͏͕ͩ B ʹ͍ͯ͠Δཧ༝ʯͳͲɺ൑ அͷཤྺ͕࢒Γɺޙ͔ΒδϣΠϯͨ͠ΤϯδχΞʹ΋ҙࢥܾ ఆͷܦҢ͕ڞ༗Ͱ͖ΔΑ͏ʹͳ͍ͬͯ·͢ɻADR ͸ɺকདྷత ʹ͜ΕΛೖΕͨ΄͏͕͍͍ͷͰ͸ʁͱ͍͏த௕ظతͳࢹ఺ʹ ཱͬͨٞ࿦΍൑அʹ΋໾ཱͪ·͢ɻ ADRͷλΠτϧʹ͸࡞੒೔࣌ΛೖΕ͍ͯ·͢ɻADR͸ͦͷ࣌ ఺ͷஅ໘ͱͯ͠࢒͢͜ͱΛ໨తͱͯ͠ΔͨΊͰ͢ɻ αʔϏε͕ܧଓ͢ΔݶΓϓϩμΫτ͕׬੒͢Δ͜ͱ͸͋Γ· ͤΜɻ͜Ε͸υΩϡϝϯτʹ΋ݴ͑Δ͜ͱͰ͢ɻ׬શͳ৘ใྔ ͷυΩϡϝϯτΛ࡞੒ɾҡ࣋͢ΔͷͰ͸ͳ͘ɺٕज़తͳ൑அͷ ཤྺΛ࢒͢͜ͱͰɺকདྷతʹՁ஋ͷ͋Δ৘ใͱ͢Δ͜ͱ͕Ͱ ͖·͢ɻ ADRʹΑΔٕज़తͳ൑அͷه࿥ giftee ͸૑ۀ͔࣌Β͋ΔϓϩμΫτͰɺؔ܎͢ΔεςʔΫϗ ϧμ΋ଟ͘։ൃςʔϚ΋ଟذʹΘͨΓ·͢ɻ͜ͷͨΊɺ։ൃ νʔϜ͕ݱࡏԿʹऔΓ૊ΜͰ͍ͯ͜ͷઌͲ͜ʹ޲͔͍ͬͯ͘ ͷ͔ΛλΠϜϦʔʹ೺ѲͰ͖Δಁ໌ੑ͕ٻΊΒΕ·͢ɻ νʔϜͷ։ൃ଎౓ɺ ϦϦʔε·Ͱͷ࢒ετʔϦʔϙΠϯτΛશ һ͕೺ѲͰ͖ΔΑ͏ʹͯ͠ɺৗʹνʔϜͷ ʮݱࡏ஍ʯ ͕෼͔Δ Α͏ʹ͍ͯ͠·͢ɻ ͜ͷಁ໌ੑʹΑͬͯɺλεΫ΁ͷޮՌతͳΞϓϩʔνํ๏΍ ༏ઌ౓͕ਖ਼͘͠ݕ౼Ͱ͖ΔΑ͏ʹͳΓ·͢ɻ ·ͨɺ ։ൃͷਐߦதʹൃੜٕͨ͠ज़తͳ໰୊ɺ ։ൃϓϩηε ɾ λεΫґଘੑʹؔ͢Δ໰୊౳Λϝϯόʔ಺Ͱ૬ஊ͠΍͍͢Α ͏ͳؔ܎ͮ͘ΓΛҙ͍ࣝͯ͠·͢ɻ νʔϜͷݱࡏ஍ʹϑΥʔΧε Engineering Inside Ϣʔβʔͷମݧͱ޲͖߹͏ϑΟʔυόοΫϧʔϓ ઓ ུ ܭ ը ΠςϨʔγϣϯ M TG ϦϦʔε ܭ ଌɾ෼ ੳ ։ ൃ #com_feedback Twitter ͓໰͍߹Θͤ ΞϓϦϨϏϡʔ ϑΟʔυόοΫ ٕज़ελοΫ ΪϑτͷλΠϓ ΤϯδχΞ I-NO ։ൃݴޠ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Ruby ϑϨʔϜϫʔΫ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Ruby on Rails ϑϩϯτΤϯυ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Vue.js ϑϩϯτΤϯυϑϨʔϜϫʔΫ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Nuxt.js σβΠϯϑϨʔϜϫʔΫ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Vuetify API ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋRESTful APIɺ GraphQL σʔλϕʔε ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Aurora MySQL KVS ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Redis CI/CD ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ GitHub Actions Ϋϥ΢υαʔϏε ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ AWS ߏ੒؅ཧ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Terraform αʔϏε؂ࢹ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ New Relic ϞόΠϧΞϓϦ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Flutter ళฮͰड͚औΓ ֎෦αΠτͰར༻ ࢦఆॅॴ΁഑ૹ ళฮͰͷձܭ࣌ʹνέοτΛఏࣔͯ͠ɺ Ϊϑτͷड͚औΓɺ·ͨ͸αʔϏεͷఏ ڙΛड͚ΔλΠϓͷΪϑτͰ͢ɻ γϦΞϧίʔυͳͲΛೖྗ͢Δ͜ͱͰɺ ର৅ͷΦϯϥΠϯαʔϏεΛར༻͢Δ λΠϓͷΪϑτͰ͢ɻ ड͚औΓखʹ͓ಧ͚ઌͷॅॴΛࢦఆ͠ ͯ΋Β͍ɺ഑ૹख഑Λͯ͠΋Β͏λΠϓ ͷΪϑτͰ͢ɻ ൃߦ͞ΕͨURLΛSNS΍ϝʔϧͰૹ৴ ࢖͍ํ ΪϑτΧʔυΛબͼϝοηʔδΛೖྗ ૬ख΍γʔϯʹ߹ͬͨΪϑτΛબͿ Product Book P.5 RubyKaigi2023 P.4
  3. Ωϟϯϖʔϯͷதʹ͸ LINEϓογϡͳͲͰࠂ஌Λߦ͏έʔε ͕͋ΔͷͰ͕͢ɺେखϝʔΧʔͷެࣜ LINE ΞΧ΢ϯτ͸༑ ͩͪొ࿥਺͕਺ඦສਓʹͷ΅Δ৔߹͕͋Γɺ ϓογϡ௨஌ޙ ʹεύΠΫΞΫηε͕ൃੜ͢Δ͜ͱ͕͋Γ·͢ɻ εύΠΫΞΫηε͕ൃੜ͢ΔͱWebίϯςφͷεέʔϧΞ΢ τ͕ؒʹ߹Θͳ͍Մೳੑ͕͋ΔͨΊɺେܕͷϓογϡ௨஌ʹ

    ͍ͭͯ͸ࣄલʹ࿈བྷΛ΋Β͍ɺ͋Β͔͡ΊεέʔϧΞ΢τͤ͞ ͓ͯ͘ӡ༻ʹͳ͍ͬͯ·͢ɻ͔͠͠ɺECSίϯςφͷ࣌ࠁϕʔ εͰͷεέʔϦϯά͸ AWS ͷ Webίϯιʔϧ͔Βઃఆ͕Ͱ ͖ͣɺAPI ܦ༝Ͱ͔͠ઃఆͰ͖·ͤΜͰͨ͠ɻ ͦ͜ͰɺίϚϯυϥΠϯ͔Β؆୯ʹ࣌ࠁϕʔεͷεέʔϦϯ άΛઃఆͰ͖Δ gem Λ։ൃ͠·ͨ͠ɻCUI ্ͰͷΠϯλϥ ΫςΟϒͳϝχϡʔػೳͷ࣮૷ʹ͸ɺpiotrmurach/tty- promptͱ͍͏gemΛ࢖͍ͬͯ·͢ɻRuby ͸ྺ࢙͕௕͍෼ɺ ͍͍ҙຯͰރΕͨπʔϧ͕ଗ͍ͬͯͯɺ;ͱͨ͠ࢥ͍͖ͭΛ ૉૣ͘ܗʹ͢Δͷʹ޲͍͍ͯΔͳ͋ͱվΊ࣮ͯײ͠·ͨ͠ɻ SNSΩϟϯϖʔϯ Ξϯέʔτँྱ ৽نސ٬֫ಘ ࣗࣾΞϓϦΛμ΢ϯϩʔυͯ͘͠Εͨํ ΍SNSΛϑΥϩʔͯ͘͠Εͨํʹ Ξϯέʔτʹճ౴ͯ͘͠Εͨํʹͦͷ৔ ͰΪϑτΛϓϨθϯτ ए೥૚͚ͩͰͳ͘෯޿͍೥ྸ૚ͷސ٬ ֫ಘʹ GCPʹ͸TwitterͷΠϯελϯτ΢ΟϯΛ࢖ͬͨநબػೳ͕͋ ΓɺTwitter ࿈ܞ෦෼ͷ࣮૷ͰTwitter APIΛ࢖༻͍ͯ͠·͢ɻ ݱঢ় v1ͷAPIΛ࢖༻͍ͯ͠·͕͢ɺࡢࠓͷ Twitter ࣾͷಈ޲ ΍কདྷతͳ͜ͱ΋ߟྀͯ͠ɺv2ʹҠߦ͍ͨ͠ͱ͍͏࿩͕͋Γ· ͨ͠ɻͨͩ͠ɺv1Ͱఏڙ͞Ε͍ͯͨҰ෦ͷػೳ͕ v2Ͱ͸·ͩ αϙʔτ͞Ε͍ͯͳ͍͜ͱ΋͋ΓɺҰ෦ͷΩϟϯϖʔϯͷΈஈ ֊తʹҠߦ͍ͯ͘͠ͱ͍͏ํ਑ʹͳΓ·ͨ͠ɻͭ·Γίʔυ্ Ͱv1ͱv2ͷซଘظؒΛઃ͚Δͱ͍͏͜ͱʹͳΓ·͢ɻ ͦ͜Ͱɺv1ͱv2ͰΠϯλʔϑΣʔεΛଗ࣮͑ͯ૷͓ͯ͘͜͠ͱͰɺ API clientΠϯελϯεͷੜ੒Ҏޙɺ ͦΕΛར༻͢Δίʔυ͕ v1 ͔ v2 ͔Λҙࣝ͢Δඞཁ͕ͳ͍Α͏ʹϙϦϞʔϑΟοΫͳ࣮ ૷Λߦ͍·ͨ͠ɻͦΕʹΑΓɺ ίʔυ্ͷෳࡶੑͷܰݮͱকདྷ v2ʹҠߦ͖͠ΔࡍͷӨڹൣғͷۃখԽ͕Ͱ͖͍ͯ·͢ɻ gemΛ࡞ͬͨ࿩ Ruby/Railsͷ޷͖ͳͱ͜Ζʹ ʮ͏·͘ઃܭ͢ΔͱࣗવݴޠͷΑ͏ͳ ίʔυ͕ॻ͚Δʯ ͱ͍͏΋ͷ͕͋Γ·͢ɻྫ͑͹ giftee Campaign PlatformͰɺࠓݱࡏ։࠵தͰ͸ͳ͍Ωϟϯϖʔϯʹରͯ͠Կ͔ͨ͠ ͍ͱ͖ʹɺ ʦCampaign.closing.each do ʜʧ ͷΑ͏ͳίʔυ͕ ࣮ߦͰ͖ΔͱɺͳΜͱ΋͍͑ͳ͍৺஍Α ͞Λײ͡·͢ɻ ؾ͚ͮ͹ Ruby ͕ࣗ෼ͷΩϟϦΞͷதͰ 1 ൪௕͘ॻ͍͖ͯͨݴޠʹͳ͍ͬͯ·͠ ͨɻ͜Ε͔Β΋ࣗ෼ͷࢥߟͷ฼ޠͱͯ͠ɺ ௕͘෇͖߹͍͖͍ͬͯͨͳͱࢥ͍ͬͯ·͢ɻ Engineering Inside ։ൃͨ͠ gem ͷ URL Λష͓ͬͯ͘ͷͰɺ ΋͠χʔζ͕͋Ε͹࢖ͬͯΈ͍ͯͩ͘͞! https ://github.com/megane42/ecs_au toscaling_scheduler ϙϦϞʔϑΟζϜΛ࢖ͬͯTwitter APIΛஈ֊తʹόʔδϣϯΞοϓ͢Δ giftee Campaign Platform (GCP) giftee Campaign Platform ͸ɺσδλϧΪϑτΛ࢖ͬͨΩϟϯϖʔϯΛߦ͍͍ͨ๏ਓ޲͚ ͷ SaaS ϓϩμΫτͰ͢ɻྫ͑͹ɺ ɾ ಛఆͷ Twitter ΞΧ΢ϯτΛϑΥϩʔͨ͠ΒɺநબͰσδλϧΪϑτΛϓϨθϯτ ɾ ಛఆͷγϦΞϧίʔυΛೖྗͨ͋͠ͱΞϯέʔτʹճ౴͢Δͱɺ΋Εͳ͘σδλϧΪ ϑτΛϓϨθϯτ ͷΑ͏ʹɺ༷ʑͳઃఆͷΩϟϯϖʔϯΛॊೈʹߏங͢Δ͜ͱ͕ՄೳͰ͢ɻ ΪϑςΟͷσδλϧΪϑτൃߦΞηοτΛ׆͔͢͜ͱͰɺ৚݅൑ఆޙʹͦͷ৔ͰσδλϧΪϑτ Λൃߦ͠ɺ ͙͢ʹΤϯυϢʔβʔʹಧ͚Δ͜ͱ͕Ͱ͖Δͷ͕ಛ௃Ͱ͢ɻ ར༻γʔϯͷྫ ʮೝূʯ ʹΑΔϢχʔΫԽ URLʢڞ௨ʣ ݸผʹϓϨθϯτ ి࿩൪߸ ͭͰ ճ·Ͱ ΞΧ΢ϯτͰ ճ·Ͱ ड͚औͬͨγϦΞϧίʔυ ͭͰ ճ·Ͱ ΤϯδχΞ kazama ٕज़ελοΫ ։ൃݴޠ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Ruby ϑϨʔϜϫʔΫ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Ruby on Rails ϑϩϯτΤϯυ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ jQuery ࣮ߦ؀ڥ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ ECS on Fargate σϓϩΠŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ AWS Copilot σʔλϕʔε ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Aurora MySQL CI/CD ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ GitHub Actions ߏ੒؅ཧ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Terraform αʔϏε؂ࢹ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Sentry, New Relic Product Book P.7 RubyKaigi2023 P.6
  4. ෳࡶͳϏδωεϑϩʔ͸ɺཁ݅ͷෳࡶ͞ʹՃ͑ɺཁ݅ͷଟ ͞΍ͦΕΒ͕ຖ೔ͷ༷ʹมԽ͍ͯ͘͜͠ͱΛҾ͖ى͜͠·͢ɻ BPR Ͱ͸νʔϜͱͯͦ͠ΕΒʹཱͪ޲͔͏ඞཁ͕͋Γ·͢ɻ ͦ͜Ͱɺෳࡶ͞ʹॊೈʹରԠ͢ΔͨΊͷ࢓૊Έͱͯ͠εΫϥϜ ΛऔΓೖΕɺͦͷϓϥΫςΟεΛੵۃతʹ࣮ફ͍ͯ͠·͢ɻྫ ͑͹ɺ ϦϑΝΠϯϝϯτʹྗΛೖΕͯଟྔͳཁ݅ͷ੔ཧͱ༏ ઌॱҐ͚ͮΛޮ཰Α͘ߦ͑Δ༷ʹͳͬͨΓɺ ϓϥϯχϯάϙʔ

    ΧʔΛऔΓೖΕΔ͜ͱͰϝϯόʔؒͷ৘ใ֨ࠩΛղফͨ͠Γ ͳͲɺνʔϜͱͯ͠ෳࡶੑʹରԠ͢Δྗͷ޲্ʹऔΓ૊ΜͰ ͍·͢ɻ ԿΑΓ΋ෳࡶͳϏδωεϑϩʔʹཱͪ޲͔Θͳ͚Ε͹͍͚ͳ ͍ͱ͜ΖͰ͢ɻൃ஫؅ཧγεςϜͱͻͱޱʹݴͬͯ΋ɺΪϑτ Λར༻͢ΔاۀɺͦΕΛϋϯυϦϯά͢ΔΪϑςΟɺར༻͞Ε ΔΪϑτΛ࣋ͭاۀ͕ొ৔͠·͢ɻ·ͨɺͦΕͧΕ͕ݸผͷ ໾ׂ͝ͱʹࡉ෼Խ͞Ε͓ͯΓɺ ͦΕΒશͯͷεςʔΫϗϧμʔ Λཧղ͠ۀ຿վળΛߟ͑Δඞཁ͕͋Γ·͢ɻ νϟϨϯδϯάͳͱ͜Ζ ଟ͘ͷεςʔΫϗϧμʔ͕ଘࡏ͢Δ͜ͱͰγεςϜʹҾ͖ى͜ ͞ΕΔෳࡶੑͷ 1 ͭʹɺଟ༷ͳίϯςΩετͷϩδοΫΛϋϯ υϦϯά͠ͳ͚Ε͹͍͚ͳ͍఺͕ڍ͛ΒΕ·͢ɻൃ஫؅ཧγ εςϜͰ͸ Ruby on Rails Λར༻͍ͯ͠ΔͨΊɺ͜ͷෳࡶ ੑ͕୯ҰϞσϧʹूத͢Δ͍ΘΏΔ Fat Model ໰୊ΛҾ͖ ى͜͢͜ͱ͕ݒ೦͞Ε͍ͯ·ͨ͠ɻ ͜ΕΛղফ͢ΔͨΊʹ Application Model Λ࠾༻͠ɺಋ ೖ͍ͯ͠·͢ɻ͜Ε͸ίϯςΩετ͝ͱʹ Application Mo del Λ༻ҙͯͦ͜͠ʹϩδοΫΛ੔ཧͯ͠ด͡ࠐΊΔͱ͍͏Ξ ϓϩʔνͰ͢ɻ͜͏͢Δ͜ͱͰɺݸผͷ Application Model ΍ Active Record Model ͕εϦϜʹͳΓඇৗʹݟ௨͕͠ ྑ͘ͳΓ·͢ɻ·ͨɺApplication Model ͸ Active Mod el ϕʔεͰ࣮૷͞Ε͓ͯΓɺController ͔Β Active Rec ord Model ͱ΄΅ಉ༷ʹѻ͑Δ༷ʹͳ͍ͬͯ·͢ɻ γεςϜͱͯ͠ෳࡶੑʹཱͪ޲͔͏ νʔϜͱͯ͠ෳࡶੑʹཱͪ޲͔͏ Q.νʔϜͱͯ͠େ੾ʹ͍ͯ͠Δ͜ͱ͸ͳΜͰ͔͢ʁ େࣄʹ͍ͯ͠Δͷ͸ ʮҰਓҰਓͷҙݟ͕ग़΍͍͢؀ڥΛ࡞Δ͜ͱʯ Ͱ͢Ͷɻ ͦͷҰ؀ͱͯ͠ɺBPRνʔϜͰ͸िʹҰճ 1 ࣌ؒɺMiroͱ͍͏Φϯϥ ΠϯϗϫΠτϘʔυπʔϧΛ࢖ͬͯৼΓฦΓΛߦ͍ͬͯ·͢ɻ͜Ε͸ ΤϯδχΞϝϯόʔ͔ΒͷఏҊͰ࢝·ͬͨࢼΈͰɺࠓͰ͸Α͔ͬͨ఺ ΋ѱ͔ͬͨ఺΋سጨͳ͘ҙݟΛग़͠߹͑Δɺେ੾ͳ৔ͱͳ͍ͬͯ·͢ɻ Q.ΤϯδχΞϝϯόʔʹҰݴʂ ʮຊ౰ʹՁ஋͕͋Δ΋ͷΛ࡞Δʯ ɻ͜ͷ͜ ͱΛৗʹશһ͕ߟ͑ɺ࣌ʹ͸ന೤ͨٞ͠ ࿦ʹ΋ൃల͢Δɻ ౰ͨΓલ͔΋͠Εͳ͍͚Ͳɺͱͯ΋ྑ͍ νʔϜͩͳͱৗʑײ͡·͢ɻ օ͞Μ͕ҰॹͳΒɺྑ͍΋ͷ͕Ͱ͖Δͱ֬৴ͯ͠·͢ɻҾ͖ଓ͖ΑΖ ͓͘͠ئ͍͠·͢ʂ Product Owner Inside Business Process Reengineering (BPR) BPR ͸๏ਓ޲͚ͷϏδωεϑϩʔͱൃ஫؅ཧγεςϜΛൈຊతʹݟ௚͠ɺ࿑ಇू໿తͳϏδ ωεϞσϧ͔Β୤٫ͤ͞Δ͜ͱΛ໨ࢦ͢ϓϩδΣΫτͰ͢ɻ ๏ਓͷ͓٬༷͕ΪϑςΟͷ๏ਓ޲͚αʔϏεΛ͝ར༻ʹͳΔ৔߹ɺ Ϊϑτͷར༻ݕ౼͔Βɺ ਃࠐɺ ར༻৹ࠪɺൃ஫ͱ͍ͬͨ਺ଟ͘ͷεςοϓ͕ඞཁʹͳΓ·͢ɻݱঢ়͸͝ར༻ܗଶʹؔΘΒͣ͜Ε Βશͯͷ޻ఔΛࣾ಺ͷਓһ͕खް͘αϙʔτ͍ͯ͠·͢ɻ ࠓޙ΋͞Βʹଟ͘ͷ͓٬༷͕ΑΓ؆୯ʹར༻͍͚ͯͨͩ͠ΔΑ͏ʹ͢ΔͨΊʹɺਃࠐΈ͔Βೲ඼ ·ͰͷϦʔυλΠϜΛ୹ॖͨ͠Γ൥ࡶͳۀ຿Λվળͯ͠αʔϏε඼࣭Λ޲্͢Δ͜ͱΛ໨ࢦͯ͠ɺ Ϗδωεϓϩηεͷ࠶ߏஙͱͦΕʹ͋ΘͤͨγεςϜϦϓϨʔεΛਐΊ͍ͯ·͢ɻ ݕ ౼ ൃ ஫ ೲ ඼ ར ༻ ৹ ࠪ ਃ ࠐ API:: Admin:: R M T R` R R` C C` C C` API:: มߋޙ Admin:: R M T R` R R` C C` C C` API::M API::M` Admin::M Admin::M` . Zenhub Λར༻ͨ͠εΫϥϜ։ൃ . 1 िؒ୯ҐͷεϓϦϯτ . ϦϑΝΠϯϝϯτɺ ϓϥϯχϯάɺ ϨτϩεϖΫςΟϒɺ ϨϏϡʔɺ σΠϦʔεΫϥϜΛ࣮ࢪ . ϏδωεαΠυΛؚΊͯཁ݅੔ཧΛߦ͏ఆྫͱɺ σβΠϯΛ٧ΊΔఆྫ͕ि1ճ . ΄΅ຖ೔ͷຊ൪ϦϦʔε ϓϩμΫτϚωʔδϟʔ m-moro ٕज़ελοΫ ϑϩϯτΤϯυϑϨʔϜϫʔΫ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Next.js ίϯϙʔωϯτϥΠϒϥϦ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Material UI ঢ়ଶ؅ཧ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Redux BFF ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Serverless / Apollo Server όοΫΤϯυ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Ruby on Rails API ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ GraphQL Πϯϑϥ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋ AWSʢKubernetes, Aurora MySQLͳͲʣ ߏ੒؅ཧ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Terraform CI/CD ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ GitHub Actions αʔϏε؂ࢹ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ New Relic ϓϩδΣΫτ؅ཧ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋZenhub ։ൃϑϩʔ Product Book P.9 RubyKaigi2023 P.8
  5. eGift System ͷҰ෦ϒϥϯυͰ͸ࣄલʹϒϥϯυଆͷγε ςϜͰൃߦͨ͠ίʔυΛ eGift System ʹΠϯϙʔτ͓ͯ͠ ͖ɺνέοτൃߦ࣌ʹඥ͚ͮΔܗଶΛ࠾༻͍ͯ͠·͢ɻ͜ͷࡍ ʹߴෛՙ࣌Ͱ΋҆ఆͯ͠ίʔυΛ෷͍ग़͢࢓૊Έ͕ॏཁʹͳ Γ·͢ɻ

    ॳظͷ eGift System Ͱ͸ɺࠨਤͷΑ͏ͳςʔϒϧߏ଄ʹ ͳ͓ͬͯΓɺҎԼͷΑ͏ͳ໰୊͕͋Γ·ͨ͠ɻ( ˞࣮ࡍͷςʔ ϒϧͱҟͳΔ෦෼͕͋ΔͨΊෆࣗવͳ෦෼͕͋Δͱࢥ͍·͢ ͕͓ݟಀ͍ͩ͘͠͞) 1. ίʔυΠϯϙʔτ࣌ͷൃߦ଎౓͕஗͍ ( ࣄલʹೖΕ͓ͯ͘ ίʔυ͕ଟ͍΄Ͳக໋తͳ஗͞ʹͳΔ) 2. ߴෛՙ࣌ʹಉҰͷ codesϨίʔυΛऔಘ͠ʹߦͬͯൃߦ ΤϥʔʹͳΓ΍͍͢ 3. codes ςʔϒϧʹൃߦࡁͱະඥ෇͚ͷ 2 छྨͷίʔυ͕ ࠞࡏ͠ɺηϨΫτ࣌ʹແବ͕ଟ͘ूܭ͕ॏ͘ͳΔ ͦ͜ͰҎԼͷΑ͏ͳमਖ਼ΛՃ͑·ͨ͠ɻ ӈਤͷΑ͏ʹൃߦࡁ (codes)ͱະඥ෇͚ͷίʔυ(item_co des)ͷ2ͭͷςʔϒϧʹ෼͚Δ͜ͱͰແବͳηϨΫτΛͳ͘͢ɻ ࣍ʹɺΠϯϙʔτ୯ҐͰ࡞੒͞ΕΔitem_code_boxesςʔ ϒϧʹηϨΫτ։࢝Ґஔ (current_position)Λ࣋ͭ͜ͱͰɺ ҰճͷΠϯϙʔτͰ਺ेສ݅ͷΑ͏ͳΠϯϙʔτ͕͋ͬͨࡍ ʹɺςʔϒϧεΩϟϯ͢ΔΤϦΞΛখ͘͞Ͱ͖ɺ ίʔυ෷͍ग़ ͠Λߴ଎ԽͰ͖·͢ɻ͜Ε͸ɺޙΖͷํͷίʔυΛ෷͍ग़͢৔ ߹ʹಛʹޮՌ͕͋Γ·͢ɻ ·ͨɺ ίʔυ෷͍ग़࣌͠͸ɺ։࢝Ґஔ͔ΒίʔυΛෳ਺݅औ ಘͯ͠ɺͦͷத͔ΒϥϯμϜʹબ୒ͯ͠෷͍ग़͢Α͏ʹ͠·͢ɻ ͜ΕʹΑΓɺߋ৽͢ΔΩʔ͕෼ࢄ͞ΕΔͨΊɺಉ࣌෷͍ग़͠ ࣌ʹಉҰΩʔΛߋ৽͢ΔՄೳੑΛݮΒ͢͜ͱ͕Ͱ͖·ͨ͠ɻ ͜Ε͸ҰྫͰ͕͢ɺeGift SystemͰ͸͜ͷΑ͏ͳํ๏Ͱ҆ ఆͨ͠ίʔυ෷͍ग़͠ͷ࢓૊ΈΛ࣮ݱ͍ͯ͠·͢ɻ SaaS ͱͯ͠e ΪϑτΛఏڙ͍ͯ͠ΔͨΊɺ൚༻ੑΛҙࣝͯ͠ ։ൃ͍ͯ͠·͢ɻ೥ʑϒϥϯυ਺͕૿Ճ͠ɺͨ͘͞Μͷཁ๬͕ ͋ΔதͰ SaaS ͱͯ͠ͷ൚༻ੑΛอͪͭͭͲ͏औΓࠐΜͰ͍ ͘ͷ͔ɻͨͩཁ๬௨Γʹ࣮૷͢ΔͷͰ͸ͳ͘ɺ ϏδωεαΠυ ͱٞ࿦͠ͳ͕Βམͱ͠ॴΛܾΊ͍ͯ͘Α͏ʹ͍ͯ͠·͢ɻ ։ൃʹ͓͍ͯେࣄʹ͍ͯ͠Δ͜ͱ eGift System ߴෛՙʹ଱͑͏Δίʔυ෷͍ग़͠ ΪϑςΟ͕ఏڙ͢Δ༷ʑͳαʔϏεͱ࿈ܞ͢Δɺe Ϊϑτࣄۀͷج ൫ʹͳ͍ͬͯΔϓϩμΫτͷͨΊɺνʔϜશମͰڧ͍੹೚ײΛ࣋ͬ ͯ։ ൃʹܞΘ͍ͬͯ·͢ɻ·ͨɺΤϯδχΞ͔Β͜͏΍͍ͬͯ͜͏ ͱҙݟΛग़ͯٞ͠࿦Ͱ͖Δ؀ڥͰ͋Δͷ΋ɺͱͯ΋ྑ͍ͱ͜Ζͩͱ ࢥ͍ͬͯ·͢ɻ ࠓޙͷ՝୊ͱͯ͠͸ɺϕτφϜ΍ΠϯυωγΞΛ͸͡Ίւ֎ਐग़͕ ਐΉதͰɺ৭ʑͱग़ͯ͘Δࠃ ಛ ༗ͷࣄ ৘ͱͲ͏޲͖߹͏͔͕ ڍ͛ ΒΕ·͢ɻϒϥϯυ͚ͩͰͳ͘ࠃ΋ଟछଟ༷ʹͳΔதͰɺSaaS ͱ ͯ͠ͷ͋Δ΂͖ܗΛҙࣝ͢Δ͜ͱ͕ɺΑΓҰ૚ॏཁʹͳ͍ͬͯΔͱ ࢥ͍ͬͯ·͢ɻ Engineering Inside eGift System ͸ɺeΪϑτ ʢళ಄ͰҾ͖׵͑Δ͜ͱͷͰ͖ΔσδλϧͷΪϑτνέοτʣ ͷੜ੒ ͱফࠐΛ୲͏ϓϩμΫτͰ͢ɻtoC/toB ޲͚ʹൃߦ͞ΕΔeΪϑτ͕͜͜Ͱੜ੒͞Εɺ༷ʑͳγ εςϜͱ࿈ܞ͢ΔɺeΪϑτࣄۀͷத֩ͱͳΔγεςϜͰ͢ɻ ళ಄ར༻ͷ e Ϊϑτͷফࠐ͸ɺPOSɺઐ༻୺຤ɺ ίʔυೝূɺిࢠελϯϓɺQRίʔυಡࠐͳ Ͳෳ਺ͷखஈʹରԠ͍ͯ͠·͢ɻྑ࣭ͳίϯςϯπΛ֦ॆ͢Δ͜ͱ͕ e Ϊϑτࣄۀͷ੒௕ʹͭ ͳ͕ΔͨΊɺΪϑτܗଶͷ༷ʑ ͳόϦΤʔγϣϯͳͲ൚༻తͳ χʔζʹԠ͑Δ΂͘ɺػೳڧԽ ʹऔΓ૊ΜͰ͍·͢ɻ ·ͨɺϒϥϯυ޲͚ͷ؅ཧը໘ ΍ɺࣗࣾ E C αΠτͰΪϑτν έοτͷൢചػೳΛఏڙ͍ͨ͠ ϒϥϯυ޲͚ʹ e Ϊϑτͷࣗࣾ ൢചը໘΋ఏڙ͍ͯ͠·͢ɻ डऔओ ଃΓओ ళฮ اۀ eGift System .ফ͠ࠐΈ .࣮੷֬ೝ .དྷళ .঎඼ఏڙ .ΪϑτΛଃΔ .ܾࡁ Ϊϑτधཁ֫ಘ ళฮૹ٬ޮՌ ϒϥϯυՁ஋޲্ ৽͍͠Ϊϑτधཁͷ։୓ʹΑΓ ച্֦େ ΪϑτΛར༻͢ΔͨΊʹ དྷళ͠ซച΋ Ϊϑτจ຺Ͱͷ঎඼ೝ஌ɾ࿐ग़ ʹΑΔϒϥϯυΠϝʔδ޲্ eGift System ར༻ϝϦοτ ٕज़ελοΫ ։ൃݴޠ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Ruby ϑϨʔϜϫʔΫ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Ruby on Rails ϑϩϯτΤϯυ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ jQuery, Bootstrap Πϯϑϥ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ AWS σʔλϕʔε ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Aurora MySQL, Redis CI/CD ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ CircleCI ߏ੒؅ཧ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋAnsible αʔϏε؂ࢹ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Sentry, New Relic Product Book P.11 RubyKaigi2023 P.10
  6. giftee Box Ͱ͸ॳճͷ։෧࣌ʹΞχϝʔ γϣϯ͕࠶ੜ͞Εɺड͚औͬͨϙΠϯτ਺ ͕ΞχϝʔγϣϯͷதͰදࣔ͞ΕΔΑ͏ʹ ͳ͍ͬͯ·͢ɻ͜ͷϙΠϯτ਺͸ݻఆͷς ΩετͰ͸ͳ͍ͨΊɺΞχϝʔγϣϯʹಈ తͳςΩετཁૉؚ͕·ΕΔ͜ͱʹͳΓ· ͢ɻ͜ΕΛ Lottie

    Ͱ࣮ݱ͢Δͷ͸೉͍͠ ՝୊Ͱ͢ɻ Lottie ͰςΩετΛߋ৽͢Δࡍʹ͸ɺup dateDocumentData ͱ͍͏ API Λར ༻͢Δ͜ͱ͕Ͱ͖·͢ɻ͔͠͠ɺมߋର৅ͱ ͳΔςΩετ(svg ͷ element) ͸ɺࣗྗ Ͱ୳͢͜ͱʹͳΓ·͢ɻ͜Ε͸ɺLottie ʹ มߋՄೳͳཁૉΛ୳ͨ͠Γ൑ఆͨ͠Γ͢Δ API ͕ͳ͍ͨΊͰ͢ɻ·ͨɺಈతʹςΩετ Λมߋ͢ΔͨΊʹ͸ɺඞཁͳϑΥϯτ৘ใ ΛͲ͜Ͱ͔࣋ͭʹ͍ͭͯ΋ซͤͯߟ͑Δඞ ཁ͕͋Γ·͢ɻ ͦͷͨΊσβΠφʔʹ͸ɺςΩετ෦෼ͷ ΈͷϨΠϠʔΛ࡞ΓͦΕΛ࠷ॳͷϨΠϠʔ ʹͯ͠΋Β͏͜ͱɺඞཁͳจࣈ͸͢΂ͯΞχ ϝʔγϣϯ಺෦ʹؚΊͯ࡞੒ͯ͠΋Β͏͜ ͱʹ͠·ͨ͠ɻ ͜ͷ લ ఏ ͷ΋ͱɺӈ ͷΑ͏ͳ ࣮ ૷ͰΞχ ϝʔγϣϯ্ͷςΩετཁૉΛಈతʹมߋ ͍ͯ͠·͢ɻ·ͨɺ͜ͷΑ͏ͳ࢓૊ΈΛϥο ϓ͢ΔίϯϙʔωϯτΛ React Ͱ࡞੒͠ɺ ར༻͍ͯ͠·͢ɻ giftee Box ͷ։ൃͰ͸ɺΪϑτΛड͚औ Δਓʹ΋ͬͱخ͘͠ͳΔΑ͏ͳମݧΛఏڙ ͍ͨ͠ͱ͍͏ࢥ͍͕͋Γ·ͨ͠ɻ͜ͷମݧΛ ͭ͘ΔͨΊͷԋग़ͱͯ͠ը໘಺ʹͪΐͬͱ͠ ͨΞχϝʔγϣϯදࣔΛՃ͍͑ͯͯɺ ͜ͷ࣮ ݱͷͨΊʹLottie ͱ͍͏ Airbnb ͕ఏڙ ͍ͯ͠ΔΞχϝʔγϣϯ࡞੒ɾදࣔ༻ͷϥΠ ϒϥϦΛ࠾༻͍ͯ͠·͢ɻ Lottie Λར༻ͨ͠ svg Ξχϝʔγϣϯ࠶ ੜͷίʔυྫ͸ӈͷ௨ΓͰ͢ɻ ίʔυͷ௨ΓɺLottie ͸ json ܗࣜͰΞχ ϝʔγϣϯσʔλΛड͚औͬͯ࠶ੜ͠·͢ɻ͜ͷͨΊɺ ΞχϝʔγϣϯΛ࡞੒͢ΔσβΠφʔͱͦͷΞχϝʔγϣϯΛ Web Ͱ࠶ ੜͤ͞ΔΤϯδχΞͷ΍ΓऔΓ΋ඇৗʹ؆୯ʹͳΓ·͢ɻ σβΠφʔ͸ Adobe Affter Effects Ͱ࡞੒ͨ͠ΞχϝʔγϣϯΛ json ʹॻ͖ग़͠ɺΤϯδχΞ͸ͦͷ json Λड͚औͬͯɺ Lottie ͰಡΈࠐΜͰ࠶ੜΛ͠·͢ɻ͜ΕʹΑͬͯσβΠφʔ͸֤छϓϥοτϑΥʔϜ(Web, Native App) ʹ͓͚ΔΞχϝʔ γϣϯ࠶ੜํ๏ͷҧ͍Λؾʹ͢Δඞཁ͕ͳ͘ͳΓɺΤϯδχΞ͸ɺ ΞχϝʔγϣϯͷৄࡉΛؾʹ͢Δඞཁ͕ͳ͘ͳΓ·͢ɻ Lottie ͰσβΠφʔͱΤϯδχΞ͕ڠௐͯ͠ΞχϝʔγϣϯΛ࣮ݱ͢Δ ςΩετ͕ಈతʹมΘΔΞχϝʔγϣϯΛͲ͏࣮ݱ͍ͯ͠Δ͔ʁ giftee Box ͷඒ͍͠Ξχϝʔγϣϯٕज़ giftee Box ར༻ͷྲྀΕ giftee Box ͸໿ 1,000 छྨͷϥΠϯφοϓͷ த͔Βɺ޷͖ͳ঎඼Λࣗ༝ʹ͑ΒͿ͜ͱ͕Ͱ͖Δ ΪϑτͰ͢ɻίϯϏχ΍ΧϑΣɺ ϑΝογϣϯ͔Β Ϩδϟʔ·Ͱ෯޿͍γʔϯͷΪϑτΛऔΓଗ͑ͯ ͍·͢ɻ ๏ਓ͕ giftee Box Λ׆༻͢Δ͜ͱͰɺ Ϣʔβʔ ͷຬ଍౓ΛߴΊΔͱͱ΋ʹɺैདྷͷۚ݊΍Ϊϑτ ݊ͷ഑෍Ͱ͸औಘͰ͖ͳ͔ͬͨ৽ͨͳϚʔέςΟ ϯάσʔλͷ֫ಘΛ࣮ݱͰ͖·͢ɻgiftee Box Λ௨ͯ͠Ϣʔβʔ͕ຊ౰ʹཉ͔ͬͨ͠঎඼ΛՄ ࢹԽ͢Δ͜ͱ͕Ͱ͖ΔͨΊɺϢʔβʔཧղΛਂΊ Δσʔλͷऔಘ͕ՄೳͰ͢ɻ ঎඼Ұཡ͔Βަ׵͍ͨ͠঎඼Λબ୒ ঎඼ৄࡉΛ֬ೝͯ͠ɺΪϑτަ׵΁ ݅਺Λબ୒ͯ͠ަ׵Λ֬ఆ ަ׵঎඼Ұཡ͔ΒνέοτΛදࣔ ٕज़ελοΫ ։ൃݴޠ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Ruby ϑϨʔϜϫʔΫ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Ruby on Rails ϑϩϯτΤϯυ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ React, Redux Πϯϑϥ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ EKS, Terraform σʔλϕʔε ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Aurora MySQL CI/CD ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ GitHub Actions ߏ੒؅ཧ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Terraform αʔϏε؂ࢹ ŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋŋ Sentry, New Relic Product Book P.13 RubyKaigi2023 P.12
  7. ΪϑςΟCTOͷ༄੉Ͱ͢ɻ ΧδϡΞϧΪϑταʔϏεͷ giftee͔Βελʔ τͨ͠౰ࣾ͸ɺݱࡏͰ͸๏ਓ޲͚΍஍ํ࣏ࣗ ମ޲͚ɺւ֎ͳͲ෯޿͘ࣄۀΛల։͍ͯ͠·͢ɻ ֤ࣄۀͰ͸ϓϩμΫτ͕ఏڙՁ஋ͷத֩ʹ͋ ΓɺϓϩμΫτͮ͘Γʹ޲͖߹͏ΤϯδχΞͷ ࢥ͍͕αʔϏεͷ੒௕ʹڧ͘Өڹ͢Δͱߟ͑ ͍ͯ·͢ɻ ΪϑςΟͷٕज़෦໳͸ࣗݾ૊৫తͳ૊৫Λࢦ

    ޲͍ͯͯ͠ɺҙࢥܾఆ΍νϟϨϯδʹରͯ͠΋ ͔ͬ͠ΓݖݶΛҠৡ͍ͯ͠·͢ɻ ͜ͷτʔΫηογϣϯͰ͸ɺϓϩμΫτʹ޲͖ ߹͏ϦʔυΤϯδχΞͨͪʹ௚઀ͦͷࢥ͍Λ ޠͬͯ΋Β͍·ͨ͠ɻ Ϣʔβʔͷ໨ʹμΠϨΫτʹ৮ΕΔ΋ ͷΛ࡞Δ੹೚ ᴷ Ͱ͸·ͣ yashi͘Μ͔Βɺ ϑϩϯτΤϯ υΤϯδχΞͱͯ͠ɺϓϩμΫτʹͲ͏޲͖ ߹͍ͬͯΔ͔Λฉ͔ͤͯԼ͍͞ yashi: ΪϑτΛड͚औͬͨਓ͕Ͳ͏͍͏ؾ࣋ ͪʹͳΔ͔ɺར༻ऀ͕Ͳ͏ײ͡Δ͔Λৗʹ૝૾ ͠ͳ͕Β։ൃ͍ͯ͠·͢ɻ ಛʹࢥ͍ೖΕ͕͋ΔϓϩμΫτ͸ giftee Boxɻ ͜Ε͸ɺΪϑτͱͯ͠ड͚औͬͨϙΠϯτͰ޷ ͖ͳΪϑτΛબΜͰަ׵͢Δ͜ͱ͕Ͱ͖Δαʔ ϏεͰ͢ɻ ։ൃͰͩ͜Θͬͨͷ͕ɺgiftee Box Λड͚ औΔࡍʹ࠷ॳʹදࣔ͞ΕΔΞχϝʔγϣϯͰ ͢ɻड͚औͬͨਓ͕ ʮ͜Ε͍͍ͳʯ ͱ͔ ʮ΋Βͬ ͯخ͍͠ʯ ͱࢥͬͯ͘ΕΔΑ͏ͳදݱ͕Ͱ͖Δ ͱɺ΋ͬͱ࢖ͬͯΈ͍ͨɺଃΓ͍ͨͱࢥͬͯ΋Β ͑ΔͷͰ͸ͱߟ͑ͯ࡞Γ·ͨ͠ɻ ᴷ ։ൃʹۤ࿑ͨ͠ͷ͸Ͳͷ͋ͨΓʁ yashi: େมͩͬͨͷ͸Ξχϝʔγϣϯͷ࣮ ૷खஈͷ୳ࡧͰ͢ɻ·ͣAdobe After Effe cts Ͱ੍࡞ͨ͠ΞχϝʔγϣϯΛ jsonϑΝΠ ϧʹม׵͠ɺͦΕΛಡΈࠐ·ͤͯ࠶ੜ͢Δͱ ͍͏ํ๏Λݟ͚ͭ·ͨ͠ɻ͔ͦ͜Βٕज़ݕূ Λ܁Γฦ࣮ͯ͠ݱखஈΛ୳ࡧ͍͖ͯ͠·ͨ͠ɻ jsonϑΝΠϧΛड͚औͬͯ࠶ੜ͢Δͷ͸೉͠ ͘ͳ͍ͷͰ͕͢ɺΞχϝʔγϣϯͷҰ ෦ͷཁ ૉΛಈతʹมߋ͢Δͷ͕େมͰͨ͠ɻ g i f t e e B ox ͸ɺड͚औͬͨϙΠϯτͷൣ ғͰ޷͖ͳΪϑτΛબΜͰަ ׵Ͱ͖Δͱ͍͏ αʔϏεͰɺड͚औΓ࣌ʹදࣔ͞ΕΔॳظϙ ΠϯτΛಈతʹදݱ͢Δඞཁ͕͋Γ·͢ɻ͜ ͷ࣮૷ʹͱͯ΋ۤ࿑͠·ͨ͠ɻ ͦΕ͔Βɺ ίϯϙʔωϯτઃܭ΋޻෉͍ͯ͠· ͢ɻgiftee BoxͰ͸ෳ਺ՕॴͰΞχϝʔγϣ ϯΛ࠶ੜ͢ΔͷͰɺͦΕΛ૝ఆͨ͠Ξχϝʔ γϣϯ࠶ੜ༻ͷίϯϙʔωϯτΛઃܭ͢Δඞ ཁ͕͋Γ·ͨ͠ɻ ઃܭʹ͸།Ұͷਖ਼ղ͸ͳ͍ͷͰɺͦͷ࣌ʑͷ ঢ় گʹ͋Θͤͯෳ ਺ͷબ ୒ ࢶ͔ΒϝϦοτɾ σϝϦοτΛ੔ཧͯ͠࠷దͳ΋ͷΛબͼͱͬͯ ͍͘ͱ͍͏࡞ۀʹͳΓ·͢ɻ·ͬͨ͘ಉ͡ঢ়گ Լʹ΋͏1 ճग़͘Θ͢͜ͱ͸΄ͱΜͲͳ͍ͷͰɺ ৗʹ৽͍͠໰୊Λղ͍͍ͯΔΑ͏ͳײ͕֮͋ Γ·͢ɻ ᴷ σβΠφʔͱ࿈ܞ͢Δ͜ͱ΋ଟ͍ͩΖ͏ ͚Ͳɺ ͲΜͳͱ͜Ζʹ޻෉ͯ͠·͔͢ʁ yashi: ౰ͨΓલͷ͜ͱͰ͕͢ɺίϛϡχέʔ γϣϯΛେ੾ʹ͍ͯ͠·͢ɻσβΠφʔʹݶΒ ͣɺϓϩμΫτͷεςʔΫϗϧμ͸ͨ͘͞Μ͍ ·͢ɻಉ͡΋ͷΛݟ͍ͯͯ΋ɺݟ͍͑ͯΔܗ͕ ҧ͏ͱ͍͏ঢ়گ͸ΘΓͱ͋Δ͋Δͩͱࢥ͍·͢ɻ ϑϩϯτΤϯυΤϯδχΞͱσβΠφʔ͸ɺͱ ͯ΋͍ۙ৔ॴͰݟ͍ͯΔΜ͚ͩͲͦͷݟ͑ํ ͸ඍົʹҧ͍ͬͯΔɻ͜ͷͨΊσβΠφʔ͕Կ ΛࢥͬͯσβΠϯ͍ͯ͠Δͷ͔ɺΛపఈతʹฉ ͘Α͏ʹ͍ͯ͠·͢ɻٯʹσβΠφʔ͔Βͯ͠ ΈͨΒΤϯδχΞϦϯά্ͷ౎߹͸Θ͔Βͳ͍ ͜ͱ΋ଟ͍ͷͰɺͦ͜͸ͪ͜Β͔Β΋͔ͬ͠Γ ఻͑ΔΑ͏ʹ͍ͯ͠·͢ɻ ᴷ yashi͘ΜʹͱͬͯͷϑϩϯτΤϯυΤϯ δχΞͷັྗͬͯɺ ͲΜͳͱ͜ΖͰ͔͢ʁ yashi: ଞͷٕज़ྖҬʹൺ΂ΔͱɺϢʔβʔͷ ݟͨ໨ʹμΠϨΫτʹ൓ө͞ΕΔ෦෼Λ࡞ͬͯ ͍Δͱ͍͏͜ͱͰ͢Ͷɻ Ξχϝʔγϣϯ΍σβΠϯɺύϑΥʔϚϯε΍ ૢ࡞ੑͳͲ͕ͦͷ··ը໘ʹ൓ө͞ΕΔɻࣗ ෼͕։ൃͨ͠΋ͷ͕Ϣʔβʔͷ໨΍खʹ௚઀ ৮Εɺ ϓϩμΫτͷମݧʹେ͖͘Өڹ͢Δ͜ͱ ʹͱͯ΋੹೚Λײ͡·͢͠ɺ͔ͩΒͦ͜΍Γ͕ ͍΋͋Γ·͢ɻ ࣗ෼͕ίϛοτͨ͠΋ͷ͕ਓͷ໨ʹ৮ΕΔͱ͍ ͏͜ͱʹ๻͸΍Γ͕͍Λײ͍ͯ͡·͢͠ɺͦ͜ ʹͩ͜ΘΓΛ࣋ͯΔਓͱҰॹʹΑ͍΋ͷΛ࡞ͬ ͍͖͍ͯͨͰ͢ɻ Ϗδωεཁ͕݅ͱʹ͔͘ෳࡶͰ͋Δ͜ ͱɺ͜Εʹ޲͖߹͍ͬͯ͘͜ͱ͕Ұ൪ͷ ໘നΈ ᴷ Ͱ͸࣍ʹ eguchi͘Μɻ͍͖ͳΓ௚ٿͰ ฉ͖·͚͢Ͳɺ ࠓͷϓϩδΣΫτ͸Ͳ͏Ͱ͔͢ʁ eguchi: ࣗ෼͕୲౰͍ͯ͠ΔϓϩμΫτ͸ɺΪ ϑςΟͷ๏ਓ޲͚ࣄۀͷجװͱͳΔɺൃ஫؅ ཧγεςϜͰ͢ɻ ͓͔͛͞·Ͱ๏ਓ޲͚ࣄۀ͸ॱௐʹ੒௕ͯ͠ ͍ͯɺզʑͷϓϥοτϑΥʔϜ্Ͱ؅ཧ͞ΕΔ ൃ஫਺΋ٸ૿͍ͯ͠·͢ɻ͜ΕʹΑΓطଘͷਓ һͰ͸ΦϖϨʔγϣϯ͕௥͍͔ͭͳ͘ͳͬͯ͠ ·͏ͱ͍͏՝୊͕͋Γ·ͨ͠ɻ ͦ͜ͰϏδωεϓϩηεࣗମΛݟ௚ͯ͠࠶ߏ ங͢ΔɺBPR(Business Process Reeng ineering)ͱ͍͏ϓϩδΣΫτΛ্ཱͪ͛ͯɺ ࣗ෼͕ϦʔυΛ͍ͯ͠·͢ɻ ͜ͷϓϩδΣΫτͰ͸ɺ ʮ ԿΛ࡞Δͷ͔ʯ ʮͦ ΋ͦ΋͜ͷۀ຿ͷϑϩʔ͸Ͳ͏͋Δ΂͖ͳͷ ͔ʯ ͍ͬͯ͏ͱ͜Ζ͔ΒΤϯδχΞ͕͔ͳΓਂ ؔ͘ΘΔ͜ͱ͕Ͱ͖ΔɻͦΕ͕Ұ൪໘ന͍ͱ͜ ΖͰ͢ɻ ᴷ ۩ମతʹͲ͏ਐΊ͍ͯ·͔͢ʁ eguchi: ͜ͷϓϩδΣΫτͷલ਎ͱͳΔϓϩμ Ϋτ͸ɺࣄۀͷ্ཱͪ͛༏ઌͰߏஙͨ͜͠ͱ΋ ͋Γɺ Ϣʔβʔͷ੠Λे෼ʹ൓өͰ͖͍ͯͳ͍ ͱ͍͏՝୊΋͋Γ·ͨ͠ɻ ͦ͜Ͱɺ ϓϩμΫτϚωʔδϟʔͱҰॹʹϏδ ωεͷϓϩηεશମΛ෼ੳͯ͠ɺۀ຿ͷϑϩʔ Λ࠷ॳ͔Βߟ͑௚͢ͱ͜Ζ͔Β͸͡Ί͍ͯ·͢ɻ ࡞Δ΋ͷ͕ܾ·͍ͬͯΔΘ͚Ͱ͸ͳ͍ͷͰɺۀ ຿্ͷϘτϧωοΫ΍ΦϖϨʔγϣϯ্ͷϖΠ ϯΛݟ͚ͭͯɺΠϯύΫτΛߟྀ͠ͳ͕Β΍Δ ͜ͱΛܾΊ͍ͯ͘ͱ͍͏୳ࡧͷաఔ͕ͱͯ΋೉ ͯ͘͠໘ന͍ɻཁ݅ఆٛ΍ઃܭΑΓ΋ͣͬͱલ ஈ֊ͷɺ Ϗδωεϓϩηε΍ۀ຿ϑϩʔΛ࡞Δ ͱ͍͏࢓ࣄ͕ଟ͍Ͱ͢Ͷɻ ᴷ ۀ຿෼ੳ͸ͲΜͳײ͡Ͱ΍ͬͯΔͷʁ eguchi: ྫΛ͋͛Δͱɺاۀ͕Ωϟϯϖʔϯ ͰΪϑτΛ഑෍͢Δࡍʹ͸ࣄલʹϒϥϯυ৹ ࠪΛ͢Δͱ͍͏ϓϩηε͕͋ΔΜͰ͕͢ɺࣾ಺ ୲౰ऀͷ࣮ࡍͷۀ຿಺༰ΛZoomͰݟͤͯ͞ ΋Β͍ɺͲͷεςοϓͰͲΜͳૢ࡞Λ͍ͯ͠Δ ͷ͔ɺͲ͜ʹख͕͔͔͍ؒͬͯΔͷ͔Λ෼ੳ͠ ͯվળϑϩʔΛߟ͑Δͱ͍͏͜ͱΛ͠·ͨ͠ɻ ࢓༷Λߟ͑ΔΑΓ΋લʹۀ຿Λཧղ͠ɺ࢖͏ਓ ͷϖΠϯϙΠϯτΛݟ͚ͭͯͦΕΛऔΓআͨ͘ Ίʹ͸Ͳ͏ͨ͠Β͍͍͔Λߟ͑Δɻ͜Ε͸Ϣʔ βʔͷཁ๬Λฉ͚ͩ͘Ͱ͸Ͱ͖ͳͯ͘ɺۀ຿Λ ਂ͘ཧղͯ͠෼ੳ͠ɺ৽͍͠ϑϩʔΛߟ͑ͯͦ ΕΛ࣮ݱ͢ΔͨΊͷཁ݅ʹམͱ͠ࠐΉɺͱ͍͏ ײ͡Ͱ΍͍ͬͯ·͢ɻ ͜ͷෳࡶ͞ʹ޲͖߹͏ͷ͕Ұ൪ͷ೉ͩ͠͞͠ ָ͠͞Ͱ΋͋Γ·͢ɻ ·ͨɺ޲͖߹͏՝୊ͷෳࡶ͞ʹରٕͯ͠ज़Ͱ ղܾ͢Δ͜ͱʹՃ͑ͯɺνʔϜͰཱͪ޲͔ͬͯ ͍ͨ͘ΊʹΞδϟΠϧͳ։ൃϓϩηεΛચ࿅͞ ͍ͤͯ͘͜ͱʹ΋௅ઓ͍ͯ͠·͢ɻ ᴷ ͜ͷϓϩδΣΫτΛ௨ͯ͠੒͠਱͍͛ͨ ͜ͱ͸ʁ eguchi: γεςϜͷϢʔβʔͰ͋ΔϏδωε αΠυͷ୲౰ऀΛָʹ͍ͨ͠ͱ͍͏ࢥ͍͕ڧ͍ Ͱ͢ɻ ͜ͷϓϩδΣΫτ͸ɺ๏ਓ޲͚ࣄۀͷٸ੒௕ʹ ରͯ͠ۀ຿͕௥͍͚ͭͳ͘ͳͬͯ͠·͏ͱ͍͏ ݒ೦͔Βελʔτ͠·ͨ͠ɻൃ஫Ҋ݅ͷٸ૿ʹ ରͯ͠ελοϑͷ૿ՃͰରԠ͢Δʹ͸ݶք͕͋ Γ·͢͠ɺ࿑ಇू໿తͳϏδωεϞσϧʹͳΒ ͟ΔΛಘͳ͘ͳΓ·͢ɻ ͜ΕΛղফ͢ΔͨΊʹɺ Ϗδωεϓϩηεࣗମ Λ࠶ߏஙͯ͠൥ࡶͳۀ຿͕εϜʔζʹྲྀΕΔ Α͏ʹվળ͠ɺ ϏδωεαΠυͷ୲౰ऀ͕͜Ε ·ͰΑΓ΋͞Βʹސ٬ʹ޲͖߹͍αʔϏεͷ࣭ ΛߴΊΔ͜ͱʹ͕࣌ؒ࢖͑ΔΑ͏ʹͳΔɻͦͷ ݁Ռͱͯ͠͞Βʹࣄۀ֦େ͍͚ͯ͠Δঢ়ଶʹͳ Δ͜ͱΛ໨ࢦ͍ͯ͠·͢ɻ νʔϜͰֶश͠ਖ਼͘͠มԽ͍͚ͯ͠Δ ΞʔΩςΫνϟʔΛ໨ࢦ͢ ᴷ nakaya͘Μɺabe͘Μ͕࡞͍ͬͯΔϓ ϩμΫτΛ঺հ͍ͯͩ͘͠͞ abe: ๻Β͕։ൃ͍ͯ͠Δͷ͸ɺ؆୯ʹ͍͏ͱ Ϊϑτൃߦ APIͷGatewayʹͳΓ·͢ɻ ΪϑςΟ͕औΓѻ͏Ϊϑτ͸ɺళฮͰར༻Ͱ͖ Δe Ϊϑτͷ΄͔ʹ΋ࣗ୐഑ૹܕ΍ମݧΪϑτɺ Swagͱ͍͏ΦϦδφϧάοζͳͲଟذʹΘͨ Γ·͢ɻ͜ΕΒΪϑτൃߦଆͷ࢓૊Έ͸Ϊϑτ ܗଶ͝ͱʹଘࡏ͍ͯͯ͜͠Ε͔Β͞Βʹ૿͑ͯ ͍͖·͢ɻ ΪϑτΛ഑෍͢ΔͨΊͷ࢓૊Έ΋ɺෳ਺ͷνϟ ωϧʹ༷ʑͳιϦϡʔγϣϯγεςϜ͕ଘࡏ͢ ΔͨΊɺଟ༷ͳ഑෍νϟωϧͱൃߦଆγεςϜ ͱͷ࿈ܞ͕ෳࡶʹͳ͍ͬͯ͘ͱ͍͏՝୊͕͋Γ ·ͨ͠ɻ ͦ͜ͰΪϑτൃߦଆͷΠϯλʔϑΣʔεΛந৅ Խ͢ΔGatewayΛߏங͢Δ͜ͱͰɺ഑෍ଆͷ ࢓૊Έ͕༷ʑͳΪϑτൃߦγεςϜͱ༰қʹ ࿈ܞͰ͖ΔΑ͏ʹ͢Δ͜ͱΛ໨ࢦ͍ͯ͠·͢ɻ ᴷ ͜ͷϓϩμΫτͷ։ൃʹ Go ݴޠΛબఆ ͨ͠ͷ͸ͳͥʁ nakaya: ෳ਺γεςϜ͕࿈ܞ͢Δ Hubͱͳ ΔϓϩμΫτͳͷͰߴ͍৴པੑ͕ٻΊΒΕ· ͢ɻGo ݴޠ͸੩తܕ෇͚ʹΑΔݎ࿚ͳίʔυ ͕ॻ͚Δ͜ͱͱɺ࣮ߦύϑΥʔϚϯεʹ༏ΕΔ ͜ͱ͕ओͳબఆཧ༝Ͱ͢ɻ ·ͨ API Λதܧ͢ΔGateway ͷͨΊ UI ͕ෆ ཁͰ͋Δ͜ͱʹՃ͑ɺεέʔϥϏϦςΟΛ୲ อ͢ΔͨΊʹσʔλ૚Ͱ͸γϟʔσΟϯά΍ NoSQL ͷ࠾༻ͳͲ΋ࢹ໺ʹ͍Ε͍ͯΔͨΊɺ RailsͷΑ͏ͳϑϧελοΫͳϑϨʔϜϫʔΫΛ ར༻͢Δඞཁ͕ͳ͔ͬͨ͜ͱ΋ཧ༝ͷ1ͭͰ͢ɻ abe: ΪϑςΟͰ͸ Rails Λ࠾༻ͨ͠ϓϩμΫ τ͕ଟ͍ͨΊ Rails Ͱͷ։ൃʹର͢Δ஌ݟ͸ ๛ ෋ʹ͋Γ·͕͢ ɺΤϯδχΞ૊ ৫ͱͯ͠ͷ ٕज़ͷ෯Λ޿͛ΔͨΊʹଞͷٕज़Λબ୒ͨ͠ ͔ͬͨͱ͍͏ࢥ͍΋͋Γ·ͨ͠ɻ Ͱ΋Rails ΋มΘΒͣ޷͖Ͱ͢Αɻ࣮ࡍʹ Go ݴޠΛ࠾༻ͨ͜͠ͱͰɺվΊͯRubyͷදݱྗ ͷߴ͞΍ Rails ͷศར͞ɺ্ཱͪ͛࣌ͷॳಈ ͷૣ͞ͳͲɺଟ͘ͷັྗΛ࣮ײ͍ͯ͠·͢ɻ ᴷ ΞʔΩςΫνϟʔͷ໘Ͱ͸ͲΜͳΞϓ ϩʔνΛͱΓ·ͨ͠ʁ nakaya: ΞʔΩςΫνϟʔΛߟ͑Δ͏͑Ͱ͸ɺ কདྷతʹੑೳ໘͕՝୊ʹͳΓͦ͏ͩͱ͍͏͜ͱ Λૣظ͔Βٞ࿦͍ͯ͠·ͨ͠ɻ͋ΒΏΔΪϑτ ൃߦΛதܧ͢Δ͜ͱʹͳΔͷͰɺ๲େͳRead/ WriteʹରԠͰ͖Δඞཁ͕͋ΔΘ͚Ͱ͢ɻ ͦͷͨΊɺσʔλ૚ͱີ݁߹ʹͳΒͳ͍ΞʔΩ ςΫνϟʔʹ͍ͯ͠·͢ɻ۩ମతʹ͸ Repos itory ύλʔϯΛ࠾༻͠ɺকདྷతʹNoSQL ʹ Ҡߦ͢Δ͜ͱʹͳͬͨͱͯ͠΋ݶఆతͳӨڹൣ ғͰϦϓϨʔεͰ͖ΔΑ͏ͳઃܭʹ͍ͯ͠·͢ɻ ·ͨɺΪϑτൃߦଆͷγεςϜ͕ࠓޙ΋͞Βʹ ૿͍͑ͯ͘͜ͱ΋ߟ͑Δඞཁ͕͋Γ·͢ɻൃߦ γεςϜ͕૿͑ͨͱ͖Ͱ΋ɺطଘͷίʔυΛม ߋͤͣʹ؆୯ʹ֦ு͍͚ͯ͠ΔΑ͏ͳϙϦϞʔ ϑΟοΫͳઃܭʹ͍ͯ͠·͢ɻ ΪϑςΟͷΤϯδχΞΧϧνϟʔͷ1ͭʹ ʰਖ਼͠ ͍มԽʱ ͕͋Γ·͕͢ɺকདྷͷεέʔϧΛߟྀ ͯ͠ਖ਼͘͠มԽ͍͚ͯ͠ΔΞʔΩςΫνϟʔΛ ໨ࢦ͠·ͨ͠ɻ abe: ͜͏͍ͬͨΞʔΩςΫνϟʔΛઃܭ͢Δ ্Ͱɺઃܭࢦ਑ͱͯ͠DDD ͷߟ͑ํ΍ϓϥΫ ςΟεΛऔΓೖΕ͍ͯΔͱ͍͏෦෼͸͋Γ·͢ ͕ɺDDD ͷςΫχοΫ΍ϓϥΫςΟεΛͦͷ ··औΓೖΕΔͷͰ͸ͳͦ͘ͷઃܭ͕ࣄۀՁ ஋΍ϓϩμΫτՁ஋ʹߩݙ͢Δͷ͔ͱ͍͏͜ͱ Λɺৗʹߟ͑ΔΑ͏ʹ͍ͯ͠·͢ɻ͜Ε͕ͳ͍ ͱɺಛఆͷઃܭΛऔΓೖΕͨ݁Ռෳࡶੑ͕૿ ࣮ͯ͠૷ίετ͕͔͔Δ͚ͩʹͳͬͯ͠·͏ͷ ͸ɺҙຯ͕ͳ͍ͱߟ͍͑ͯΔ͔ΒͰ͢ɻ ࢖͍׳Ε͖ͯͨ Rails ͸ن໿ʹଇͬͨ։ൃ͕ Ͱ͖ΔͷͰɺ൑அΛগͳ͘Ͱ͖Δ͜ͱ͕େ͖ͳ ར఺Ͱͨ͠ɻࠓճ͸ͦ͏͍͏ϑϨʔϜϫʔΫΛ ࢖͍ͬͯΔΘ͚Ͱ͸ͳ͍ͷͰɺ ίʔσΟϯάͷ ن໿΋ࣗ෼ͨͪͰ͍ͭͬͯ͘͘ඞཁ͕͋Γ·͠ ͨɻ ʮ͜ͷ෦෼͸Ͳ͏࡞Ζ͏͔ʯ ʮͦͷͱ͖͸Ͳ ͏͍͏ઃܭΛ࠾༻͠Α͏͔ʯ ͱ͍͏͜ͱΛͣͬ ͱٞ࿦ͯ͠ɺͦͷ౎౓൑அΛ͖ͯ͠·ͨ͠ɻ ࠓޙ΋͜͏͍͏ݐઃతͳٞ࿦Λ͠ͳ͕ΒɺΑ͍ ൑அΛ΋ͬͱૉૣ͘Ͱ͖ΔΑ͏ͳνʔϜʹͳΔ ͜ͱΛ໨ࢦ͍ͯ͠·͢ɻ ᴷ Α͍൑அ͕Ͱ͖ΔΑ͏ʹͳΔͨΊʹ͸Ͳ ͏ͳΔͱ͍͍ΜͩΖ͏ʁ abe: ͲΜͳ൑அΛ͢ΔʹͤΑɺ τϨʔυΦϑ ʹͳΓ·͢ɻ100%ͷਖ਼ղ͸ͳ͍͠Կ͔ΛऔΕ ͹Կ͔͕٘ਜ਼ʹͳΔͷͰɻͦΕʹରͯ͠௕͘ ٞ࿦͢Δ͜ͱ͕ྑ͍ͱ΋ࢥ͍·ͤΜɻ׬શͳਖ਼ ղ͕ͳ͍Ҏ্͸͍͘ΒͰ΋ٞ࿦͸Ͱ͖ͯ͠·͏ ͔ΒͰ͢ɻͳͷͰɺ׬ᘳΛ໨ࢦͦ͏ͱ͢ΔͷͰ ͸ͳ͘΍ͬͯΈͯ໰୊͕͋Ε͹͙͢ʹม͑Α͏ɺ ͱ͍͏ਫ਼ਆ͕େ੾ͳΜͩͱࢥ͍·͢ɻ ઈରʹ͜Ε͕ਖ਼͍͠ͱ͍͏͜ͱ͸ͳ͍ͷͰɺ׬ ᘳͰ͸ͳ͍ঢ়ଶΛड͚ೖΕΔϚΠϯυͰ͍͍ͨ Ͱ͢Ͷɻ nakaya: Α͍൑அ͕ૉૣ͘Ͱ͖ΔΑ͏ʹͳΔ ͨΊʹ͸ɺҾ͖ग़͠ͷ਺͕ଟ͍΄͏͕͍͍ͷ͸ ؒҧ͍ͳ͍Ͱ͢Ͷɻ νʔϜͰͷֶशΛଅਐ͠ɺ૊৫ʹφϨοδΛ஝ ੵ͠ଓ͚Δ͜ͱ΋େ੾Ͱ͢ɻྠಡձΛͯ͠ڞ༗ ஌Λ૿΍ͨ͠ΓɺADR Λॻ͍ͯͦͷ࣌ͷઃܭ ൑அͷܦҢΛ࢒͠ɺ͋ͱ͔Β;Γ͔͑ΕΔΑ͏ ʹͯ͠φϨοδΛ࢒͍ͯ͘͜͠ͱ΋΍͍ͬͯ·͢ɻ yashiʗΤϯδχΞ ϦʔυϑϩϯτΤϯυΤϯδ χΞɻΪϑτ͕΋ͬͱخ͘͠ͳ ΔΑ͏ͳɺΑΓΑ͍Ϣʔβʔ ମݧΛ௥ٻ͢Δɻ ༄੉จ޹ʗCTO ૑ۀظ͔ΒΪϑςΟͷΤϯδ χΞϦϯάΛݗҾ͢Δ࠷ߴٕ ज़੹೚ऀɻ eguchiʗΤϯδχΞ ۀ຿෼ੳ͔Β։ൃશൠΛ୲ ͍εΫϥϜν ʔϜΛϦʔυ ͢Δɻઐ ໳ ྖ Ҭ ͸ϑϩϯτ Τϯυɻ nakayaʗΤϯδχΞ ։ൃٕज़͚ͩͰͳ͘৺ཧֶ͔ ΒΤϯδχΞ૊৫࿦·Ͱ޿͘ ୳ٻɻGo ݴޠΛಘҙͱ͢Δ ΤϯδχΞ ɻ abeʗΤϯδχΞ όοΫΤϯυͷΞʔ ΩςΫ νϟʔʹڧ͘ΪϑςΟͷ਺ଟ ͘ͷϓϩμΫτ։ൃʹؔΘΔɻ CTO × Engineer Talk Session Ϊ ϑ ςΟͷ Τ ϯ δ χ Ξ ͕ ޲ ͖ ߹ ͏ ٕ ज़ ՝ ୊ ͱν ϟϨϯ δ Product Book P.15 RubyKaigi2023 P.14