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

稼働中の Web サービスの perl のバージョンを上げていく

astj
July 01, 2017

稼働中の Web サービスの perl のバージョンを上げていく

YAPC::Fukuoka 2017 HAKATA

astj

July 01, 2017
Tweet

More Decks by astj

Other Decks in Technology

Transcript

  1. YAPC::Fukuoka 2017 HAKATA 2017/07/01
    Քಇதͷ8FCαʔϏεͷ
    1FSMॲཧܥ
    όʔδϣϯΞοϓΛ
    ͍ͯ͘͠࿩

    View full-size slide

  2. ASTJ
    github: @astj
    Twitter: @ast_j
    hatena: id:astj
    CPAN: ASTJ

    View full-size slide

  3. • 2014/04 ~ Hatena
    • ~2016/07 ͸ͯͳϒοΫϚʔΫ etc. (Perl)
    • 2016/08~ Mackerel (Scala, Golang)

    View full-size slide

  4. QFSMͷόʔδϣϯ

    View full-size slide

  5. όʔδϣϯ্͛ͯ·͔͢ʁ

    View full-size slide

  6. Կނ্͛Δͷ͔

    View full-size slide

  7. ηΩϡϦςΟ

    View full-size slide

  8. ύϑΥʔϚϯε

    View full-size slide

  9. ͳ্ͥ͛ͳ͍ͷ͔

    View full-size slide

  10. ಈ͍ͯΔ෺͸ͦͬͱ͓ͯ͘͠

    View full-size slide

  11. ڍಈ͕มΘΔ

    View full-size slide

  12. ݕূ޻਺͕ʢݟ߹Θʣͳ͍

    View full-size slide

  13. ͦ΋ͦ΋௕͘อक͠ͳ͍
    ϓϩμΫτ

    View full-size slide

  14. Ϟδϡʔϧ͕ೖΒͳ͍ʂ

    View full-size slide

  15. ʜʜ΍͕ͯ͜͏ͳΔ

    View full-size slide

  16. όʔδϣϯ͸ݻఆͯ͠Δ
    ͔͠͠ݹ͗ͯ͢$1"/͔Βফ͑ͨ
    CBDLQBO͔Β௚઀ೖΕΔʂʂ

    View full-size slide

  17. ์ஔͯ͠Δͱ9೥ޙʹۙدΓ͕͍ͨ
    աڈͷҨ੻͕׬੒͢ΔͷͰผʹ࠷৽
    ʹ͸ڵຯແͯ͘΋΄Ͳ΄Ͳʹ৽͍͠
    ঢ়ଶΛอͬͨํ͕ϔϧγʔ

    View full-size slide

  18. ˞ݸਓͷݟղͰ͢

    View full-size slide

  19. ࠓ೔ͷΰʔϧ

    View full-size slide

  20. ˚ʮॲཧܥΛ্͛Δʯ
    ˓ʮॲཧܥΛ্͛ΒΕΔΑ͏ʹ͢Δʯ
    ˕ʮॲཧܥΛ্͛ଓ͚ΒΕΔΑ͏ʹ͢Δʯ

    View full-size slide

  21. ࣋ଓతͳऔΓ૊Έͱͯ͠ॲཧ
    ܥͷόʔδϣϯΛ্͍͛ͯ͘

    View full-size slide

  22. ʢ͋Δ͍͸ɺ্͛Δඞཁ͕
    ແ͍ͱ൑அ͢Δʣ

    View full-size slide

  23. QFSMͷόʔδϣϯΛ
    ্͛Δ΂͖ͳͷ͔ʁ

    View full-size slide


  24. .BKPS .JOPS 1BUDI

    View full-size slide

  25. .BKPS .JOPS 1BUDI

    ϝδϟʔόʔδϣϯ

    View full-size slide

  26. .BKPS .JOPS 1BUDI

    όΠφϦޓ׵͕͋Δ
    #VHpY TFDVSJUZQBUDI
    ύονόʔδϣϯ

    View full-size slide

  27. .BKPS .JOPS 1BUDI

    ϚΠφʔόʔδϣϯ
    όΠφϦޓ׵͕ͳ͍
    ৽ػೳɺඇޓ׵มߋ
    ۮ਺͕҆ఆ൛ɺح਺͕։ൃ൛

    View full-size slide

  28. ϝδϟʔ ϚΠφʔ ύον
    ۤ࿑ ·͋·͋ ͦΜͳʹ
    རӹ ͍Ζ͍Ζ ·͋·͋
    σάϨ ͳ͍ͱ͸ݴ͑ͳ͍ ͦΜͳʹ
    ଛӹ ເ ΍ͬͨΒ͑͑΍Μ

    View full-size slide

  29. ϝδϟʔ ϚΠφʔ ύον
    ۤ࿑ ·͋·͋ ͦΜͳʹ
    རӹ ͍Ζ͍Ζ ·͋·͋
    σάϨ ͳ͍ͱ͸ݴ͑ͳ͍ ͦΜͳʹ
    ଛӹ ເ ΍ͬͨΒ͑͑΍Μ

    View full-size slide

  30. ओʹϚΠφʔόʔδϣϯͷ
    ࿩Λ͠·͢

    View full-size slide

  31. αϙʔτϙϦγʔ

    View full-size slide

  32. 8FPGpDJBMMZTVQQPSU
    UIFUXPNPTUSFDFOU
    TUBCMFSFMFBTFTFSJFT
    http://perldoc.perl.org/perlpolicy.html#MAINTENANCE-AND-SUPPORT

    View full-size slide

  33. $SJUJDBM4FDVSJUZQBUDI

    View full-size slide

  34. 5PUIFCFTUPGPVSBCJMJUZ XFXJMM
    QSPWJEFDSJUJDBMTFDVSJUZQBUDIFT
    SFMFBTFTGPSBOZNBKPSWFSTJPOPG
    1FSMXIPTFYSFMFBTFXBTXJUIJO
    UIFQBTUUISFFZFBST
    http://perldoc.perl.org/perlpolicy.html#MAINTENANCE-AND-SUPPORT

    View full-size slide

  35. ϦϦʔεαΠΫϧ

    View full-size slide

  36. 3FDFOUMZ UIFQMBOIBTCFFOUPSFMFBTFB
    OFXWFSTJPOPG1FSMSPVHIMZFWFSZ"QSJM CVU
    HFUUJOHUIFSFMFBTFSJHIUJTNPSFJNQPSUBOU
    UIBOTUJDLJOHSJHJEMZUPBDBMFOEBSEBUF TP
    UIFSFMFBTFEBUFJTTPNFXIBUqFYJCMF
    http://perldoc.perl.org/perlfaq1.html#How-often-are-new-versions-of-Perl-released%3f

    View full-size slide

  37. ࠷৽ͷQFSMͰϦϦʔεͨ͠αʔ
    Ϗε͸໿೥Ͱαϙʔτ֎ʹͳΔ

    View full-size slide

  38. *Tαϙʔτ֎ࢮ

    View full-size slide

  39. ͖ͪΜͱॲཧܥͱϞδϡʔϧͷ
    όʔδϣϯϩοΫΛ͍ͯ͠Ε͹
    গʑݹ͍͘Β͍ͳΒ໰୊ͳ͘ಈ͘

    View full-size slide

  40. 1FSM͸ޙํޓ׵Λ
    ൺֱతେࣄʹ͢Δݴޠ

    View full-size slide

  41. ʢ͍Ζ͍Ζͳࣄ৘΍ݱ࣮ʣ

    View full-size slide

  42. ʮ࠷৽ͷQFSMʹڵຯ͸ແ
    ͍͚ͲηΩϡϦςΟύον΍
    CVHpYͷԸܙ͸ಘ͍ͨʯ

    View full-size slide

  43. ʮ೥ޙݟࣺ͍͍ͯͯͳΒ
    ϚΠφʔ͸ͦͷ··Ͱʯ
    ʮ೥ܦͬͯ΋͏೥࢖͍ͦ͏
    ͳΒϚΠφʔ্͍͛ͨʯ
    ʮύονόʔδϣϯ͸
    ͬ͞ͱ্͛Α͏ʯ

    View full-size slide

  44. ͦͷϓϩδΣΫτͷQFSM
    ্͛ΒΕ·͔͢ʁ

    View full-size slide

  45. Ұൠతͳ࿩୊

    View full-size slide

  46. ͲͷόʔδϣϯͷϞδϡʔϧ
    ೖͬͯΔ͔෼͔Γ·͔͢
    QFSMͷόʔδϣϯ্͛ͨ
    αʔό༻ҙͰ͖·͔͢
    ςετ͋Γ·͔͢
    ಈ࡞֬ೝ؀ڥ͋Γ·͔͢

    View full-size slide

  47. όʔδϣϯͷࠩ෼͕େ͖͘
    ͳΔ΄Ͳڍಈͷࠩ͸૿͑Δ

    View full-size slide

  48. (FOFSBMMZ CBDLXBSEJODPNQBUJCMFDIBOHFTXJMM
    IBWFEFQSFDBUJPOXBSOJOHTGPSUXPSFMFBTF
    DZDMFTCFGPSFCFJOHSFNPWFE CVUNBZCF
    SFNPWFEBGUFSKVTUPOFDZDMFJGUIFSJTLTFFNT
    RVJUFMPXPSUIFCFOFpUTRVJUFIJHI
    http://perldoc.perl.org/perlpolicy.html#Terminology
    %FQSFDBUFE

    View full-size slide

  49. &YQFSJNFOUBM

    View full-size slide

  50. ͨͱ͑͹autoderef
    https://metacpan.org/pod/release/RJBS/perl-5.24.0/pod/perldelta.pod#The-autoderef-
    feature-has-been-removed
    wͰಋೖ
    wͰ&YQFSJNFOUBM8BSOJOH
    wͰഇࢭ

    View full-size slide

  51. େδϟϯϓ͸͍ͨ΁Μ

    View full-size slide

  52. ʢେδϟϯϓͷ࿩͸͠·ͤΜʣ
    ͪΐͬͱ্͍ͣͭ͛ͯ͘ͱ͔
    ͦΕͱ΋ΤΠϠοͱ΍Δͱ͔

    View full-size slide

  53. $1"/Ϟδϡʔϧ

    View full-size slide

  54. $1"/Ϟδϡʔϧͷ࠷৽൛͸
    ʢ͍͍ͩͨʣಈ͘͸ͣ

    View full-size slide

  55. $1"/Ϟδϡʔϧͷ࠷৽൛͸
    ʢ͍͍ͩͨʣಈ͘͸ͣ

    View full-size slide

  56. https://metacpan.org/changes/release/RJBS/perl-5.24.0#Known-Problems
    ͷ94

    View full-size slide

  57. $PSP
    https://rt.cpan.org/Public/Dist/Display.html?Name=Coro

    View full-size slide

  58. ʢ΋ͪΖΜɺ಺੡94΋ʣ

    View full-size slide

  59. $1"/5FTUFST.BUSJY
    http://matrix.cpantesters.org

    View full-size slide

  60. QFSMͷόʔδϣϯ্͛ͯΈΔ
    DBSUPOJOTUBMM
    $1"/5FTUFSTݟΔ

    View full-size slide

  61. 4UPSBCMFGSFF[F

    View full-size slide

  62. "MXBZTVTFnstoreBOE
    nfreezeJOTUFBEPGstore
    BOEfreeze
    http://blog.livedoor.jp/dankogai/archives/50490051.html

    View full-size slide

  63. ଞͷϞδϡʔϧܦ༝Ͱ
    ҉ʹ࢖͍ͬͯΔ͔΋ʁ

    View full-size slide

  64. grep Storable
    cpanfile.snapshot

    View full-size slide

  65. ԿΛߋ৽͢Δͷ͔

    View full-size slide

  66. w QFSMॲཧܥ
    w $1"/Ϟδϡʔϧ
    w MPDBM

    View full-size slide

  67. $1"/Ϟδϡʔϧ

    View full-size slide

  68. DQBOpMFTOBQTIPU

    View full-size slide

  69. όʔδϣϯݻఆ͸ศར

    View full-size slide

  70. ์͓ͬͯ͘ͱݹͼ͍ͯ͘

    View full-size slide

  71. ॲཧܥͷόʔδϣϯΛ্͛Δ
    ͨΊʹTOBQTIPUΛߋ৽
    ͢Δ͜ͱ΋͋Δ

    View full-size slide

  72. ͦͷϓϩδΣΫτ͸
    DQBOpMFTOBQTIPUΛ
    ͖ͪΜͱߋ৽Ͱ͖·͔͢

    View full-size slide

  73. w खݩͰஸೡʹߋ৽͢Δ
    w EPDLFSCVJMEͯͭ͘͠Δ
    w $*্Ͱߋ৽͢Δ
    w ଞԿ͔͔͍͍ͬ͜ํ๏ʁ

    View full-size slide

  74. όΠφϦޓ׵͕ͳ͍ͱ
    DBSUPO@JOTUBMM@QBUI
    ͸࠶ߏங

    View full-size slide

  75. σϓϩΠͷੈ୅͝ͱʹִ཭
    ͞Ε͍ͯΕ͹ؾʹͳΒͳ͍
    ͨͱ͑͹EPDLFS

    View full-size slide

  76. σϓϩΠੈ୅ؒͰڞ༗ͯ͠
    ΔͱࡦΛߨ͡Δඞཁ͕͋Δ

    View full-size slide

  77. app
    !"" current -> ./releases/201706280249
    !"" releases
    # !"" 201706221234
    # !"" 201706241722
    # !"" 201706271423
    # $"" 201706280249
    $"" shared
    $"" local

    View full-size slide

  78. ʮҰ౓αʔϏεΞ΢τͯ͠
    MPDBMফ͔ͯ͠ΒDBSUPO
    JOTUBMMͯ͠αʔϏεΠϯʯ

    View full-size slide

  79. ʮҰ࣌తʹ
    1&3-@$"350/@1"5)Λ
    ผͷσΟϨΫτϦʹม͑Δʯ

    View full-size slide

  80. ʮ͍ͭͰʹΞϓϦέʔγϣϯ
    αʔό͝ͱೖΕସ͑Δʯ

    View full-size slide

  81. Ͳ͜Λߋ৽͢Δͷ͔

    View full-size slide

  82. ຊ൪؀ڥ
    ։ൃ؀ڥ TUBHJOHFUD

    $*؀ڥ
    ։ൃऀͷखݩ؀ڥ

    View full-size slide

  83. ຊ൪؀ڥ
    ։ൃ؀ڥ TUBHJOHFUD

    $*؀ڥ
    ։ൃऀͷखݩ؀ڥ

    View full-size slide

  84. ʮ࣮͸+FOLJOT্ͷ
    PQUQFSMYYZCJO࢖ͬͯΔʯ
    ʮଞͷνʔϜͱڞ༻ͷ+FOLJOTͳͷͰ
    ޷͖ʹϝϯςφϯεͰ͖ͳ͍ʯ

    View full-size slide

  85. Ͱ͖Δ͚ͩ
    ϏοάόϯϦϦʔε͠ͳ͍

    View full-size slide

  86. QFSM͚ͩ
    όʔδϣϯΛ্͛Δ

    View full-size slide

  87. TZTUFNQFSM
    YCVJME

    View full-size slide

  88. $1"/Ϟδϡʔϧ͸
    ઌʹ্͓͛ͯ͘

    View full-size slide

  89. ʢΉ͠Ζ$1"/Ϟδϡʔϧͷ
    ํ͕͏͔ͬΓڍಈมΘΓ͕ͪʣ
    %#%NZTRM!
    $BDIF.FNDBDIFE'BTU
    !
    /083&7&35&%"4

    View full-size slide

  90. ίʔυͷେ͖͍มߋ͸
    ઌʹग़͓ͯ͘͠

    View full-size slide

  91. খ͍͞มߋΛ
    ෳ਺ճग़͍ͯ͘͠

    View full-size slide

  92. ͸ͯͳΞϯςφ
    ͸ͯͳμΠΞϦʔ
    ͸ͯͳϒοΫϚʔΫϦχϡʔΞϧ
    ͸ͯͳϒϩά
    ೥ྠ ൈਮ

    View full-size slide

  93. େνΣοΧʔ
    https://daichkr.hatelabo.jp

    View full-size slide

  94. ʜʜͷϑϩϯτ෦෼

    View full-size slide

  95. ΈΜͳͰͭ͘Δ344Ϧʔμʔ

    View full-size slide

  96. ͸ͯͳͷ࣮ݧతαʔϏε
    ʮ͸ͯϥϘʯ

    View full-size slide

  97. QFSM ਺ઍߦ

    .Z42-
    344पΓͷίΞ͸ผγεςϜ

    View full-size slide

  98. ϦϦʔε

    όʔδϣϯΞοϓ

    όʔδϣϯΞοϓ

    View full-size slide

  99. ࣾ಺࠷଎

    View full-size slide

  100. ΍Εͦ͏ͳͱ͜Ζ͔Β
    ஌ݟ֫ಘ
    ࣾ಺ܒ໤
    ࠷଎͕޷͖

    View full-size slide

  101. ຊ൪$*PQUQFSMCJO
    खݩQMFOW

    View full-size slide

  102. ·ͣखݩͰࢼ͢

    View full-size slide

  103. ʹ੾Γସ͑
    ςετΛ௨͢
    ಈ࡞֬ೝ͢Δ

    View full-size slide

  104. ຊ൪$*PQUQFSMCJO
    खݩQMFOW
    ࠶ܝ

    View full-size slide

  105. $*αʔόʹΛೖΕΔ
    PQUQFSMCJO

    View full-size slide

  106. NBTUFSϒϥϯν͸
    ϒϥϯν͸

    View full-size slide

  107. શϒϥϯνͷςετ͕ಉ͡
    XPSLTQBDFΛڞ༻

    View full-size slide

  108. NBTUFSͰͰϏϧυ
    ϒϥϯνͰ
    NBTUFSͰ
    ಉ͡σΟϨΫτϦͰ

    View full-size slide

  109. MPDBM΋ڞ༻

    View full-size slide

  110. ͷϒϥϯνͰ͸MPDBMҎ֎Λ࢖͏
    NBTUFSʹϚʔδͨ͠ΒMPDBMΛ
    ༻ͷۭؒͱͯ͠࢖͏

    View full-size slide

  111. $1"/Ϟδϡʔϧ

    View full-size slide

  112. $ grep '\bCoro\b' cpanfile.snapshot
    $

    View full-size slide

  113. $ grep '\bStorable\b' cpanfile.snapshot
    DBI::Gofer::Serializer::Storable 0.015586
    Devel::Cover::DB::IO::Storable 1.25
    Storable 0
    Storable 2.17
    Storable 2.04

    View full-size slide

  114. freezestoreͳ͍ͷΛݟͨ

    View full-size slide

  115. ςετࣦഊܯࠂΛͭͿ͢

    View full-size slide

  116. $1"/Ϟδϡʔϧ͕ݹͯ͘
    ೖΒͳ͍

    View full-size slide

  117. ์͓ͬͯ͘ͱݹͼ͍ͯ͘
    ࠶ܝ

    View full-size slide

  118. ͷ੾Γସ͑ͷ
    ॠؒʹԿ͕ى͜Δ͔ʁ

    View full-size slide

  119. ͨͱ͑͹ηογϣϯͷ
    γϦΞϥΠζ͕յΕͳ͍͔ʁ
    4UPSBCMFͱ͔Ͱ

    View full-size slide

  120. ϦϦʔε࡞ۀ

    View full-size slide

  121. TUBHJOHμ΢ϯλΠϜ
    NBTUFSαʔόʔೖΕସ͑

    View full-size slide

  122. ͕ͭͭͳ͘੒ޭ

    View full-size slide

  123. ҙ֎ͱ΍Ε͹Ͱ͖Δ
    MPDBMͷ؅ཧ͕໘౗
    ҙ֎ͱ΍ͬͯ΋஍ຯ

    View full-size slide

  124. $ ls | grep local
    local/
    local_5241/
    local_520_safe/
    खݩ

    View full-size slide

  125. खݩ
    DQBOpMFTOBQTIPUΛߋ৽͢ΔͨΊʹ
    MPDBMΛϦωʔϜͯ͠͸
    DBSUPOJOTUBMM

    View full-size slide


  126. Խʹຬ଍ͯ͠
    ύονόʔδϣϯ͸্͍͛ͯͳ͔ͬͨ

    View full-size slide

  127. ճ໨ͷڭ܇Λ׆͔͢

    View full-size slide

  128. +FOLJOTXPSLTQBDFΛ
    ϒϥϯν͝ͱʹ෼͚Δ
    DQBOpMFTOBQTIPUΛ
    EPDLFSܦ༝Ͱߋ৽͢Δ
    ͍ͭͰʹखݩ΋
    EPDLFSͰಈ͘Α͏ʹ͢Δ

    View full-size slide

  129. +FOLJOT
    .VMUJ#SBODI1MVHJO

    View full-size slide

  130. EPDLFSCVJMEͰ
    DBSUPOJOTUBMM

    View full-size slide

  131. +FOLJOTXPSLTQBDFΛ
    ϒϥϯν͝ͱʹ෼͚Δ
    DQBOpMFTOBQTIPUΛ
    EPDLFSܦ༝Ͱߋ৽͢Δ
    ͍ͭͰʹखݩ΋
    EPDLFSͰಈ͘Α͏ʹ͢Δ
    τϐοΫϒϥϯνͰ͚ͩ
    ͍Ζ͍ΖࢼͤΔ
    ϩʔΧϧͷ
    ϑΝΠϧγεςϜͷঢ়ଶΛ
    ؾʹͤͣࢼͤΔ

    View full-size slide

  132. CBSFXPSEpMFIBOEMFT
    NVMUJEJNFOTJPOBM
    ͰೖΒͳ͘ͳͬͨͷͰ
    όʔδϣϯΛ্͛ͨϞδϡʔϧ

    View full-size slide

  133. @INCʹ.ͳ͘ͳͬͯ
    UUFTUQNಡΊͳ͘ͳͬͨ
    ͷͰ௚͢
    http://d.hatena.ne.jp/charsbar/20170318/1489828167

    View full-size slide

  134. ؾܰʹϞδϡʔϧͷόʔδϣϯ
    ্͛ͨΒ5FTUʹͳͬͯࠔ࿭
    ࠓ೔ͷޕޙBLJZN͞ΜʹΑΔ
    5FTUʹؔ͢ΔτʔΫ͕͋Γ·͢Ͷ

    View full-size slide

  135. ϦϦʔε࡞ۀ

    View full-size slide

  136. TUBHJOHμ΢ϯλΠϜ
    NBTUFSαʔόʔೖΕସ͑

    View full-size slide

  137. ͕ͭͭͳ͘׬ྃ

    View full-size slide

  138. Ұ౓όʔδϣϯΛ্͛ͨͷͰ
    ೋ౓໨͸צॴ͕Θ͔Δ

    View full-size slide

  139. Ұ౓࣮੷͕͋Δͱೋ౓໨͸ָ
    ࠩ෼Λখ͘͞อͭͷ͕େࣄ

    View full-size slide

  140. ຊ൪αʔόʔͷߏஙɾೖΕସ͑Ͱ
    ΠϯϑϥνʔϜͱͷڠௐ͸
    Ͳ͏ͯ͠΋ൃੜ͢Δ
    ೋ౓໨͸ՄೳͳݶΓͪ͜ΒͰר͖औͬͯ
    ෛ୲ΛݮΒͨ͠

    View full-size slide

  141. ຊ൪αʔόʔͷߏஙɾೖΕସ͑Ͱ
    ΠϯϑϥνʔϜͱͷڠௐ͸
    Ͳ͏ͯ͠΋ൃੜ͢Δ
    ίϯςφӡ༻ͳͲͰ͋Ε͹
    ಠཱͯ͠ೖΕସ͑Ͱ͖ͦ͏

    View full-size slide

  142. ࣄྫͦͷ΋͋ͬͨΜ͚ͩͲ
    ר͖ר͖Ͱߦ͖·͢

    View full-size slide

  143. ϦϦʔεલͷ৽αʔϏε
    ಉ͘͡ϑϩϯτ෦෼

    View full-size slide


  144. @INCͳͲ͋Γอकత

    View full-size slide

  145. ʢ͔݁͠͠ہ5FTUͰେมͳ໨
    ʹૺͬͨʣ

    View full-size slide

  146. खݩҎ֎શͯίϯςφ
    ։ൃΤϯδχΞ͚ͩͰ
    όʔδϣϯ্͛ΒΕΔ

    View full-size slide

  147. ೥͕ͻͱͭͷ໨ॲʁ
    ϝϯς͠ଓ͚ΔαʔϏεͷ
    QFSMόʔδϣϯ͸্͍͛ͨ

    View full-size slide

  148. ࠩ෼Λখͯ͘͞͠ؾܰʹߋ৽
    Ͱ͖ΔΑ͏ʹ͍͖ͯ͠·͠ΐ͏
    Ұ౓΍Δͱצॴ͕෼͔ΔͷͰ
    ೋ౓໨Ҡߦ΋΍Γ΍͍͢Ͱ͢

    View full-size slide

  149. ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View full-size slide