Slide 1

Slide 1 text

ݹ͘ͳͬͯ͠·ͬͨPHPϑϨʔϜϫʔΫͱPHPͷ バ ʔ ジ ϣϯΞο プ ઓུ @bmf_san PHPerKaigi2024 2024/03/08

Slide 2

Slide 2 text

ࣗݾ঺հ • Kenta Takeuchi / @bmf_san / bmf-san • https://bmf-tech.com/ • גࣜձࣾϚΫΞέ Re-ArchitectureνʔϜॴଐ • PHPΞοϓσʔτϓϩδΣΫτܦݧɿ2ճ͚ͩ • GopherͰ͢

Slide 3

Slide 3 text

࿩͢͜ͱ • όʔδϣϯΞοϓͰ্ख͍ͬͨ͘ઓུ • ϓϩδΣΫτϚωδϝϯτ؍఺ • ٕज़؍఺

Slide 4

Slide 4 text

ϓϩδΣΫτ֓ཁ

Slide 5

Slide 5 text

ର৅ΞϓϦέʔγϣϯ • MakuakeͷΞϓϦέʔγϣϯͱࣾ಺ϥΠϒϥϦ2݅ • https://www.makuake.com/ • 10೥Ҏ্ӡ༻͞Ε͍ͯΔγεςϜ • ࣮ߦ؀ڥ͸ECS on FargateͰίϯςφԽ͞Ε͍ͯΔ • ͓͓Αͦ1~2ճ/೔͸σϓϩΠ͞ΕΔ

Slide 6

Slide 6 text

είʔϓɾମ੍ɾܭը • PHP7.3→PHP8.1 • FuelPHP1.8.2→FuelPHP1.9-develop • νʔϜମ੍ • 2໊ɿϓϩδΣΫτਐߦɾௐࠪɾ࣮૷୲౰ • 1໊ɿௐࠪɾ࣮૷୲౰ • ܭըʙϓϩδΣΫτ׬ྃ·Ͱ11ϲ݄ఔ౓ͷظؒ • ਓ݄׵ࢉͰ6~7ϲ݄ఔ౓

Slide 7

Slide 7 text

ϓϩδΣΫτͷྲྀΕ 1. ࣄલௐࠪ 2. Ξοϓσʔτํ਑ͷݕ౼ 3. վम࡞ۀ 4. ςετ 5. ϦϦʔε

Slide 8

Slide 8 text

όʔδϣϯΞοϓϓϩδΣΫτͷ೉͠͞

Slide 9

Slide 9 text

όʔδϣϯΞοϓΛ೉͘͢͠ΔཁҼ • ܭը͸୯७Ͱ΋ɺ೉қ౓Λ্͛ͯ͠·͏ཁҼ͕͋Δ • ૊৫తͳ͜ͱ΍ٕज़తͳ͜ͱ

Slide 10

Slide 10 text

όʔδϣϯΞοϓΛ೉͘͢͠ΔཁҼ • ࣾ಺Ϧιʔεௐ੔ • ෳ਺ͷνʔϜ͕৮ΔϞϊϦγοΫͳΞϓϦʔέʔγϣϯ • 10೥Ҏ্ӡ༻͞Ε͍ͯΔྺ࢙͋Δίʔυϕʔε • ґଘ͍ͯ͠ΔϑϨʔϜϫʔΫͷ։ൃ͕ఀ଺ • ςετΧόϨοδ͕௿͍ʢ50~60%͘Β͍ʣ

Slide 11

Slide 11 text

όʔδϣϯΞοϓΛ೉͘͢͠ΔཁҼ • ࣾ಺Ϧιʔεௐ੔ • օࣗ෼ͷνʔϜ͚ͩͰखҰഋʂ • ผϓϩδΣΫτʹࢀՃ͢Δ༨༟͕ͳ͍ɾɾʂ • ϚϧνλεΫʹͳΓ͕ͪ • ࣗνʔϜͷϓϩδΣΫτͱֻ͚࣋ͪͨ͠… • ࣾ֎Ϧιʔεͷ֬อͷඞཁੑ

Slide 12

Slide 12 text

όʔδϣϯΞοϓΛ೉͘͢͠ΔཁҼ • ෳ਺ͷνʔϜ͕৮ΔϞϊϦγοΫͳΞϓϦέʔγϣϯ • Φʔφʔγοϓ͕ఆ·͍ͬͯͳ͍ʢ㲈Ξοϓσʔτͷ଩औΓ͕͍ ͳ͍ʣ • ؔ܎ऀ͕ଟ͍ʢ㲈ίϛϡχέʔγϣϯͷෳࡶ͞ʣ • ֤νʔϜͷ։ൃܭըΛؾʹͨ͠Γ • ֤νʔϜͱͷίϛϡχέʔγϣϯ͕ඞཁͩͬͨΓ • Ξοϓσʔτ͕͍͚ͨͩ͠ͳͷʹɾɾʂ͊͘wͤdrftgy;͜͡lp

Slide 13

Slide 13 text

όʔδϣϯΞοϓΛ೉͘͢͠ΔཁҼ • 10೥Ҏ্ӡ༻͞Ε͍ͯΔྺ࢙͋Δίʔυϕʔε • ෆඞཁʹίʔυΛվमͯ͠͠·͏Մೳੑ͕͋Δ • ୭΋࢓༷Λ஌Βͳ͍ɺ͍ʹ͠΁ͷίʔυ • ਺೥୭ʹ΋৮ΕΒΕ͍ͯͳ͔ͬͨΓ͢Δ • ࢖ΘΕ͍ͯΔͷ͔͍ͳ͍ͷ͔ɺΑ͘Θ͔Βͳ͍ίʔυ • σουίʔυ͕ࢄݟ͞ΕΔ

Slide 14

Slide 14 text

όʔδϣϯΞοϓΛ೉͘͢͠ΔཁҼ • ґଘ͍ͯ͠ΔϑϨʔϜϫʔΫͷ։ൃ͕ఀ଺ • FuelPHPͷ։ൃ͕ఀ଺͍ͯ͠Δ • ࠷৽όʔδϣϯ͕8.1ରԠ͍ͯ͠ͳ͍

Slide 15

Slide 15 text

όʔδϣϯΞοϓΛ೉͘͢͠ΔཁҼ • ςετΧόϨοδ͕௿͍ʢ50~60%͘Β͍ʣ • ίʔυͷվमͰόά͕ࠞೖ͞Εͳ͍͔ෆ҆ • όάͷൃݟ͕஗ΕΔ

Slide 16

Slide 16 text

೉͠͞Λ৐Γӽ͑Δʹ͸ • ؾ߹ • ۚ • ྑ͛͞ͳઓུʂ

Slide 17

Slide 17 text

όʔδϣϯΞοϓͷઓུ

Slide 18

Slide 18 text

όʔδϣϯΞοϓͷઓུ • ϓϩδΣΫτϚωδϝϯτʢPMʣͷ؍఺ • ٕज़ʢTechʣ؍఺

Slide 19

Slide 19 text

όʔδϣϯΞοϓͷઓུʢPMʣ • Ϟνϕʔγϣϯͷ؅ཧ • ஗ԆϦεΫͷ࡯஌ͱରॲ • ίϛϡχέʔγϣϯ

Slide 20

Slide 20 text

Ϟνϕʔγϣϯͷ؅ཧ • ໨తΛ໌֬Խ͢Δ͜ͱʢ಺ൃతϞνϕʔγϣϯͷཱ֬ʣ • Ex. • ͳͥΞοϓσʔτ͢Δͷ͔ʁ • Ξοϓσʔτ͢ΔͱͲΜͳϝϦοτ͕ಘΒΕΔͷ͔ʁ • ͲΜͳֶͼ͕͋Γͦ͏͔ʁ • ಺ൃతϞνϕʔγϣϯ͸ੜ࢈ੑΛࠨӈ͢Δ • cf. Boehm, B. (1981) Software Engineering Economics. Prentice Hall. • ஫ɿ݁ߏݹ͍࿦จͳͷͰ࠷৽ͷݚڀͰ͸ͳ͍

Slide 21

Slide 21 text

஗ԆϦεΫͷ࡯஌ͱରॲ • “ෆ࣮֬ੑͷߴ͍՝୊”Λૣ͘ݟ͚ͭͯରԠΛߟ͑Δ • ʓʓ͕Ͱ͖ͳ͔ͬͨͲ͏͠Α͏ʁʓʓ͕Ͱ͖Δ͔Ͳ ͏͔Θ͔Βͳ͍͔΋ʁ • ෆ࣮֬ੑ͸஗ԆʹӨڹ͢Δ • ૣΊͷௐࠪ΍ݕূͰϦεΫʹඋ͑Δ

Slide 22

Slide 22 text

ίϛϡχέʔγϣϯ • 1౓આ໌ͨ͠ΒऴΘΓʹ͠ͳ͍ʢप஌ͷపఈʣ • ಉظʢex. MTGʣɾඇಉظʢex. νϟοτʣΛ࢖͍෼͚Δ • ڠྗΛڼ͙ • ex.ϨϏϡʔɺόάௐࠪͳͲ • ϓϩδΣΫτͷॏཁੑʢ໨తʣ͕ཧղ͞Ε͍ͯΔͱڠ ྗͯ͠΋Β͍΍͍͢

Slide 23

Slide 23 text

όʔδϣϯΞοϓͷઓུʢTechʣ • FuelPHPͷ։ൃόʔδϣϯͷ࠾༻ • PHP৽چόʔδϣϯͷฒߦՔಇߏ੒ͷߏங • ஈ֊తͳ੾Γସ͑ઓུ

Slide 24

Slide 24 text

FuelPHPͷ։ൃόʔδϣϯͷ࠾༻ • PHP8.1ʹରԠͨ͠FuelPHPͷόʔδϣϯ͕ϦϦʔε͞Ε ͍ͯͳ͍ • ։ൃ൛Ͱ͋ΔFuelPHP1.9-developΛ࠾༻ • FuelPHPͷίϛολʔ΁ͷ࣭໰ • Rector΍PHPCompatibilityͱ͍ͬͨπʔϧʹΑΔௐࠪ • υΩϡϝϯτ಺༰Λࢀরͨ͠ਓྗௐࠪ

Slide 25

Slide 25 text

PHP৽چόʔδϣϯͷฒߦՔಇߏ੒ͷߏங • ํ਑ • ϏοάόϯϦϦʔεΛආ͚Δ • ίʔυϑϦʔζظؒΛ࠷খݶʹ͢Δ • ੾Γ໭͠Λखૣ͘ߦ͑Δߏ੒ɺ࢓૊ΈΛ༻ҙ͢Δ • ϓϩδΣΫτظؒதɺଞνʔϜͷ։ൃੜ࢈ੑΛམͱ͞ͳ͍ • →ํ਑ʹج͍ͮͯɺPHP7.3͔ΒPHP8.1΁ͷΞʔΩςΫνϟม ߋΛஈ֊తʹߦ͏ͨΊɺฒߦՔಇߏ੒Λߏங

Slide 26

Slide 26 text

ஈ֊తͳ੾Γସ͑ઓུ • PHP8.1΁ͷόʔδϣϯΞοϓ׬શ׬ྃ·ͰͷεςοϓΛೖ೦ʹܭը • Phase1:ϓϩμΫγϣϯ؀ڥ΋εςʔδϯά؀ڥ΋PHP7.3Ͱӡ༻͞Εͯ ͍Δঢ়ଶ • Phase2:εςʔδϯά؀ڥʹ͓͚ΔฒߦՔಇ؀ڥͷӡ༻։࢝ • Phase2.5:ϓϩμΫγϣϯ؀ڥʹ͓͚ΔฒߦՔಇ؀ڥͷӡ༻։࢝ • Phase3:εςʔδϯάɾϓϩμΫγϣϯΛ؀ڥΛPHP8.1΁੾Γସ͑։࢝ • Phase3.5:PHP8.1؀ڥ΁ͷ׬શ੾Γସ͑

Slide 27

Slide 27 text

Phase1 • PHP7.3ͱPHP8.1ΛฒߦՔಇ؀ڥͷӡ༻Λ։࢝͢ΔͨΊ ͷ४උظؒͱͯ͠ͷϑΣʔζ • PHP7.3Ͱ΋PHP8.1Ͱ΋ಈ࡞͢ΔΑ͏ʹΞϓϦέʔ γϣϯͷίʔυϕʔε΍ϥΠϒϥϦͷΞοϓσʔτ࡞ ۀΛ࣮ࢪ • ίʔυͷվम͸͜ͷϑΣʔζͰ֓Ͷ׬ྃ

Slide 28

Slide 28 text

Phase1

Slide 29

Slide 29 text

Phase2 • εςʔδϯά؀ڥͷΈPHP7.3ͱPHP8.1ͷฒߦՔಇ؀ڥ ͱͯ͠ӡ༻Λ։࢝͢ΔϑΣʔζ • QAͷ࣮ࢪ΍ෛՙࢼݧͷςετΛ࣮ࢪ • ϓϩμΫγϣϯ؀ڥͰͷӡ༻Λ૝ఆͯ͠ɺฒߦՔಇͷ Πϯϑϥߏ੒ͷ࢓૊ΈΛݕূ

Slide 30

Slide 30 text

Phase2

Slide 31

Slide 31 text

ฒߦՔಇͷΠϯϑϥߏ੒ͷ࢓૊Έ • CloudFrontͷContinuous DeploymentΛ࠾༻ • CloudFrontͷDistributionΛPrimaryͱStagingͷ2ͭ෼͚ͯɺτϥϑΟοΫΛ෼ ࢄͰ͖Δ • Weight-basedͱ͍͏ॏΈ෇͚Λར༻͢ΔͱશϦΫΤετͷ0~15%ΛׂΓৼ ΕΔ • ࠷େ15%ͱ͍͏੍ݶ͸͋Δ͕ɺฒߦՔಇঢ়ଶΛҰఆظؒܧଓ͢Δ͜ͱͰݕ ূे෼ͳτϥϑΟοΫΛಘΒΕΔͱ൑அ • ෆ۩߹͕͋ͬͨͱ͖͸0%ʹ͢Δ͚ͩͰྑ͍ • ൓ө΋݁ߏૣ͍

Slide 32

Slide 32 text

Phase2.5 • ϓϩμΫγϣϯ؀ڥͷฒߦՔಇ؀ڥͷӡ༻Λ։࢝͢Δ ϑΣʔζ • PHP8.1؀ڥ΁τϥϑΟοΫΛগͣͭ͠ྲྀͯ͠ɺ࣮ߦ؀ ڥͰͷෆ۩߹Λચ͍ग़͢ • ؂ࢹ΍ӡ༻։࢝Ͱੜͨ͡όάରԠͳͲ

Slide 33

Slide 33 text

Phase2.5

Slide 34

Slide 34 text

Phase3 • εςʔδϯάɾϓϩμΫγϣϯ؀ڥΛPHP8.1ͷΈͷՔಇ ঢ়ଶʹ੾Γସ͑ΔϑΣʔζ • ӡ༻͕҆ఆ͢Δ͔ݕূ͢Δ • PHP8.1؀ڥ͕100%ͷτϥϑΟοΫΛड͚औΔ • PHP7.3؀ڥؔ࿈ͷΠϯϑϥϦιʔεΛ࢒ଘ͓ͤͯ͞ ͘͜ͱͰɺPHP7.3؀ڥ΁ͷ੾Γ໭͠Λ୲อ

Slide 35

Slide 35 text

Phase3

Slide 36

Slide 36 text

Phase3.5 • PHP8.1؀ڥ΁ͷ׬શ੾Γସ͑Λߦ͏ϑΣʔζ • PHP7.3؀ڥؔ࿈ͷ֤छΠϯϑϥϦιʔε΍ɺฒߦՔಇ ͷͨΊʹ࢒ଘ͍ͤͯͨ͞PHPόʔδϣϯ෼ذͷίʔυ ౳Λ࡟আ • PHP7.3؀ڥ΁ͷ੾Γ໭͠͸جຊతʹෆՄೳ

Slide 37

Slide 37 text

Phase3.5

Slide 38

Slide 38 text

·ͱΊ

Slide 39

Slide 39 text

·ͱΊ • ίʔυվमͦͷ΋ͷΑΓ΋ௐࠪɾ४උɾܭըͷ΄͏͕࿑ ྗΛ࢖͏ • Өڹൣғ͕શ෦ʢΘΜͺ͘ʣʂΈ͍ͨͳγεςϜվम ͷϓϩδΣΫτͱͲ͏޲͖߹͏͔ʁ • ࢼ͞ΕΔϓϩδΣΫτϚωδϝϯτྗɺࢼ͞ΕΔٕज़ ྗ • ΍Γָ͕͍͍͋ͬͯ͠ΑʁͨͿΜʂ

Slide 40

Slide 40 text

͓·͚ • ΞοϓσʔτϓϩδΣΫτͷϨϙʔτΛϒϩάʹ·ͱΊ ͍ͯ·͢ • ϓϩδΣΫτͷৄࡉΛॻ͍ͨͷͰྑ͚Ε͹͝ࢀরͩ͘ ͍͞ • https://bmf-tech.com/posts/FuelPHPͱPHPͷΞοϓ σʔτϓϩδΣΫτϨϙʔτ

Slide 41

Slide 41 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ