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

フレームワークで見るObserverパターン #PHPerKaigi 2022

D5769798246651f0afe77357b7d86b6c?s=47 asumikam
April 11, 2022

フレームワークで見るObserverパターン #PHPerKaigi 2022

去年、「オブジェクト指向のこころ (SOFTWARE PATTERNS SERIES)」を読みました。その中で、デザインパターンの1つ「Observerパターン」の紹介がされています。「そういえば、今まで使ってきたフレームワークの中でObserverパターンの処理があったな」「でも、微妙に記述方法が違ったな?」「それぞれの違いを比較してみたいかも!」となりました。

CakePHPに見るObserverパターン「CakeEvent」
Laravelに見るObserverパターン「Laravel Observer」
どのように使うのか?どのような実装がなされているのか?それぞれのいいところ・・・ナドナド、「Observerパターン」の基本的な説明も含めて、時間の許す限りまとめます!

D5769798246651f0afe77357b7d86b6c?s=128

asumikam

April 11, 2022
Tweet

Other Decks in Technology

Transcript

  1. ϑϨʔϜϫʔΫͰݟΔ 0CTFSWFSύλʔϯ

  2. ͜Μʹͪ͸ʂ w ͋͢Έ 🐤!BTVNJLBN  w খాݪʹ͋Δ)BNFF ϋϛΟ גࣜձࣾʹۈΊਃ͢ w

    8FCΞϓϦ։ൃ🙋 w ύϯϑϨοτΈͨʙʙʂʁΈͯʙʙʙʂʂ
  3. 0CTFSWFSύλʔϯΛҙࣝ͠ͳ͕Β ϑϨʔϜϫʔΫͷػೳΛ טΈకΊͯΈͨΑʂ ࠓ೔ͷൃදͷϙΠϯτ

  4. ͓͠ͳ͕͖ w 0CTFSWFSύλʔϯ w ֓ཁ w ࣮૷ྫ w ϑϨʔϜϫʔΫͰݟΔ0CTFSWFSύλʔϯ w

    $BLF1)1 w -BSBWFM w ݟൺ΂ͯΈΔ·ͱΊ
  5.  0CTFSWFSύλʔϯ

  6. 0CTFSWFSύλʔϯͱ͸ 0CTFSWFSύλʔϯͱ͸ w ఆٛ w ͋ΔΦϒδΣΫτʢ؂ࢹ͞ΕΔऀʣͷঢ়ଶ͕มԽͨ͠ࡍɺ 
 ͦΕʹґଘ͢Δ͢΂ͯͷΦϒδΣΫτʢ؂ࢹऀʮ0CTFSWFSʯʣʹର͠ ͯࣗಈతʹ௨஌ɺߋ৽͕ߦΘΕΔΑ͏ʹ͢Δ

  7. ྫͰݟ͍ͯ͘ʂ 0CTFSWFSύλʔϯͱ͸ w ʮ৽نϢʔβͷొ࿥ʯΛྫʹ0CTFSWFSύλʔϯΛ࣮૷ͯ͠ΈΔ🍃 w จ຺ʹΑͬͯέʔεόΠέʔε w ͜Ε͕ৗʹϕετʂͱ͍͏ൃ৴Ͱ͸ͳ͍ɾɾɾʂ🐱

  8. ྫʮ৽نϢʔβͷొ࿥ʯ 0CTFSWFSύλʔϯͱ͸ྫ ৽نొ࿥ͷ͋ͱʹ ʮѫࡰϝʔϧͷૹ৴ʯ ʮ͔·΅͜ϝΠπ͔Ͳ͏͔֬ೝʯ ͯ͠ཉ͍͠ʂ ˞͔·΅͜ϝΠπɾɾɾ খాݪࡏॅͰ͋Δ͜ͱ

  9. Ͳ͏΍࣮ͬͯ૷͠Α͏ɺɺ🤔 0CTFSWFSύλʔϯͱ͸ྫ w ௥Ճཁٻ w ѫࡰϝʔϧͷૹ৴ w ͔·΅͜ϝΠπ͔ͷ֬ೝ w .PEFMʹهड़ʁ

    w จ຺ʹؔ܎ͷͳ͍ॲཧ͕ೖΓࠐΜͰ͠·͏ w $POUSPMMFSʹهड़ʁ w ʮ.PEFMͷঢ়ଶͷมԽʯΛ஌Δߏ଄ʹͳΔ
  10. 0CTFSWFSύλʔϯͷద༻ 0CTFSWFSύλʔϯͱ͸0CTFSWFSύλʔϯͷద༻ w .PEFMΛʮ؂ࢹ͞ΕΔऀʯʹ͢Δ w 0CTFSWFSΛ࡞Δʢ࣮ࡍͷॲཧʣ w 0CTFSWFSͷొ࿥ൃՐͷهड़

  11. .PEFMΛʮ؂ࢹ͞ΕΔऀʯʹ͢Δ 0CTFSWFSύλʔϯͱ͸0CTFSWFSύλʔϯͷద༻ w ҎԼΛهड़ w 0CTFSWFSΛొ࿥͢Δ࢓૊Έ w 0CTFSWFSΛൃՐ͢Δ࢓૊Έ w ࠓճ͸ຊʹ฿ͬͯJOUFSGBDFΛ࢖࣮ͬͯ૷

  12. 0CTFSWFSΛ࡞Δʢ࣮ࡍͷॲཧʣ 0CTFSWFSύλʔϯͱ͸0CTFSWFSύλʔϯͷద༻ w 0CTFSWFS w FYFDͱ͍͏ϝιουΛ࣮૷ͤ͞Δ w 8FMDPNF-FUUFS ,BNBCPLP.BUFT$IFDLFS w

    FYFDͷ࣮૷
  13. 0CTFSWFSΛొ࿥ൃՐ͢Δ 0CTFSWFSύλʔϯͱ͸0CTFSWFSύλʔϯͷద༻

  14. 0CTFSWFSύλʔϯΛద༻ͨ͜͠ͱͰ 0CTFSWFSύλʔϯͱ͸0CTFSWFSύλʔϯͷద༻ w ໾ׂͷ෼཭͕Ͱ͖ͨ💘 w ৽ͨͳཁٻ͕དྷͨ࣌΋҆৺💘 w ͋͢ΈΊ΋ 
 ʮ؂ࢹऀʹ௨஌ʯ͸͍ͯ͠Δײ͡🤔

    
 ͕͜͜1VC4VCύλʔϯͱͷҧ͍ͩͳΜ🙆✨
  15.  ϑϨʔϜϫʔΫͰݟΔ 
 0CTFSWFSύλʔϯ

  16. ϑϨʔϜϫʔΫͰݟΔ0CTFSWFSύλʔϯ ϑϨʔϜϫʔΫͰݟΔ0CTFSWFSύλʔϯ w .PEFMͷॲཧʹ߹ΘͤͯԿ͔͠ΒͷΠϕϯτൃՐɺɺɺ w ࠓ·ͰͰܦݧ͔ͨ͠΋ʂʂ🤔 w 0CTFSWFSύλʔϯͰ͖ͪΜͱͳͧΓͳ͕Βཧղ͍ͨ͠ʂ w ઌఔͷྫΛ༻͍ͭͭϑϨʔϜϫʔΫΛݟ͍ͯ͘ʂ

  17. $BLF1)1ͰݟΔ0CTFSWFSύλʔϯ $BLF1)1ͰݟΔ0CTFSWFSύλʔϯ w ίʔϧόοΫͷϥΠϑαΠΫϧ w ΠϕϯτγεςϜ

  18. ίʔϧόοΫͷϥΠϑαΠΫϧ🔮 $BLF1)1ͰݟΔ0CTFSWFSύλʔϯίʔϧόοΫͷϥΠϑαΠΫϧ w 5BCMF͕نఆͷΠϕϯτΛ༻ҙ IUUQTCPPLDBLFQIQPSHKBPSNUBCMFPCKFDUTIUNMUBCMFDBMMCBDLT ˝͜ͷهड़͚ͩͰɺউखʹTBWFͷޙʹݺΜͰ͘ΕΔɾɾɾʂ

  19. ࠓ͔Βͷ͋Β͢͡ $BLF1)1ͰݟΔ0CTFSWFSύλʔϯͲ͏΍ͬͯಈ͍ͯΔʁ w ϑϨʔϜϫʔΫଆͰ༧Ί&WFOUʢ0CTFSWFSʣΛ 
 ొ࿥ͯ͠ൃՐ͍ͤͯ͞Δ🙆 w ͦͷΠϕϯτ͸Ͳ͏΍ͬͯొ࿥͞Ε͍ͯΔʁ w ͦͷΠϕϯτ͸Ͳ͏΍ͬͯൃՐ͍ͯ͠Δʁ

  20. ࠓ͔Βͷ͋Β͢͡ $BLF1)1ͰݟΔ0CTFSWFSύλʔϯͲ͏΍ͬͯಈ͍ͯΔʁ w ొ৔ਓ෺ w 5BCMFʢ؂ࢹ͞ΕΔऀʣ w &WFOUʢ࣮ࡍͷॲཧʣ w &WFOU.BOBHFSʢ؂ࢹ͢Δऀʣ

    w &WFOU%JTQBUDIFS5SBJUͰ؅ཧ͞Ε͍ͯΔ
  21. Πϕϯτ͸Ͳ͏΍ͬͯొ࿥͞Ε͍ͯΔʁ $BLF1)1ͰݟΔ0CTFSWFSύλʔϯͲ͏΍ͬͯಈ͍ͯΔʁ w 6TFST5BCMF͕Ҿ਺

  22. $BLF1)1ͰݟΔ0CTFSWFSύλʔϯͲ͏΍ͬͯಈ͍ͯΔʁ w &WFOU.BOBHFS@BUUBDI4VCTDSJCFS w 5BCMFʹ࣮૷͞Ε͍ͯΔ JNQMFNFOUFE&WFOUTΛ͙Δ͙Δ🌀 w &WFOU-JTUFOFS*OUFSGBDFͷ࣮૷ Πϕϯτ͸Ͳ͏΍ͬͯొ࿥͞Ε͍ͯΔʁ

  23. $BLF1)1ͰݟΔ0CTFSWFSύλʔϯͲ͏΍ͬͯಈ͍ͯΔʁ Πϕϯτ͸Ͳ͏΍ͬͯొ࿥͞Ε͍ͯΔʁ

  24. $BLF1)1ͰݟΔ0CTFSWFSύλʔϯͲ͏΍ͬͯಈ͍ͯΔʁ Πϕϯτ͸Ͳ͏΍ͬͯొ࿥͞Ε͍ͯΔʁ

  25. $BLF1)1ͰݟΔ0CTFSWFSύλʔϯͲ͏΍ͬͯಈ͍ͯΔʁ Πϕϯτ͸Ͳ͏΍ͬͯొ࿥͞Ε͍ͯΔʁ

  26. $BLF1)1ͰݟΔ0CTFSWFSύλʔϯͲ͏΍ͬͯಈ͍ͯΔʁ Πϕϯτ͸Ͳ͏΍ͬͯొ࿥͞Ε͍ͯΔʁ w ·ͱΊΔͱɺɺ w 6TFST5BCMF͕ΠϯελϯεԽ͞Εͨ࣌఺Ͱ w &WFOU.BOBHFS͕ࣗ਎ͷϓϩύςΟ@MJTUFOFSʹ w BGUFS4BWFʢNPSFʣΛDBMMBCMFͱͯ͠ηοτ͍ͯ͠Δ❗

  27. $BLF1)1ͰݟΔ0CTFSWFSύλʔϯͲ͏΍ͬͯಈ͍ͯΔʁ Πϕϯτ͸Ͳ͏΍ͬͯൃՐ͍ͯ͠Δʁ

  28. $BLF1)1ͰݟΔ0CTFSWFSύλʔϯͲ͏΍ͬͯಈ͍ͯΔʁ Πϕϯτ͸Ͳ͏΍ͬͯൃՐ͍ͯ͠Δʁ w &WFOU.BOBHFSEJTQBUDI w UIJTMJTUFOFST w GPSFBDIͰ͙Δ͙Δ@DBMM-JTUFOFS🌀 w &WFOU.BOBHFS@DBMM-JTUFOFS

    w DBMMBCMFΛ࣮ߦ
  29. $BLF1)1ͰݟΔ0CTFSWFSύλʔϯͲ͏΍ͬͯಈ͍ͯΔʁ Πϕϯτ͸Ͳ͏΍ͬͯൃՐ͍ͯ͠Δʁ w &WFOU.BOBHFSEJTQBUDI w UIJTMJTUFOFST w GPSFBDIͰ͙Δ͙Δ@DBMM-JTUFOFS🌀 w &WFOU.BOBHFS@DBMM-JTUFOFS

    w DBMMBCMFΛ࣮ߦ
  30. $BLF1)1ͰݟΔ0CTFSWFSύλʔϯͲ͏΍ͬͯಈ͍ͯΔʁ Πϕϯτ͸Ͳ͏΍ͬͯൃՐ͍ͯ͠Δʁ w ·ͱΊΔͱɺɺ w .PEFMͷTBWF͕ݺ͹ΕΔͱ w ࣮ࡍͷTBWFॲཧͷޙʹ&WFOU.BOBHFSEJTQBUDI͕ൃՐ🔥 w @MJTUFOFSTͷDBMMBCMF͕࣮ߦ͞ΕΔ

  31. $BLF1)1ͰݟΔ0CTFSWFSύλʔϯίʔϧόοΫͷϥΠϑαΠΫϧ Θ͔ͬͨ͜ͱ w &WFOU.BOBHFSͷϓϩύςΟʹ&WFOUΛೖΕΔ 
 &WFOU.BOBHFSͷϓϩύςΟͷ&WFOUΛ࣮ߦ 
 ͱ͍͏γϯϓϧͳ࣮૷✨ w νϣϩͬͱॻ͘Α͏ͳॲཧ

    
 ʢPSจ຺͕ଘࡏ͍͍ͯ͠ॲཧʣͱ͸ 
 ૬ੑΑͦ͞͏🙌 w ิ଍ 
 ࠓճศ্ٓলུͨ͠Օॴʹ 
 ଞͷEJTQBUDI&WFOU΋͍ͨΑ🦥
  32. $BLF1)1ͰݟΔ0CTFSWFSύλʔϯ $BLF1)1ͰݟΔ0CTFSWFSύλʔϯΠϕϯτγεςϜ w ΠϕϯτγεςϜ w IUUQTCPPLDBLFQIQPSHKBDPSFMJCSBSJFTFWFOUTIUNM w ಈ͍ͯΔ࢓૊Έ͸͖ͬ͞ͱಉ͡❗ w ࣗ෼ఆٛͨ͠λΠϛϯάͰొ࿥ɾൃՐ͕Ͱ͖Δ🔧

  33. ΠϕϯτγεςϜΛར༻࣮ͯ͠૷ $BLF1)1ͰݟΔ0CTFSWFSύλʔϯΠϕϯτγεςϜ w &WFOUͱͯ͠ొ࿥ w 6TFS$POUSPMMFSSFHJTUFS w 8FMDPNF-FUUFS&WFOU w ,BNBCPLP.BUFT$IFDLFS&WFOU

    w ͖ͬ͞͸5BCMFࣗ਎Λొ࿥͍͕ͯͨ͠ɺ 
 ࠓճ͸ࣗ෼Ͱఆٛͨ͠&WFOUΛొ࿥👉
  34. $BLF1)1ͰݟΔ0CTFSWFSύλʔϯΠϕϯτγεςϜ w &WFOUͷ࣮૷ʢ࣮ࡍͷॲཧʣ w &WFOU໊ͱ&WFOUͷඥ͚ͮ w 999&WFOUJNQMFNFOUFE&WFOUT w ޷͖ͳ໊લΛ͚ͭͯ0,🙆 ΠϕϯτγεςϜΛར༻࣮ͯ͠૷

  35. $BLF1)1ͰݟΔ0CTFSWFSύλʔϯΠϕϯτγεςϜ w ൃՐͷλΠϛϯάΛఆٛ w 6TFST5BCMFBGUFS4BWF w ʮ.PEFM6TFSTBGUFS4BWFʯ 
 ͱ͍͏ΠϕϯτΛEJTQBUDI w

    ิ଍ 
 BGUFS4BWFʹهड़͍ͯ͠Δ͕ɺ 
 ࣗ෼Ͱఆٛͨ͠ϞσϧͷϝιουͰ΋0, 
 ŜţŦŷŢŴřŦƄŘ🙆 ΠϕϯτγεςϜΛར༻࣮ͯ͠૷
  36. $BLF1)1ͰݟΔ0CTFSWFSύλʔϯ w ίʔϧόοΫͷϥΠϑαΠΫϧ w खܰͳ֦ு🙆 w ΠϕϯτγεςϜ w ΑΓґଘੑͷ෼཭͕Ͱ͖Δײͩ͡🙌 w

    ʮ؂ࢹ͢Δऀʯͱʮ؂ࢹ͞ΕΔऀʯͱ ʮൃՐ͢ΔॲཧʯΛ͔ͬ͠Γ෼཭ શମͷ·ͱΊ
  37. -BSBWFMͰݟΔ0CTFSWFSύλʔϯ -BSBWFMͰݟΔ0CTFSWFSύλʔϯ w 0CTFSWFS w &MPRVFOUͷCPPUʹΑΔ֦ு w &WFOU w ʮ͞·͟·ͳΠϕϯτʯΛ0CTFSWFSԽͰ͖Δ

  38. 0CTFSWFSΛར༻࣮ͯ͠૷🔮 -BSBWFMͰݟΔ0CTFSWFSύλʔϯ0CTFSWFS ˝࣮ࡍͷهड़ͨͪ IUUQTMBSBWFMDPNEPDTYFMPRVFOUFWFOUT w نఆͷΠϕϯτ͕༻ҙ͞Ε͍ͯΔ

  39. ࠓ͔Βͷ͋Β͢͡ -BSBWFMͰݟΔ0CTFSWFSύλʔϯͲ͏΍ͬͯಈ͍͍ͯΔʁ w Ͳ͏΍ͬͯొ࿥͞Ε͍ͯΔʁ w Ͳ͏΍ͬͯൃՐ͍ͯ͠Δʁ w ࣮͸ɾɾɾߏ଄ࣗମ͸DBLF1)1ͱΊͬͪΐࣅͯΔ✨

  40. ࠓ͔Βͷ͋Β͢͡ -BSBWFMͰݟΔ0CTFSWFSύλʔϯͲ͏΍ͬͯಈ͍͍ͯΔʁ w ొ৔ਓ෺ w .PEFMʢ؂ࢹ͞ΕΔऀʣ w 6TFS0CTFSWFSʢ࣮ࡍͷॲཧʣ w %JTQBUDIFSʢ؂ࢹ͢Δऀʣ

  41. Ͳ͏΍ͬͯొ࿥͞Ε͍ͯΔʁ -BSBWFMͰݟΔ0CTFSWFSύλʔϯͲ͏΍ͬͯಈ͍͍ͯΔʁ w &WFOU4FSWJDF1SPWJEFSCPPU w ؂ࢹͷ։࢝🙆 w ͜ͷεϥΠυͰ͸͋Μ·Γ۷Γ·ͤΜ

  42. Ͳ͏΍ͬͯొ࿥͞Ε͍ͯΔʁ -BSBWFMͰݟΔ0CTFSWFSύλʔϯͲ͏΍ͬͯಈ͍͍ͯΔʁ w )BT&WFOUTPCTFSWF w )BT&WFOUTSFHJTUFS0CTFSWFS w HFU0CTFSWBCMF&WFOUTΛά ϧάϧ🌀

  43. Ͳ͏΍ͬͯొ࿥͞Ε͍ͯΔʁ -BSBWFMͰݟΔ0CTFSWFSύλʔϯͲ͏΍ͬͯಈ͍͍ͯΔʁ

  44. Ͳ͏΍ͬͯొ࿥͞Ε͍ͯΔʁ -BSBWFMͰݟΔ0CTFSWFSύλʔϯͲ͏΍ͬͯಈ͍͍ͯΔʁ w )BT&WFOUTSFHJTUFS.PEFM&WFOU w 6TFS0CTFSWFS͸ʮDSFBUFEʯΛ 
 ࣮૷͍ͯ͠Δ🙆 w )BT&WFOUTSFHJTUFS.PEFM&WFOU

    w EJTQBUDIFSMJTUFO
  45. Ͳ͏΍ͬͯొ࿥͞Ε͍ͯΔʁ -BSBWFMͰݟΔ0CTFSWFSύλʔϯͲ͏΍ͬͯಈ͍͍ͯΔʁ w %JTQBUDIFSMJTUFO w ࣗ਎ͷϓϩύςΟUIJTMJTUFOFSTʹ MJTUFOFS DBMMBCMF Λొ࿥ w

    ͖ͬ͞ͷߏ଄ͱಉ͡ɾɾɾʂ🙆
  46. Ͳ͏΍ͬͯొ࿥͞Ε͍ͯΔʁ -BSBWFMͰݟΔ0CTFSWFSύλʔϯͲ͏΍ͬͯಈ͍͍ͯΔʁ w ·ͱΊΔͱɺɺ w &WFOU4FSWJDF1SPWJEFSͰొ࿥ॲཧΛهड़ w %JTQBUDIFSͷϓϩύςΟMJTUFOFSTʹ w DSFBUFE

    NPSF ͕DBMMBCMFͱͯ͠ηοτ͞ΕΔ❗
  47. Ͳ͏΍ͬͯൃՐ͍ͯ͠Δʁ -BSBWFMͰݟΔ0CTFSWFSύλʔϯͲ͏΍ͬͯಈ͍͍ͯΔʁ

  48. Ͳ͏΍ͬͯൃՐ͍ͯ͠Δʁ -BSBWFMͰݟΔ0CTFSWFSύλʔϯͲ͏΍ͬͯಈ͍͍ͯΔʁ w %JTQBUDIFSHFU-JTUFOFST w ઌ΄Ͳొ࿥ͨ͠ 
 MJTUFOFSTͰά ϧάϧ🌀 w

    MJTUFOFSʹ͸DBMMBCMF͕ೖ͍ͬͯΔ ͷͰ࣮ߦ͞ΕΔ
  49. Ͳ͏΍ͬͯൃՐ͍ͯ͠Δʁ -BSBWFMͰݟΔ0CTFSWFSύλʔϯͲ͏΍ͬͯಈ͍͍ͯΔʁ w %JTQBUDIFSHFU-JTUFOFST w ઌ΄Ͳొ࿥ͨ͠ 
 MJTUFOFSTͰά ϧάϧ🌀 w

    MJTUFOFSʹ͸DBMMBCMF͕ೖ͍ͬͯΔ ͷͰ࣮ߦ͞ΕΔ
  50. Ͳ͏΍ͬͯൃՐ͍ͯ͠Δʁ -BSBWFMͰݟΔ0CTFSWFSύλʔϯͲ͏΍ͬͯಈ͍͍ͯΔʁ w ·ͱΊΔͱɺɺ w .PEFMͷTBWFϝιουΛݺͿͱ w %JTQBUDIFSEJTQBUDI͕ಈ͍ͯ w MJTUFOFSTͷDBMMBCMF͕࣮ߦ͞ΕΔ❗

  51. &MPRVFOUͷCPPUʹΑΔ֦ு -BSBWFMͰݟΔ0CTFSWFSύλʔϯ&MPRVFOUͷCPPUʹΑΔ֦ு w .PEFMʹCPPUΛఆٛ w ΠϕϯτΛΫϩʔδϟͱͯ͠ొ࿥ w νϣϩͬPSจ຺͕ؔ܎͋Δ࣌͸ 
 ͜ΕͰ֦ுͰ͖ͦ͏🙌

    w ิ଍ 
 CPPUCPPUJOHCPPUFE͕͋Γͦ͏ʜ👀 IUUQTMBSBWFMDPNEPDTYFMPRVFOUFWFOUT
  52. $BLF1)1ͰݟΔ0CTFSWFSύλʔϯ w &MPRVFOUͷCPPUʹΑΔ֦ுɺखܰ🙆 w 0CTFSWFS w $POUSPMMFS.PEFM͔Βશ͘࢕͑ͳ͘ͳ Δఔ౓ʹ͸෼཭͞Ε͍ͯΔ w طଘͰ༻ҙ͞Ε͍ͯΔΠϕϯτҎ֎ʹ

    
 ࣗ෼Ͱੜ΍͢͜ͱ΋Ͱ͖Δ✨ w ଟํ໘Ͱ֦ுੑ͕͋ͬͯεϯήɾɾɾ શମͷ·ͱΊ
  53.  ݟൺ΂ͯΈΔ·ͱΊ

  54. ࣅ͍ͯΔͳʙͱࢥͬͨͱ͜Ζ🌸 ݟൺ΂ͯΈΔ·ͱΊ w ʮΠϕϯτͷϥΠϑαΠΫϧʯͱʮ&MPRVFOUͷCPPUʹΑΔ֦ுʯ w શମͷઃܭ w 0CTFSWFSͷొ࿥ɾൃՐͷॲཧͷྲྀΕ w ʮ؂ࢹ͞ΕΔʯʮ؂ࢹ͢Δʯʮ࣮ࡍͷॲཧʯͷ෼཭ߏ଄

  55. ৭͕ग़͍ͯΔͳʙͱࢥͬͨͱ͜Ζ🌈 ݟൺ΂ͯΈΔ·ͱΊ w ʮ࣮ࡍͷॲཧʯ෦෼ͷଋറ౓ w $BLF1)1ͷํ͸&WFOU*OUFSGBDF͕ఏڙ͞Ε͍͕ͯͨɺ 
 -BSBWFM͸ࣗ༝ʹهड़Ͱ͖Δײͩͬͨ͡ w ʮ࣮ࡍͷॲཧʯ෦෼ͷӅΕ౓

    w $BLF1)1͸ొ࿥ॲཧ͕ݟ͍͑ͯͨ👓͚Ͳɺ 
 -BSBWFM͸ຊ౰ʹݟ͑ͳ͍ɾɾɾʂ🙈
  56. ͋͢ΈΊ΋ ݟൺ΂ͯΈΔ·ͱΊ w ༝ॹਖ਼͖͠ʮ0CTFSWFSύλʔϯʯ͕͜Μͳʹ਎ۙʹ͍ͨͳΜͯ w ͔͠΋ීஈ͸ύλʔϯΛҙࣝ͠ͳ͍Ͱ΋࢖͑ΔΑ͏ʹͳ͍ͬͯΔɾɾɾʂ w جຊతͳ࣮૷ํ਑͸ಉ͡ํ޲޲͍ͯΔͳʙ🙆 w ͜ͷล֦ு͍ͨ͠ƃũƄŢŔʂͱ͍͏ͱ͜Ζʹɾɾɾଘࡏʢ͍ʣΔɾɾɾʂ

    w ϑϨʔϜϫʔΫͷத਎Λ೷͍ͯΈͯຐ๏ͷཪଆΛ֞ؒݟͨײ͡👀
  57. ݟͯ͘ΕͯŗžŜƄŪŤƃŝœŖ😘 5SBDL"͸ͦͷ··ʂ📺 -5΋ΑΖͪ͘🐱