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

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

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

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

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

shgishzk

March 24, 2023
Tweet

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

    View Slide

  2. INTRODUCTION
    ɹݱࡏ20ࣾ (※1)
    ʹ͝ಋೖ͍͍͍ͨͩͯΔෆಈ࢈౤ࢿܕΫϥ΢υϑΝϯσΟϯάγεςϜ
    ʮෆಛ๏Ϋϥ΢υʯͰ͸PHPϑϨʔϜϫʔΫLaravelΛ࢖༻͍ͯ͠·͢ɻ


    ɹ౰ॳΤϯδχΞ2໊Ͱ։ൃΛ։࢝͠ɺ2020೥9݄ʹv1.0ϦϦʔεɻͦͷޙΤϯδχΞ
    νʔϜ͸ݱࡏϑϩϯτΤϯυ3໊ʴόοΫΤϯυ6໊ʢ֎஫ؚΉʣͷεϞʔϧνʔϜ΁ͱ֦
    େɺݱࡏͷv1.17·Ͱվྑͱ৽ػೳϦϦʔεΛ܁Γฦ͖ͯ͠·ͨ͠ɻ


    ɹ։ൃΠςϨʔγϣϯͳΒͼʹγεςϜӡ༻ͷ్্Ͱܦݧࣦͨ͠ഊͱϦΧόϦʔͷྫΛ͍
    ͔ͭ͘औΓ্͛ɺνʔϜͷੜ࢈ੑ޲্ɾ૊৫վળʹͭͳ͕ͬͨࣄྫͱͯ͠͝ཡ͍͚ͨͩΕ
    ͹޾͍Ͱ͢ɻ
    ෆಛ๏Ϋϥ΢υʢhttps://futokuho.cloudʣ
    ※ 1 ܖ ໿ ϕʔε

    View Slide

  3. 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݄࣌఺

    View Slide

  4. “ΞʔΩςΫνϟબఆͰ͸ 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υϧ
    ݁Ռ…

    View Slide

  5. CASE
    2. ΫϦοΫ߹ઓͷಉ࣮࣌ߦ੍ޚͰۤ࿑ͨ͠࿩
    ਓؾҊ݅
    ઌணॱ
    ׬ച·Ͱ࠷଎


    14ඵ
    ΫϦοΫ߹ઓ
    ߪೖڝ૪཰͸࠷େ


    860+%
    ※1 ωΫαεΤʔδΣϯτ༷ΈΜͳͷ೥ۚ11߸ϑΝϯυ 2,340ສԁ (2022೥1݄1೔)


    ※2 ωΫαεΤʔδΣϯτ༷ΈΜͳͷ೥ۚ43߸ϑΝϯυ 1,240ສԁ (2022೥11݄29೔)
    ߴརճΓ
    நબ
    ※1 ※2
    ۭ͖ޱ਺
    σʔλͷ੔߹ੑ
    ୲อʹۤઓ…
    σουϩοΫ
    ൵؍ϩοΫͰ͸
    ύϑΥʔϚϯε௿Լ
    10ޱߪೖ
    3ޱߪೖ
    8ޱߪೖ
    15ޱߪೖ
    ۭ͍ͯΔͷʹ
    ങ͑ͳ͔ͬͨʁ
    💦

    View Slide

  6. ֶ 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

    View Slide

  7. χϡʔεαΠτܝࡌ

    TVͷCM

    SNSͰͷ֦ࢄ
    ϑΝϯυൢച

    ޿ࠂΩϟϯϖʔϯ

    ϝσΟΞͷϓϩϞʔγϣϯ
    CASE
    3. ༧ଌͷ೉͍͠εύΠΫʹෛՙରࡦΛͨ͠࿩
    ૝ఆ͍ͯ͠ͳ͔ͬͨ
    ࣌ؒଳʹ΋
    ෛՙ্͕ঢ…
    ༧ଌՄೳͳεύΠΫ


    ΫϥελʔͷεέʔϦϯάΛ


    ࣄલʹ༧໿ͯ͠ରԠ
    ༧ଌ͕
    ೉͍͠
    αΠτϨεϙϯε͕
    ͡Θ͡Θͱ௿Լ
    ΤϯδχΞͷෛ୲૿
    💦

    View Slide

  8. ֶ LEARN & IMPROVE
    ؂ࢹͱεέʔϦϯάͷࣗಈԽͰରԠ
    ɾAWS EC2 + CloudWatch ΤʔδΣϯτɾΞϥʔϜ + ΦʔτεέʔϦϯάΛ׆༻


    ɾϝτϦΫεΛઃఆ͠ɺෛՙ͕͖͍͠஋ʹୡͨ࣌͠఺ͰࣗಈతʹεέʔϦϯάΛ։࢝
    ϝτϦΫεઃఆͱΞϓϦέʔγϣϯɾϓϩηεͷ෼ੳ͕ΧΪ
    ɾྲྀೖܦ࿏ʢτοϓ/LP/৽نొ࿥/ϑΝϯυԠืϖʔδ etc..ʣύλʔϯͷ೺Ѳ


    ɾϑϨʔϜϫʔΫͷϓϩηεΛਂງΓɺਖ਼ৗɾҟৗͳঢ়ଶΛ෼ੳ


    ɾΫϥελʔͷ݈શͳ”݈߁ঢ়ଶ”Λ೺Ѳͯ͠ɺద੾ͳϝτϦΫεઃఆ
    “ΞʔΩςΫνϟվળ͸ӡ༻վળɺΤϯδχΞͷෛ୲ܰݮʹͭͳ͕Δ”
    ෛՙͷछྨʹؔΘΒͣɺৗʹΤϯδχΞ͕
    ுΓ෇͍͍ͯΔඞཁ͕ͳ͘ͳͬͨ
    🎵
    ΄͔ʹ΋৭ʑࣦഊͯ͠·͢
    ɾSendGridͷར༻ྉݟੵ΋Γϛε


    ɾSendGridͰIP΢ΥʔϜΞοϓͤͣʹ20ສ݅഑৴ etc…
    ʘۙ͘ʹΤϯδχΞ͕͍ͨΒฉ͍͍ͯͩ͘͞ʗ
    ΍ Β ͔ ͠ ͯ

    View Slide

  9. ֶ CONCLUSION
    SMALL STEPS AND GIANT LEAPS
    “͢΂ͯ͸খ͞ͳվળͷੵΈॏͶɻେ͖ͳΰʔϧΛখ͘͞෼ղͯ͠
    Ұͭͻͱͭվળͯ͠ੵΈॏͶ͍͚ͯ͹ɺେ͖͘લਐͰ͖Δ”
    ※ 1 ʮ ࣦ ഊ ͷ Պ ֶ - ࣦ ഊ ͔ Β ֶ श ͢ Δ ૊ ৫ ɺ ֶ श Ͱ ͖ ͳ ͍ ૊ ৫ ʯ Α Γ

    Ϛ γ ϡ ʔ ɾ αΠ υ ஶ ༗ ࢬ य़ ༁ ɺ 2 0 1 6 ೥ ɹ ᷂ σΟε Χ όʔ ɾ τ Ρ Τ ϯ ςΟ ϫ ϯ ൃ ߦ
    ※ 1
    খ͞ͳվળɺେ͖ͳඈ༂
    ࣭ͷߴ͍

    ϓϩμΫτ
    ࣦഊ͔Βͷֶͼ
    ࣗಈςετ
    ͓٬༷ͷ


    ϑΟʔυόοΫ
    νϟϨϯδͱ


    ࣦഊΛਪ঑͢Δ૊৫
    ίϛϡχέʔγϣϯ


    จԽͷৢ੒
    ֶश͢ΔจԽ

    View Slide

  10. ϨϓεͰ͸Ұॹʹಇ͍ͯ͘ΕΔϝϯόʔΛืू͍ͯ͠·͢ʂ
    ● ϋΠϒϦουۈ຿ʢಇ͘৔ॴ͸ࣗ༝ʣ


    ● ΦϑΟε͸ژ౎ɾόϯίΫɻϦϞʔτϫʔΫ΋Մ


    ● MacBook Pro ࢧڅɺॻ੶ߪೖɾࢿ֨औಘͷิॿ͋Γ


    ● ۀ຿ͱͯ͠ษڧձɾΧϯϑΝϨϯεࢀՃՄೳ
    For those interested
    in working at

    Thai Office
    🇹🇭 λΠۈ຿ʹؔ৺͕͋Δํ
    όοΫΤϯυΤϯδχΞ
    DevOpsΤϯδχΞ
    ੵۃ࠾༻தʂ
    🇯🇵 ࠾༻৘ใΛݟ͍ͨํ
    RECRUIT
    ژ౎ΦϑΟεલʹͯ
    εϙʔπͰ஍Ҭৼڵ
    ओͳٕज़ελοΫ
    ৄ͍͠৘ใ͸QRίʔυ͔Β͝ཡ͍ͩ͘͞

    View Slide