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

Fat Modelに対処する
6つのリファクタリングパターン

4edb44c4292fa5bd1cbe463d0e80ecbd?s=47 Kaoru Hotate
September 15, 2019

Fat Modelに対処する
6つのリファクタリングパターン

2019/09/15 大阪Ruby会議02 登壇資料 https://regional.rubykaigi.org/osaka02/
Fat Modelに対処する
6つのリファクタリングパターン

4edb44c4292fa5bd1cbe463d0e80ecbd?s=128

Kaoru Hotate

September 15, 2019
Tweet

Transcript

  1. 'BU.PEFMʹରॲ͢Δ ͭͷϦϑΝΫλϦϯάύλʔϯ ,BPSV)PUBUF!QVSVOLBPSV .FE1FFS3VCZPO3BJMT&OHJOFFS େࡕ3VCZ,BJHJ PTSL

  2. อཱ֜ ,BPSV)PUBUF  !QVSVOLBPSV  ੜ·ΕͯॳΊͯ େࡕʹདྷ·ͨ͠ʂ ࣗݾ঺հ

  3. 'BU.PEFMͱ͸ DMBTT"SUJDMF"QQMJDBUJPO3FDPSE ͨ͘͞Μͷؔ࿈෇͚ IBT@NBOZDPNNFOUT CFMPOHT@UPDBUFHPSZ  ͨ͘͞Μͷείʔϓ TDPQFQVCMJTIFE \ ^

     ͨ͘͞Μͷϝιου EFGQVCMJTIFE  FOE FOE
  4. "QQMJDBUJPO3FDPSEΛܧঝͨ͠Ϋϥε͕ ศརϝιουूʹͳΔ 'BU.PEFMͰਏ͍͜ͱ मਖ਼ൣғͷಛఆʹ͕͔͔࣌ؒΔ ςετ͕ॻ͖ͮΒ͍ ͓·͡ͳ͍͕ॻ͔Ε͍ͯΔ  SVCPDPQEJTBCMF

  5. 'BU.PEFMʹͳͬͯ͠·͏ ٕज़తͳ໰୊ ࣌ؒɾ޻਺ͷ໰୊ 'BU.PEFMͰ΋Α͍ :"(/*ɾ,*44 'BU$POUSPMMFSʹൺ΂ͨΒ༏ઌ౓͕௿͘ͳΔ 'BU.PEFM͕ى͖Δɾ์ஔ͞ΕΔཧ༝

  6. 'BU.PEFMʹͳͬͯ͠·͏ ٕज़తͳ໰୊ ࣌ؒɾ޻਺ͷ໰୊ ύλʔϯԽɾٕज़ྗͷ޲্ 'BU.PEFMͰ΋Α͍ :"(/*ɾ,*44 'BU$POUSPMMFSʹൺ΂ͨΒ༏ઌ౓͕௿͘ͳΔ ϦϑΝΫλϦϯάͷश׳ 'BU.PEFMΛى͜͞ͳ͍ͨΊʹ͸ʁ

  7.  ໰୊ΛఆܕԽͯ͠ଊ͑ΒΕΔ  ղܾࡦΛ٬؍తʹൺֱͰ͖Δ  ϝϯόʔͷڞ௨ݴޠͱͳΔ ύλʔϯԽͷϝϦοτ ʮJ04ΞϓϦઃܭύλʔϯʯୈষઃܭ͢Δͱ͍͏͜ͱΑΓ

  8.  ϋϯϚʔఝප  ϋϯϚʔͷ࢖͍ํΛ֮͑ͨΒɺશ෦ఝʹݟ͑Δ ύλʔϯԽͷσϝϦοτɾ஫ҙ఺

  9. ۜͷ஄ؙͰ͸ͳ͍ ଞͷύλʔϯ΋͋Δ͸ͣ ࠙਌ձ΍5XJUUFSͰڞ༗ͯ͠΋Β͑Δͱخ͍͠ʂ ࠓ೔࿩͢͜ͱ͸ਖ਼ղͰ͸ͳ͍Ͱ͢

  10. ύλʔϯԽͷલʹɾɾɾ

  11. 'BU.PEFM΁ͷҙࣝͷ౷Ұ νʔϜͰཧ࿦ʹ͍ͭͯษڧ ໋໊ϧʔϧͷ࡞੒ ύλʔϯԽͷલʹνʔϜͰ΍ͬͨ͜ͱ

  12. όάΛੜΈ΍͍͢ɾςετ͕ॻ͖ͮΒ͍৔߹ͷΈղফ͢Δ ʢඞཁ͕ͳ͚Ε͹ϦϑΝΫλϦϯάΛ͠ͳ͍ʣ 'BU.PEFM΁ͷҙࣝͷ౷Ұ طଘͷίʔυʹରͯ͠मਖ਼͢Δ৔߹͸ ϦϑΝΫλϦϯά΋ҰॹʹͰ͖ͳ͍͔ߟ͑ͯݟੵ΋Γ͢Δ

  13. νʔϜͰཧ࿦ʹ͍ͭͯษڧ ΦϒδΣΫτࢦ޲ઃܭʹ͍ͭͯ ॻ੶ΛಡΜͰཧղΛਂΊΔ

  14. ॲཧΛ੾Γग़͢͜ͱʹͳΔΫϥεΛ෼ྨ͠ɺ ಛఆͷ໋໊ɾωʔϜεϖʔεʹͳΔΑ͏ϧʔϧΛ࡞੒ ໋໊ϧʔϧͷ࡞੒ αʔϏεͷํ޲ʹΑͬͯมΘΔՄೳੑ΋͋ΔͨΊɺ ԾͰܾΊΔ͘Β͍ͷҐஔ͚ͮ

  15. $PMMFDUPS0CKFDUΛ࢖͏ 7BMVF0CKFDUΛ࢖͏ 1PMJDZ0CKFDUΛ࢖͏ 2VFSZ#VJMEFSΛ࢖͏ 7BMJEBUPS$MBTTΛ࢖͏ ΦϒδΣΫτΛ૿΍ͯ͠ΦϒδΣΫτ಺ͷ෼ذΛݮΒ͢ ϦϑΝΫλϦϯάύλʔϯ

  16. $PMMFDUPS0CKFDUΛ࢖͏ 1

  17. ϦϑΝΫλϦϯάલͷίʔυྫʢهࣄͷҰཡը໘ʣ $PMMFDUPS0CKFDU DMBTT"SUJDMFT$POUSPMMFS"QQMJDBUJPO$POUSPMMFS EFGJOEFY !BSUJDMFT"SUJDMFQVCMJTIFE   QBHF QBSBNT<QBHF> QFS

      FOE FOE GJMUFSFE@CZ@DBUFHPSZ QBSBNT<DBUFHPSZ> PSEFSFE@CZ QBSBNT<PSEFS>
  18. DMBTT"SUJDMF"QQMJDBUJPO3FDPSE CFMPOHT@UPDBUFHPSZ TDPQFGJMUFSFE@CZ@DBUFHPSZ  DBUFHPSZ \ JGDBUFHPSZ KPJOT DBUFHPSZ NFSHF

    $BUFHPSZXIFSF OBNFDBUFHPSZ  FOE ^ FOE ϦϑΝΫλϦϯάલͷίʔυྫʢهࣄΫϥεʣ $PMMFDUPS0CKFDU
  19. ݱঢ়ͷ໰୊఺ $PMMFDUPS0CKFDU ݕࡧ৚͕݅૿͑Δͨͼʹ.PEFMʹTDPQFΛ௥Ճ ෳ਺ͷը໘͔Βผͷ৚݅ʹΑΔݕࡧ͕͋Δ৔߹ɺ ͭͷ.PEFMʹશͯهࡌ͢Δ ଠΓ΍͍͢ମ࣭Ͱ͢

  20. $PMMFDUPS0CKFDUΛ࢖͏ 1

  21. ϦϑΝΫλϦϯάલ $PMMFDUPS0CKFDU "SUJDMFT$POUSPMMFS "SUJDMF "SUJDMFT$POUSPMMFS "SUJDMF'JMUFSJOH "SUJDMFT$PMMFDUPS "SUJDMF0SEFSJOH ϦϑΝΫλϦϯάޙ ϑΟϧλϦϯάΛ୲౰

    ιʔτΛ୲౰
  22. "SUJDMFT$POUSPMMFS"SUJDMFT$PMMFDUPS"SUJDMF'JMUFSJOH $PMMFDUPS0CKFDU DMBTT"SUJDMFT$POUSPMMFS"QQMJDBUJPO$POUSPMMFS EFGJOEFY !BSUJDMFT"SUJDMFT$PMMFDUPSOFX QBSBNTQBSBNT DBMM FOE FOE

  23. DMBTT"SUJDMFT$PMMFDUPS EFGJOJUJBMJ[F QBSBNT  !QBSBNTQBSBNT FOE  EFGDBMM BSUJDMFT"SUJDMFQVCMJTIFE BSUJDMFTGJMUFSJOHDBMM

    BSUJDMFT  BSUJDMFTPSEFSJOHDBMM BSUJDMFT  BSUJDMFTQBHF QBSBNT<QBHF> QFS   FOE "SUJDMFT$POUSPMMFS"SUJDMFT$PMMFDUPS"SUJDMF'JMUFSJOH $PMMFDUPS0CKFDU QSJWBUF  BUUS@SFBEFSQBSBNT  EFGGJMUFSJOH "SUJDMF'JMUFSJOHOFX  QBSBNTQFSNJU DBUFHPSZ    FOE
  24. DMBTT"SUJDMF'JMUFSJOH JODMVEF"DUJWF.PEFM.PEFM BUUS@BDDFTTPSDBUFHPSZ WBMJEBUFTDBUFHPSZ TPNFUIJOH@SVMF  EFGDBMM SFTPVSDFT  SFUVSOSFTPVSDFTJGDBUFHPSZCMBOL

      KPJOT DBUFHPSZ NFSHF $BUFHPSZXIFSF OBNFDBUFHPSZ  FOE FOE "SUJDMFT$POUSPMMFS"SUJDMFT$PMMFDUPS"SUJDMF'JMUFSJOH $PMMFDUPS0CKFDU
  25. վળ݁Ռ $PMMFDUPS0CKFDU ݕࡧ৚͕݅૿͑ͯ΋ݕࡧ৚݅Λ؅ཧ͢Δ 'JMUFSJOHΫϥεʹίʔυΛ૿΍͢ 4Λ࣮ݱ ෳ਺ͷը໘͔Βผͷ৚݅ʹΑΔݕࡧ͕͋Δ৔߹ɺ ͦΕͧΕຖͷը໘༻ͷ$PMMFDUPSɾ'JMUFSJOHΫϥεʹ࣮૷ *Λ࣮ݱ

  26. 7BMVF0CKFDUΛ࢖͏ 2

  27. DMBTT"DDPVOU"QQMJDBUJPO3FDPSE EFGUFM <UFM UFM UFM>KPJO   FOE  EFGUFM@XJUI@IZQIFO

    <UFM UFM UFM>KPJO   FOE  EFGUFM@XJUI@IZQIFO@DPOWFSUFE@GVMM@XJEUI <UFM UFM UFM>KPJO  US  ̌̕  FOE FOE ϦϑΝΫλϦϯάલͷίʔυྫ 7BMVF0CKFDU
  28. ݱঢ়ͷ໰୊఺ 7BMVF0CKFDU UFM͸ɺ൚༻తʹ࢖ΘΕΔ಺༰ͳͷͰɺՕॴʹ·ͱΊ͍ͨ ݱ࣮ੈքͰ͸ɺGBY΋ඞཁͩͬͨ

  29. मਖ਼ํ๏ 7BMVF0CKFDU DPODFSOʹ੾Γग़͢ IFMQFSʹ੾Γग़͢ NPEFMʹ੾Γग़͢

  30. IFMQFSΑΓ͸NPEFMʹ੾Γग़͍ͨ͠ 7BMVF0CKFDU DMBTT"DDPVOU"QQMJDBUJPO3FDPSE 7"-*%@5&-@-&/(5)< > WBMJEBUFGPSNBU@UFM@OVNCFS  EFGGPSNBU@UFM@OVNCFS UFM<UFM UFM

    UFM>KPJO   7"-*%@5&-@-&/(5)JODMVEF UFMMFOHUI FOE FOE
  31. 7BMVF0CKFDUΛ࢖͏ 2

  32. DMBTT5FM BUUS@BDDFTTPSOVNCFS  EFGJOJUJBMJ[F BSFB@DPEF DJUZ@DPEF EJSFDUPSZ@DPEF  !OVNCFS<BSFB@DPEF DJUZ@DPEF

    EJSFDUPSZ@DPEF>KPJO   FOE FOE ి࿩൪߸ΫϥεΛ࡞੒ 7BMVF0CKFDU
  33. DMBTT"DDPVOU"QQMJDBUJPO3FDPSE DPNQPTFE@PGUFM  DMBTT@OBNF5FM  NBQQJOH< <UFM DJUZ@DPEF> <UFM BSFB@DPEF>

    <bUFM EJSFDUPSZ@DPEF> > WBMJEBUFGPSNBU@UFM@OVNCFS  EFGGPSNBU@UFM@OVNCFS 7"-*%@5&-@-&/(5)JODMVEF UFMOVNCFSMFOHUI FOE FOE 7BMVF0CKFDU DPNQPTFE@PGΛ࢖ͬͯ7BMVF0CKFDUΛݺͼग़͢
  34. DPNQPTFE@PGUFM DMBTT@OBNF5FM NBQQJOH<<UFM DJUZ@DPEF>ʜ> EFGUFM 5FMOFX DJUZ@DPEFUFM ʜ  FOE

    7BMVF0CKFDU DPNQPTFE@PGͱ͸
  35. 1PMJDZ0CKFDUΛ࢖͏ 3

  36. DMBTT"SUJDMF"QQMJDBUJPO3FDPSE EFGFEJUJOH  EFMFUFE  QVCMJTIFE@BUCMBOL ccQVCMJTIFE@BU%BUF5JNFOPX  FOE 

    EFGXBJU@SFWJFX  EFMFUFEQVCMJTIFE@BUQVCMJTIFE@BU%BUF5JNFOPX SFWJFXFE FOE  EFGQVCMJTIFE  FOE ϦϑΝΫλϦϯάલͷίʔυྫ 1PMJDZ0CKFDU
  37. ݱঢ়ͷ໰୊఺ 1PMJDZ0CKFDU ϏδωεϩδοΫ͕"3Λܧঝͨ͠Ϋϥεʹॻ͔Ε͍ͯΔ ݟ௨͕͠ѱ͘ͳΔ

  38. 1PMJDZ0CKFDUΛ࢖͏ 3

  39. DMBTT"SUJDMF1PMJDZ EFGJOJUJBMJ[F BSUJDMF  !BSUJDMFBSUJDMF FOE  EFGFEJUJOH  !BSUJDMFEFMFUFE

     !BSUJDMFQVCMJTIFE@BUCMBOL cc !BSUJDMFQVCMJTIFE@BU%BUF5JNFOPX  FOE FOE ෳ਺Ϩίʔυͷ7BMJEBUJPO΋੾Γग़ͤΔ 1PMJDZ0CKFDU
  40. 2VFSZ#VJMEFSʹ੾Γग़͢ 4

  41. DMBTT"SUJDMF"QQMJDBUJPO3FDPSE TDPQFTDPQF@CZ@NBOZ@DPOEJUJPO@DPMVNOT  QBSBNT \ XIFSF ৚݅"  PS 

    XIFSF ৚݅#  XIFSFOPU ৚݅$    ^ FOE ϦϑΝΫλϦϯάલͷίʔυྫ 2VFSZ#VJMEFS
  42. ݱঢ়ͷ໰୊఺ 2VFSZ#VJMEFS TDPQFͷݟ௨͕͠ѱ͍ TDPQFͷதͰɺ3FMBUJPO$IBJO͍ͯ͠ΔՕॴΛ ৼΔ෣͍͝ͱʹॲཧΛ෼͚͍ͨ  ผͷTDPQFʹ੾Γग़͢ͱɺେྔͷTDPQF͕Ͱ͖Δ

  43. 2VFSZ#VJMEFSʹ੾Γग़͢ 4

  44. DMBTT"SUJDMF)PHF2VFSZ#VJMEFS EFGJOJUJBMJ[F QBSBNT  !QBSBNTQBSBNT FOE  EFGDBMM GPS@DPOEJUJPO@B PS

    GPS@DPOEJUJPO@C@D  FOE FOE "SUJDMF"SUJDMF)PHF2VFSZ#VJMEFS 2VFSZ#VJMEFS QSJWBUF  EFGGPS@DPOEJUJPO@B "SUJDMFXIFSF ৚݅"  FOE  EFGGPS@DPOEJUJPO@C@D "SUJDMFXIFSF ৚݅#  XIFSFOPU ৚݅$  FOE ͜͜͸ద੾ͳϝιου໊ʹ͢Δ
  45. DMBTT"SUJDMF"QQMJDBUJPO3FDPSE TDPQFTDPQF@CZ@NBOZ@DPOEJUJPO@DPMVNOT  QBSBNT \ "SUJDMF)PHF2VFSZ#VJMEFSOFX QBSBNTQBSBNT DBMM ^ FOE

    "SUJDMF"SUJDMF)PHF2VFSZ#VJMEFS 2VFSZ#VJMEFS
  46. 7BMJEBUPS$MBTTΛ࢖͏ 5

  47. DMBTT6TFS"QQMJDBUJPO3FDPSE WBMJEBUFLBOB@OBNF@TIPVME@POMZ@LBUBLBOB  QSJWBUF  EFGLBOB@OBNF@TIPVME@POMZ@LBUBLBOB SFUVSOJGLBOB@OBNFNBUDI ,"5","/"@3&(&9 FSSPSTBEE LBOB@OBNF

    ͕ෆਖ਼ͳܗࣜͰ͢  FOE FOE ϦϑΝΫλϦϯάલͷίʔυྫ 7BMJEBUPS$MBTT
  48. ݱঢ়ͷ໰୊఺ 7BMJEBUPS$MBTT ֤Ϋϥεͷதʹॻ͘ͱɺڞ௨ԽͰ͖ͳ͍ 7BMJEBUJPOࣗମͷॲཧ͕ଟ͍ͱɺ .PEFMͷݟ௨͕͠ѱ͘ͳΔ

  49. 7BMJEBUPS$MBTTΛ࢖͏ 5

  50. DMBTT6TFS"QQMJDBUJPO3FDPSE WBMJEBUFTLBOB@OBNF LBUBLBOBUSVF FOE  DMBTT,BUBLBOB7BMJEBUPS"DUJWF.PEFM&BDI7BMJEBUPS EFGWBMJEBUF@FBDI SFDPSE BUUSJCVUF WBMVF

     SFUVSOJGWBMVFNBUDI ,"5","/"@3&(&9 SFDPSEFSSPSTBEE LBOB@OBNF ͕ෆਖ਼ͳܗࣜͰ͢  FOE FOE ,BUBLBOB7BMJEBUPSΫϥεʹ੾Γग़͢ 7BMJEBUPS$MBTT
  51. DMBTT6TFS"QQMJDBUJPO3FDPSE WBMJEBUFT@XJUI%BUF7BMJEBUPS FOE  DMBTT%BUF7BMJEBUPS"DUJWF.PEFM7BMJEBUPS EFGWBMJEBUF SFDPSE  EBUF%BUFQBSTF SFDPSEZFBS

    SFDPSENPOUI SFDPSEEBZ  SFTDVF"SHVNFOU&SSPS SFDPSEFSSPSTBEE CBTF ͕ਖ਼͋͘͠Γ·ͤΜ  FOE FOE ෳ਺ଐੑͷ7BMJEBUJPO΋੾Γग़ͤΔ 7BMJEBUPS$MBTT
  52. ΦϒδΣΫτΛ૿΍ͯ͠ ΦϒδΣΫτ಺ͷ෼ذΛݮΒ͢ 6

  53. DMBTT"SUJDMF$SFBUPS FOVNCZ<VTFS BENJO>  EFGTBWF QBSBNT CZCZ  BSUJDMF"SUJDMFOFX QBSBNT

     BSUJDMFTBWF Ϣʔβʔ͕࡞੒ͨ͠৔߹ɺطಡऀ؅ཧςʔϒϧʹ*/4&35͢Δ BSUJDMFWJFXFSTDSFBUF VTFSBSUJDMFPXOFS JGCZVTFS  FOE FOE ϦϑΝΫλϦϯάલͷίʔυྫ ΦϒδΣΫτΛ૿΍ͯ͠෼ذΛݮΒ͢
  54. ݱঢ়ͷ໰୊఺ ΦϒδΣΫτΛ૿΍ͯ͠෼ذΛݮΒ͢ FOVNCZ\VTFS BENJO^ͷ߲໨͕૿͑ͨ࣌ʹɺ ʮ˓˓ͷ͚࣮࣌ͩߦʯͷ෼ذ͕૿͑Δ ͦͷ෼ςετ΋૿͑Δ

  55. ΦϒδΣΫτΛ૿΍ͯ͠ ΦϒδΣΫτ಺ͷ෼ذΛݮΒ͢ 6

  56. DMBTT"SUJDMF$SFBUPS FOVNCZ<VTFS BENJO>  EFGTBWF QBSBNT CZCZ  BSUJDMF"SUJDMFOFX QBSBNT

     BSUJDMFTBWF Ϣʔβʔ͕࡞੒ͨ͠৔߹ɺطಡऀ؅ཧςʔϒϧʹ*/4&35͢Δ BSUJDMFWJFXFSTDSFBUF VTFSBSUJDMFPXOFS JGCZVTFS  FOE FOE ϦϑΝΫλϦϯάલͷίʔυྫ ΦϒδΣΫτΛ૿΍ͯ͠෼ذΛݮΒ͢ FOVNͷΞΠςϜ਺͚ͩ ΫϥεΛ࡞Δ
  57. DMBTT"SUJDMF$SFBUPS#Z6TFS EFGTBWF QBSBNT  TBWF@CZ@VTFSͷ಺༰͕ೖΔ FOE FOE 6TFS͕هࣄΛ࡞੒͢Δ$SFBUPSΫϥε ΦϒδΣΫτΛ૿΍ͯ͠෼ذΛݮΒ͢

  58. मਖ਼݁Ռ ΦϒδΣΫτΛ૿΍ͯ͠෼ذΛݮΒ͢ ʮ˓˓ͷ͚࣮࣌ͩߦʯͷ෼ذ͕૿͑Δ ͦͷ෼ςετ΋૿͑Δ  ʮ˓˓ͷ͚࣮࣌ͩߦʯͷ˓˓͝ͱʹΫϥε͕࡞ΒΕΔ ෼ذ͕গͳ͍ͷͰɺςετίʔυͷ਺΋ݮΔ 40-*%ݪଇͷ4ͱ0Λ࣮ݱ

  59. ·ͱΊʢ͕࣌ؒ͋Ε͹ɾɾɾʣ

  60. w ύλʔϯԽ͢ΔϝϦοτ w ύλʔϯͷదԠલʹνʔϜͰ΍Δ΂͖͜ͱ w ύλʔϯͷ঺հ ·ͱΊ

  61.  ໰୊ΛఆܕԽͯ͠ଊ͑ΒΕΔ  ղܾࡦΛ٬؍తʹൺֱͰ͖Δ  ϝϯόʔͷڞ௨ݴޠͱͳΔ ύλʔϯԽͷϝϦοτ ʮJ04ΞϓϦઃܭύλʔϯʯୈষઃܭ͢Δͱ͍͏͜ͱΑΓ

  62. 'BU.PEFM΁ͷҙࣝͷ౷Ұ νʔϜͰཧ࿦ʹ͍ͭͯษڧ ໋໊ϧʔϧͷ࡞੒ ύλʔϯͷదԠલʹνʔϜͰ΍Δ΂͖͜ͱ

  63. $PMMFDUPS0CKFDUΛ࢖͏ 7BMVF0CKFDUΛ࢖͏ 1PMJDZ0CKFDUΛ࢖͏ 2VFSZ#VJMEFSΛ࢖͏ 7BMJEBUPS$MBTTΛ࢖͏ ΦϒδΣΫτΛ૿΍ͯ͠ΦϒδΣΫτ಺ͷ෼ذΛݮΒ͢ ϦϑΝΫλϦϯάύλʔϯ

  64. w 1BUUFSOTUP3FGBDUPS'BU"DUJWF3FDPSE.PEFMT IUUQTDPEFDMJNBUFDPNCMPHXBZTUPEFDPNQPTFGBUBDUJWFSFDPSE NPEFMT w 3BJMTͷϑΝοτϞσϧ໰୊ʹରॲ͢ΔલʹಡΜͰ΄͍͠هࣄ IUUQTRJJUBDPNLMSJVUTBJUFNTEGDDBG w 3BJMTͰ΍ͬͯ͠·͍͕ͪͳอकੑΛԼ͛ͯ͠·͏ίʔυͱͦͷղܾࡦ IUUQTRJJUBDPNTIVOIJLJUBJUFNTGECEDFDGD

    w J04ΞϓϦઃܭύλʔϯೖ໳ IUUQTQFBLTDDCPPLTJ04@BSDIJUFDUVSF w 4BOEJ.FU[ΦϒδΣΫτࢦ޲ઃܭ࣮ફΨΠυd3VCZͰΘ͔ΔਐԽ͚ͭͮ͠Δॊೈ ͳΞϓϦέʔγϣϯͷҭͯํ w 3PCFSU$.BSUJO$MFBO"SDIJUFDUVSFୡਓʹֶͿιϑτ΢ΣΞͷߏ଄ͱઃܭ ࢀߟจݙ
  65. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠