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

Laravelプロダクト開発・運用の失敗学

 Laravelプロダクト開発・運用の失敗学

株式会社レプスの不動産投資クラウドファンディングシステム「不特法クラウド」はLaravel にて基本機能を構築し、2020年9月に正式リリースされました。

2年以上にわたる機能開発・システム運用、またインフラや DevOps 改善の試行錯誤の中で直面してきた様々な失敗を取り上げると共に、失敗から学んで品質改善につなげることのできた事例をご紹介します。

shgishzk

March 24, 2023
Tweet

More Decks by shgishzk

Other Decks in Programming

Transcript

  1. Laravel ϓϩμΫτ։ൃɾӡ༻ͷ ࣦഊֶ T H E S C I E

    N C E O F FA I L U R E ג ࣜ ձ ࣾ Ϩϓ ε ੴࡔ লޗ ᷂Ϩϓε ΤϯδχΞϦϯάϚωʔδϟʔ 🇯🇵 ᷂ϨϓεɾλΠϥϯυ औక໾ 🇹🇭 @niwaka
  2. CASE 1. ηογϣϯɾΩϟογϡ؅ཧΛRedis͔Βσʔλϕʔεʹஔ͖׵͑ͨ࿩ 2019೥ͷϓϩτλΠϓ։ൃ࣌͸ΦϯϓϨϛεӡ༻ CACHE_DRIVER=file 
 SESSION_DRIVER=file 1೥ӡ༻ͯ͠Έͯ… ElastiCacheɺ ίετ͕ߴ͍Α͏ͳ…

    AWS ੥ٻֹͷ࠷େ 25%! ͕ ElastiCache ར༻ྉ 2021೥ʹAWSӡ༻ʹҠߦɺεςʔτϨεԽਤΔ CACHE_DRIVER=redis 
 SESSION_DRIVER=redis ※ 2022೥6݄࣌఺
  3. “ΞʔΩςΫνϟબఆͰ͸ What ΑΓ Why” “ΞϓϦέʔγϣϯಛੑʹ߹ΘͤͯΞʔΩςΫνϟ͸ৗʹΞοϓσʔτ” ֶ LEARN & IMPROVE Redisʹͩ͜ΘΒͳͯ͘Α͔ͬͨ

    ɾADRΛৼΓฦΓɺʮ଎͞ʹਖ਼ٛʯͷཧ༝ͰRedisΛ࠾༻ͨ͠ܦҢʹؾͮ͘ ɾෆಛ๏Ϋϥ΢υͷେ൒ͷϢʔεέʔεͰɺߴ଎I/O͸ෆཁ υϥΠόʔΛ database ʹͰ͖ͳ͍͔ݕূ ɾσʔλϕʔε༰ྔͱI/Oʹ·ͩ༨༟͕͋Δ͜ͱʹண໨͠ɺԾ૝αʔόͰݕূ ɾυϥΠόʔ͸Laravel७ਖ਼Λͦͷ··ར༻ σʔλϕʔε (RDS) ར༻ྉ 380 υϧ σʔλϕʔε (RDS) ར༻ྉ 400 υϧ +20υϧ Redis (ElastiCache) ར༻ྉ 283 υϧ Redis (ElastiCache) ར༻ྉ 
 0 υϧ -283υϧ ݁Ռ…
  4. CASE 2. ΫϦοΫ߹ઓͷಉ࣮࣌ߦ੍ޚͰۤ࿑ͨ͠࿩ ਓؾҊ݅ ઌணॱ ׬ച·Ͱ࠷଎ 14ඵ ΫϦοΫ߹ઓ ߪೖڝ૪཰͸࠷େ 860+%

    ※1 ωΫαεΤʔδΣϯτ༷ΈΜͳͷ೥ۚ11߸ϑΝϯυ 2,340ສԁ (2022೥1݄1೔) ※2 ωΫαεΤʔδΣϯτ༷ΈΜͳͷ೥ۚ43߸ϑΝϯυ 1,240ສԁ (2022೥11݄29೔) ߴརճΓ நબ ※1 ※2 ۭ͖ޱ਺ σʔλͷ੔߹ੑ ୲อʹۤઓ… σουϩοΫ ൵؍ϩοΫͰ͸ ύϑΥʔϚϯε௿Լ 10ޱߪೖ 3ޱߪೖ 8ޱߪೖ 15ޱߪೖ ۭ͍ͯΔͷʹ ങ͑ͳ͔ͬͨʁ 💦
  5. ֶ LEARN & IMPROVE 2छྨͷָ؍తഉଞ੍ޚΛ૊Έ߹ΘͤͨιϦϡʔγϣϯ ɾָ؍ഉଞ੍ޚͦͷ̍ɿSELECTͰߪೖޱ਺্͕ݶʹୡ͍ͯ͠ͳ͍͔νΣοΫɻOKͳΒͦͷ̎ ΁ਐΉ ɾָ؍ഉଞ੍ޚͦͷ̎ɿۭ͖ޱ਺؅ཧςʔϒϧʹରͯ͠ UPDATE LIMIT

    n; Λ࣮ߦɻaffected rows ͷ਺஋Λ΋ͬͯ࠷ऴతʹߪೖՄೳͳޱ਺ʢۭ͖ޱ਺ʣΛ൑ఆɻߪೖͰ͖ͨΒޱ਺Λ஫จ ςʔϒϧ΁INSERT UPDATE fund_units SET status = ‘sold’ WHERE status = ‘vacant’ LIMIT 5; 2 rows affected. 5ޱߪೖر๬ͷ͏ͪ
 2ޱ͔͠ߪೖͰ͖ͳ͍ͷͰ ϩʔϧόοΫ id fund_id status 1201 10 sold 1202 10 sold 1203 10 sold 1204 10 sold 1205 10 vacant 1206 10 vacant
  6. χϡʔεαΠτܝࡌ 
 TVͷCM 
 SNSͰͷ֦ࢄ ϑΝϯυൢച 
 ޿ࠂΩϟϯϖʔϯ 
 ϝσΟΞͷϓϩϞʔγϣϯ

    CASE 3. ༧ଌͷ೉͍͠εύΠΫʹෛՙରࡦΛͨ͠࿩ ૝ఆ͍ͯ͠ͳ͔ͬͨ ࣌ؒଳʹ΋ ෛՙ্͕ঢ… ༧ଌՄೳͳεύΠΫ ΫϥελʔͷεέʔϦϯάΛ ࣄલʹ༧໿ͯ͠ରԠ ༧ଌ͕ ೉͍͠ αΠτϨεϙϯε͕ ͡Θ͡Θͱ௿Լ ΤϯδχΞͷෛ୲૿ 💦
  7. ֶ LEARN & IMPROVE ؂ࢹͱεέʔϦϯάͷࣗಈԽͰରԠ ɾAWS EC2 + CloudWatch ΤʔδΣϯτɾΞϥʔϜ

    + ΦʔτεέʔϦϯάΛ׆༻ ɾϝτϦΫεΛઃఆ͠ɺෛՙ͕͖͍͠஋ʹୡͨ࣌͠఺ͰࣗಈతʹεέʔϦϯάΛ։࢝ ϝτϦΫεઃఆͱΞϓϦέʔγϣϯɾϓϩηεͷ෼ੳ͕ΧΪ ɾྲྀೖܦ࿏ʢτοϓ/LP/৽نొ࿥/ϑΝϯυԠืϖʔδ etc..ʣύλʔϯͷ೺Ѳ ɾϑϨʔϜϫʔΫͷϓϩηεΛਂງΓɺਖ਼ৗɾҟৗͳঢ়ଶΛ෼ੳ ɾΫϥελʔͷ݈શͳ”݈߁ঢ়ଶ”Λ೺Ѳͯ͠ɺద੾ͳϝτϦΫεઃఆ “ΞʔΩςΫνϟվળ͸ӡ༻վળɺΤϯδχΞͷෛ୲ܰݮʹͭͳ͕Δ” ෛՙͷछྨʹؔΘΒͣɺৗʹΤϯδχΞ͕ ுΓ෇͍͍ͯΔඞཁ͕ͳ͘ͳͬͨ 🎵 ΄͔ʹ΋৭ʑࣦഊͯ͠·͢ ɾSendGridͷར༻ྉݟੵ΋Γϛε ɾSendGridͰIP΢ΥʔϜΞοϓͤͣʹ20ສ݅഑৴ etc… ʘۙ͘ʹΤϯδχΞ͕͍ͨΒฉ͍͍ͯͩ͘͞ʗ ΍ Β ͔ ͠ ͯ
  8. ֶ CONCLUSION SMALL STEPS AND GIANT LEAPS “͢΂ͯ͸খ͞ͳվળͷੵΈॏͶɻେ͖ͳΰʔϧΛখ͘͞෼ղͯ͠ Ұͭͻͱͭվળͯ͠ੵΈॏͶ͍͚ͯ͹ɺେ͖͘લਐͰ͖Δ” ※

    1 ʮ ࣦ ഊ ͷ Պ ֶ - ࣦ ഊ ͔ Β ֶ श ͢ Δ ૊ ৫ ɺ ֶ श Ͱ ͖ ͳ ͍ ૊ ৫ ʯ Α Γ 
 Ϛ γ ϡ ʔ ɾ αΠ υ ஶ ༗ ࢬ य़ ༁ ɺ 2 0 1 6 ೥ ɹ ᷂ σΟε Χ όʔ ɾ τ Ρ Τ ϯ ςΟ ϫ ϯ ൃ ߦ ※ 1 খ͞ͳվળɺେ͖ͳඈ༂ ࣭ͷߴ͍
 ϓϩμΫτ ࣦഊ͔Βͷֶͼ ࣗಈςετ ͓٬༷ͷ ϑΟʔυόοΫ νϟϨϯδͱ ࣦഊΛਪ঑͢Δ૊৫ ίϛϡχέʔγϣϯ จԽͷৢ੒ ֶश͢ΔจԽ
  9. ϨϓεͰ͸Ұॹʹಇ͍ͯ͘ΕΔϝϯόʔΛืू͍ͯ͠·͢ʂ • ϋΠϒϦουۈ຿ʢಇ͘৔ॴ͸ࣗ༝ʣ • ΦϑΟε͸ژ౎ɾόϯίΫɻϦϞʔτϫʔΫ΋Մ • MacBook Pro ࢧڅɺॻ੶ߪೖɾࢿ֨औಘͷิॿ͋Γ •

    ۀ຿ͱͯ͠ษڧձɾΧϯϑΝϨϯεࢀՃՄೳ For those interested in working at
 Thai Office 🇹🇭 λΠۈ຿ʹؔ৺͕͋Δํ όοΫΤϯυΤϯδχΞ DevOpsΤϯδχΞ ੵۃ࠾༻தʂ 🇯🇵 ࠾༻৘ใΛݟ͍ͨํ RECRUIT ژ౎ΦϑΟεલʹͯ εϙʔπͰ஍Ҭৼڵ ओͳٕज़ελοΫ ৄ͍͠৘ใ͸QRίʔυ͔Β͝ཡ͍ͩ͘͞