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

そのコード、フレームワークの外でも動きますか?

 そのコード、フレームワークの外でも動きますか?

PHPerの皆さんは、日々Webアプリケーションを開発している中で、フレームワークのコードと自分たちのコードを区別できていますか?
自分たちのアプリケーションにとって重要な、業務知識をモデリングして書いたコードは、「いまのフレームワーク」と切り離して動かすことができるでしょうか?

フレームワークのバージョンアップ、あるいはフレームワークの開発終了によって自分たちのアプリケーションの命運が左右されることがないように、フレームワークへの依存を取り除き、大事なコードの可搬性を高めましょう。
ごく一般的な小さなWebアプリケーションを題材に大事なコードを守りつつLaravelからSymfonyにフレームワーク変更する様子を実演しながら、考え方とテクニックについてご紹介します。

B793da271a45d149b52f507bca9f137c?s=128

Hiromi Hishida

March 28, 2021
Tweet

Transcript

  1. 1)1FS,BJHJCZ!XFC ͦͷίʔυɺϑϨʔϜϫʔΫͷ֎ Ͱ΋ಈ͖·͔͢ʁ

  2. w 1)1ྺ೥ɻϑϦʔϥϯεˠΧϧ ςοτίϛϡχέʔγϣϯζ։ൃ ෦ɺݱࡏόοΫΤϯυνʔϜͷϦ ʔυΤϯδχΞɻ෭ۀͰ .JDPXPSLTͰ΋ίʔυॻ͍ͯ· ͢ɻ w ͲͪΒͷձࣾͰ΋ʮਓʹ࢖ΘΕΔ γεςϜʯΛ࡞Γͨͯ͘ɺϝϯςφ

    ϏϦςΟͷߴ͍։ൃΛ໨ࢦͯ͠νʔ ϜϝϯόʔͱҰॹʹ೔ʑฃಆதʂ ҰॹʹؤுΓ͍ͨ஥ؒืूதʂ w NPUIFSPG
  3. ͜ͷUBMLͷର৅ w ࣗࣾαʔϏεΛ࢝Ίͱ͢Δɺॳճ࡞ͬͨޙʹൺֱత௕ظؒӡ༻·ͰؔΘΔ 8FCΞϓϦέʔγϣϯΛ։ൃ͍ͯ͠Δ1)1FS w ໨҆ͱͯ͠਺೥ʙे೥Ҏ্ w ʢ௥ՃͰʣͳͥυϝΠϯۦಈઃܭ΍ςετۦಈ։ൃ͕ॏࢹ͞ΕΔΑ͏ʹͳͬ ͨͷ͔஌Γ͍ͨ1)1FS

  4. ΞϓϦέʔγϣϯ௕ظӡ༻ͷน͸ͳʹ͔ʁ

  5. ΞϓϦέʔγϣϯ௕ظӡ༻ͷน͸ͳʹ͔ʁ w ϏδωεࣗମͷมԽʹΑΔ࢓༷มߋ w ϑϨʔϜϫʔΫͷόʔδϣϯΞοϓ w ϑϨʔϜϫʔΫͷ։ൃऴྃ w ൪֎։ൃ։࢝࣌఺Ͱ͸ϞμϯͰΠέͯͨϑϨʔϜϫʔΫ͕ݹष͍લ࣌୅ͷ΋ ͷʹͳΔ

  6. ΞϓϦέʔγϣϯ௕ظӡ༻ͷน͸ͳʹ͔ʁ w ϏδωεࣗମͷมԽʹΑΔ࢓༷มߋ w ͜Ε͸ඞཁͳ΍ͭɻ௕ظӡ༻ͷ୉ޣຯʂ w ϑϨʔϜϫʔΫͷόʔδϣϯΞοϓ w ͱ͖ʹഁյతͳมߋ͕͋Δ͜ͱ΋ʜ w

    ϑϨʔϜϫʔΫͷ։ൃऴྃ w ηΩϡϦςΟతʹ΍͹͍ঢ়ଶΛ์ஔ͸ආ͚͍ͨ w ൪֎։ൃ։࢝࣌఺Ͱ͸ϞμϯͰΠέͯͨϑϨʔϜϫʔΫ͕ݹष͍લ࣌୅ͷ΋ͷʹͳΔ w ϢʔβʔՁ஋తʹ͸ଈ࠲ʹμϝʔδ͸ແ͍͕஝ੵμϝʔδ͸͋ΔʢΤϯδχΞ࠾༻ͱ͔ʣ
  7. นʹͿ͔ͭͬͨΒϦϓϨʔεɾϦχϡʔΞϧ w Ԧಓతʹ͸ϑϨʔϜϫʔΫͷ։ൃऴྃʹରԠ w ϑϨʔϜϫʔΫͷόʔδϣϯΞοϓʹ൐͏ഁյతͳมߋ͕େ͖͗͢Δ৔߹ɺό ʔδϣϯΞοϓͰ΋ى͖Δ w ׬શϦϓϨʔεʢશମΛϦϓϨʔεʣͰͳͯ͘΋ɺ͋ͬͪ΋ͬͪ͜΋ϑϨʔϜ ϫʔΫͷόʔδϣϯΞοϓʹ߹Θͤͯॻ͖׵͑Δύλʔϯ΋͋Δ w

    ϑϨʔϜϫʔΫࣗମͰͳ͘ଞͷ֎෦ཁҼʢϏδωεଆ͔Β࡮৽Λཁ੥͞ΕΔ ͱ͔ʣʹΑͬͯඞཁʹͳΔ͜ͱ΋͋Δ
  8. ϦϓϨʔεɾϦχϡʔΞϧ w ࠷ॳͷϑϨʔϜϫʔΫʹΨοπϦґଘ͍ͯ͠ΔͱɺશϩδοΫΛॻ͖௚͢͜ͱ ʹͳΔ w Ϣʔβʔମݧͱͯ͠ͷʮͰ͖Δ͜ͱʯ͸มΘΒͳ͍ͷʹ৽ن։ൃฒΈͷ࣌ؒ ͕͔͔Δ

  9. ϦϓϨʔεɾϦχϡʔΞϧ w ࠷ॳͷϑϨʔϜϫʔΫʹΨοπϦґଘ͍ͯ͠ΔͱɺશϩδοΫΛॻ͖௚͢͜ͱ ʹͳΔ w جຊతʹͰ͖Δ͜ͱ͸มΘΒͳ͍ͷʹ৽ن։ൃฒΈͷ͕͔͔࣌ؒΔ ϠμϠμॻ͖௚ͨ͘͠ͳ͍Αʙʙ

  10. ϦϓϨʔεɾϦχϡʔΞϧͰർฐ͠ͳ͍ͨΊʹ

  11. ϦϓϨʔεɾϦχϡʔΞϧͰർฐ͠ͳ͍ͨΊʹ w ϑϨʔϜϫʔΫ͔ΒʮࢲୡͷίʔυʯΛಠཱ͓ͤͯ͘͞ w ʮࢲୡͷίʔυʯʹۀ຿υϝΠϯͷίʔυ w 1)1ࣗମ͸ϑϨʔϜϫʔΫΑΓ΋ޙํޓ׵ੑʹڧ͍ w ʢ1)1Ͱ͸ܕએݴڧԽͷͨΊʹ݁ߏޙํޓ׵͕ࣺͯΒΕͨͷͰ஫ҙʣ

  12. ʮࢲୡͷίʔυʯΛϑϨʔϜϫʔΫʹґଘ͠ͳ͍Ͱॻ͜͏ w ࣮ԋ͠·͢

  13. ʮࢲୡͷίʔυʯΛϑϨʔϜϫʔΫʹґଘ͠ͳ͍Ͱॻ͜͏ w ͋Γ;Εͨ੕࠲઎͍ΞϓϦέʔγϣϯ w ੜ೥݄೔ΛೖΕΔͱࠓ೔ͷӡ੎͕දࣔ͞ΕΔ

  14. ίʔυ w -BSBWFMͰϕλʹॻ͍ͨ΋ͷIUUQTHJUIVCDPNXFCGPSUVOFUFMMFS MBSBWFMUSFFCBTJDMBSBWFM w -BSBWFMϦϑΝΫλͯ͠υϝΠϯͷίʔυΛಠཱͤͨ͞΋ͷIUUQT HJUIVCDPNXFCGPSUVOFUFMMFSMBSBWFMUSFFNBTUFS w 4ZNGPOZʹҠ২ͨ͠΋ͷIUUQTHJUIVCDPNXFCGPSUVOFUFMMFS TZNGPOZ

  15. ʮࢲୡͷίʔυʯ͸ϙʔλϒϧ͔ʁ

  16. ʮࢲୡͷίʔυʯ͸ϙʔλϒϧ͔ʁ w ϑϨʔϜϫʔΫʹґଘͤͣʹॻ͍ͨίʔυ͸ϑϨʔϜϫʔΫ͕มΘͬͯ΋࢖͍ ճͤΔ w ಠཱύοέʔδʹͯ྆͠ํ͔ΒDPNQPTFSSFRVJSF͢Δ͙Β͍͕ཧ૝ w .PSFWBOJMMB1)1 w SFGT7BOJMMB+4

    w *OUFSGBDF %FQFOEFODZ*OKFDUJPOΛ͏·͘࢖͓͏
  17. ʮࢲୡͷίʔυʯ͸ϙʔλϒϧ͔ʁ w ʮࢲୡͷίʔυʯͷॏཁͳ෦෼͕Ͳ͜ͳͷ͔໌ࣔͯ͘͠Εͨͷ͸-BSBWFMͱ 4ZNGPOZͱ͍͏όϦΤʔγϣϯ w -BSBWFMWT4ZNGPOZ &MPRVFOU "DUJWF3FDPSE WT %PDUSJOF

    %BUB.BQQFS ྆ํʹରͯ͠ಈ͘Α͏ʹυϝΠϯίʔυΛॻ͜͏ ͱ͢Δ͜ͱͰɺڞ௨෦෼ʢྫ͑͹ɺ%FDJEF4JHOΫϥε΍6TF$BTFΫϥεʣ ͱՄม෦෼ʢྫ͑͹'FUDI'PSUVOF*OUFSGBDFʣ͕ݟ͑Δ
  18. όϦΤʔγϣϯ͸ਓ΋ίʔυ΋ڧ͘͢Δ w ҧ͏ϑϨʔϜϫʔΫ w ҧ͏03. w ҧ͏ݴޠ w ҧ͏νʔϜ

  19. όϦΤʔγϣϯ͸ਓ΋ίʔυ΋ڧ͘͢Δ w &OKPZWBSJBUJPO

  20. 5IBOLZPV