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

Developer Productivity in Cookpad

Developer Productivity in Cookpad

クックパッドはなぜ開発しやすいのか

At AWS Summit Tokyo 2015 Developer Conference
2015/06/03

Issei Naruta

June 03, 2015
Tweet

More Decks by Issei Naruta

Other Decks in Technology

Transcript

  1. ΫοΫύου͸ͳͥ
    ։ൃ͠΍͍͢ͷ͔
    ΫοΫύουגࣜձࣾ੒ాҰੜ
    "844VNNJU5PLZP

    View Slide

  2. ੒ాҰੜ
    ͳΔͨ ͍͍ͬͤ
    !NJSBLVJ
    ΫοΫύουגࣜձࣾ
    ΠϯϑϥετϥΫνϟʔ෦௕

    View Slide

  3. ΫοΫύουʹ͍ͭͯ

    View Slide

  4. .6#NP
    .14VTFST
    .DPPLJOHSFDJQFT
    ˞೥݄ݱࡏ
    !"
    #
    !

    View Slide

  5. 'VMM"84
    2011೥3݄ ౦ژϦʔδϣϯΦʔϓϯ
    2011೥8݄ DC͔ΒAWS΁Ҡߦ

    View Slide

  6. &$JOTUBODFT BUQFBL

    SFRTFD BUQFBL

    $

    View Slide

  7. 0QT
    %FWFMPQFST
    %FQMPZTEBZ


    #

    View Slide

  8. [email protected]PMJUI
    ΫοΫύου͸ੈքҰڊେͳ
    ϞϊϦγοΫ3BJMTΞϓϦέʔγϣϯʢ͔΋͠Ε·ͤΜʣ

    View Slide

  9. View Slide

  10. ʮ։ൃ͠΍͍͢ʯͱ͸Կ͔

    View Slide

  11. %
    ʮ։ൃ͠ʹ͍͘ʯঢ়ଶͷྫ
    ٕज़తͳ໰୊ʹΑͬͯΠϊϕʔγϣϯ્͕֐͞Ε͍ͯΔঢ়ଶ
    େྔͷϨΨγʔίʔυɺٕज़తෛ࠴
    ςετ͸͋Δ͚Ͳৗʹ͍͔ͭ͘ Fail ͍ͯͯ͠ɺ

    ์ஔ͞Ε͍ͯΔ
    σϓϩΠ͕ଐਓతͰɺ͕͔͔࣌ؒΓ͗ͨ͢Γɺ

    ͨ·ʹࣦഊͨ͠Γ͢Δ

    View Slide

  12. ։ൃ͠ʹͯ͘͘Կ͕ѱ͍ʁ
    ݱ৔ָ͕Λ͍ͨ͠
    ૉૣ͘Ձ஋Λఏڙ͍ͨ͠

    View Slide


  13. ։ൃ

    σϓϩΠ ςετ

    View Slide

  14. ։ൃ

    View Slide

  15. View Slide

  16. View Slide

  17. αʔϏε։ൃͱ͸Կͳͷ͔
    ࡞͍ͬͯΔͷ͸ʮػೳʯͰ͸ͳ͘ʮαʔϏεʯʮϢʔβମݧʯ
    μϛʔσʔλͰ͸ͳ͘ຊ൪ͷσʔλΛ࢖ͬͯ։ൃ͢Δ΂͖
    &

    View Slide

  18. ຊ൪ͱಉظͨ͠%#Ͱ։ൃ͢ΔϝϦοτ
    • Ϣʔβʔͱಉ౳ͷମݧ
    • ༧ظͤ͵σʔλʹΑΔόάʹؾ͖ͮ΍͍͢
    • ॏ͍ΫΤϦʹؾ͖ͮ΍͍͢

    View Slide

  19. '#
    ຊ൪%# ։ൃ%# ։ൃऀ
    .Z42-
    .Z42-

    NZTRMEVNQ
    (
    #
    ։ൃऀͷ୭͔͕ؾ͕޲͍ͨ࣌ʹ
    ຊ൪μϯϓσʔλ͔Β։ൃ DB Λߋ৽
    ʢ൒೥ʹ1౓͘Β͍ʣ
    d

    View Slide

  20. खಈߋ৽ํࣜͷ໰୊఺
    ݱߦͷσʔλͷΈͰൃੜ͢ΔΑ͏ͳΤϥʔʹؾ͖ͮʹ͍͘
    ৽ணίϯςϯπʹؔ࿈ͨ͠ಈ࡞֬ೝ͕͠ʹ͍͘
    Ϣʔβͷମݧͱ͸ҟͳΔ

    View Slide

  21. '
    '
    '
    #
    #
    #
    ຊ൪%# ։ൃ%#
    NBTUFS TMBWF
    SFBE
    X
    SJUF
    ։ൃऀ
    .Z42-
    .Z42-

    ݱࡏ
    ։ൃऀ͸ৗʹຊ൪ͷ࠷৽σʔλ͕ೖͬͨDBͰ։ൃ

    View Slide

  22. Ͳ͏΍Δͷ͔
    ݒ೦఺
    slave ʹॻ͖ࠐΜͩΒΩʔিಥ౳Ͱ

    ϨϓϦέʔγϣϯΤϥʔʹͳΔͷͰ͸ʁ
    id ͕ຊ൪ͱͣΕͯ݁ہ࢖͑ͳ͍σʔλʹͳΔͷͰ͸ʁ

    View Slide

  23. JE OBNF
    ΧϨʔ
    ͔Β͋͛
    ೑͡Ό͕
    JE OBNF
    ΧϨʔ
    ͔Β͋͛
    ೑͡Ό͕
    ͦ͹
    '#

    ຊ൪%# ։ൃ%#
    */4&35
    ϨϓϦέʔγϣϯ
    ϥʔϝϯ
    ௨ৗɺslave ʹॻ͖ࠐΜͰ͠·͏ͱ
    AUTO_INCREMENT ͍ͯ͠Δ id ͕িಥ͢Δ

    View Slide

  24. JE OBNF
    ΧϨʔ
    ͔Β͋͛
    ೑͡Ό͕
    JE OBNF
    ΧϨʔ
    ͔Β͋͛
    ೑͡Ό͕
    ͦ͹
    ͏ͲΜ
    ੜᇙম͖
    '#

    ຊ൪%# ։ൃ%#
    */4&35
    ϨϓϦέʔγϣϯ
    AUTO_INCREMENT ʹڊେͳΦϑηοτΛઃఆ͢Δ͜ͱͰ
    ຊ൪ͱিಥ͠ʹ͘͘͢Δ
    ϥʔϝϯ

    View Slide

  25. JE OBNF
    ΧϨʔ
    ͔Β͋͛
    ೑͡Ό͕
    JE OBNF
    ΧϨʔ
    ͔Β͋͛
    ೑͡Ό͕
    ͦ͹
    ͏ͲΜ
    ੜᇙম͖

    ຊ൪%# ։ൃ%#
    εςʔτϝϯτϕʔε
    ϨϓϦέʔγϣϯ
    ࠷৽ͷ݅Λʮম೑ʯʹมߋ
    UPDATE recipes SET name=‘ম೑’ ORDER BY id DESC LIMIT 1
    ম೑
    ম೑
    εςʔτϝϯτϕʔεϨϓϦέʔγϣϯͰ͸
    ։ൃ DB ͷσʔλ͕յΕ΍͍͢

    View Slide

  26. JE OBNF
    ΧϨʔ
    ͔Β͋͛
    ೑͡Ό͕
    JE OBNF
    ΧϨʔ
    ͔Β͋͛
    ೑͡Ό͕
    ͦ͹
    ͏ͲΜ
    ੜᇙম͖

    ຊ൪%# ։ൃ%#
    ߦϕʔε
    ϨϓϦέʔγϣϯ
    ࠷৽ͷ݅Λʮম೑ʯʹมߋ
    UPDATE recipes SET name=‘ম೑’ ORDER BY id DESC LIMIT 1
    ম೑ ম೑
    ߦϕʔεϨϓϦέʔγϣϯʹ͢Δ͜ͱͰ
    ։ൃ DB ͷσʔλ͕յΕʹ͘ͳΔ

    View Slide


  27. ຊ൪%# ։ൃ%#
    ߦϕʔε
    ϨϓϦέʔγϣϯ

    εςʔτϝϯτϕʔε
    ϨϓϦέʔγϣϯ
    CJOMPH
    ม׵༻%#
    ߦϕʔεϨϓϦέʔγϣϯͰ͸ɺ
    όΠφϦϩά΍సૹྔ͕ڊେʹͳΓɺຊ൪ʹෛՙ͕͔͔ΔͨΊ
    ࣮ࡍʹ͸தؒ DB Λ༻ҙ͠όΠφϦϩάΛม׵͍ͯ͠Δ

    View Slide

  28. ϨϓϦέʔγϣϯఀࢭରࡦ΋ඞཁ
    ෆ੔߹͸ى͖ʹ͘͘Ͱ͖Δ͕ɺܾͯ͠׬ᘳͰ͸ͳ͍ͷͰ

    ϨϓϦ͕ΤϥʔͰࢭ·Δ͜ͱ΋͋Δ
    slave_skip_errors = ON
    Λઃఆͭͭ͠ɺ
    ఀࢭͨ͠Β skip ͯ͠࠶։͢Δ؂ࢹεΫϦϓτΛӡ༻
    ʢslave_skip_errors͚ͩͰ͸ skip ͞Εͳ͍Τϥʔ͕͋ΔͨΊ…ʣ

    View Slide

  29. '
    '
    '
    #
    #
    #
    ຊ൪%# ։ൃ%#
    NBTUFS TMBWF
    SFBE
    X
    SJUF
    ։ൃऀ
    .Z42-
    .Z42-

    ։ൃऀ͸ৗʹຊ൪ͷ࠷৽σʔλ͕ೖͬͨDBͰ։ൃ

    View Slide

  30. ຊ൪؀ڥͰ։ൃ͢Δ
    w

    View Slide

  31. &BUZPVSPXOEPHGPPE
    ࣗ෼ͨͪͷαʔϏε͸ࣗ෼͕ͨͪϢʔβʹͳΔ΂͖

    View Slide

  32. ඇϩάΠϯ
    ελοϑϢʔβ
    ͱͯ͠ϩάΠϯ
    ελοϑ͕ϩάΠϯ͢Δͱɺ
    ։ൃதͷϕʔλػೳ͕͍ͭ͘΋༗ޮʹͳΔ

    View Slide

  33. ϕʔλػೳ
    ϦϦʔεൣғΛࢦఆͯ͠ެ։
    ެ։ൣғͷྫ
    ελοϑͷΈʹެ։
    ςετࢀՃϢʔβʹͷΈެ։
    શମͷ10%ͷϢʔβʹެ։

    View Slide

  34. αʔϏεͷՁ஋͸࢖Θͳ͍ͱ෼͔Βͳ͍
    ͦͷՁ஋ͷԾઆ͸ਖ਼͔ͬͨ͠ͷ͔ʁ
    ຊ൪ʹϦϦʔε͠ͳ͍ͱɺϢʔβʹ࢖ͬͯ΋Β͏͜ͱ͕Ͱ͖ͳ͍
    ຊ൪ʹϦϦʔε͢Δʹ͸ຊ൪ͷ඼࣭ͷ

    ίʔυʢύϑΥʔϚϯε౳ʣʹ࢓্͛ͳ͚Ε͹ͳΒͳ͍ʁ
    ˠඞཁͷͳ͍ػೳΛ࡞Γ͜ΜͰ͠·͏Մೳੑ͕͋Δ

    View Slide

  35. ૣࣦ͘ഊΛ͢Δ
    ίʔυͷ࡞ΓࠐΈʹ࣌ؒΛ͔͚ΔΑΓɺ
    ૉૣ͘ެ։ͯ͠ԾઆΛݕূ͢ΔͨΊʹ࣌ؒΛ࢖͏΂͖
    *

    View Slide

  36. $IBOLP
    ຊ൪؀ڥͰͷτϥΠˍΤϥʔΛࢧԉ͢Δ Rails ༻ gem
    Unit ͱ͍͏୯ҐͰطଘίʔυ΁ͷύονΛهड़
    ඼࣭ͷ௿͍ίʔυΛຊ൪ʹ҆શʹग़ͤΔ
    IUUQTHJUIVCDPNDPPLQBEDIBOLP
    +

    View Slide

  37. " #
    طଘͷίʔυ A ΛɺελοϑϢʔβͷΈʹରͯ͠
    ϕʔλ൛ͷίʔυ B ʹஔ͖׵͍͑ͨ
    ͨͩ͠ɺB ͸๯ݥతͳ࣮૷ͳͷͰɺྫ֎͕ൃੜ͢Δ͔΋͠Εͳ͍
    طଘͷ$POUSPMMFSͷίʔυ ϕʔλ൛ͷίʔυ

    View Slide

  38. ελοϑͳΒ#
    #Ͱྫ֎͕ى͖ͨΒ"
    ελοϑҎ֎ͳΒ"
    ϑϥάͰ෼ذ͍ͤͯ͘͞ͱίʔυ͕ԚΕ͍ͯ͘

    View Slide

  39. ϕʔλػೳͷ6OJU
    طଘͷ$POUSPMMFSͷίʔυ
    "
    #

    Chanko Ͱ͸ɺUnit ͱ͍͏ϑΝΠϧʹϕʔλػೳͷϩδοΫΛهड़͢Δ
    invoke ৚݅Λຬͨͨ͠৔߹ʹɺطଘϩδοΫ (A) ͷ୅ΘΓʹ Unit (B) ͕࣮ߦ͞ΕΔ
    B ͕ྫ֎Λىͨ͜͠৔߹͸ɺݩͷ A ͕࣮ߦ͞ΕΔͨΊɺϢʔβʹ͸Τϥʔ͕ฦΒͳ͍
    JOWPLF৚݅

    View Slide

  40. ແࣄʹՁ஋͕ೝΊΒΕͨΒ
    ຊ൪ͷ඼࣭ͷίʔυʹ࢓্͛Δ
    طଘίʔυΛॻ͖׵͑ɺUnit ϑΝΠϧΛফ͢

    ʢ௨শ Un-chankoʣ

    View Slide

  41. $IBOLPͷӡ༻ঢ়گ
    2011: Chanko ϦϦʔε + ಋೖ
    2015: 200+ Chanko Units
    • εςʔδϯά༻ͷαʔό͸ଘࡏ͢Δ͕ɺར༻ස౓͸௿͍
    • ։ൃதͷ΋ͷΛຊ൪ʹग़͢จԽ͕Ͱ͖͍ͯΔ

    View Slide

  42. ςετ

    View Slide

  43. ΫοΫύουͱ34QFD
    1800+ files
    21000+ examples (test cases)
    7 min
    ,

    View Slide

  44. 5FTUTNFMMT
    ࣮ߦ͕࣌ؒ௕͍
    յΕ΍͍͢ʢίʔυͷมߋʹऑ͍ʣ
    Fail ͠΍͍͢
    ࣮ߦ؀ڥ΁ͷґଘ
    -

    View Slide

  45. 3334QFD

    View Slide

  46. .
    3334QFD
    ଎ͯ͘ɾ҆ͯ͘ɾ҆ఆͨ͠$*
    ෳ਺ͷ Spot Instance Λ࢖ͬͯ RSpec Λฒྻ࣮ߦ
    ڧྗͳϑΥʔϧττϨϥϯε
    IUUQTHJUIVCDPNDPPLQBESSSTQFD
    +

    View Slide

  47. //
    /
    /
    TMBWF
    TMBWF
    XPSLFS
    XPSLFS
    XPSLFS
    ʜ
    /
    ʜ
    ʜ
    ʜ
    /
    /
    /
    /
    NBTUFS
    ////ʜ

    View Slide

  48. $*XPSLFS୆਺ͷભҠ
    ۀ຿࣌ؒ֎͸୆਺ΛݮΒͯ͠

    ίετ࡟ݮ

    View Slide

  49. &$4QPU*OTUBODF
    ͳΔ΂͘ϋΠεϖοΫͳΠϯελϯεΛ࢖͍͍͕ͨߴՁ
    →Spot Instance ͷར༻
    0

    View Slide

  50. &$4QPU*OTUBODF
    ʮ1࣌ؒ͋ͨΓͷ࠷େೖࡳՁ֨ʯΛࢦఆͯ͠ىಈ͢Δ
    ࢦఆͨ͠ʮ࠷େೖࡳՁ֨ʯΑΓ૬৔Ձ͕͚֨҆Ε͹ىಈ
    ىಈதʹ૬৔Ձ͕֨ʮ࠷େೖࡳՁ֨ʯΛ্ճͬͨ৔߹ɺ

    Πϯελϯε͸γϟοτμ΢ϯ͞ΕΔ
    ૬৔Ձ֨͸ OnDemand Ձ֨ΑΓߴ͘ͳΔ͜ͱ΋͋Δ
    ૬৔Ձ֨͸ AZ ͝ͱʹΑͬͯ΋ҟͳΔ

    View Slide

  51. ౦ژϦʔδϣϯͷͱ͋Δ";ʹ͓͚Δ
    4QPU1SJDF DYMBSHF

    0OEFNBOE I

    3*ZBMMVQGSPOU I


    View Slide

  52. DYMBSHF
    DYMBSHF
    DYMBSHF
    ˺ ˺
    DYMBSHF
    DYMBSHF
    DYMBSHF
    ˺ ˺
    Ұ൪ίετύϑΥʔϚϯε͕͍͍

    ΠϯελϯεΛࣗಈతʹબ୒

    View Slide

  53. ϑΥʔϧττϨϥϯε
    ͍͔ʹͯ͠GBJM͠ʹ͍͘$*ʹ͢Δ͔
    ·Εʹࣦഊ͢ΔFYBNQMFʹରͯ͠ɿ
    ۭ͍͍ͯΔ worker Ͱࣗಈతʹ࠶࣮ߦ

    Ұ౓Ͱ΋ success ͢Ε͹ success ͱͯ͠ѻ͏
    4QPU*OTUBODFͷࣗಈγϟοτμ΢ϯʹରͯ͠ɿ
    ଞͷ worker Ͱࣗಈతʹ࠶࣮ߦ
    ผλΠϓͷΠϯελϯεΛىಈ͠࠶࣮ߦ

    View Slide

  54. ׂΕ૭ཧ࿦
    ݐ෺ͷ૭ׂ͕Ε͍ͯΔ֗͸ɺ࣏͕҆ѱԽ͢Δ
    ܰඍͳ൜ࡑΛపఈతʹऔΓక·Δ͜ͱͰ

    ڟѱ൜ࡑΛ΋཈ࢭͰ͖Δͱ͢Δ؀ڥ൜ࡑ্ֶͷཧ࿦
    IUUQKBXJLJQFEJBPSHXJLJׂΕ૭ཧ࿦
    -

    View Slide

  55. $*͕ʮׂΕ૭ʯʹͳΒͳ͍Α͏ʹ
    ܰඍͳ͏ͪʹൃݟ͠ɺରॲ͢Δ
    • Ϗϧυ͕࣌ؒ௕͘ͳΔ
    • ͚ͯ͜Δςετͷ์ஔ
    • pending ঢ়ଶͳςετͷ์ஔ
    1

    View Slide

  56. ௨஌
    Fail ͨ͠ example ͸࡞ऀΛ blame ͯ͠νϟοτͰ௨஌
    Fail ͬ͠ͺͳ͠ʹͤ͞ͳ͍

    View Slide

  57. ·Εʹ'BJM͢ΔςετΛݟ͚ͭΔ
    lBMMOJHIU$*z
    ۀ຿࣌ؒ֎ʹͣͬͱճ͠ଓ͚Δ CI
    success ཰͕௿͍ͱԿ͔͕͓͔͍͠

    View Slide

  58. ໨ඪ ෼Ҏ಺

    ෼Ҏ্͔͔ͬͨΒ௨஌
    $*ͷϏϧυ࣌ؒΛ؂ࢹ

    View Slide

  59. QFOEJOHʹͤͬ͞ͺͳ͠ͷςετͷ࡞ऀʹࣗಈ௨஌
    IUUQTHJUIVCDPNDPPLQBEQFOEBYFT
    +

    View Slide

  60. $*ӡ༻ͷ·ͱΊ
    • ༏Εͨ CI γεςϜΛ࡞Δ͜ͱΑΓɺ

    Ͳ͏ӡ༻͢Δ͔͕ॏཁ
    • Ϗϧυ࣌ؒɾ௨ա཰ɾίετͳͲͷ

    ࢦඪΛఆٛͯ͠؂ࢹ͠ɺ

    վળ͍ͯ͘͠
    • ׂΕ૭ʹ͠ͳ͍
    2

    View Slide

  61. σϓϩΠ

    View Slide

  62. +
    TVDDFTT
    -(5.
    QVMMSFRVFTU
    NFOUJPO
    EFQMPZ
    &$
    (JU)VC
    &OUFSQSJTF
    #
    EFWFMPQFS
    #
    SFWJFXFS
    $*
    +FOLJOT
    NFSHF

    View Slide

  63. σϓϩΠϧʔϧʢҰ෦ʣ
    • CI Λύεͨ͠ϦϏδϣϯͷΈσϓϩΠͯ͠Α͍
    • σϓϩΠ͸ίʔυΛ push ͨ͠։ൃऀࣗ਎͕ߦ͏
    • Ӧۀ࣌ؒ಺ͷΈσϓϩΠՄೳ
    • σϓϩΠޙ͸։ൃऀ͕ಈ࡞֬ೝ͠ɺ

    ෆ۩߹Λݟ͚ͭͨΒ͙͢ʹϩʔϧόοΫ͢Δ

    View Slide

  64. σϓϩΠʹॏཁͳ͜ͱ
    • ଐਓతͰͳ͍͜ͱ
    • ਖ਼֬Ͱ͋Δ͜ͱ
    • ϩʔϧόοΫͰ͖Δ͜ͱ
    • े෼ʹ଎͍͜ͱ 3

    View Slide

  65. ௚ۙिؒͷσϓϩΠʹ͔͔ͬͨ࣌ؒ
    ฏۉඵ
    IPTUT

    View Slide

  66. $BQJTUSBOP࣌୅ʢʙʣ
    capistrano2 + rsync_with_remote_cache

    View Slide

  67. $BQJTUSBOPσϓϩΠͱ଎౓
    1୆͔Βશ୆ʹ ssh + rsync
    σϓϩΠର৅ϗετ୆਺͕૿͑Δͱ஗͘ͳ͍ͬͯ͘

    View Slide

  68. σϓϩΠର৅ϗετશ୆ʹTTISTZOD
    ˠσϓϩΠ଎౓ͷϘτϧωοΫʹ
    $BQJTUSBOP
    #
    /
    /
    /
    /
    /
    /
    /
    STZOD

    View Slide

  69. .BNJZB

    View Slide

  70. .BNJZB
    ϋΠεέʔϥϒϧͳߴ଎σϓϩΠγεςϜ
    σϓϩΠର৅ϗετΛ serf ͰΫϥελϦϯά
    Amazon S3 ܦ༝Ͱ഑෍
    Capistrano ޓ׵ͷσΟϨΫτϦߏ੒
    IUUQTHJUIVCDPNTPSBINBNJZB
    +

    View Slide

  71. /
    $* UBSCBMM 4
    $*͕௨ͬͨϦϏδϣϯͷίʔυ͸
    UBSCBMMͱͯ͠4ʹૹΒΕΔ

    View Slide

  72. /
    /
    /
    /
    /
    /
    /
    /
    $*͕௨ͬͨϦϏδϣϯͷUBSCBMM͸
    શ୆͕ৗʹࣗಈͰQVMM͍ͯ͠Δ
    ʢ͜ͷ࣌఺Ͱ͸·ͩຊ൪ͷίʔυ͸੾ΓସΘ͍ͬͯͳ͍ʣ
    /

    View Slide

  73. σϓϩΠͷࢦྩ͸4FSGΠϕϯτͱͯ͠(PTTJQϓϩτίϧͰ఻೻
    #
    !IVCPUEFQMPZQSPEVDUJPO

    View Slide

  74. શ୆ͷϦϏδϣϯ͕੾ΓସΘΔ
    ʢϑΝΠϧ഑෍͸͋Β͔͡Ί׬͍ྃͯ͠ΔͨΊɺߴ଎ʹ׬ྃ͢Δʣ
    / /
    / /
    / /
    / /
    / / / /
    / /
    / /
    #

    View Slide

  75. .BNJZBͷεέʔϥϏϦςΟ
    Mamiya ͸σϓϩΠର৅ϗετ૿Ճʹରͯ͠εέʔϥϒϧ
    ϗετ͕૿Ճͯ͠΋ʢ΄ͱΜͲʣ஗͘ͳΒͳ͍
    ϑΝΠϧͷ഑෍ɿ
    S3 ͷεέʔϥϏϦςΟΛར༻
    શ୆΁ͷϦϏδϣϯ੾Γସ͑ࢦྩɿ
    Serf ΠϕϯτΛར༻

    View Slide

  76. .BNJZBʹΑΔσϓϩΠ࣌ؒ୹ॖޮՌ
    ෼ˠඵ
    DBQJTUSBOP NBNJZB
    DBQJTUSBOP NBNJZB

    View Slide

  77. ͓ΘΓʹ

    View Slide


  78. ։ൃ

    σϓϩΠ ςετ

    View Slide

  79. ։ൃͷ͠΍͢͞Λอͭ
    ׂΕ૭Λ࡞Βͳ͍ͨΊʹ͸ɺ੹೚ऀͱࢦඪ͕ඞཁ
    4

    View Slide

  80. ʮ։ൃ͠΍͢͞ʯͷՁ஋
    • ։ൃ͔ΒσϓϩΠ·ͰͷαΠΫϧ͕े෼ʹ଎͚Ε͹ɺ

    ʮຊ൪؀ڥΛ࢖ͬͨ։ൃʯ͕࣮ݱͰ͖Δ
    →Ϣʔβͱಉ͡ମݧͷதͰ։ൃ͢Δ
    • ։ൃ͠΍͢͞ʹ౤ࢿ͢ΔՁ஋͸े෼ʹ͋Δ
    • ݁Ռͱͯ͠։ൃ૊৫΋αʔϏε΋݈શͳঢ়ଶΛอͯΔ
    'JO

    View Slide