Middleware Configuration as Code

Middleware Configuration as Code

connect infra engineers with app engineers

2b692bd83f4418103142a053ecf5ff59?s=128

MATSUMOTO Ryosuke

August 08, 2015
Tweet

Transcript

  1. DPOOFDUJOGSBFOHJOFFSTXJUIBQQFOHJOFFST GMO Pepabo, Inc. ٕज़ج൫νʔϜ ΞυόϯευγχΞ MATSUMOTO, Ryosuke @matsumotory 2015/08/08

    ୈ68ճ Rubyؔ੢ ษڧձ .JEEMFXBSF $POpHVSBUJPOBT$PEF
  2. ࣗݾ঺հ  দຊ྄հ!NBUTVNPUPSZ  ٕज़ج൫νʔϜΞυόϯευγχΞ  ෱Ԭࢧࣾ೥݄ೖࣾ  ओʹձࣾશମͷΠϯλʔωοτج൫ٕज़Λ୲౰ 

    044׆ಈ΍ࣾ֎޲͚ͷٕज़ൃදͳͲ  IUUQSFTFBSDINBUTVNPUPSKQ 
  3. ϖύϘͷݚڀɾ։ൃ୲౰ IUUQICNBUTVNPUPSKQFOUSZ

  4. None
  5. ࠷ۙऔΓ૊ΜͰ͍Δ044։ൃ  NPE@NSVCZ  OHY@NSVCZ  IP@NSVCZ  5SVTUFSE)5518FC4FSWFS 

    NSVCZɾNSVCZͷNSCHFNଟ਺
  6. ໨࣍  എܠ  ఆٛ  ࣮૷ʹ͍ͭͯ  ؆୯ͳνϡʔτϦΞϧ 

    ࣄྫ঺հ 
  7. എܠ

  8. ϛυϧ΢ΣΞͷߏ੒ͷมԽ ˞ ྫ͑͹8FCαʔό  $(*͸GPSL ͷίετʹΑΓ஗͍  ΠϯλϓϦλΛαʔόʹ૊ΈࠐΉ  ίϯςϯπͱ8FCαʔό͕ີ݁߹

     ΞϓϦέʔγϣϯαʔόͱϓϩΩγͷ෼཭  ͍͔ʹ֤ػೳΛޮ཰ྑ͘࿈ܞͤ͞Δ͔ ˞NSVCZͱ͜Ε͔Βͷ8FCαʔόٕज़ IUUQTTQFBLFSEFDLDPNNBUTVNPUP@S NSVCZUPLPSFLBSBGBMTFXFCTBCBKJTIV 3VCZ౦ژϓϨθϯςʔγϣϯςΫχΧϧτʔΫ 'FC 
  9. $ݴޠʹΑΔϛυϧ΢ΣΞͷ֦ு  ϛυϧ΢ΣΞΛΑΓߴ౓ʹ֦ு͍ͨ͠  ओઓ৔͕--ͷ8FCΤϯδχΞʹ͸೉͍͠  $ݴޠʹΑΔੜ࢈ੑɾอकੑͷ՝୊  ؆୯ͳॲཧΛ؆୯ʹॻ͖͍ͨ 

    $ݴޠΛॻ͖ͨ͘ͳ͍  ϛυϧ΢ΣΞͷৄࡉ࢓༷Λ஌Δ͜ͱͳ͘ॻ͖͍ͨ 
  10. ݹ͔͘Β͋Δ8FCαʔόͷ֦ு  NPE@QFSMɺNPE@SVCZͳͲ  $(*Ϟσϧͷվળ  8FCαʔόͷ಺෦֦ு΋Մೳ˞   ੑೳ໘ɾϝϞϦ໘Ͱͷ՝୊

     ˞!YUFUTVKJ lϞμϯNPE@QFSMೖ໳z IUUQXXXTMJEFTIBSFOFUYUFUTVKJ NPEFSONPEQFSMHVJEFZBQDBTJB :"1$"TJB5PLZP 4FQ
  11. ಺෦֦ுΛ໨తʹ࠷దԽ  ΋ͬͱߴ଎ʹɾ΋ͬͱܰྔʹ  8FCΤϯδχΞʹ਎ۙͳݴޠͰ  ΠϯϑϥɾΞϓϦΛͭͳ͙  ϨΠϠʔͷҧ͏ΤϯδχΞΛͭͳ͙ 

    ΋ͬͱ࢖͍΍͘͢ 
  12. .JEEMFXBSF $POpHVSBUJPOBT$PEF

  13. XJUINSVCZ

  14. ఆٛ

  15. .JEEMFXBSF $POpHVSBUJPOBT$PEF

  16. ༷ʑͳݴޠͰ࣮૷͞Εͨϛυϧ΢ΣΞʹର͠ɺϛ υϧ΢ΣΞͷಈ࡞Λ੍ޚ͢Δ"1*΍σʔλߏ଄Λɺ ૊ࠐΈεΫϦϓτݴޠʹΑͬͯૢ࡞Ͱ͖ΔΑ͏ʹ ͠ɺϢʔβ͸εΫϦϓτݴޠΛ௨ͯ͡ϛυϧ΢Σ ΞͷৼΔ෣͍Λઃఆɾ੍ޚՄೳͱͳΔ

  17. .JEEMFXBSF$POpHVSBUJPOBT$PEF  ߴੑೳͳϛυϧ΢ΣΞͷઃఆΛίʔυԽ  ίʔυ෦෼ͷΦʔόʔϔου͕গͳ͍  ίʔυԽʹΑΓ౰વςετ΋Մೳ  ίʔυͷϥΠϒϥϦͱͯ͠ػೳ֦ு΋༰қ 

    γεςϜͷૄ݁߹ͳίϯϙʔωϯτΛॊೈ ʹ࿈ܞՄೳ 
  18. ಋೖ·Ͱͷϓϩηε΍ςετ  ৄࡉͳߟ͑ํ͸ࠓճ͸লུ  ͱ͍͏ͷ΋ʜ 

  19. ฐࣾ!ITCUͷ׆ಈʹ஫໨ !ITCU l.JEEMFXBSFBT$PEFXJUINSVCZz IUUQXXXTMJEFTIBSFOFUITCUNJEEMFXBSFBTDPEFXJUI NSVCZ 3FE%PU3VCZ$POG  +VOF %FUBJMTPGNSVCZVTBHFJOQSPEVDUJPO 

  20. Ҏ߱ͷ಺༰  ࣮૷ʹ͍ͭͯ  ؆୯ͳνϡʔτϦΞϧ  ฐࣾͰͷࣄྫ঺հ 

  21. ࣮૷ʹ͍ͭͯ

  22. 044Խ͞Ε࣮ͨ૷ྫ  NPE@NSVCZ NPE@MVB  OHY@NSVCZ MVBOHJOYNPEVMF  IP@NSVCZ 

    5SVTUFSE)5518FC4FSWFS  NSVCZJQWT WJSUVBMJOH  UT@NSVCZGPS"QBDIF5SB⒏D4FSWFS  MJCWNPE@NSVCZGPS7BSOJTI$BDIF  NZTRMNSVCZ )PMZDPSOGPS%BUB4UPSF 
  23. 044Խ͞Ε࣮ͨ૷ྫ  NPE@NSVCZ NPE@MVB  OHY@NSVCZ MVBOHJOYNPEVMF  IP@NSVCZ 

    5SVTUFSE)5518FC4FSWFS  NSVCZJQWT WJSUVBMJOH  UT@NSVCZGPS"QBDIF5SB⒏D4FSWFS  MJCWNPE@NSVCZGPS7BSOJTI$BDIF  NZTRMNSVCZ )PMZDPSOGPS%BUB4UPSF 
  24. جຊతͳ࣮૷ϙϦγʔ ˞Ҏ߱NSVCZʹΑΔ࣮૷લఏͰ͢  εϨου୯ҐͰ7.ΛϚοϐϯά  ϛυϧ΢ΣΞىಈ࣌ʹ7.ϚοϐϯάͱίϯύΠϧ  ϛυϧ΢ΣΞͷσʔλߏ଄ΛϝιουʹϚοϐϯά  ϛυϧ΢ΣΞͷ"1*ΛϝιουʹϚοϐϯά

     ϛυϧ΢ΣΞͷఆ਺ΛϚοϐϯά  ༻్ຖʹΫϥεͰ෼཭  ֦ு͸ݴޠͷϥΠϒϥϦΛར༻ 
  25. ࣮૷໘ͰؾΛ͚͍ͭͯΔࣄ  ϋΠύϑΥʔϚϯε  ΦʔόʔϔουʹͳΓʹ͍͘  ϝϞϦ͕୯ௐ૿Ճ͠ͳ͍Α͏ʹ͢Δ  ֶशίετΛݮΒ͢ 

    γϯϓϧͳΫϥεͱϝιου  ػೳ֦ு͸Ͱ͖Δ͚ͩNSCHFN˞ ˞$3VCZͷHFNʹ͋ͨΔNSVCZͷϞδϡʔϧ 
  26. ϋΠύϑΥʔϚϯε  NSVCZΛ࠾༻ͯ͠ੑೳ໘Ͱ࠷దԽ  εϨου୯ҐͰ7.୯ҐͰ࣋ͯΔ  +*4ن֨ʹ४ڌͨ͠࢓༷ʹΑΓܰྔ  ࣄલʹόΠτίʔυʹ͓ͯ͘͠ͱߴ଎ 

    3VCZίʔυͷෳ਺ճ࣮ߦͰ͸ܰྔͳΠϯλϓ Ϧλ͕଎౓ʹ΋ޮ͍ͯ͘Δ  ৄ͘͠͸࿦จ˞ ˞দຊ྄հɾԬ෦णஉ NPE@NSVCZɿεΫϦϓτݴޠͰߴ଎͔ͭলϝϞϦʹ֦ுՄೳͳ8FCαʔόͷػೳ֦ ுࢧԉػߏ ৘ใॲཧֶձ࿦จࢽ 7PM /P QQ ೥݄
  27. ੈքதͷ8FCϑϨʔϜϫʔΫͷ଎౓Λڝ͏ίϯςετ $ɺ$ ɺ+BWBɺ(P౳ͷதɺ3VCZͰؤு͍ͬͯΔ Ґ SFGIUUQTXXXUFDIFNQPXFSDPNCFODINBSLT

  28. SFGIUUQTXXXUFDIFNQPXFSDPNCFODINBSLT ݴޠΛ3VCZʹݶఆͨ݁͠Ռ ѹ౗తҐ

  29. ֶशίετΛݮΒ͢  ҟͳΔϛυϧ΢ΣΞͰ΋Ϋϥε΍ϝ ιου໊Λಉ͡ʹ͓ͯ͘͠  NSCHFNͰॻ͚Δॴ͸ॻ͘ࣄͰҟͳ Δϛυϧ΢ΣΞͰ΋ར༻Մೳ  ͲΕ͔Ұֶͭश͢Ε͹ଞͷϛυϧ΢Σ Ξͷ֦ு΋େମཧղͰ͖Δ

  30. ϛυϧ΢ΣΞͷΫϥεΛऔಘ 6TFSEBUBΫϥε͸NSCHFN

  31. ؆୯ͳνϡʔτϦΞϧ

  32. OHY@NSVCZΛΧδϡΞϧʹࢼ͢  7BHSBOU؀ڥΛ༻ҙ͢Δ͚ͩ  7BHSBOU %PDLFSΛར༻  $PSF04Λ7BHSBOU؀ڥͰىಈ  $PSF04ͷதͰ%PDLFSΛىಈ

     OHY@NSVCZͷ%PDLFSΠϝʔδىಈ 
  33. OHY@NSVCZνϡʔτϦΞϧ  EPDLFS؀ڥ੔උ OHY@NSVCZͷ%PDLFSΠϝʔδΛऔಘ 

  34. OHY@NSVCZνϡʔτϦΞϧ  EPDLFSIPPLUFTUSCΛมߋͯ͠ڍಈΛ֬ೝ %PDLFSΛϏϧυ͠௚ͯ͠࠶࣮ߦ 

  35. OHY@NSVCZνϡʔτϦΞϧ  ৽͍͠MPDBUJPOઃఆͱΠϯϥΠϯίʔυΛ௥Ճͯ͠ڍಈ֬ೝ NSVCZBVUIʹରͯ͠Ҏ֎͔ΒͷΞΫηε͸  EPDLFSDPOGOHJOYDPOGΛมߋͯ͠ڍಈΛ֬ೝ

  36. ࣄྫ঺հ

  37. ฐࣾͷࣄྫ঺հ  %P4తΞΫηεͷࣗಈ੍ޚ  υϝΠϯผͷಈతϓϩΩγ  ෳࡶͳϝϯςφϯεը໘੾Γସ͑  ಈతը૾ม׵αʔόͷ63-Ճ޻ 

    *1ΞυϨε΍63*ͷΞΫηε੍ޚ 
  38. ฐࣾͷࣄྫ঺հ  %P4తΞΫηεͷࣗಈ੍ޚ  υϝΠϯผͷಈతϓϩΩγ  ෳࡶͳϝϯςφϯεը໘੾Γସ͑  ಈతը૾ม׵αʔόͷ63-Ճ޻ 

    *1ΞυϨε΍63*ͷΞΫηε੍ޚ 
  39. ୲౰!IBSBTPV JOGSBFOHJOFFS

  40. େྔΞΫηε %%P4 XFC αʔό ߈ܸऀ 

  41. େྔΞΫηεͷࣗಈ੍ޚ ˞  ϗετ୯ҐͰ੍ޚ  ϑΝΠϧ୯ҐͰ੍ޚ  ʙ୯Ґ͸ࣗ༝ʹܾΊΒΕΔ  େྔΞΫηεͱݕ஌ͨ͠Β೚ҙͷ੍ޚ

     ෳࡶͳ৚݅Ͱ΋؆୯ʹॻ͚ΔΑ͏ʹ ˞!IBSBTPV lؔ੢3VCZձٞʹొஃͤͯ͞΋Βͬͨ IUUQIBSBTPVHJUIVCJPؔ੢3VCZձ ٞʹొஃͤͯ͞΋Βͬͨ ؔ੢3VCZձٞ +VMZ 
  42. NPE@NSVCZͰ࣮૷  IUUQEPTEFUFDUPS  ೚ҙͷΞΫηεύλʔϯΛݕ஌  ݕ஌தʹ೚ҙͷॲཧΛ࣮ߦ  IUUQBDDFTTDPVOUFS 

    ೚ҙͷଐੑʢϑΝΠϧ໊ɾVJE౳ʣΛΧ΢ϯτ  Χ΢ϯτ͕ᮢ஋Λ௒͑ͨΒݕ஌  ݕ஌தʹ೚ҙͷॲཧΛ࣮ߦ
  43. ུ֓ਤ  IUUQEPTEFUFDUPSIUUQBDDFTTMJNJUUFS "QBDIF ਌ϓϩηε NSVCZ XPSLFS NSVCZ XPSLFS NSVCZ

    XPSLFS NSVCZ XPSLFS NSVCZ ڞ༗ϝϞϦ HMPCBMMPDL ᶄΧ΢ϯλ ΠϯΫˠॲཧˠσΫϦ MPDBMNFNDBDIF ,74 ᶃUSZ@MPDL ᶅVOMPDL 
  44. NPE@NSVCZͷઃఆ 

  45. EPT@EFUFDUPSSC ϗετʹରͯ͠ඵؒʹΞΫηε͋ͬͨΒ ඵ͔ؒϦΫΤετ਺෼%P4ݕ஌ঢ়ଶͱ͢Δ %P4ݕ஌ঢ়ଶͷؒ͸Λฦ͢ 

  46. BDDFTT@MJNJUUFS@TUBSUSC ΞΫηεϑΝΠϧ໊ͰΧ΢ϯλΛΠϯΫϦϝϯτ Χ΢ϯλ͕ᮢ஋Λ௒͍͑ͯͨΒΛฦ͢ 

  47. BDDFTT@MJNJUUFS@FOESC ΞΫηεϑΝΠϧ໊ͰΧ΢ϯλΛσΫϦϝϯτ 

  48. ฐࣾͷNSVCZࣄྫ঺հ  %P4తΞΫηεͷࣗಈ੍ޚ  ϗετϕʔεͷಈతϓϩΩγ  ෳࡶͳϝϯςφϯεը໘੾Γସ͑  ಈతը૾ม׵αʔόͷ63-Ճ޻ 

    *1ΞυϨε΍63*ͷΞΫηε੍ޚ 
  49. ୲౰!UTITU@ JOGSBFOHJOFFS

  50. ϗετϕʔεͷಈతϓϩΩγ  ϗετ͸όοΫΤϯυͷαʔόʹࣗ༝ ʹ഑ஔɾҠಈ  ϗετͷډ৔ॴ͸%#Ͱ؅ཧ  %#͔ΒಈతʹϦόʔεϓϩΩγ  Ͱ͖Δ͚ͩੑೳΛߴ͍ͨ͘͠

     "QBDIF Ϟδϡʔϧ͔ΒϦϓϨʔε 
  51. ऩ༰αʔό ऩ༰αʔό ϦόʔεϓϩΩγ %# OHY@NSVCZ MPDBMNFNDBDIF %# NSVCZ ϦόʔεϓϩΩγ UFYBNQMFKQ

    UFYBNQMFKQ UFYBNQMFKQ -# )PTUUFYBNQMFKQ ϨϓϦέʔγϣϯ %#ߋ৽͋Ε͹Ωϟογϡ࡟আ Ωϟογϡͳ͚Ε͹औಘͯ͠ΩϟογϡԽ όοΫΤϯυ৘ใऔಘ ϦόʔεϓϩΩγ ऩ༰αʔό ऩ༰αʔό
  52. ಈతʹબ୒ͨ͠όοΫΤϯυͱLFFQBMJWF͢Δ OHJOYىಈ࣌ʹ%#ɾΩϟογϡͱ઀ଓ OHJOYఀࢭ࣌ʹ%#઀ଓΛDMPTF 

  53. Ωϟογϡʹͳ͚Ε͹ϩʔΧϧ%#͔Βऔಘ όοΫΤϯυͷ৘ใΛऔಘ ಈతબ୒ͨ͠όοΫΤϯυͱLFFQBMJWFͰ઀ଓ 

  54. BQBDIFͱOHJOY NSVCZ ͷੑೳൺֱ SFRTFD      ૯ΞΫηε਺

              BQBDIF OHJOY NSVCZ ಉ࣌઀ଓ਺
  55. “ –ϖύϘ෱ԬΠϯϑϥνʔϜ αϒϚωʔδϟʔ @tshst_ࢯ l$ݴޠͰॻ͔Εͨ"QBDIFϞδϡʔϧΛؚΉϓϩΩγ αʔόΛOHJOYͰϦϓϨʔε͢ΔͷʹɺOHY@NSVCZΛ ࢖͏ͱ$ݴޠ͸΋ͪΖΜ3VCZ͢Βॻ͍ͨࣄͷͳ͍ࢲ͕ɺ ਺࣌ؒͰಉ౳ͷॲཧΛे਺ߦͰ࣮૷Ͱ͖·ͨ͠z 

  56. ฐࣾͷࣄྫ঺հ  %P4తΞΫηεͷࣗಈ੍ޚ  υϝΠϯผͷಈతϓϩΩγ  ෳࡶͳϝϯςφϯεը໘੾Γସ͑  ಈతը૾ม׵αʔόͷ63-Ճ޻ 

    *1ΞυϨε΍63*ͷΞΫηε੍ޚ 
  57. ୲౰!MBNBOPUSBNB JOGSBFOHJOFFS

  58. ϝϯςφϯεը໘੾Γସ͑ ˞  WBSUNQNBJOU͕ଘࡏͨ͠Βϝϯς φϯεը໘  WBSUNQNBJOU@JHOPSF@P⒏DF͕ଘ ࡏͯ͠ɺ׌ͭΞΫηεݩ͕ Ͱ͋Ε͹ɺͦ͜͸௨ৗ௨ΓϨεϙϯε 

    OHJOYDPOGʹͦͷ··ίʔυΛهड़ ˞!MBNBOPUSBNB lOHY@NSVCZΛ࢖ͬͯಛఆϗετҎ֎͔ΒͷΞΫηεΛϝϯςφϯεը໘ʹ͢Δz  IUUQMBNBOPUSBNBIBUFCMPKQFOUSZ "VH 
  59. MBNCEBͰ͔ͬ͜ྑ͘/HJOYSFUVSO ͱϝϯςφϯεϖʔδΛඥ෇͚ 

  60. ฐࣾͷࣄྫ঺հ  %P4తΞΫηεͷࣗಈ੍ޚ  υϝΠϯผͷಈతϓϩΩγ  ෳࡶͳϝϯςφϯεը໘੾Γସ͑  ಈతը૾ม׵αʔόͷ63-Ճ޻ 

    *1ΞυϨε΍63*ͷΞΫηε੍ޚ 
  61. ୲౰!ZBOP BQQFOHJOFFS

  62. ಈతը૾ม׵αʔόͷ63-Ճ޻ ˞  63-ϕʔεͷಈతը૾ม׵ॲཧ  ΫϥΠΞϯτ͕উखʹը૾ม׵Ͱ͖ ͳ͍Α͏ʹ63-ͷҰ෦ΛϋογϡԽ  OHY@NSVCZͰ63-Λղੳ͠όοΫ Τϯυͷը૾ετϨʔδ΁

    ˞!ZBOP l%ZOBNJDJNBHFUSBOTGPSNBUJPOTFSWFS0LBSB#&5"z IUUQTTQFBLFSEFDLDPNZBOP EZOBNJDJNBHFUSBOTGPSNBUJPOTFSWFSPLBSBCFUB ୈҰճϖύϘςοΫΧϯϑΝϨϯε "QS 
  63. ϦΫΤετ63-ʹؚ·ΕΔϋογϡ͕ద੾ͳ஋͔νΣοΫ ϦΫΤετ63-͔Βը૾΁ͷ63-Λੜ੒ͯ͠ϦόʔεϓϩΩγ 

  64. ϦΫΤετ63-ʹؚ·ΕΔϋογϡ͕ਖ਼͍͔͠ධՁ ϦΫΤετ63-ʹؚ·ΕΔจࣈྻΛOHJOY಺෦ม਺͔Βऔಘ

  65. ϦΫΤετ63-ʹؚ·ΕΔจࣈྻΛOHJOYͷ಺෦ม਺͔Βऔಘ ը૾΁ͷ63-Λੜ੒ ϦΫΤετ63-Λ৭ʑղੳ

  66. ಈతը૾ม׵αʔό͓͔ΒΛ !ZBOP͕044Խ͢Δ༧ఆ Ͱ͢

  67. ฐࣾͷࣄྫ঺հ  %P4తΞΫηεͷࣗಈ੍ޚ  υϝΠϯผͷಈతϓϩΩγ  ෳࡶͳϝϯςφϯεը໘੾Γସ͑  ಈతը૾ม׵αʔόͷ63-Ճ޻ 

    ը૾αʔϏεͷΞΫηε੍ޚ 
  68. ୲౰!ITCU BQQFOHJOFFS

  69. ը૾αʔϏεͷΞΫηε੍ޚ ˞  ηογϣϯ*%ͷೝূ  NFNDBDIFEʹηογϣϯ*%อଘ  63-ϕʔεͷೝূ  *1ΞυϨεϕʔεͷೝূ

    ˞!ITCU l.JEEMFXBSFBT$PEFXJUINSVCZz IUUQXXXTMJEFTIBSFOFUITCUNJEEMFXBSFBT DPEFXJUINSVCZ 3FE%PU3VCZ$POG  +VOF 
  70. αʔόىಈ࣌ʹNFNDBDIFEͱ઀ଓ͢Δॲཧ͸লུ αʔόఀࢭ࣌ʹNFNDBDIFEͱ੾அ͢Δॲཧ͸লུ 

  71. ௚઀ΞΫηεΛڋ൱͍ͨ͠63-ͷ੍ޚ TFTTJPO@JEΛΩʔʹNFNDBDIFE͔ΒΞΫηε੍ޚ৘ใΛऔಘ 

  72. ͜ΕҎ֎ʹ΋·ͩ·ͩ ৭ʑ΍͍ͬͯ·͢

  73. )0ͷNSVCZ֦ு

  74. 3VCZεΫϦϓτΛϑοΫ

  75. ڐՄηάϝϯτʹؚ·Ε͍ͯͨΒ࣍ͷॲཧ΁Ҡߦ

  76. ·ͱΊ

  77. .JEEMFXBSF$POpHVSBUJPOBT$PEF  ૄ݁߹ͳϛυϧ΢ΣΞͷ࿈ܞ  ෳࡶͳ࿈ܞΛ3VCZͰ៉ྷʹॻ͚Δ  ΞϓϦΤϯδχΞ͕ΠϯϑϥΛ੍ޚ  ΠϯϑϥΤϯδχΞ͕3VCZͰ੍ޚ 

    ϓϩάϥϛϯάͷ෯͕޿͕Δ 
  78. .JEEMFXBSF $POpHVSBUJPOBT$PEF

  79. DPOOFDUJOGSBFOHJOFFST XJUIBQQFOHJOFFST