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

はてなブログ最近の開発テクニックと最新の開発風景のご紹介

 はてなブログ最近の開発テクニックと最新の開発風景のご紹介

hitode909

July 01, 2017
Tweet

More Decks by hitode909

Other Decks in Technology

Transcript

  1. ͸ͯͳϒϩά࠷ۙͷ
    ։ൃςΫχοΫͱ࠷
    ৽ͷ։ൃ෩ܠͷ͝঺
    հ

    View Slide

  2. IJUPEF
    ژ౎͔Βདྷ·ͨ͠
    ͸ͯͳϒϩάΛ։ൃ͍ͯ͠Δ

    View Slide

  3. ͸ͯͳϒϩά
    ʙ
    ࠓ೥೥໨

    View Slide

  4. ҆ఆͯ͠։ൃΛ
    ଓ͚ΔͨΊͷऔΓ૊Έ
    ͦͷͱ͖ʹߟ͑ͨ͜ͱ΍ίπ

    View Slide

  5. ೥ؒͷาΈ

    View Slide

  6. ೥ʙ
    03.࢖Θͳ͍
    ബ͍ϑϨʔϜϫʔΫ

    View Slide

  7. 42-खॻ͖
    .PEFM΋ख࡞Γ
    42-͸$POUSPMMFS͔Βൃߦ

    View Slide

  8. ೥ʙ
    42-ίϐϖ໰୊
    4FSWJDFΫϥε͔Β42-Λൃߦ

    View Slide


  9. υϝΠϯۦಈઃܭ͕ྲྀߦΔ
    ϢϏΩλεݴޠ஋ΦϒδΣΫτΤϯςΟςΟ

    View Slide

  10. :"1$"4*"
    1FSMͷ্ʹ΋ࡾ೥
    ͣͬͱΠέͯΔαʔϏεΛ
    ࡞Γଓ͚Δٕज़

    View Slide

  11. View Slide

  12. ઃܭ΍ϞσϦϯά΁ͷؔ৺ͷߴ·Γ
    ಡॻձΛ΍ͬͨΓ

    View Slide

  13. Ұํͦͷࠒ

    View Slide

  14. ϑϩϯτΤϯυ
    ڊେͳϑΝΠϧˠ#SPXTFSJGZͰ෼ׂ
    K2VFSZˠ3FBDU

    View Slide

  15. View Slide

  16. αʔόαΠυͷ1FSM
    ϑϩϯτΤϯυͷ+4
    ͜ΕΒ͕Α͚Ε͹࠷ߴ

    View Slide

  17. αʔόαΠυͷ1FSM
    ϑϩϯτΤϯυͷ+4
    ͜ΕΒ͕Α͚Ε͹࠷ߴ͔
    ͱ͍͏ͱͦ͏Ͱ΋ͳ͍

    View Slide

  18. Ұํͦͷࠒ

    View Slide

  19. )5.-ͷ഑৴͸
    ૉ๿ͳ฻Β͕͠ଓ͍͍ͯͨ

    View Slide

  20. ϒϩάαʔϏε͸ϒϩάΛ഑৴͢ΔαʔϏε
    σβΠϯΧελϚΠζ
    දࣔ಺༰ͷ੾Γସ͑Φϓγϣϯ
    ͳ͔ͳ͔ෳࡶͳΘΓʹύϥμΠϜ͕ݹ͍

    View Slide

  21. 7JFXΛ͖Ε͍ʹ
    อͭͷ͕೉͍͠

    View Slide

  22. 9TMBUFͷ55FSTFΛ࢖͍ͬͯΔ
    ݴޠػೳ͕ૉ๿
    ڽͬͨ͜ͱ͸ͤͣී௨ʹ࢖͍ͬͯΔ͚ͩ
    ೥ؒύϥμΠϜͷਐԽ͕ͱ͘ʹͳ͍

    View Slide

  23. ૉ๿ͳ7JFXͷੈք؍
    7JFXଆͰ͸ม਺Λએݴͤͣ
    $POUSPMMFS͔Β౉ͤ͹ݺ΂Δ
    ςϯϓϨʔτ෼ׂͷࢦ਑͕ͳ͍
    )5.-λάͰ͸ͳ͘จࣈྻΛѻ͍ͬͯΔ

    View Slide

  24. 7JFXΛͳΜͱ͔͢Δ
    7JFX.PEFMԽ
    3FBDUԽ
    ੩తղੳ͕ͯ͠Μ͹Δ

    View Slide

  25. ෳࡶͳϩδοΫΛ
    7JFX.PEFMʹҠ͢

    View Slide

  26. ϩδοΫΛॻ͘ͱͳ͔ͳ͔େม

    View Slide

  27. View Slide

  28. ϖʔδJEΛ༻͍ͯ
    બ୒தͷλϒΛϋΠϥΠτ

    View Slide

  29. View Slide

  30. දࣔ༻ͷ؅ཧը໘αΠυόʔΛ
    ͋ΒΘ͢ΫϥεΛ࡞Δ

    View Slide

  31. <*'[email protected]@JT CMPHDPOpH
    >
    TFMFDUFE
    <&/%>

    View Slide

  32. )BUFOB&QJD7JFX"EBQUFS"ENJO4JEFCBS
    λϒ໊Λ౉͢ͱɼબ୒த͔Ͳ͏͔ڭ͑ͯ͘ΕΔ
    ී௨ͷ1FSMͷΫϥεͳͷͰςετՄೳ

    View Slide

  33. ೉͍͜͠ͱΛ͢Δͱ͖͸3FBDUͰ
    ॻ͖௚͢

    View Slide

  34. چདྷɿ55ˠK2VFSZ
    ࠷ۙɿ࠷ॳ͔Β3FBDU

    View Slide

  35. ؅ཧը໘
    Ϋϩʔϧ͞ΕΔඞཁͳ͍
    ಈతͳཁૉ͕ଟ͍

    View Slide

  36. ಈతͳͱ͜Ζ͸·ͣ3FBDUͰॻ͖
    ௚ͨ͠Γ͍ͯ͠Δ

    View Slide

  37. QSPQ5ZQFTͰ
    σʔλߏ଄ΛνΣοΫ
    FTMJOUͰղੳ
    ϨϯμϦϯάͷςετ

    View Slide

  38. จࣈྻͰ͸ͳ͘λά୯Ґ
    ࣗવͱߏ଄Խ͞ΕΔ

    View Slide

  39. ੩తղੳ͕ͯ͠Μ͹Δ

    View Slide

  40. 1$εϚʔτϑΥϯ".1

    View Slide

  41. ࣅ͍ͯΔ͕ͪΐͬͱ͕ͪ͏
    ίϐϖͯ͠ฤू͕ͪ͠

    View Slide

  42. ੩తղੳͯ͠੔ཧ͢Δ

    View Slide

  43. YSU
    YTMBUF
    SFGBDUPSJOH
    UPPM

    View Slide

  44. View Slide

  45. View Slide

  46. XSJUUFOJO3VCZ

    View Slide

  47. XSJUUFOJO3VCZ
    94MBUFʹґଘ͠ͳ͍ͨΊ1FSMͱ͸
    ผݴޠͰ࣮૷

    View Slide

  48. 55ͷจ๏Λύʔε
    ύʔεͨ͠৘ใΛදࣔ
    ϦϑΝΫλϦϯά

    View Slide

  49. ύʔε
    <ʙ>
    จࣈͣͭݟ͍ͯ͘

    View Slide

  50. ϒϩοΫͷݕग़ 55

    <*'>ʜ<&/%>

    View Slide

  51. ϒϩοΫͷݕग़ )5.-

    EJWʜEJW

    View Slide

  52. 55ͱ)5.-ಉ࣌ʹύʔε

    View Slide

  53. ػೳ
    ωετ਺ͷදࣔ
    ॏෳ͢ΔϒϩοΫͷݕग़
    ผϑΝΠϧʹ੾Γग़͠

    View Slide

  54. ωετ਺ͷදࣔ

    View Slide

  55. YSUEVNQUFNQMBUFTTBNQMFIUNM
    %VNQJOHUFNQMBUFTTBNQMFIUNM
    IUNM
    CPEZ
    <'03JUFN*/JUFNT>
    <*'JUFNUJUMF>
    I<UJUMF>I
    <&/%>
    <&/%>
    CPEZ
    IUNM

    View Slide

  56. ωετͷେ͖͍ͱ͜Ζ͔Β੔ཧ
    ࠷େͰωετ਺ͷͱ͜Ζ΋͋ͬͨ

    View Slide

  57. ࢦఆͨ͠ϒϩοΫͷ੾Γग़͠

    View Slide

  58. UFNQBMUFTTBNQMFIUNM
    IUNM
    CPEZ
    <'03JUFN*/JUFNT>
    <*'JUFNUJUMF>
    I<UJUMF>I
    <&/%>
    <&/%>
    CPEZ
    IUNM

    View Slide

  59. YSUFYUSBDUUFNQMBUFTTBNQMFIUNM<'03JUFN*/JUFNT>UFNQMBUFT
    @JUFNTUU

    View Slide

  60. UFNQBMUFTTBNQMFIUNM
    IUNM
    CPEZ
    <*/$-6%&@JUFNTUU>
    CPEZ
    IUNM
    [email protected]
    <'03JUFN*/JUFNT>
    <*'JUFNUJUMF>
    I<UJUMF>I
    <&/%>
    <&/%>

    View Slide

  61. ࢦఆ͞ΕͨϒϩοΫΛൈ͖ग़͢
    ϑΝΠϧʹॻ͖ग़͠
    */$-6%&จΛ༻ҙ
    ΠϯσϯτΛௐ੔

    View Slide

  62. ͳΔ΂͘খ෼͚ʹ͍ͯ͘͠࡞ઓ
    ҙຯͷ·ͱ·Γ͝ͱʹ෼ׂ
    ࠷খͰ͸ϑΝΠϧλά

    View Slide

  63. @XSBQQFSDBOPOJDBMUU
    <*'DBOPOJDBM>
    MJOLSFMDBOPOJDBMISFG<DBOPOJDBM>
    <&/%>

    View Slide

  64. ੔ཧ͍ͯ͘͠ͱݟ͑Δ΋ͷ
    ෆཁͳϑϥά
    ॏෳ

    View Slide

  65. ੩తղੳ͠·͠ΐ͏

    View Slide

  66. දݱྗͷऑ͍ͱ͜ΖͰ
    ೉͍͜͠ͱΛ͠ͳ͍
    1FSMʹدͤͨΓ
    +4ʹدͤͨΓ

    View Slide

  67. IUUQTXXXBNB[PODPKQ&"$&"$&#&#$&#%&&&"&"&"&#&&"$&"&0CKFDU0SJFOUFE4FMFDUJPO&"'&""&#&##&&#$&&"&"#EQ

    View Slide

  68. IUUQTXXXBNB[PODPKQ&"$&"$&#&#$&#%&&&"&"&"&#&&"$&"&0CKFDU0SJFOUFE4FMFDUJPO&"'&""&#&##&&#$&&"&"#EQ
    ϨΨγʔίʔυվળΨΠυͰ͸ͳ͍
    ͣͭ͢͜͠վળ͔ΒϑϧεΫϥον·Ͱ
    7JFX.PEFMͷ࿩

    View Slide

  69. ΞϓϦέʔγϣϯʹ৽͍͠άοζΛ
    ಋೖ͢Δͱ͖ͷίπ
    ࿈ଓతʹҠߦͰ͖Δ
    Ұൠతͳ֓೦Ͱ͋Δ
    ࣦഊͨ͠Βݩʹ໭ͤΔ

    View Slide

  70. ࿈ଓతʹҠߦͰ͖Δ
    ن໛͕େ͖͍ͱҰؾʹॻ͖׵͑Δͷ͸ࠔ೉
    ࠔͬͯΔͱ͜Ζ͔ΒඞཁʹԠͯ͡΍͍ͬͯ͘

    View Slide

  71. Ұൠతͳ֓೦Ͱ͋Δ
    ಠࣗͷ֓೦ΑΓ͸ɼطଘͷ֓೦ͷ΄͏͕
    शಘ͠΍͍͢
    ຊΛಡΊ͹෼͔Δͱ͔

    View Slide

  72. ࣦഊͨ͠Βݩʹ໭ͤΔ
    ΍ͬͯΈ͚ͨͲ͋·ΓΑ͘ͳ͔ͬͨΒ
    ఫୀͰ͖Δͱͷͧ·͍͠
    ӡ༻தʹঢ়گ͕มԽͯࣗ͠વͱফ͑Δ৔߹΋

    View Slide

  73. 7JFX͸ͩΜͩΜ
    ྑ͘ͳ͍ͬͯΔ
    ͓ΘΓ

    View Slide

  74. αʔόαΠυͷ1FSM
    ϑϩϯτΤϯυͷ+4
    )5.-ͷ૊Έཱͯ
    ͜ΕΒ͕Α͚Ε͹࠷ߴ

    View Slide

  75. αʔόαΠυͷ1FSM
    ϑϩϯτΤϯυͷ+4
    )5.-ͷ૊Έཱͯ
    ͜ΕΒ͕Α͚Ε͹࠷ߴ͔
    ͱ͍͏ͱͦ͏Ͱ΋ͳ͍

    View Slide

  76. ϓϩμΫγϣϯͷίʔυҎ֎
    ίʔυΛॻ͘؀ڥ
    ॻ͍ͨίʔυΛϦϦʔε͢Δ

    View Slide

  77. खݩͷ։ൃ؀ڥͷ࿩
    σβΠφʔͱͷ࿈ܞ

    View Slide

  78. ͸ͯͳͷσβΠφʔ
    σβΠϯϚʔΫΞοϓ
    )5.-
    9TMBUF
    3FBDU
    6OEFSTDPSF5FNQMBUF

    View Slide

  79. Ϟμϯͳπʔϧ͕ͳ͍ͱ
    ։ൃ΋େม
    σβΠφʔͷΤσΟλ"UPN
    4VCMJNF5FYU͔Β"UPNʹ౷Ұ

    View Slide

  80. ηοτΞοϓΛख఻͏
    3FBDUܥͷϓϥάΠϯೖΕΔ
    FTMJOUೖΕΔ
    Πϯσϯτͷઃఆ
    FEJUPSDPOpH

    View Slide

  81. Πϯσϯτ +4
    ͱ +49
    ࠞࡏ͠
    ͍ͯͨͷΛʹଗ͑ͨ

    View Slide

  82. Πϯσϯτˠ
    FTMJOUŠpY
    ίϝϯτ͸ਖ਼نදݱͰ௕͞൒෼ʹ

    View Slide

  83. `git grep --name-only -P '^ +//' -- src/js/
    `.split(/\n/).each{|path|
    source=open(path).read; open(path, 'w'){|f|
    f.write source.gsub(/^( +)\/\//){|space| '
    '*(space.length/2-1) +'//'} } }

    View Slide

  84. λϒԡͨ͠ΒΠϯσϯτଗ͏Α͏ʹ
    ΩʔόΠϯυͷઃఆ

    View Slide

  85. JG΍ϧʔϓ͸50%0Ͱॻ͍ͯ΋
    Β͏
    ΤϯδχΞ͕͋ͱ͔Βಈ͔͢
    ೉͍͠ͱ͜Ζ͸ϖΞϚʔΫΞοϓ

    View Slide

  86. MJOUͱ͔Πϯσϯτͱ͔
    ΤσΟλͷࢧԉΛօ͕ड͚ΒΕΔ

    View Slide

  87. ։ൃ؀ڥΛ࡞Δίπ
    ΤσΟλͷΧελϚΠζ͸
    झຯͰ͸ͳ͘࢓ࣄ

    View Slide

  88. ։ൃ؀ڥ
    खݩͰ1FSM .Z42-
    NFNDBIDFE &MBTUJDTFBSDI
    ͳͲಈ͔͍ͯ͠Δ

    View Slide

  89. TDSJQUTFUVQ
    1FSMΠϯετʔϧ
    %#εΩʔϚͷηοτΞοϓ
    OPEFͷηοτΞοϓ
    1ZUIPO΋ηοτΞοϓ
    &MBTUJDTFBSDIͷΠϯσοΫε࡞Δ

    View Slide

  90. Α͋͘Δձ࿩

    View Slide

  91. ʮखݩͰΤϥʔ͕ग़·ͨ͠ʯ
    ʮΤϥʔϩάΛష͍ͬͯͩ͘͞ʯ
    ʮషΓ·ͨ͠ʯ
    ʮ΋͏গ্͠΋ష͍ͬͯͩ͘͞ʯ

    View Slide

  92. σβΠφʹͱͬͯ͸ɼͲ͜·Ͱ͕Τ
    ϥʔ͔෼͔Βͳ͍
    ΤϯδχΞʹͱͬͯ͸ɼσβΠφͷ
    खݩͷঢ়گΛ೺Ѳ͢Δͷ͕೉͍͠

    View Slide

  93. ͲͷϒϥϯνͰ
    ԿΛͨ͠Β
    Ͳ͏ͳͬͨͷ͔
    ηοτΞοϓ͸े෼͔
    ฉ͘͜ͱ͍Ζ͍Ζ͋Δ

    View Slide

  94. ԣʹ͍Ε͹ը໘ݟʹߦ͚Δ
    ϦϞʔτͩͱखؒ

    View Slide

  95. ࣗಈͰखݩͷΤϥʔΛ4MBDLʹྲྀ͢
    1MBDL.JEEMFXBSF

    View Slide

  96. 1MBDL.JEEMFXBSF1PTU&SSPS5P4MBDL
    ୭͕
    Ͳͷϒϥϯνͷ
    Ͳͷ63-Ͱ
    ͲΜͳΤϥʔʹૺ۰͔ͨ͠

    View Slide

  97. ݺ͹ΕΔલʹαϙʔτͰ͖ͯศར

    View Slide

  98. ։ൃ؀ڥΛ࡞Δίπ
    ؾܰʹฉ͍ͯ΋Β͏
    յΕͨͱ͖ʹ͸͙͢௚͢

    View Slide

  99. ։ൃ؀ڥͷ࿩
    ͓ΘΓ

    View Slide

  100. ϨϏϡʔͷ࿩

    View Slide

  101. ίʔυϨϏϡʔ
    ຖ೔ϨϏϡʔλΠϜ
    ͳΔ΂݅͘ʹͳΔ·ͰݟΔ

    View Slide

  102. ࣌ؒʹͳΔͱ͓஌Βͤ

    View Slide

  103. ঢ়ଶ͕มΘΔͱ4MBDLʹྲྀ͢
    ϨϏϡʔͯ͠ΔਓΛՄࢹԽ

    View Slide

  104. ϥϕϧͰঢ়ଶΛ؅ཧ

    View Slide

  105. ׬ྃͨ͠ͱ͖ʹྑ͍ͷ͔ѱ
    ͍ͷ͔෼͔Βͳ͍

    View Slide

  106. ϨϏϡʔ׬ྃΛͭʹ෼ׂ

    View Slide

  107. σβΠϯϨϏϡʔ΋ϥϕϧͰ

    View Slide

  108. ϥϕϧͭར༻͍ͯ͠Δ

    View Slide

  109. ݟΒΕͣ์ஔ͞Ε͍ͯΔ1VMM3FRVFTUʹؾ෇
    ͖͍ͨ

    View Slide

  110. View Slide

  111. ݹ͍1VMM3FRVFTUʹؾ෇͖͍ͨ
    ೔ؒಈ͖͕ͳ͚Ε͹ࣗಈͰϥϕϧΛ෇༩

    View Slide

  112. ϥϕϧͭར༻͍ͯ͠Δ

    View Slide

  113. ࠷ۙ͸ඪ४ͷػೳͰϨϏϡ
    ʔͰ͖ΔͷͰซ༻͍ͯ͠Δ
    IUUQTIFMQHJUIVCDPNBSUJDMFTBCPVUQVMMSFRVFTUSFWJFXT

    View Slide

  114. ϨϏϡʔͷϑϩʔΛ੔͑Δίπ
    ϨϏϡʔͯ͠΋Β͑ͳ͍ͱ։ൃ͕ࢭ·ΔͷͰ
    ීஈݟ͑Δͱ͜ΖͰ΍Δ

    View Slide

  115. ϨϏϡʔΛਐΊΔίπ
    ײ৘ʹૌ͑ΔͷͰ͸ͳ͘ࣄ࣮ΛՄࢹԽ͢Δ
    ϨϏϡʔґཔͷ݅਺ɼϨϏϡʔͷਐ௙ɼݹ͞

    View Slide

  116. ϨϏϡʔͷϑϩʔΛ੔͑Δίπ
    σβΠφʔ޲͚ͷࢧԉ΋ΤϯδχΞ༻
    ͱಉ༷ʹ༻ҙ͢Δ

    View Slide

  117. ϦϦʔεͷ࿩

    View Slide

  118. TUBHJOHʹϚʔδ͍ͯ͘͠
    ϦϦʔε଴͕ͪஷ·͖ͬͯͨΒϦϦʔε
    ೔ճʙճ͘Β͍

    View Slide

  119. CPU͕ϦϦʔεΛଅͯ͘͠ΕΔ

    View Slide

  120. View Slide

  121. Ϛʔδ݅਺
    ίʔυͷߦ਺
    ࠷େߦ਺1VMM3FRVFTUͷ୲౰ऀ
    ͕ϦϦʔε୲౰

    View Slide

  122. ϦϦʔε͍͚ͨ͠Ͳػೳ

    View Slide

  123. CPU͕ಠΓݴΛ౤ߘ͢Δ

    View Slide

  124. னٳΈ͸ආ͚Δ
    ༦ํ͸ආ͚Δ
    ༵ۚ೔͸ආ͚Δ
    ॕલ೔͸ආ͚Δ

    View Slide

  125. ৬ਓͷ൑அΛࣗಈԽ

    View Slide

  126. View Slide

  127. ϦϦʔε಺༰ʹԠͯ͡
    ಈతʹϦϦʔεखॱΛม͑Δ

    View Slide

  128. ;ͩΜͷखॱ

    View Slide

  129. BMUFSUBCMF͋Δͱ͖

    View Slide

  130. - [ ] `master`ʹϚʔδ
    <%- if changed_files.any?{|f| f.match(%r{^db/}) } -%>
    - [ ] alter table (db/* ͕มߋ͞Ε͍ͯ·ͨ͠)
    <%- end -%>
    ϦϦʔεखॱΛ
    ςϯϓϨʔτΤϯδϯͰੜ੒

    View Slide

  131. ͨ·ʹ΍ΔखॱΛࣗಈݕ஌
    BMUFSUBCMF
    OHJOYͷઃఆϦϩʔυ
    DSPOͷߋ৽

    View Slide

  132. ϦϦʔεϑϩʔΛ࡞Δίπ
    ຖ೔΍Δ΋ͷͳͷͰࣗಈԽ
    ਓ͕ݟΔલʹCPUʹ࢓ࣄͤ͞Δ

    View Slide

  133. ϦϦʔεͷ࿩
    ͓ΘΓ

    View Slide

  134. ·ͱΊ
    ࠓ೔ͷ࿩͸Կͷ࿩ͩͬͨͷ͔

    View Slide

  135. ৮Δର৅ͱͦͷ࡞ઓ
    ϓϩμΫγϣϯίʔυ͸ஸೡʹ
    ։ൃ؀ڥ͸ͲΜͲΜ΍Δ

    View Slide

  136. ΞϓϦέʔγϣϯͷઃܭ͸৻ॏʹ
    ण໋͕௕͍
    ৮Ε߹͏࣌ؒ΋௕͍
    ͦͷઃܭΛҰ೔த৮Γ͍͔ͨ

    View Slide

  137. ఫୀ͠΍͢͞
    ബ͍ϑϨʔϜϫʔΫΛେ੾ʹ͍ͯ͠Δ
    ॏްͳάοζʹ͸ґଘͤͣ͋ͱ͔Β
    ·ͨม͑Δલఏ
    ಋೖٕ͕ͨ͠ݹͼͨͱ͖ఫୀͰ͖Δ͔

    View Slide

  138. ਓʹ໨Λ޲͚Δ
    νʔϜϝϯόશһ͕։ൃ͠΍͍͢؀ڥΛ
    ࡞Δͷ͸ΤϯδχΞͷ࢓ࣄ
    ಉ྅͕खͰΠϯσϯτͯͨ͠Βνϟϯε

    View Slide

  139. ։ൃΛαϙʔτ͢ΔͨΊͷίʔυ͸
    ؾܰʹม͍͑ͯ͘
    ϓϩμΫγϣϯίʔυΑΓण໋͕୹͍
    յΕͨΒࣺͯͯ࡞Γ௚͢

    View Slide

  140. ·ͱΊ
    ҆ఆͯ͠αʔϏε։ൃΛଓ͚ΔͨΊ
    ͷίʔυͷઃܭ΍ํ਑
    ։ൃ؀ڥ΍։ൃϑϩʔ
    ։ൃϝϯόͷαϙʔτ

    View Slide

  141. ׬

    View Slide

  142. એ఻γʔϧ഑ͬͯ·͢

    View Slide

  143. એ఻γʔϧ഑ͬͯ·͢

    View Slide