$30 off During Our Annual Pro Sale. View Details »

広告配信管理システムを支えるPHP - レガシーシステムからの段階的移行戦略 / phpcon2017

広告配信管理システムを支えるPHP - レガシーシステムからの段階的移行戦略 / phpcon2017

。PHPカンファレンス2017での発表資料です。

Kenta Suzuki

October 08, 2017
Tweet

More Decks by Kenta Suzuki

Other Decks in Technology

Transcript

  1. ޿ࠂ഑৴؅ཧγεςϜ
    Λࢧ͑Δ1)1
    ϨΨγʔγεςϜ͔Βͷஈ֊తҠߦઓུ
    !TV[V@W70:"(&(3061
    QIQDPO

    View Slide

  2. ࢲʹ͍ͭͯ
    ͚ͣ͢ΜHJUIVCTV[VLFO!TV[V@W
    qVDU441IUUQTqVDUKQΛ࡞͍ͬͯ·͢
    BKJUPGNͱ͍͏ϙουΩϟετΛ΍͍ͬͯ·͢

    View Slide

  3. ͜Μͳέʔεɺ͋Γ·ͤΜ͔ʁ
    ݪҼΛ௥͑ͳ͍ϩάʮॲཧ͕ਖ਼ৗʹ׬ྃ͠·ͤΜͰͨ͠ʯ
    ೥୅ʹΑͬͯॻ͔ΕํͷҟͳΔίʔυͨͪ
    ͳͥಈ͍͍ͯΔͷ͔Θ͔Βͳ͍͕ଟ෼ಈ͍͍ͯΔ
    શମΛ೺ѲͰ͖ͳ͍͘Β͍ҭͬͯ͠·ͬͨ
    ͦͯ͠ɺ͜ΕΒͷίʔυ͸Ձ஋͕͋ΔʢʹՔ͍Ͱ͍Δʣ

    View Slide

  4. IUUQTVQMPBEXJLJNFEJBPSHXJLJQFEJBDPNNPOTC+FOHB@EJTUPSUFEKQH

    View Slide

  5. Ձ஋͋ΔίʔυΛ
    ΑΓྑ͍ͨ͘͠

    View Slide

  6. ΞδΣϯμ
    എܠɺݱঢ়ɺن໛
    ଍ݻΊྫ֎ج൫ͱϞχλϦϯά
    վળίʔυΛফ͢ɺίʔσΟϯάΨΠυϥΠϯ
    ·ͱΊ

    View Slide

  7. ݱঢ়ͷྑ͍఺ѱ͍఺
    w ྑ͍Ձ஋ग़ͯ͠Δɾςετ͸͋Δ
    w ѱ͍ػೳ௥Ճʹ͕͔͔࣌ؒΔɾϝϯςφϯε
    ͮ͠Β͍ɾಡΈͮΒ͍

    View Slide

  8. ن໛
    w Ϟσϧ਺
    w ίϯτϩʔϥ਺
    w ςʔϒϧ਺
    w ։ൃظؒ೥຤͝Ζ͔Β
    w ςετΫϥεɻओʹϞσϧͱࣗࣾϥΠϒϥ
    Ϧ޲͚ɺͦͷଞʹओཁػೳͷ౷߹ςετ͕͋Δɻ

    View Slide

  9. ͦΕͰ΋ෳࡶʹͳΔʜ
    ୯ମςετɺ౷߹ςετ͸͢΂ͯ$*Ͱࣗಈ࣮ߦ͞ΕΔ
    ίʔυϨϏϡʔ͞Εͳ͚Ε͹NBTUFSʹϚʔδ͠ͳ
    ͍ɻςετͷແ͍ίʔυ͸΄΅Ϛʔδ͞Εͳ͍ɻ
    ϦϞʔτϒϥϯν͝ͱʹ֬ೝ༻؅ཧը໘্ཱ͕͕ͪ
    Δɻ֬ೝ͠΍͍͢ɻ

    View Slide

  10. Լ४උ
    w ੩తղੳͰେ·͔ʹෳࡶͦ͏ͳͱ͜ΖΛݟ͚ͭΔ
    QIQNE QIQDQE QIQEDE 1)1@$PEF4OJ⒏FS
    QIBOFUD
    w ͦͯ͠HSFQͰॏෳίʔυΛચ͍ग़͢

    View Slide

  11. ಥવͰ͕͢͜Μͳίʔυ͕
    Օॴ͋Γ·ͨ͠

    View Slide

  12. ಥવͰ͕͢͜Μͳίʔυ͕
    Օॴ͋Γ·ͨ͠
    ϩά΋Τϥʔը໘΋ಉ͡ϝοηʔδ
    ͱΓ͋͑ͣϧʔτྫ֎ΛUISPX
    ͦͯ͠ϧʔτྫ֎ͰDBUDI

    View Slide

  13. ಥવͰ͕͢͜Μͳίʔυ͕
    Օॴ͋Γ·ͨ͠
    ϩά΋Τϥʔը໘΋ಉ͡ϝοηʔδ
    /05*$&5
    &YDFQUJPOXJUINFTTBHFૢ࡞͕ෆਖ਼Ͱ͢
    JOQBUIUPGPPQIQ
    ը໘ग़ྗ
    ϩά

    View Slide

  14. ಥવͰ͕͢͜Μͳίʔυ͕
    Օॴ͋Γ·ͨ͠
    ϩά΋Τϥʔը໘΋ಉ͡ϝοηʔδ
    /05*$&5
    &YDFQUJPOXJUINFTTBHFૢ࡞͕ෆਖ਼Ͱ͢
    JOQBUIUPGPPQIQ
    ը໘ग़ྗ
    ϩά
    Կ͕͏·͍͔͘ͳ͔ͬͨͷ͔
    Θ͔Βͳ͍ා͍

    View Slide

  15. ݪҼΛ௥͑ͳ͍ϩάʮॲཧ͕ਖ਼ৗʹ׬ྃ͠·ͤΜͰͨ͠ʯ
    ೥୅ʹΑͬͯॻ͔ΕํͷҟͳΔίʔυͨͪ
    ͳͥಈ͍͍ͯΔͷ͔Θ͔Βͳ͍͕ଟ෼ಈ͍͍ͯΔ
    શମΛ೺ѲͰ͖ͳ͍͘Β͍ҭͬͯ͠·ͬͨ
    ͦͯ͠ɺ͜ΕΒͷίʔυ͸Ձ஋͕͋ΔʢʹՔ͍Ͱ͍Δʣ
    ࠶ܝ͜Μͳέʔεɺ͋Γ·ͤΜ͔ʁ

    View Slide

  16. ΞδΣϯμ
    എܠɺݱঢ়ɺن໛
    ଍ݻΊྫ֎ج൫ͱϞχλϦϯά
    վળίʔυΛফ͢ɺίʔσΟϯάΨΠυϥΠϯ
    ·ͱΊ

    View Slide

  17. ྫ֎ͱϋϯυϦϯά
    ΞϓϦέʔγϣϯϕʔεྫ֎Λఆٛ͢Δ
    ΞϓϦέʔγϣϯάϩʔόϧͳྫ֎ϋϯυϥΛ
    ࣮૷IUUQQIQOFUTFU@FYDFQUJPO@IBOEMFS
    ϩΪϯάͱΤϥʔදࣔΛ͍͍ײ͡ʹ͢Δ

    View Slide

  18. TFU@FYDFQUJPO@IBOEMFS
    ྫ֎͸ා͘ͳ͍

    View Slide

  19. 1)1ͷඪ४ྫ֎͸ΞϓϦέʔγϣϯϕʔεྫ֎ʹ͍Εͳ͍
    'MVDU5ISPXBCMFΠϯλϑΣʔεʹͯ͠ඪ४ྫ֎΋Ωϟο
    νͰ͖ΔΑ͏ʹ͠Α͏͔ʁͱߟ͕͑ͨ΍Ίͨ
    ݁Ռ'MVDU&YDFQUJPOͰDBUDI͢Ε͹Α͠ɻγϯϓϧɻ
    a&YDFQUJPO
    JNQMFNFOUT5ISPXBCMF

    'MVDU&YDFQUJPO ΞϓϦέʔγϣϯϕʔεྫ֎
    1)1ͷϧʔτྫ֎
    #BE3FRVFTU
    &YDFQUJPO
    6O"VUIPSJ[FE
    &YDFQUJPO
    'MVDU3VOUJNF
    &YDFQUJPO
    ʜ
    FYUFOET
    FYUFOET
    ΞϓϦέʔγϣϯϕʔεྫ֎֊૚

    View Slide

  20. ΞϓϦέʔγϣϯϕʔεྫ֎
    Ϣʔβ޲͚ʹ
    දࣔ͢Δϝοηʔδ
    ϧʔτྫ֎

    View Slide

  21. View Slide

  22. ྫ֎ಋೖલͦͷ৔͠ͷ͗ͷϩΪϯάͱΤϥʔϖʔδදࣔ
    ྫ֎ಋೖޙྫ֎ΛUISPX͢Ε͹0,

    View Slide

  23. ྫ֎ίʔυʹΑͬͯ
    )551ϨεϙϯείʔυΛม͑Δ
    Τϥʔදࣔ΋͍͍ײ͡ʹ΍Δ
    ʢςϯϓϨʔτ͸ίϯςφ͔Βࠩ͠ࠐΉʣ
    ྫ֎ϋϯυϥ
    ελοΫτϨʔε΋
    ϩάʹ௥Ճ

    View Slide

  24. Τϥʔϖʔδग़ྗͱϩΪϯά͕ڞ௨Խ͞ΕͨͷͰ
    USZDBUDIͷॏෳίʔυΛ҆શʹ࡟আՄೳʹ

    View Slide

  25. ϞχλϦϯά
    /FX3FMJD"1.

    View Slide

  26. /FX3FMJD&SSPST

    View Slide

  27. ϞχλϦϯά/FX3FMJD࠾༻
    ྫ֎ج൫Λͭͬͨ͘͜ͱͰɺͲͷը໘Ͱ͍ͭͲΜ
    ͳྫ֎͕ͲΕ͘Β͍ൃੜ͔ͨ͠Θ͔Γ΍͘͢ͳͬͨ
    /FX3FMJDΞϥʔτʹؚ·ΕΔ৘ใ͕ྫ֎Λϕʔ
    εʹ͓ͯ͠Γɺ໰୊ͷ੾Γ෼͚͕͠΍͘͢ͳͬͨ
    ஗͍ΫΤϦɺ஗͍ը໘΋Θ͔ΔΑ͏ʹͳΓʮ͜͜
    ΛΈΕ͹ඞཁͳ৘ใ͸ू·͍ͬͯΔʯঢ়ଶʹͳͬͨ

    View Slide

  28. ΞδΣϯμ
    എܠɺݱঢ়ɺن໛
    ଍ݻΊྫ֎ج൫ͱϞχλϦϯά
    վળίʔυΛফ͢ɺίʔσΟϯάΨΠυϥΠϯ
    ·ͱΊ

    View Slide

  29. ࠶ܝ͜Μͳέʔεɺ͋Γ·ͤΜ͔ʁ
    ݪҼΛ௥͑ͳ͍ϩάʮॲཧ͕ਖ਼ৗʹ׬ྃ͠·ͤΜͰͨ͠ʯ
    ೥୅ʹΑͬͯॻ͔ΕํͷҟͳΔίʔυͨͪ
    ͳͥಈ͍͍ͯΔͷ͔Θ͔Βͳ͍͕ଟ෼ಈ͍͍ͯΔ
    શମΛ೺ѲͰ͖ͳ͍͘Β͍ҭͬͯ͠·ͬͨ
    ͦͯ͠ɺ͜ΕΒͷίʔυ͸Ձ஋͕͋ΔʢʹՔ͍Ͱ͍Δʣ

    View Slide

  30. 1IQ4UPSN
    w 1)1͚ͩͲɺ1)1͡Όͳ͘ͳΓ·͢
    w ΋ͷ͍͢͝ڧ͍*OTQFDUJPOػೳɻ!QSPQFSUZ ΍
    !WBSͰڍಈΛյͣ͞ܕΛ͚ͭΒΕ·͢ɻ
    w EFBEDPEF࡟আ΍SFGBDUPSJOHʹେ׆༂ɻνʔϜ
    Ͱ࢖ͬͯ·͢ɻ
    એ఻IUUQTBKJUPGN

    View Slide

  31. 1)1ʜ
    w QIQDTQIQDDͰચ͍ग़ͭͭ͠جຊ͸1)1Ϛ
    χϡΞϧΛಡΜͰॗʑͱ௚͢
    w ͳʹ͔໰୊͋Ε͹/FX3FMJDͰΘ͔Δ
    w ϑϨʔϜϫʔΫͷίΞ΋1)1޲͚ʹमਖ਼
    QIQDTTUBOEBSE1)1$PNQBUJCJMJUZMJC
    ࢀߟIUUQFO[PMVUJPOTDPNBSUJDMFTIPXUPDIFDLQIQDPNQBUJCJMJUZ

    View Slide

  32. ͲΜͲΜফ͢
    w (PPHMF"OBMZUJDTͰ࢖ͬͯͳ͍ը໘Λ୳Δ୲
    ౰ऀʹௌ͍͔ͯ֬ΊΔɻ࢖ͬͯͳ͍ͳΒ·Δͬ
    ͱফ͢
    w VOVTFEDPEFΛͻͨ͢Β஍ಓʹফ͢
    ʢ1IQ4UPSNͷJOTQFDUJPOʣ
    w ཁΒͳ͍ςετέʔεΛফ͢ʢ஗͍ςετ͸ੜ࢈
    ੑΛམͱ͢ʣ

    View Slide

  33. 3FEBTIʹཔΓɺফ͢
    w ࣾ಺Ͱ΋42-͔͚Δਓ͕૿͖͑ͯͨ
    w ʮͦΕ3FEBTIͰΑ͘ͳ͍ʁ͜ͷΫΤϦͰͬ͘͞
    ͱσʔλग़ͤ·͢Αʯ
    w ར༻ස౓ͷগͳ͍ը໘͸3FEBTIʹΫΤϦ͚ͩҠ
    ߦͯ͠୲౰ऀʹҊ಺·Δͬͱ࡟আ

    View Slide

  34. ࠷ྑͷίʔυ͸ɺίʔυͳ͠
    w /FX3FMJD (PPHMF"OBMZUJDT 3FEBTIFUD
    w ֎෦πʔϧʹ͏·͘པΖ͏ɻ͍Βͳ͍ίʔυ͸
    ͲΜͲΜফͦ͏ɻ
    IUUQTCMPHDPEJOHIPSSPSDPNUIFCFTUDPEFJTOPDPEFBUBMM
    “It's painful for most software developers to acknowledge this,
    because they love code so much, but the best code is no code at all.”

    View Slide

  35. ࣮૷ΨΠυϥΠϯΛ࡞Δ
    w 143 ४ڌQIQDTpYFSͷ$*૊ΈࠐΈ
    w Ϋϥε໊ؔ਺໊ͳͲͷ໋໊ϧʔϧΛܾΊΔ
    w 1)1%PD!QBSBN!SFUVSOΛਪ঑ɻಈతͳΫ
    ϥεϩʔμʔ͸!QSPQFSUZ!WBSͰิॿɻ
    w !EFQSFDBUFEΛ͔͓ͭ͏
    ͳͲͳͲ

    View Slide

  36. ஍ಓʹফ͢
    qVDUίʔσΟϯάΨΠυϥΠϯΑΓൈਮ

    View Slide

  37. ͦͯ͠ϖΞϓϩάϥϛϯά
    w ΨΠυϥΠϯΛ੔͑ͨΒɺϖΞϓϩάϥϛϯά
    w ϖΞϓϩάϥϛϯάͰॻ͖ํΛ఻͑ΔʢϨϏϡʔ
    ͩͱͿ͔ͭΓ΍͍͢ͱ͖ʹಛʹ༗༻ʣ
    w Ͱ΋ɺڧ੍ͯ͠͸͍͚ͳ͍

    View Slide

  38. ΞδΣϯμ
    എܠɺݱঢ়ɺن໛
    ଍ݻΊྫ֎ج൫ͱϞχλϦϯά
    վળίʔυΛফ͢ɺίʔσΟϯάΨΠυϥΠϯ
    ·ͱΊ

    View Slide

  39. Ձ஋͋ΔίʔυΛ
    ΑΓྑ͍ͨ͘͠

    View Slide

  40. ୭ͩͬͯෆ҆͸͋Δ
    ͔ͩΒɺकΓΛ·ͣݻΊΔɻ
    ͦ͏͢Ε͹վળ͠΍͘͢ͳΔɻ
    ʮ͜ͷมߋͰڍಈΛյͨ͠ΒͲ͏͠Α͏ʯ

    View Slide

  41. ίʔυΛ
    ࣗ෼ͨͪͷखʹऔΓ໭͢

    View Slide