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

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

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

9c47f639b91a66ccf901724eaaf9043d?s=128

Kenta Suzuki

October 08, 2017
Tweet

Transcript

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

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

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

  4. IUUQTVQMPBEXJLJNFEJBPSHXJLJQFEJBDPNNPOTC+FOHB@EJTUPSUFEKQH

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

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

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

  8. ن໛ w Ϟσϧ਺ w ίϯτϩʔϥ਺ w ςʔϒϧ਺ w ։ൃظؒ೥຤͝Ζ͔Β w

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

  10. Լ४උ w ੩తղੳͰେ·͔ʹෳࡶͦ͏ͳͱ͜ΖΛݟ͚ͭΔ QIQNE QIQDQE QIQEDE 1)1@$PEF4OJ⒏FS  QIBOFUD w

    ͦͯ͠HSFQͰॏෳίʔυΛચ͍ग़͢
  11. ಥવͰ͕͢͜Μͳίʔυ͕ Օॴ͋Γ·ͨ͠

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

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

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

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

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

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

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

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

    &YDFQUJPO 6O"VUIPSJ[FE &YDFQUJPO 'MVDU3VOUJNF &YDFQUJPO ʜ FYUFOET FYUFOET ΞϓϦέʔγϣϯϕʔεྫ֎֊૚
  20. ΞϓϦέʔγϣϯϕʔεྫ֎ Ϣʔβ޲͚ʹ දࣔ͢Δϝοηʔδ ϧʔτྫ֎

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

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

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

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

  26. /FX3FMJD&SSPST

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

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

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

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

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

    ࢀߟIUUQFO[PMVUJPOTDPNBSUJDMFTIPXUPDIFDLQIQDPNQBUJCJMJUZ
  32. ͲΜͲΜফ͢ w (PPHMF"OBMZUJDTͰ࢖ͬͯͳ͍ը໘Λ୳Δ ୲ ౰ऀʹௌ͍͔ͯ֬ΊΔɻ࢖ͬͯͳ͍ͳΒ·Δͬ ͱফ͢ w VOVTFEDPEFΛͻͨ͢Β஍ಓʹফ͢ ʢ1IQ4UPSNͷJOTQFDUJPOʣ w

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

  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.”
  35. ࣮૷ΨΠυϥΠϯΛ࡞Δ w 143 ४ڌ QIQDTpYFSͷ$*૊ΈࠐΈ w Ϋϥε໊ؔ਺໊ͳͲͷ໋໊ϧʔϧΛܾΊΔ w 1)1%PD!QBSBN!SFUVSOΛਪ঑ɻಈతͳΫ ϥεϩʔμʔ͸!QSPQFSUZ!WBSͰิॿɻ

    w !EFQSFDBUFEΛ͔͓ͭ͏ ͳͲͳͲ
  36. ஍ಓʹফ͢ qVDUίʔσΟϯάΨΠυϥΠϯΑΓൈਮ

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

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

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

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

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