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

A Philosophy of Software Design 後半

A Philosophy of Software Design 後半

2022/6/22 @ MoneyForward 勉強会 で実施した A Philosophy of Software Design の話です。

Yosuke Furukawa
PRO

June 22, 2022
Tweet

More Decks by Yosuke Furukawa

Other Decks in Programming

Transcript

  1. A philosophy of
    software design (ޙ൒)
    2022/6/22 @ MoneyForward ษڧձ

    View Slide

  2. Twitter: @yosuke_furukawa
    Github: yosuke-furukawa

    View Slide

  3. A philosophy of software
    design
    • 2018೥ʹॳ൛͕ϦϦʔε͞Ε
    • 2020೥ʹୈೋ൛͕ϦϦʔε͞Εͨ
    • ๜୊Ͱ͍͏ͱʮιϑτ΢ΣΞઃܭͷ఩ֶʯ
    https://www.amazon.co.jp/dp/B07N1XLQ7D/

    View Slide

  4. A philosophy of software
    design
    • ஶऀ͸δϣϯɾΦʔελʔϋ΢τ͞Μ
    • Stanford େֶͷίϯϐϡʔλαΠΤϯεڭत
    • Sprite OS (OS), Tcl.Tk(ϓϩάϥϛϯάݴޠ),
    RAMCloud (Ϋϥ΢υγεςϜ) ͳͲͳͲɺ੍
    ࡞෺ଟ਺
    https://web.stanford.edu/~ouster/cgi-bin/
    home.php

    View Slide

  5. A philosophy of software
    design લ൒·ͱΊ
    • Tactical Programming ͸΍ΊΑ͏
    • Strategic Programming Λਪ঑
    • ෳࡶ͞͸ґଘͱᐆດ͔͞Βى͖Δ
    • ෳࡶ͞͸มߋ૿େɺೝ஌ෛՙɺΑ͘஌Βͳ͍͜ͱΛ૿Ճͤ͞Δ
    • Strategic Programming ͸͜ΕΒΛߟ͑௚ͨ͢ΊͷҰॿͱͳΔ΋ͷ
    • ౤ࢿϚΠϯυͰߟ͑ͯϓϩάϥϛϯά͢Δ
    • ԿͳΒೋճઃܭͯ͠ΈΖɺͦ͏͢Ε͹ྑ͍ઃܭ͕Ͱ͖ΔΑ͏ʹͳΔ

    View Slide

  6. ޙ൒͸࣮ફΑΓ

    View Slide

  7. ίϝϯτʹ͍ͭͯ

    View Slide

  8. ʮྑ͍ίʔυͳΒίϝϯτ͍Βͳ
    ͍ΑͶʯ
    ʮίϝϯτͬͯॻ͘ͷ͔͔࣌ؒΔ
    ΑͶʯ
    ʮͦΕʹίϝϯτݹ͘ͳΔΑͶʯ

    View Slide

  9. ίϝϯτ͍Βͳ͍ΑͶ

    View Slide


  10. View Slide

  11. ίϝϯτʹ͍ͭͯ
    • ʮΑ͘ઃܭ͞Ε͍ͯΔ࣮૷ʹ͸ίϝϯτ͸ཁ
    Βͳ͍ʯ
    • ͜Ε͸ʮʮʮ؁͍᠘ʯʯʯͰ͋Δ
    • ʮΞΠεΫϦʔϜ͸࣮͸݈߁ʹྑ͍ʯͱݴΘ
    ΕͯΔͷͱҰॹͩͱ͍͏ओு

    View Slide

  12. ίϝϯτʹ͍ͭͯ
    • ίϝϯτͰ͔͠දݱͰ͖ͳ͍΋ͷ΋͋Δ
    • ίʔυͷཧղΛॿ͚ΔΑ͏ͳίϝϯτ͸ઈରॏ

    • Ͳ͏ͤॻ͘ͱͯ͠΋શମͷ͏ͪ10%ఔ౓͔ͩΒ
    ॻ͍ͨ΄͏͕ྑ͍
    • ίϝϯτ͕ݹ͘ͳΔʁؾ͍ͮͨΒ௚ͤ͹͍͍

    View Slide

  13. ίϝϯτʹ͍ͭͯ
    • ίϝϯτͰ͔͠දݱͰ͖ͳ͍΋ͷ΋͋Δ
    • ίʔυͷཧղΛॿ͚ΔΑ͏ͳίϝϯτ͸ઈରॏ

    • Ͳ͏ͤॻ͘ͱͯ͠΋શମͷ͏ͪ10%ఔ౓͔ͩΒ
    ॻ͍ͨ΄͏͕ྑ͍
    • ίϝϯτ͕ݹ͘ͳΔʁؾ͍ͮͨΒ௚ͤ͹͍͍
    ετϩϯάελΠϧ

    View Slide

  14. ͡Ό͋Ͳ͏͍͏ίϝϯτΛॻ
    ͚͹͍͍ͷ͔

    View Slide

  15. ͡Ό͋Ͳ͏͍͏ίϝϯτΛॻ͘
    ͷ͕ྑ͍ͷ͔
    • ίʔυن໿ͱಉ͘͡ίϝϯτʹ΋ن໿Λ࡞Ζ
    ͏
    • Don't Repeat the Code ͷݪଇΛकΖ͏
    • ΠϯλϑΣʔεͷίϝϯτͱ࣮૷ͷίϝϯτ
    ͸෼͚Α͏

    View Slide

  16. ίϝϯτن໿
    • ίϝϯτʹ΋Ұ؏ੑ͕ͳ͍ͱ͍͚ͳ͍
    • ͬͪ͜ͷϞδϡʔϧʹ͸ίϝϯτ͕͋Δ͚Ͳɺ
    ͬͪ͜ʹ͸ͳ͍Έ͍ͨͳҰ؏ੑ͕อͨΕ͍ͯͳ͍
    ͱζϧζϧָͳํʹྲྀΕͯॻ͔Εͳ͘ͳΔ
    • ಛʹݴޠʹυΩϡϝϯςʔγϣϯͷπʔϧ͕෇͍
    ͍ͯΔ΋ͷ΋͋Δɻͦͷ৔߹͸πʔϧͷن໿ʹඞ
    ͣै͏ʢྫ: Javadoc, godoc, Doxygenʣɻ

    View Slide

  17. Don't Repeat the Code ͷݪଇ
    • ίʔυʹॻ͍ͯ͋Δ͜ͱΛͨͩͦͷ··ίϝ
    ϯτʹॻ͘͜ͱΛ͠ͳ͍
    // Add a horizontal scroll bar
    hScrollBar = new JScrollBar(JScrollBar.HORIZONTAL);
    add(hScrollBar, BorderLayout.SOUTH);
    // Add a vertical scroll bar
    vScrollBar = new JScrollBar(JScrollBar.VERTICAL);
    add(vScrollBar, BorderLayout.EAST);
    // Initialize the caret-position related values
    caretX = 0; caretY = 0; caretMemX = null;

    View Slide

  18. Don't Repeat the Code ͷݪଇ
    • ίʔυʹॻ͍ͯ͋Δ͜ͱΛͨͩͦͷ··ίϝ
    ϯτʹॻ͘͜ͱΛ͠ͳ͍
    // Add a horizontal scroll bar
    hScrollBar = new JScrollBar(JScrollBar.HORIZONTAL);
    add(hScrollBar, BorderLayout.SOUTH);
    // Add a vertical scroll bar
    vScrollBar = new JScrollBar(JScrollBar.VERTICAL);
    add(vScrollBar, BorderLayout.EAST);
    // Initialize the caret-position related values
    caretX = 0; caretY = 0; caretMemX = null;
    ͜͏͍͏ίʔυΛݟͨΒٯʹո͠Ή

    View Slide

  19. ΠϯλϑΣʔεͷίϝϯτ
    • ࢖ΘΕํͷ࣮ྫ
    • ࢖͏্Ͱͷ஫ҙࣄ߲
    • ந৅Խ͞ΕͯΔσβΠϯͷৄࡉΛॻ͘
    ʢLinkedListͰ࣮૷͞Ε͍ͯΔ౳ʣ

    View Slide

  20. ΠϯλϑΣʔεͷίϝϯτ
    • ࢖͍ํ΍࢖͏্Ͱͷ஫ҙࣄ߲͕ॻ͍ͯ͋Δ
    /*
    HTTP ͷαʔόͱΫϥΠΞϯτͷ࣮૷Λఏڙ͢ΔΠϯλϑΣʔε
    Get, Head, Post ͳͲͷ HTTP ϦΫΤετΛૹΔ৔߹ɺԼهͷํ๏ͰૹΔ
    resp, err := http.Get("http://example.com/")
    ...
    listenAndServeؔ਺Λ࣮ߦͨ͠ࡍʹطʹಉ͡ϙʔτΛlisten͍ͯͨ͠৔߹
    FatalΤϥʔͱͳΓɺىಈʹࣦഊ͢Δɻ
    */

    View Slide

  21. ࣮૷ͷίϝϯτ
    • Կނ͜͏͔ͨ͠ʢWhyʣ
    • ԿΛ͍ͯ͠Δ͔ͷ୺తઆ໌ʢWhatʣ
    • (Don't Repeat the Code ʹͳΒͳ͍Α͏ʹ)

    View Slide

  22. ࣮૷ͷίϝϯτ
    • ΤϥʔճආͷͨΊͷϫʔΫΞϥ΢ϯυ (Why)
    try {
    } catch(e) {
    // ຊདྷ͜͜ͰΩϟον͢Δ΂͖Ͱ͸ͳ͍͕ϥΠϒϥϦ͕ xxx Error Λ
    // throw ͢ΔͨΊɺҰ࣌తʹΩϟον͠ɺਖ਼ৗॲཧʹ໭͢ɻ
    // ຊମ΁ͷ Issue 12345 ͕औΓࠐ·ΕͨΒຊॲཧ͸ෆཁ
    }

    View Slide

  23. ࣮૷ͷίϝϯτ
    • ҰൃͰԿ΍ͬͯΔ͔Θ͔Βͳ͍࣌ͷղઆ
    // ೋ࣍ݩ഑ྻͷ֤഑ྻ͝ͱͷฏۉ஋ΛऔΔ
    let mut averages = vec![];
    for col in 0..len {
    let mut sum = 0;
    for row in 0..nums[col].len() {
    sum += nums[col][row];
    }
    averages.push(sum / nums[col].len());
    }

    View Slide

  24. ΈΜͳ͕࢖͏Α͏ͳϞδϡʔϧͳ
    ΒURLΛίϝϯτʹॻ͘ͷ΋͋Γ
    /*
    xxx ϩάͷਖ਼نԽΛߦ͏ؔ਺
    log.format("%s", foobarbaz);
    σβΠϯͷৄࡉ͸ԼهͷURLΛࢀর͢Δ͜ͱ
    https://example.com/foobarbaz
    */

    View Slide

  25. ίϝϯτ͍ͭॻ͔͘࿦૪
    • Ͱ͖Ε͹ΠϯλϑΣʔεͷίϝϯτ͸࣮૷લʹ
    ͪΌΜͱॻ͘ͷ͕๬·͍͠ͱͷ͜ͱ
    • ந৅Խ͢ΔͨΊͷσβΠϯϓϩηεͷҰ෦ͩͱ
    ଊ͑ͯ࠷ॳʹ΍Δ΂͖
    • ࣮૷ͨ͠ΒมΘΔ͔Β΍Γͨ͘ͳ͍ͱ͍͏ਓ͸
    σβΠϯϓϩηε͕ෆे෼ͳͷͩͱ੾ΓࣺͯΔ

    View Slide

  26. ίϝϯτ͍ͭॻ͔͘࿦૪
    • ޙʹ׳Ε͹ͳΔ΄Ͳਏ͘ͳΔΜ͔ͩΒࠓॻ͜͏
    • චऀ͸ίϝϯτΛॻ͍ͯΔͱ͖͕Ұ൪ָ͍࣌ͩ͠ͱࢥ͍ͬͯ
    Δͱͷ͜ͱ
    • ୺తͰ໌շͳίϝϯτ͕ॻ͚ͨ ≒ ઃܭ͕͏·͘ݴͬͯΔূڌ
    • ٯʹ্ख͘ίϝϯτ͕ॻ͚ͳ͍ͱ͍͏͜ͱ͸ઃܭ͕͏·͘
    ߦͬͯͳ͍ͷ͔΋͠Εͳ͍
    • ͜͏͍͏ࢥ͍Λ࣋ͪͳ͕ΒίϝϯτΛָ͠ΜͰॻ͖·͠ΐ͏

    View Slide

  27. ίϝϯτ͍ͭॻ͔͘࿦૪
    • ޙʹ׳Ε͹ͳΔ΄Ͳਏ͘ͳΔΜ͔ͩΒࠓॻ͜͏
    • චऀ͸ίϝϯτΛॻ͍ͯΔͱ͖͕Ұ൪ָ͍࣌ͩ͠ͱࢥ͍ͬͯ
    Δͱͷ͜ͱ
    • ୺తͰ໌շͳίϝϯτ͕ॻ͚ͨ ≒ ઃܭ͕͏·͘ݴͬͯΔূڌ
    • ٯʹ্ख͘ίϝϯτ͕ॻ͚ͳ͍ͱ͍͏͜ͱ͸ઃܭ͕͏·͘
    ߦͬͯͳ͍ͷ͔΋͠Εͳ͍
    • ͜͏͍͏ࢥ͍Λ࣋ͪͳ͕ΒίϝϯτΛָ͠ΜͰॻ͖·͠ΐ͏

    View Slide

  28. ໊લ෇͚ʹ͍ͭͯ

    View Slide

  29. ໊લ෇͚େࣄ
    • චऀ͕ੲͱ͋Δ஋ʹ block ͱ͍͏ม਺Λ෇͚ͨ
    • ͦͷϒϩοΫ͸ϋʔυσΟεΫͷ෺ཧϒϩοΫͷҙ
    ຯͰ෇͚͍ͯͨɻ
    • ͔͠͠ɺଞͷॴͰ͸࿦ཧϒϩοΫʹ΋ಉ͡ม਺
    block ͕͍͍ͭͯͨɻ
    • ͜ΕʹΑΓɺΑ͘Θ͔Βͳ͍όά͕ੜ·Ε͍ͯͨ

    View Slide

  30. ؓ࿩ٳ୊
    • ෺ཧϒϩοΫͱ࿦ཧϒϩοΫ
    • ෺ཧϒϩοΫ͸σΟεΫίϯτϩʔϥ͕ಡΈ
    ॻ͖͢Δ࣌ͷϒϩοΫͷ͜ͱ
    • ࿦ཧϒϩοΫ͸ͦΕΒΛ·ͱΊͨܗͰΧʔ
    ωϧ͕ѻ͏ϑΝΠϧಡΈॻ͖ͷࡍͷϒϩοΫ

    View Slide

  31. ໊લ෇͚େࣄ
    • ྑ໊͍લ͸ਖ਼֬͞ͱҰ؏ੑΛ࣋ͭ
    • Ұ؏ੑ
    • ಉ͡ҙຯͷ΋ͷʹಉ໊͡લ͕͍͍ͭͯΔ͜ͱ
    • ҧ͏ҙຯͷ΋ͷʹಉ໊͡લ͕͍͍ͭͯͳ͍͜
    ͱʢblockͷྫ͸͜ͷ৚݅ҧ൓ʣ

    View Slide

  32. ໊લ෇͚େࣄ
    • ਖ਼֬͞
    • ҙຯ͕े෼ʹڱ͍ํ͕ྑ͍
    • ᐆດͰ޿͍ҙຯ͕औΕͯ͠·͏ͱਖ਼͕֬͞
    ࣦΘΕΔ
    • blockͷྫ͸ҙຯ͕ᐆດͩͬͨ

    View Slide

  33. ໊લ෇͚େࣄ
    • ͡Ό͋΋ͷ͘͢͝௕͍ͱΑ͍ͷ͔ͱ͍͏ͱͦ
    ͏Ͱ͸ͳ͍
    • ಡΉଆ͕ཧղͰ͖Δ͔ʁΛ࠷ॳʹߟ͑Δ
    • ॻ͘ଆͷ౎߹Ͱ͍͖ͳΓΘʔͬͱॻ͘ͷ͸μ
    ϝɺಡΉଆͷ໨ઢͰߟ͑Δඞཁ͕͋Δ

    View Slide

  34. ͪͳΈʹҰจࣈม਺ʹ͍ͭͯ
    • iͱ͔jͱ͔͸ϧʔϓͷม਺ͳΒ΋͸΍ڞ௨ೝࣝͳͷͰ
    ࢖͍͍ͬͯ
    • ͨͩ Go ͸จԽతʹ୹͍ม਺Λ޷Ή͕ɺಡΉଆ͕ͦΕ
    Ͱे෼ʹཧղͰ͖Δ͔ʁΛߟ͑Δ΂͖Ͱ͋Δͱචऀ͸
    ओு͢Δ
    • ॻ͘ଆͷ౎߹Ͱ1จࣈͷม਺ʹ͢ΔͷͰ͸ͳ͘ɺಡΉ
    ଆ΋͜ΕͰཧղͰ͖Δͱࢥ͏ͳΒՄೳͩͱ͍͏ཧ࿦

    View Slide

  35. طଘίʔυΛमਖ਼͢Δ࣌

    View Slide

  36. طଘίʔυͷमਖ਼
    • ࠷ॳ͔Βਖ਼͍͠σβΠϯͷ΋ͷ͸ଘࡏ͠ͳ͍
    • ண࣮ʹमਖ਼͍ͯ͘͠ඞཁ͕͋Δ
    • adhoc ʹ tactical ͳίʔυΛॻ͘ͷͰ͸ͳ͘ɺ strategic ʹ
    ઃܭΛͪΌΜͱ͠ͳ͕ΒίʔυΛॻ͖ɺͦΕΛܧଓ͢Δ
    • ίʔυίϝϯτ΋ͳΔ΂ͪ͘ΌΜͱॻ͘
    • ίϝϯτ͸ந৅Խͨ͠΋ͷ΋༻ҙ͠ɺσβΠϯυΩϡϝϯτ
    ͳͲʹ΋൓ө͓͖ͯ͠ɺͲ͔͜ΒͰ΋ݟΕΔΑ͏ʹ͓ͯ͘͠

    View Slide

  37. ίʔυΛ໌շʹͤΑ

    View Slide

  38. ίʔυΛ໌շʹͤΑ
    • ໌շ͞ΛอͭͨΊͷςΫχοΫ
    • ඞཁͳ৘ใ͚ͩʹߜͬͨίʔυΛॻ͘
    • ίʔυن໿ΛकΔ
    • ॏཁͳ৘ใΛϋΠϥΠτ͢Δ

    View Slide

  39. ίʔυΛ໌շʹͤΑ
    • ඞཁͳ৘ใ͚ͩʹߜͬͨίʔυΛॻ͘
    • ୯Ұ੹຿ͷݪଇ
    • ৑௕ͰෳࡶͳॲཧΛ͠ͳ͍͜ͱʢKeep It
    Simpleʣ
    • ந৅Խ΍ϨΞέʔεͷߟྀΛߜΔ

    View Slide

  40. ίʔυΛ໌շʹͤΑ
    • ίʔυن໿ΛकΔ
    • ۭന΍վߦΛͪΌΜͱकΔ
    • ίϝϯτ͕ඞཁͳՕॴʹ͸ͪΌΜͱೖΕΔ
    • ݱ୅ͳΒ linter / formatter ͕උΘͬͯΔݴ
    ޠ΋͋ΔͷͰɺͦΕͰ΋͋Γ

    View Slide

  41. ίʔυΛ໌շʹͤΑ
    • ॏཁͳ৘ใʹϋΠϥΠτ͢Δ
    • ίϝϯτΛॻ͘
    • Ϡό͍ͱ͖͸Ϡό͍͜ͱ͕ҰൃͰΘ͔ΔΑ͏ͳ໋໊ʹ͢Δ
    • dangelouslySetInnerHTML
    • SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED

    View Slide

  42. ιϑτ΢ΣΞτϨϯυͱͷൺֱ

    View Slide

  43. ͜Ε·ͰͷτϨϯυͱ͜ͷຊͱ
    ͷཱͪҐஔൺֱ
    • ޙ൒ͷҰ൪໘ന͍ճ
    • ͜Ε·Ͱग़͖ͯͨιϑτ΢ΣΞͷτϨϯυʹରͯࣗ͠
    ෼ͷཱ৔Λ໌֬ʹ͢ΔՕॴ
    • ͳΜͱͳ͘ޙॻ͖ίϝϯτײ͕͋ͬͯҰ൪޷͖ͳՕॴ
    • ٯʹஶऀͷओ؍తͳ෦෼ͳͷͰɺ࿩൒෼ʹฉ͍͓ͯ͘
    ͷ͕ྑͦ͞͏

    View Slide

  44. ΦϒδΣΫτࢦ޲ϓϩάϥϛϯά

    View Slide

  45. ΦϒδΣΫτࢦ޲ϓϩάϥϛϯ
    ά
    • ෳࡶ͞ղফͷͨΊʹੜ·Εͨͱ͞Ε͍ͯΔ͕ຊ࣭త
    ʹෳࡶ͞ͷղফ͸อূͯ͘͠Εͳ͍ͱࠅධ͍ͯ͠Δ
    • ෳࡶͳ࣮૷͕Ӆṭ͞ΕΔͱ͍͏ΑΓ΋ෳࡶͳ··ʹ
    ͳΔ
    • ಛʹܧঝ͸ෳࡶ͞ΛӅṭͰ͖ͣɺ಺෦ͷঢ়ଶ͕ݟ͑
    ΔΑ͏ʹͳΔݴޠ͕ଟ͍ɺ݁Ռ࣮૷͕ΑΓෳࡶʹͳ
    Δ

    View Slide

  46. ΞδϟΠϧ։ൃ

    View Slide

  47. ΞδϟΠϧ։ൃ
    • εέδϡʔϧΛࡉ͔͘੾ͬͯΠςϨʔγϣϯΛճͯ͠։
    ൃ͢Δ෦෼͸ධՁ͍ͯ͠Δ
    • ҰํͰػೳʹ஫໨͞Ε͍͗ͯ͢Δ
    • ந৅Խͨ͠ઃܭΛ͢Δ࣌ؒΛอূͯ͘͠ΕΔΘ͚Ͱ͸ͳ
    ͍
    • Ή͠Ζ࣮૷͢Δํʹ༠ಋ͞Ε͕ͪͳͷͰ݁Ռ tactical
    programming ʹͳΓ͕ͪ

    View Slide

  48. Ϣχοτςετ

    View Slide

  49. Ϣχοτςετ
    • ࣗ෼ͷΠϯλϑΣʔεΛςετͨ͠ΓɺϦ
    ϑΝΫλϦϯάΛॿ͚ͯ͘ΕΔͱ͍͏ҙຯͰ
    ߴ͘ධՁ͍ͯ͠Δ
    • ͔͠͠ɺςετۦಈ։ൃɺಛʹςετϑΝʔε
    τͳߟ͑ํʹؔͯ͠͸࠷ॳ͔Βࡉ෦Λදݱ͠
    Α͏ͱ͍͗ͯͯ͢͠ɺߴϨϕϧͳઃܭͷݟ௚
    ͠ʹͳΓʹ͍͘ͱ͍͏఺Λ൷൑͍ͯ͠Δ

    View Slide

  50. σβΠϯύλʔϯ

    View Slide

  51. σβΠϯύλʔϯ
    • σβΠϯΛύλʔϯԽͯ͠ݴޠԽͨ͜͠ͱ͸ߴ͘ධՁ
    ͍ͯ͠Δ
    • ҰํͰɺશͯΛύλʔϯʹ͸ΊΑ͏ͱͯ͠͠·͏ਓͨ
    ͕ͪଟ͘ͳΔࣄΛݒ೦͍ͯ͠Δ
    • ύλʔϯ͸ແཧʹ࢖͏΋ͷͰ͸ͳ͍ɻ
    • ϋϚΔ΋ͷ͕͋ͬͨΒ࢖͑͹Α͍͠ɺϋϚΒͳ͍ͳΒ
    ແཧʹ࢖Θͳͯ͘Α͍ɻ

    View Slide

  52. ιϑτ΢ΣΞτϨϯυ
    • ৽͍͠τϨϯυ͕͋ͬͨΒɺ·ͣҎԼͷࣄΛߟ͑ͯ΄
    ͍͠
    • ιϑτ΢ΣΞ։ൃͷෳࡶ͞ΛͲ͏΍ͬͯղফ͠Α͏
    ͱ͍ͯ͠Δͷ͔
    • Ͳ͕͜લͷτϨϯυͱൺֱͯ͠ྑ͘ͳΔͷ͔
    • ࣗ෼ͷߟ͑ํΛ͜Ε·ͰͷτϨϯυͱൺ্ֱͨ͠
    Ͱਂ͘ߟ͑Δ͜ͱ

    View Slide

  53. ࠷ޙʹ

    View Slide

  54. චऀ͕఻͍͑ͨ͜ͱ
    • σβΠϯͷೳྗͱ͸ʮԿ͕ॏཁͰԿ͕ॏཁ͡Όͳ͍
    ͔Λऔࣺબ୒Ͱ͖ΔೳྗʯͰ͋Δ
    • ؒҧ͑Δ͜ͱ͸୭Ͱ΋͋ΔɺͰ΋ͦΕΛͪΌΜͱݟ
    ௚͢͜ͱɺ޿͘ਂ͘ߟ͑ͯࣗ෼Ͱऔࣺબ୒͢Δ͜ͱ
    • ͦΕ͕ͦ͜ྑ͍ιϑτ΢ΣΞΤϯδχΞʹͳΔϓϩ
    ηεͰ͋Γɺྑ͍σβΠϯೳྗΛ਎ʹ͚ͭΔํ๏Ͱ
    ͋Δ

    View Slide

  55. ·ͱΊ
    • ίϝϯτΛͪΌΜͱॻ͜͏
    • ໋໊͸Ұ؏ੑ͕͋ͬͯਖ਼֬ʹ
    • ίʔυن໿ʹैͬͯ໌շͳίʔυΛॻ͘
    • ιϑτ΢ΣΞτϨϯυΛࣗ෼ͷߟ͑ͱൺֱ͠Α͏
    • ࣗ෼Ͱߟ͑ͯࣗ෼ͰৼΓฦΔɺͦͷ্Ͱऔࣺબ୒͕
    Ͱ͖ΔΑ͏ʹͳΖ͏

    View Slide