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

ApplaudHerJp.pdf

 ApplaudHerJp.pdf

More Decks by Misaki Shioi(塩井美咲/しおい)

Other Decks in Programming

Transcript

  1. ͓͍͠Έ͖͞!DPF@
    .BS
    "QQMBVE)FS88$5PLZP3BJMT(JSMT5PLZP
    4FFNZl"$)*&7&.&/5z

    View full-size slide

  2. ࣗݾ঺հ
    ͓͍͠Έ͖͞!DPF@

    ɾ8FCϓϩάϥϚྺ൒೥ͷ։ൃॳ৺ऀ

    ɾגࣜձࣾΩϟλϧʹͯ
    ɹࢠڙ޲͚ӳޠֶश؅ཧγεςϜ$BUBMMPHͷ
    ɹ։ൃΛ୲౰
    ɾઌ݄։࠵ͷ3BJMT(JSMT5PLZPʹ
    ɹίʔνͱͯ͠ࢀՃͤͯ͞௖͖·ͨ͠

    View full-size slide

  3. ࠓճͷςʔϚʜ
    8PNBO8IP$PEF5PLZPͱ3BJMT(JSMTͰҰॹʹΠϕϯτΛ։࠵͍ͨ͠·
    ͢ʂ8PNBO8IP$PEFͰ͸"QQMBVE)FSͱ͍͏ɺʮ৽ٕ͘͠ज़৬ʹब
    ͍ͨʯʮঢਐͨ͠ʯʮΧϯϑΝϨϯεͰొஃͨ͠ʯʮ৽͍͠ϓϩάϥϛ
    ϯάݴޠΛֶशͨ͠ʯ౳ɺୡ੒ͨ͜͠ͱΛڞ༗ͯ͠শ͑߹͏Π
    ϕϯτΛߦ͍ͬͯ·͢ɻࠓճ͸8PNBO8IP$PEFɺ3BJMT(JSMTͷͦΕ
    ͧΕ͔Βܭਓͷঁੑ͕ొஃ͠·͢ɻ
    ࢀর"QQMBVE)FS&WFOUGFBUVSJOHXJUI3BJMT(JSMT5PLZP

    View full-size slide

  4. ࠓճͷςʔϚʜ
    ୡ੒

    View full-size slide

  5. 8FCϓϩάϥϚྺ൒೥
    ·ͩԿ΋
    ୡ੒͍ͯ͠ͳ͍ؾ͕͢Δʜ

    View full-size slide

  6. Θ͕ͨ͠ୡ੒͍ͨ͜͠ͱ
    ٕज़-5

    View full-size slide

  7. ͳͥʁ
    ʮܦݧ͸ઙ͘ͱ΋ɺ
    ɹɹҰਓͷϓϩάϥϚͱͯ͠
    ɹɹٕज़ͷ͓࿩͕͍ͨ͠ʯ

    View full-size slide

  8. ͱ͍͏͜ͱͰࠓ͔Β
    "QQMBVE)FSͰٕज़-5Λ͢Δ
    ʜΛୡ੒͍ͨ͠ͱࢥ͍·͢

    View full-size slide

  9. 3VCZPO3BJMTͷ
    ιʔείʔυΛಡΜͰΈΔ
    ͓࿩
    ͲΜͳ͓࿩ʁ

    View full-size slide

  10. 3VCZPO3BJMT
    3VCZPO3BJMTʢϧϏʔΦϯϨΠϧζʣ͸ɺΦʔϓϯιʔεͷ8FCΞϓ
    ϦέʔγϣϯϑϨʔϜϫʔΫͰ͋Δɻ3P3·ͨ͸୯ʹ3BJMTͱݺ͹Ε
    Δɻͦͷ໊ʹ΋ࣔ͞Ε͍ͯΔΑ͏ʹ3VCZͰॻ͔Ε͍ͯΔɻ·ͨ.PEFM
    7JFX$POUSPMMFSʢ.7$ʣΞʔΩςΫνϟʹج͍ͮͯߏங͞Ε͍ͯΔɻ
    ࢀরϑϦʔඦՊࣄయʰ΢ΟΩϖσΟΞʢ8JLJQFEJBʣʱ

    View full-size slide

  11. 3VCZPO3BJMT
    Ҿ༻ɿ%*7&*/50$0%&%*7&
    IUUQTEJWFSEJWFJOUPDPEFKQXFC@UFYUTEJWF
    .7$

    View full-size slide

  12. ͳͥʁ
    ᶃ3BJMTΞϓϦͰ։ൃ͍ͯ͠Δͱɺ
    ɹ಺෦࣮૷Λ஌Γ͍ͨॠ͕ؒ͋Δ
    ɹۤखҙࣝΛແ͓͖͍ͯͨ͘͠
    ᶄ3VCZͱ3BJMTେ޷͖
    ɹ޷͖ͳ΋ͷͷ͜ͱ͸΋ͬͱ஌Γ͍ͨ

    View full-size slide

  13. ͲͷΑ͏ʹʁ
    5XJUUFS͔Βը૾Λ͓आΓ͠·ͨ͠

    Ͳ͏΍ͬͯ
    3BJMTͷιʔείʔυΛ
    ಡΊ͹ྑ͍Ͱ͠ΐ͏͔ʁ
    ࠷৽ͷ3BJMTΑΓ΋
    3BJMͷίʔυΛಡΉͷ͕
    ͓͢͢ΊͰ͢
    3BJMTίϛολʔͷদా໌͞Μʹ࣭໰ͯ͠Έ·ͨ͠

    View full-size slide

  14. 3BJMTͱ͸
    3BJMTEJSFDUPSJFT pMFT

    ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ
    MT
    BDUJPONBJMFS BDUJWFSFDPSE QVTIHFNTSC
    BDUJPOQBDL BDUJWFTVQQPSU SBJMUJFT
    BDUJPOXFCTFSWJDF DMFBOMPHTTI SFMFBTFSC
    3BJMTEJSFDUPSJFT pMFT
    ࠷৽ίϛοτ͸೥ ˞ͦͷ··Ͱ͸ಈ͖·ͤΜ

    MT
    #SFXpMF 3&"%.&NE
    BDUJWFKPC QBDLBHFKTPO
    $0%&@0'@$0/%6$5NE3&-&"4*/(@3"*-4NE BDUJWFNPEFM SBJMTHFNTQFD
    $0/53*#65*/(NE 3BLFpMF BDUJWFSFDPSE SBJMUJFT
    (FNpMF BDUJPODBCMF BDUJWFTUPSBHF UBTLT
    (FNpMFMPDL BDUJPONBJMFS BDUJWFTVQQPSU UPPMT
    .*5-*$&/4& BDUJPOQBDL DJ WFSTJPOSC
    3"*-4@7&34*0/ BDUJPOWJFX HVJEFT

    View full-size slide

  15. 3BJMTͱ͸
    3BJMTEJSFDUPSJFT pMFT

    ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ
    MT
    BDUJPONBJMFS BDUJWFSFDPSE QVTIHFNTSC
    BDUJPOQBDL BDUJWFTVQQPSU SBJMUJFT
    BDUJPOXFCTFSWJDF DMFBOMPHTTI SFMFBTFSC
    3BJMTEJSFDUPSJFT pMFT
    ࠷৽ίϛοτ͸೥ ˞ͦͷ··Ͱ͸ಈ͖·ͤΜ

    MT
    #SFXpMF 3&"%.&NE
    BDUJWFKPC QBDLBHFKTPO
    $0%&@0'@$0/%6$5NE3&-&"4*/(@3"*-4NE BDUJWFNPEFM SBJMTHFNTQFD
    $0/53*#65*/(NE 3BLFpMF BDUJWFSFDPSE SBJMUJFT
    (FNpMF BDUJPODBCMF BDUJWFTUPSBHF UBTLT
    (FNpMFMPDL BDUJPONBJMFS BDUJWFTVQQPSU UPPMT
    .*5-*$&/4& BDUJPOQBDL DJ WFSTJPOSC
    3"*-4@7&34*0/ BDUJPOWJFX HVJEFT
    ίϯύΫτʂʂ

    View full-size slide

  16. ͩΕ͕ʁ
    Θͨ͠ͷϨϕϧײ
    ɹ
    ᶃϓϩάϥϛϯάྺ೥ϲ݄
    ɹ
    ᶄීஈͷۀ຿Ͱ͸3BJMTΞϓϦͷ
    ɹ؆୯ͳػೳ௥Ճ΍վमΛ୲౰
    ɹྫʣ"1*Λ࡞ͬͨΓ
    ɹɹɹ'PSN0CKFDUΛಋೖͨ͠Γ
    ɹ
    ᶅʮΦϒδΣΫτࢦ޲ઃܭ࣮ફΨΠυʯ
    ɹͬ͘͟Γׂ͘Β͍ͷཧղ

    View full-size slide

  17. ͋Β͔͡Ί΍͓͍ͬͯͨ͜ͱ
    ᶃ؆୯ͳHFNΛࣗ࡞ͯ͠ΈΔ
    ɹ‎HFNͷߏ଄ɺ࡞ΓํΛͬ͘͟Γ௫Ή
    ɹ
    ᶄখ͞ΊͷHFNͷιʔείʔυΛಡΜͰΈΔ
    ɹ‎ίʔυϦʔσΟϯάͷྲྀΕɺงғؾΛ௫Ή
    ɹ
    ᶅʮϝλϓϩάϥϛϯά3VCZʯΛͬ͘͟ΓಡΉ
    ɹ‎Ϋϥεͷߏ଄ಈతσΟεύονͱ͸FUD
    ɹɹϝλϓϩάϥϛϯάͰ
    ɹɹͲΜͳ͜ͱ͕Ͱ͖Δͷ͔ΛֶͿ
    ɹɹʢཧղ͕௥͍͍͍ͭͯ·ͤΜʜʣ

    View full-size slide

  18. ૣ଎΍ͬͯΈ·ͨ͠

    View full-size slide

  19. ࠓճ͸ͪ͜ΒΛௐ΂·͢
    3BJMTΞϓϦͷ
    8FCϖʔδ΁ΞΫηεͨ͠ͱ͖ʹ
    ը໘͕දࣔ͞ΕΔ࢓૊Έ

    View full-size slide

  20. 3VCZPO3BJMT
    Ҿ༻ɿ%*7&*/50$0%&%*7&
    IUUQTEJWFSEJWFJOUPDPEFKQXFC@UFYUTEJWF
    ͜ͷลΓ͕ొ৔͠·͢

    View full-size slide

  21. 3VCZPO3BJMT
    Ҿ༻ɿ%*7&*/50$0%&%*7&
    IUUQTEJWFSEJWFJOUPDPEFKQXFC@UFYUTEJWF
    ͜ͷลΓ͕ొ৔͠·͢

    View full-size slide

  22. ஫ҙ⚠
    ᶃͨ͘͞Μ༻ҙ͞Ε͍ͯΔํ๏ͷ͏ͪͷҰͭͱ
    ɹೝ͍͚ࣝͯͨͩ͠Δͱ޾͍Ͱ͢ɻ

    ᶄ͔ͳΓ؆ུԽ͍ͯ͠·͢ɻ

    ᶅݱࡏͷ3BJMTͰ͸࢖༻͞Ε͍ͯͳ͍
    ɹٕज़ͷ͓࿩ؚ͕·Ε·͢ɻ

    ᶆ͝ࢦఠɾΞυόΠεେ׻ܴͰ͢ʂʂ

    View full-size slide

  23. ͸͡Ίʹ
    ᶃ3BJMTͷιʔείʔυΛ(JU)VC͔ΒDMPOF

    ᶄDESBJMT

    ᶅλάΛWʹ੾Γସ͑Δ
    ɹHJUDIFDLPVUSFGTUBHTW

    ᶆૣ଎ಡΜͰΈΔ

    View full-size slide

  24. ը໘Λඳը‎7JFX
    'SPN%*7&*/50$0%&%*7&
    IUUQTEJWFSEJWFJOUPDPEFKQXFC@UFYUTEJWF

    View full-size slide

  25. WJFXΛදࣔ‎SFOEFSϝιουʁ

    View full-size slide

  26. WJFXΛදࣔ‎SFOEFSϝιουʁ
    BDUJPOQBDLMJCBDUJPO@WJFXCBTFSC
    module ActionView
    # …

    class Base

    # …

    def render(options = {}, old_local_assigns = {})

    if options.is_a?(String)

    render_file(options, true, old_local_assigns)

    elsif options.is_a?(Hash)

    # optionsͷkeyʹԠͯ͡෼ذ

    # ෼ذઌ͸

    render_file

    render_partial_collection

    render_partial

    render_template

    ɹɹɹͷ͍ͣΕ͔ͷϝιουΛݺͼग़͍ͯ͠Δ

    end

    end

    end

    end
    ‏WJFXͱ͍͏໊લ͕͍͍ͭͯΔϑΝΠϧΛݟͯΈΔ

    View full-size slide

  27. WJFXΛදࣔ‎SFOEFSϝιουʁ
    BDUJPOQBDLMJCBDUJPO@WJFXCBTFSC
    module ActionView
    # …

    class Base

    # …

    def render(options = {}, old_local_assigns = {})

    if options.is_a?(String)

    render_file(options, true, old_local_assigns)

    elsif options.is_a?(Hash)

    # optionsͷkeyʹԠͯ͡෼ذ

    # ෼ذઌ͸

    render_file

    render_partial_collection

    render_partial

    render_template

    ɹɹɹͷ͍ͣΕ͔ͷϝιουΛݺͼग़͍ͯ͠Δ

    end

    end

    end

    end
    ‏WJFXͱ͍͏໊લ͕͍͍ͭͯΔϑΝΠϧΛݟͯΈΔ
    ‏SFOEFSϝιου

    View full-size slide

  28. WJFXΛදࣔ‎SFOEFSϝιουʁ
    BDUJPOQBDLMJCBDUJPO@WJFXCBTFSC
    module ActionView
    # …

    class Base

    # …

    def render(options = {}, old_local_assigns = {})

    if options.is_a?(String)

    render_file(options, true, old_local_assigns)

    elsif options.is_a?(Hash)

    # optionsͷkeyʹԠͯ͡෼ذ

    # ෼ذઌ͸

    render_file

    render_partial_collection

    render_partial

    render_template

    ɹɹɹͷ͍ͣΕ͔ͷϝιουΛݺͼग़͍ͯ͠Δ

    end

    end

    end

    end
    ‏WJFXͱ͍͏໊લ͕͍͍ͭͯΔϑΝΠϧΛݟͯΈΔ
    ‏SFOEFSϝιου

    ࠷ऴతʹSFOEFS@UFNQMBUFΛݺͼग़͍ͯ͠Δ

    View full-size slide

  29. WJFXΛදࣔ‎SFOEFSϝιουʁ
    BDUJPOQBDLMJCBDUJPO@WJFXCBTFSC
    module ActionView
    # …

    class Base

    # …

    def render(options = {}, old_local_assigns = {})

    if options.is_a?(String)

    render_file(options, true, old_local_assigns)

    elsif options.is_a?(Hash)

    # optionsͷkeyʹԠͯ͡෼ذ

    # ෼ذઌ͸

    render_file

    render_partial_collection

    render_partial

    render_template

    ɹɹɹͷ͍ͣΕ͔ͷϝιουΛݺͼग़͍ͯ͠Δ

    end

    end

    end

    end
    ‏ͪΐͬͱಛघͳͷͰআ֎
    ‏WJFXͱ͍͏໊લ͕͍͍ͭͯΔϑΝΠϧΛݟͯΈΔ
    ‏SFOEFSϝιου

    ࠷ऴతʹSFOEFS@UFNQMBUFΛݺͼग़͍ͯ͠Δ

    View full-size slide

  30. WJFXΛදࣔ‎SFOEFSϝιουʁ
    BDUJPOQBDLMJCBDUJPO@WJFXCBTFSC
    module ActionView
    # …

    class Base

    # …

    def render(options = {}, old_local_assigns = {})

    if options.is_a?(String)

    render_file(options, true, old_local_assigns)

    elsif options.is_a?(Hash)

    # optionsͷkeyʹԠͯ͡෼ذ

    # ෼ذઌ͸

    render_file

    render_partial_collection

    render_partial

    render_template

    ɹɹɹͷ͍ͣΕ͔ͷϝιουΛݺͼग़͍ͯ͠Δ

    end

    end

    end

    end
    ‏ͪΐͬͱಛघͳͷͰআ֎
    ‏͜ͷϝιουͷத਎͸ʁ
    ‏WJFXͱ͍͏໊લ͕͍͍ͭͯΔϑΝΠϧΛݟͯΈΔ
    ‏SFOEFSϝιου

    ࠷ऴతʹSFOEFS@UFNQMBUFΛݺͼग़͍ͯ͠Δ

    View full-size slide

  31. SFOEFS@UFNQMBUFϝιουҎ߱
    BDUJPOQBDLMJCBDUJPO@WJFXCBTFSC
    module ActionView

    # …

    class Base

    # …

    def render_template(…)

    # Ҿ਺Ͱ༩͑ΒΕͨ৚݅ʹΑͬͯ෼ذ͍ͯ͠Δ

    # ࠷ऴతʹcompile_and_render_templateͱ͍͏ϝιουΛݺͼग़͍ͯ͠Δ

    end

    end

    ɹ

    ɹ

    ɹ

    ‏ઌ΄Ͳͱಉ͡ϑΝΠϧ
    ‏SFOEFS@UFNQMBUFϝιου

    View full-size slide

  32. SFOEFS@UFNQMBUFϝιουҎ߱
    BDUJPOQBDLMJCBDUJPO@WJFXCBTFSC
    module ActionView

    # …

    class Base

    # …

    def render_template(…)

    # Ҿ਺Ͱ༩͑ΒΕͨ৚݅ʹΑͬͯ෼ذ͍ͯ͠Δ

    # ࠷ऴతʹcompile_and_render_templateͱ͍͏ϝιουΛݺͼग़͍ͯ͠Δ

    end

    end

    ɹ

    ɹ

    ɹ

    ɹ

    def compile_and_render_template(…)

    # viewʹදࣔ͢ΔͨΊͷςϯϓϨʔτΛ࡞੒



    end
    # viewͷϑΝΠϧύεͱදࣔ͢ΔςϯϓϨʔτΛࢦఆ
    ‏ઌ΄Ͳͱಉ͡ϑΝΠϧ
    ‏SFOEFS@UFNQMBUFϝιου

    View full-size slide

  33. SFOEFS@UFNQMBUFϝιουҎ߱
    BDUJPOQBDLMJCBDUJPO@WJFXCBTFSC
    module ActionView

    # …

    class Base

    # …

    def render_template(…)

    # Ҿ਺Ͱ༩͑ΒΕͨ৚݅ʹΑͬͯ෼ذ͍ͯ͠Δ

    # ࠷ऴతʹcompile_and_render_templateͱ͍͏ϝιουΛݺͼग़͍ͯ͠Δ

    end

    end

    ɹ

    ɹ

    ɹ

    ɹ

    def compile_and_render_template(…)

    # viewʹදࣔ͢ΔͨΊͷςϯϓϨʔτΛ࡞੒



    end
    # viewͷϑΝΠϧύεͱදࣔ͢ΔςϯϓϨʔτΛࢦఆ
    ‎SFOEFS͕ݺ͹ΕΔ
    ‎SFOEFS@UFNQMBUF͕ݺ͹ΕΔ
    ‎DPNQJMF@BOE@SFOEFS@UFNQMBUF͕ݺ͹ΕΔ
    ‎ը໘ඳը͕׬ྃʂ
    ‏ઌ΄Ͳͱಉ͡ϑΝΠϧ
    ‏SFOEFS@UFNQMBUFϝιου

    View full-size slide

  34. ࠷ॳͷ
    SFOEFSϝιου͸
    Ͳ͔͜Βݺ͹Ε͍ͯΔʁ

    View full-size slide

  35. SFOEFSϝιου͸Ͳ͔͜Βݺ͹Ε͍ͯΔʁ
    ɾಉ͡"DUJPO7JFX#BTFΫϥεͷதͰ͸
    ɹݺͼग़͞Ε͍ͯͳ͔ͬͨ
    ɾ͜Ε͸ΠϯελϯεϝιουͳͷͰɺ
    ɹͲ͔͜Ͱ"DUJPO7JFX#BTFΫϥεͷΠϯελϯεʹରͯ͠
    ɹݺͼग़͞Ε͍ͯΔ͸ͣ
    ɹ
    ‎ͱ͍͏͜ͱ͸ɺ
    ɹͲ͔͜Ͱ"DUJPO7JFX#BTFΫϥεͷ
    ɹΠϯελϯε͕
    ɹੜ੒͞Ε͍ͯΔ͸ͣ

    View full-size slide

  36. 'SPN%*7&*/50$0%&%*7&
    IUUQTEJWFSEJWFJOUPDPEFKQXFC@UFYUTEJWF
    Կ͔Λൃݟ

    View full-size slide

  37. Կ͔Λൃݟ
    BDUJPOQBDLMJCBDUJPO@DPOUSPMMFSCBTFSC
    module ActionController
    # …

    class Base

    # …

    private

    def self.view_class
    unless @view_class

    @view_class = Class.new(ActionView::Base)

    @view_class.send(:include, master_helper_module)

    end
    @view_class

    end

    # …

    end

    end

    ɹ

    ɹ

    ɹ

    ɹ

    ɹɹ

    ‏BDUJPO@DPOUSPMMFSͱ͍͏ϑΝΠϧͷத

    View full-size slide

  38. Կ͔Λൃݟ
    BDUJPOQBDLMJCBDUJPO@DPOUSPMMFSCBTFSC
    module ActionController
    # …

    class Base

    # …

    private

    def self.view_class
    unless @view_class

    @view_class = Class.new(ActionView::Base)

    @view_class.send(:include, master_helper_module)

    end
    @view_class

    end

    # …

    end

    end

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ"DUJPO7JFX#BTFΫϥεΛܧঝ͢Δ
    ‏ແ໊ΫϥεΛੜ੒
    ‏BDUJPO@DPOUSPMMFSͱ͍͏ϑΝΠϧͷத

    View full-size slide

  39. Կ͔Λൃݟ
    BDUJPOQBDLMJCBDUJPO@DPOUSPMMFSCBTFSC
    module ActionController
    # …

    class Base

    # …

    private

    def self.view_class
    unless @view_class

    @view_class = Class.new(ActionView::Base)

    @view_class.send(:include, master_helper_module)

    end
    @view_class

    end

    # …

    end

    end

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ"DUJPO7JFX#BTFΫϥεΛܧঝ͢Δ
    ‏ແ໊ΫϥεΛੜ੒
    ‏BDUJPO@DPOUSPMMFSͱ͍͏ϑΝΠϧͷத
    ‎TFMGWJFX@DMBTTϝιου͸
    ɹͲ͔͜Βݺ͹Ε͍ͯΔʁ

    View full-size slide

  40. TFMGDMBTTWJFX@DMBTTϝιου͸Ͳ͔͜Βݺ͹Ε͍ͯΔʁ
    BDUJPOQBDLMJCBDUJPO@DPOUSPMMFSCBTFSC
    module ActionController

    # …

    class Base

    # …

    private

    def initialize_template_class(response)
    # …

    response.template = self.class.view_class.new(…)
    # …
    end

    # …

    end

    end

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ‏ઌ΄Ͳͱಉ͡ϑΝΠϧ

    View full-size slide

  41. TFMGDMBTTWJFX@DMBTTϝιου͸Ͳ͔͜Βݺ͹Ε͍ͯΔʁ
    BDUJPOQBDLMJCBDUJPO@DPOUSPMMFSCBTFSC
    module ActionController

    # …

    class Base

    # …

    private

    def initialize_template_class(response)
    # …

    response.template = self.class.view_class.new(…)
    # …
    end

    # …

    end

    end

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ˞͜͜Ͱ"DUJPO7JFX#BTFΫϥεΛܧঝ͢Δແ໊ΫϥεͷΠϯελϯεΛੜ੒
    ‎"DUJPO7JFX#BTFSFOEFSϝιουΛݺͼग़ͤΔΑ͏ʹͳΔ
    ‏ઌ΄Ͳͱಉ͡ϑΝΠϧ

    View full-size slide

  42. TFMGDMBTTWJFX@DMBTTϝιου͸Ͳ͔͜Βݺ͹Ε͍ͯΔʁ
    BDUJPOQBDLMJCBDUJPO@DPOUSPMMFSCBTFSC
    module ActionController

    # …

    class Base

    # …

    private

    def initialize_template_class(response)
    # …

    response.template = self.class.view_class.new(…)
    # …
    end

    # …

    end

    end

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ˞͜͜Ͱ"DUJPO7JFX#BTFΫϥεΛܧঝ͢Δແ໊ΫϥεͷΠϯελϯεΛੜ੒
    ‎"DUJPO7JFX#BTFSFOEFSϝιουΛݺͼग़ͤΔΑ͏ʹͳΔ
    ‏ઌ΄Ͳͱಉ͡ϑΝΠϧ
    ͜ͷޙͷॲཧͷྲྀΕʜ
    ɹᶃಉ͡"DUJPO$POUSPMMFS#BTFΫϥεͷதʹ
    ɹɹSFOEFS ಉ໊
    ͱ͍͏ϝιου͕ఆٛ͞Ε͍ͯΔ
    ɹᶄSFOEFSϝιουͷதͰɺ
    ɹɹ"DUJPO7JFX#BTFSFOEFSϝιουΛݺͿ

    View full-size slide

  43. TFMGDMBTTWJFX@DMBTTϝιου͸Ͳ͔͜Βݺ͹Ε͍ͯΔʁ
    BDUJPOQBDLMJCBDUJPO@DPOUSPMMFSCBTFSC
    module ActionController

    # …

    class Base

    # …

    private

    def initialize_template_class(response)
    # …

    response.template = self.class.view_class.new(…)
    # …
    end

    # …

    end

    end

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ˞͜͜Ͱ"DUJPO7JFX#BTFΫϥεΛܧঝ͢Δແ໊ΫϥεͷΠϯελϯεΛੜ੒
    ‎"DUJPO7JFX#BTFSFOEFSϝιουΛݺͼग़ͤΔΑ͏ʹͳΔ
    ‏ઌ΄Ͳͱಉ͡ϑΝΠϧ
    ͜ͷޙͷॲཧͷྲྀΕʜ
    ɹᶃಉ͡"DUJPO$POUSPMMFS#BTFΫϥεͷதʹ
    ɹɹSFOEFS ಉ໊
    ͱ͍͏ϝιου͕ఆٛ͞Ε͍ͯΔ
    ɹᶄSFOEFSϝιουͷதͰɺ
    ɹɹ"DUJPO7JFX#BTFSFOEFSϝιουΛݺͿ
    ‎JOJUJBMJ[F@UFNQMBUF@DMBTTϝιου͸Ͳ͔͜Βʢུʣ

    View full-size slide

  44. ϝιουΛḪΔཱྀ
    ɾ"DUJPO$POUSPMMFS#BTFJOJUJBMJ[F@UFNQMBUF@DMBTT
    ‎"DUJPO$POUSPMMFS#BTFΫϥεͷQSPDFTTͱ͍͏
    ɹɹϝιου͔Βݺͼग़͞Ε͍ͯΔ

    /05'06/%⛔
    ɾ%JTQBUDI4FSWMFUTFSWJDF

    View full-size slide

  45. QSPDFTTϝιου͸Ͳ͔͜Βݺ͹Ε͍ͯΔʁ
    ϝιου໊ QSPDFTT
    ͰHSFQͯ͠Έ·ͨ͠
    $ grep -r ‘process(request, response)’ ./* ※rails σΟϨΫτϦ௚Լ



    ./railties/lib/dispatcher.rb:

    ActionController::Routing::Routes.recognize!(request)

    .process(request, response)
    .out(output)



    ※վߦ͍ͯ͠·͢
    ‐͋΍͍͠Կ͔Λൃݟ
    QSPDFTT͕ݺͼग़͞Ε͍ͯΔ௚લͷSFDPHOJ[FϝιουͷதͰ
    "DUJPO$POUSPMMFS#BTFΫϥεʹؔΘΔૢ࡞͕͋Δ͸ͣ

    View full-size slide

  46. SFDPHOJ[FϝιουͷதΛݟʹߦ͖·͢
    'SPN%*7&*/50$0%&%*7&
    IUUQTEJWFSEJWFJOUPDPEFKQXFC@UFYUTEJWF

    View full-size slide

  47. BDUJPOQBDLMJCBDUJPO@DPOUSPMMFSSPVUJOHSC
    module ActionController

    module Routing

    class RouteSet
    # …

    def recognize(request)

    string_path = request.path

    # …

    path = string_path.split ‘/’

    # …

    hash = recognize_path(path)

    # …

    controller = hash[‘controller’]

    # …

    controller.new

    end

    alias :recognize! :recognize

    end

    end

    ɹ

    ɹ

    SFDPHOJ[FϝιουͷதΛݟʹߦ͖·͢
    ‏SPVUJOH͕ఆٛ͞Ε͍ͯΔϑΝΠϧ

    View full-size slide

  48. BDUJPOQBDLMJCBDUJPO@DPOUSPMMFSSPVUJOHSC
    module ActionController

    module Routing

    class RouteSet
    # …

    def recognize(request)

    string_path = request.path

    # …

    path = string_path.split ‘/’

    # …

    hash = recognize_path(path)

    # …

    controller = hash[‘controller’]

    # …

    controller.new

    end

    alias :recognize! :recognize

    end

    end

    ɹ

    ɹ

    ‏$POUSPMMFSΒ͖͠΋ͷ͕ΠϯελϯεԽ͞Ε͍ͯΔʂ
    ‏SFDPHOJ[F͸SFDPHOJ[FͷΤΠϦΞε
    SFDPHOJ[FϝιουͷதΛݟʹߦ͖·͢
    ‏SPVUJOH͕ఆٛ͞Ε͍ͯΔϑΝΠϧ

    View full-size slide

  49. ͭ·Γ͜͏
    SBJMUJFTMJCEJTQBUDIFSSC
    class Dispatcher

    class << self

    def dispatch(…)

    # …

    ActionController::Routing::Routes.recognize!(request)

    .process(request, response)
    .out(output)

    #…

    end

    end

    end

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ‏QSPDFTTϝιου͕ݟ͔ͭͬͨϑΝΠϧ

    View full-size slide

  50. ͭ·Γ͜͏
    SBJMUJFTMJCEJTQBUDIFSSC
    class Dispatcher

    class << self

    def dispatch(…)

    # …

    ActionController::Routing::Routes.recognize!(request)

    .process(request, response)
    .out(output)

    #…

    end

    end

    end

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ‐"DUJPO$POUSPMMFS#BTFͷΠϯελϯεੜ੒
    ‐"DUJPO$POUSPMMFS#BTFQSPDFTTϝιου࣮ߦ
    ‐ͦͷଞͷॲཧ
    ‏QSPDFTTϝιου͕ݟ͔ͭͬͨϑΝΠϧ

    View full-size slide

  51. ͭ·Γ͜͏
    SBJMUJFTMJCEJTQBUDIFSSC
    class Dispatcher

    class << self

    def dispatch(…)

    # …

    ActionController::Routing::Routes.recognize!(request)

    .process(request, response)
    .out(output)

    #…

    end

    end

    end

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ‐"DUJPO$POUSPMMFS#BTFͷΠϯελϯεੜ੒
    ‐"DUJPO$POUSPMMFS#BTFQSPDFTTϝιου࣮ߦ
    ‐ͦͷଞͷॲཧ
    ͜͜Ͱ΍͍ͬͯΔ͜ͱʜ
    ᶃSFDPHOJ[F‎63-ͱ$POUSPMMFSΛੜ੒
    ᶄQSPDFTT‎ΞΫγϣϯ ͲΜͳૢ࡞Λߦ͏͔
    ͷੜ੒ͱݺͼग़͠
    ‏QSPDFTTϝιου͕ݟ͔ͭͬͨϑΝΠϧ

    View full-size slide

  52. ͭ·Γ͜͏
    SBJMUJFTMJCEJTQBUDIFSSC
    class Dispatcher

    class << self

    def dispatch(…)

    # …

    ActionController::Routing::Routes.recognize!(request)

    .process(request, response)
    .out(output)

    #…

    end

    end

    end

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ‐"DUJPO$POUSPMMFS#BTFͷΠϯελϯεੜ੒
    ‐"DUJPO$POUSPMMFS#BTFQSPDFTTϝιου࣮ߦ
    ‐ͦͷଞͷॲཧ
    ͜͜Ͱ΍͍ͬͯΔ͜ͱʜ
    ᶃSFDPHOJ[F‎63-ͱ$POUSPMMFSΛੜ੒
    ᶄQSPDFTT‎ΞΫγϣϯ ͲΜͳૢ࡞Λߦ͏͔
    ͷੜ੒ͱݺͼग़͠
    ‏QSPDFTTϝιου͕ݟ͔ͭͬͨϑΝΠϧ
    ‎EJTQBUDIϝιου͸Ͳ͔͜Βݺ͹Ε͍ͯΔʁ

    View full-size slide

  53. ϝιουΛḪΔཱྀɺ;ͨͨͼ
    ɾ%JTQBUDIFSEJTQBUDI
    ‎%JTQBUDI4FSWMFUΫϥε SBJMUJFTMJCXFCSJDL@TFSWFSSC
    ͷ
    ɹɹIBOEMF@EJTQBUDIͱ͍͏Πϯελϯεϝιου
    /05'06/%⛔

    ɾ%JTQBUDI4FSWMFUIBOEMF@EJTQBUDI
    ‎ಉ͡%JTQBUDI4FSWMFUΫϥεͷ
    ɹɹTFSWJDFͱ͍͏Πϯελϯεϝιου

    ɾ%JTQBUDI4FSWMFUTFSWJDF

    View full-size slide

  54. TFSWJDFϝιου͸Ͳ͔͜Βݺ͹Ε͍ͯΔʁ
    Ϋϥε໊ %JTQBUDI4FSWMFU
    ͰHSFQͯ͠Έ·ͨ͠
    ‐͋΍͍͠Կ͔Λൃݟ
    $ grep -r ‘DispatchServlet’ ./* ※rails σΟϨΫτϦ௚Լ



    ./railties/lib/webrick_server.rb:

    server.mount(‘/’, DispatchServlet, option)

    ※վߦ͍ͯ͠·͢
    %JTQBUDI4FSWMFUΫϥε͕ݺ͹Ε͍ͯΔ
    SBJMUJFTMJCXFCSJDL@TFSWFSSCΛݟʹ͍͖·͢

    View full-size slide

  55. SBJMUJFTMJCXFCSJDL@TFSWFSSC
    'SPN%*7&*/50$0%&%*7&
    IUUQTEJWFSEJWFJOUPDPEFKQXFC@UFYUTEJWF

    View full-size slide

  56. 8SJDL͕ొ৔
    SBJMUJFTMJCXFCSJDL@TFSWFSSC
    class DispatchServlet < WEBrick::HTTPServlet::AbstractServlet
    # …

    def self.dispatch(…)

    # …

    server = WEBrick::HTTPServer.new(…)

    server.mount(‘/’, DispatchServlet, options)

    # …

    end

    end

    end

    ɹ

    ɹ

    ɹ

    %JTQBUDI4FSWMFUΫϥε
    ʜ8SJDL)5514FSWMFU"CTUSBDU4FSWMFUΛܧঝͨ͠Ϋϥε

    View full-size slide

  57. 8SJDL͕ొ৔
    SBJMUJFTMJCXFCSJDL@TFSWFSSC
    class DispatchServlet < WEBrick::HTTPServlet::AbstractServlet
    # …

    def self.dispatch(…)

    # …

    server = WEBrick::HTTPServer.new(…)

    server.mount(‘/’, DispatchServlet, options)

    # …

    end

    end

    end

    ɹ

    ɹ

    ɹ

    ‐8SJDLͱ͸ʁ)551αʔόʔϑϨʔϜϫʔΫ
    ɹ֎෦ϥΠϒϥϦ͔ΒαʔόʔͷػೳΛܧঝ͍ͯ͠Δ
    ‑8SJDLΠϯελϯεΛੜ੒
    %JTQBUDI4FSWMFUΫϥε
    ʜ8SJDL)5514FSWMFU"CTUSBDU4FSWMFUΛܧঝͨ͠Ϋϥε

    View full-size slide

  58. 8SJDL͕ొ৔
    SBJMUJFTMJCXFCSJDL@TFSWFSSC
    class DispatchServlet < WEBrick::HTTPServlet::AbstractServlet
    # …

    def self.dispatch(…)

    # …

    server = WEBrick::HTTPServer.new(…)

    server.mount(‘/’, DispatchServlet, options)

    # …

    end

    end

    end

    ɹ

    ɹ

    ɹ

    ‐8SJDLͱ͸ʁ)551αʔόʔϑϨʔϜϫʔΫ
    ɹ֎෦ϥΠϒϥϦ͔ΒαʔόʔͷػೳΛܧঝ͍ͯ͠Δ
    ‑8SJDLΠϯελϯεΛੜ੒
    ‏8SJDLΠϯελϯε͕
    ɹNPVOUϝιουΛݺͼग़͠
    %JTQBUDI4FSWMFUΫϥε
    ʜ8SJDL)5514FSWMFU"CTUSBDU4FSWMFUΛܧঝͨ͠Ϋϥε

    View full-size slide

  59. 8SJDL͕ొ৔
    SBJMUJFTMJCXFCSJDL@TFSWFSSC
    class DispatchServlet < WEBrick::HTTPServlet::AbstractServlet
    # …

    def self.dispatch(…)

    # …

    server = WEBrick::HTTPServer.new(…)

    server.mount(‘/’, DispatchServlet, options)

    # …

    end

    end

    end

    ɹ

    ɹ

    ɹ

    ‐8SJDLͱ͸ʁ)551αʔόʔϑϨʔϜϫʔΫ
    ɹ֎෦ϥΠϒϥϦ͔ΒαʔόʔͷػೳΛܧঝ͍ͯ͠Δ
    ‑8SJDLΠϯελϯεΛੜ੒
    ‏8SJDLΠϯελϯε͕
    ɹNPVOUϝιουΛݺͼग़͠
    %JTQBUDI4FSWMFUΫϥε
    ʜ8SJDL)5514FSWMFU"CTUSBDU4FSWMFUΛܧঝͨ͠Ϋϥε
    ‎NPVOUϝιουʁʁʁ

    View full-size slide

  60. 8SJDLͷ࢖͍ํΛ֬ೝͯ͠ΈΔʜ
    Ҿ༻ɿ3VCZϦϑΝϨϯεϚχϡΞϧ
    IUUQTEPDTSVCZMBOHPSHKBMBUFTUMJCSBSZXFCSJDLIUNM

    View full-size slide

  61. 8SJDLͷ࢖͍ํΛ֬ೝͯ͠ΈΔʜ
    Ҿ༻ɿ3VCZϦϑΝϨϯεϚχϡΞϧ
    IUUQTEPDTSVCZMBOHPSHKBMBUFTUMJCSBSZXFCSJDLIUNM
    ίʔυྫɿ
    ղઆɿ

    View full-size slide

  62. 8SJDLͷ࢖͍ํΛ֬ೝͯ͠ΈΔʜ
    Ҿ༻ɿ3VCZϦϑΝϨϯεϚχϡΞϧ
    IUUQTEPDTSVCZMBOHPSHKBMBUFTUMJCSBSZXFCSJDLIUNM
    ίʔυྫɿ
    ղઆɿ
    ‑ઌ΄Ͳͷίʔυͱ΄΅ಉ͡
    ᶃ63-ͱ8SJDLΛܧঝͨ͠Ϋϥε͕ඥ෇͚ΒΕΔ
    ᶄ63-ʹΞΫηε͕͋Δͨͼɺαʔόʔͷ৘ใΛݩʹΫϥεͷΠϯελϯεΛੜ੒
    ᶅΠϯελϯε͕TFSWJDFϝιουΛݺͿ
    ᶆΠϯελϯε͕αʔόʔͷ৘ใΛݩʹॲཧΛ࣮ߦ

    View full-size slide

  63. 8SJDLͷ࢖͍ํΛ֬ೝͯ͠ΈΔʜ
    ໰୊ͷՕॴɿ
    ᶅΠϯελϯε͕TFSWJDFϝιουΛݺͿ

    View full-size slide

  64. ͭ·Γʜ
    ᶃ8SJDLαʔόʔ͕
    ɹ%JTQBUDI4FSWMFUΫϥεͱඥ෇͚ΒΕΔ

    ᶄ63-ʹରͯ͠ΞΫηε͕ൃੜ͢Δͱɺ
    ɹ%JTQBUDI4FSWMFUΫϥεͷΠϯελϯε͕
    ɹੜ੒͞ΕΔ

    ᶅᶄͷΠϯελϯε͕
    ɹ%JTQBUDI4FSWMFUΫϥεͰఆٛ͞Ε͍ͯΔ
    ɹTFSWJDFϝιουΛݺͿ
    ɹ‎͜ͷޙͷҰ࿈ͷྲྀΕʹͭͳ͕Δ

    View full-size slide

  65. ࠷ޙͷٙ໰
    SBJMUJFTMJCXFCSJDL@TFSWFSSC
    class DispatchServlet < WEBrick::HTTPServlet::AbstractServlet
    # …

    def self.dispatch(…)

    # …

    server = Webrick::HTTPServer.new(…)

    server.mount(‘/’, DispatchServlet, options)

    # …

    end

    end

    end

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ‏ઌ΄ͲͷϑΝΠϧ
    EJTQBUDIϝιου͸
    Ͳ͔͜Βݺ͹ΕΔʁ

    View full-size slide

  66. ࠷ޙͷٙ໰
    SBJMUJFTMJCDPNNBOETXFCSJDLSC
    SFRVJSFbXFCSJDL`
    # …

    OPTIONS = {

    :port => 3000,

    :ip => “0.0.0.0",

    # …

    }

    # …

    puts “=> Rails Apprication started on http://#{OPTIONS[:ip]}:#{OPTIONS[:PORT]}”

    puts “=> Ctrl-C to Shutdown server; call with —help for options” if OPTIONS[:server_type]
    == WEBrick::SimpleServer

    DispatchServlet.dispatch(OPTIONS)

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ‏3BJMTͷίϚϯυ͕ఆٛ͞Ε͍ͯΔσΟϨΫτϦͷத

    View full-size slide

  67. ࠷ޙͷٙ໰
    SBJMUJFTMJCDPNNBOETXFCSJDLSC
    SFRVJSFbXFCSJDL`
    # …

    OPTIONS = {

    :port => 3000,

    :ip => “0.0.0.0",

    # …

    }

    # …

    puts “=> Rails Apprication started on http://#{OPTIONS[:ip]}:#{OPTIONS[:PORT]}”

    puts “=> Ctrl-C to Shutdown server; call with —help for options” if OPTIONS[:server_type]
    == WEBrick::SimpleServer

    DispatchServlet.dispatch(OPTIONS)

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ‏3BJMTͷίϚϯυ͕ఆٛ͞Ε͍ͯΔσΟϨΫτϦͷத

    View full-size slide

  68. ࠷ޙͷٙ໰
    SBJMUJFTMJCDPNNBOETXFCSJDLSC
    SFRVJSFbXFCSJDL`
    # …

    OPTIONS = {

    :port => 3000,

    :ip => “0.0.0.0",

    # …

    }

    # …

    puts “=> Rails Apprication started on http://#{OPTIONS[:ip]}:#{OPTIONS[:PORT]}”

    puts “=> Ctrl-C to Shutdown server; call with —help for options” if OPTIONS[:server_type]
    == WEBrick::SimpleServer

    DispatchServlet.dispatch(OPTIONS)

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ‏3BJMTͷίϚϯυ͕ఆٛ͞Ε͍ͯΔσΟϨΫτϦͷத
    ‑ݟ֮͑ͷ͋Δهड़

    View full-size slide

  69. ࠷ޙͷٙ໰
    SBJMUJFTMJCDPNNBOETXFCSJDLSC
    SFRVJSFbXFCSJDL`
    # …

    OPTIONS = {

    :port => 3000,

    :ip => “0.0.0.0",

    # …

    }

    # …

    puts “=> Rails Apprication started on http://#{OPTIONS[:ip]}:#{OPTIONS[:PORT]}”

    puts “=> Ctrl-C to Shutdown server; call with —help for options” if OPTIONS[:server_type]
    == WEBrick::SimpleServer

    DispatchServlet.dispatch(OPTIONS)

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ‏3BJMTͷίϚϯυ͕ఆٛ͞Ε͍ͯΔσΟϨΫτϦͷத
    ‎ΞϓϦέʔγϣϯαʔόʔΛىಈ͢Δ SBJMTTFSWFS

    ‑ݟ֮͑ͷ͋Δهड़

    View full-size slide

  70. ࠷ޙͷٙ໰
    SBJMUJFTMJCDPNNBOETXFCSJDLSC
    SFRVJSFbXFCSJDL`
    # …

    OPTIONS = {

    :port => 3000,

    :ip => “0.0.0.0",

    # …

    }

    # …

    puts “=> Rails Apprication started on http://#{OPTIONS[:ip]}:#{OPTIONS[:PORT]}”

    puts “=> Ctrl-C to Shutdown server; call with —help for options” if OPTIONS[:server_type]
    == WEBrick::SimpleServer

    DispatchServlet.dispatch(OPTIONS)

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ‏3BJMTͷίϚϯυ͕ఆٛ͞Ε͍ͯΔσΟϨΫτϦͷத
    ‎ΞϓϦέʔγϣϯαʔόʔΛىಈ͢Δ SBJMTTFSWFS

    ‎%JTQBUDI4FSWMFUEJTQBUDI͕ࣗಈతʹ࣮ߦ͞ΕΔ
    ‑ݟ֮͑ͷ͋Δهड़

    View full-size slide

  71. ࠷ޙͷٙ໰
    SBJMUJFTMJCDPNNBOETXFCSJDLSC
    SFRVJSFbXFCSJDL`
    # …

    OPTIONS = {

    :port => 3000,

    :ip => “0.0.0.0",

    # …

    }

    # …

    puts “=> Rails Apprication started on http://#{OPTIONS[:ip]}:#{OPTIONS[:PORT]}”

    puts “=> Ctrl-C to Shutdown server; call with —help for options” if OPTIONS[:server_type]
    == WEBrick::SimpleServer

    DispatchServlet.dispatch(OPTIONS)

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ɹ

    ‎63-ʹΞΫηε͕ൃੜ͢Δͨͼʹ
    ɹը໘͕ඳը͞ΕΔ
    ‏3BJMTͷίϚϯυ͕ఆٛ͞Ε͍ͯΔσΟϨΫτϦͷத
    ‎ΞϓϦέʔγϣϯαʔόʔΛىಈ͢Δ SBJMTTFSWFS

    ‎%JTQBUDI4FSWMFUEJTQBUDI͕ࣗಈతʹ࣮ߦ͞ΕΔ
    ‑ݟ֮͑ͷ͋Δهड़

    View full-size slide

  72. ͓ർΕ༷Ͱͨ͠

    View full-size slide

  73. ײ૝
    ೉͍͠

    View full-size slide

  74. ײ૝
    Ͱ΋
    ָ͍͠

    View full-size slide

  75. ࠓճͷ੒Ռ
    ᶃίʔυϦʔσΟϯάͷྲྀΕΛ௫Μͩ
    ɹɾ֬ೝ͍ͨ͠ಈ࡞͔ΒϝιουΛ্Լʹḷ͍ͬͯ͘
    ɹɾҰߦҰߦஸೡʹಡΉͷͰ͸ͳ͘ɺ
    ɹɹ·ͣ͸ͬ͘͟ΓͱશମͷྲྀΕΛ௫Ή
    ɹɾϝλϓϩάϥϛϯά΁ͷ଄ܮ͕૬౰ٻΊΒΕΔ
    ɹ
    ᶄιʔείʔυΛಡΉ͜ͱ΁ͷ఍߅ײ͕ݮͬͨɹɹ
    ɹ
    ᶅ3BJMTͷଚ͕͞Θ͔ͬͨ

    View full-size slide

  76. ࠓޙͷ՝୊
    ᶃࠓճಡΊͳ͔ͬͨϞσϧपΓͷॲཧΛಡΉ
    ɹ
    ᶄ΋ͬͱܰྔͳϑϨʔϜϫʔΫͷ
    ɹιʔείʔυΛࣸܦͯ͠ΈΔ
    ɹʢ8FCΞϓϦέʔγϣϯΛ
    ɹɹ࣮ݱ͢Δ࢓૊ΈΛཧղ͢Δʣ
    ɹ
    ᶅʮϝλϓϩάϥϛϯά3VCZʯΛ͔ͬ͠Γ΍Δ

    View full-size slide

  77. ͱ͍͏͜ͱͰ
    "QQMBVE)FSͰٕज़-5Λ͢Δ
    ୡ੒Ͱ͖·ͨ͠

    View full-size slide

  78. օ͞Μͷୡ੒ͨ͜͠ͱ΋
    ͥͻฉ͔͍ͤͯͩ͘͞,

    View full-size slide

  79. 4QFDJBM5IBOLT
    ࠓճͷൃදͷ͖͔͚ͬͱखॿ͚Λͩͬͨ͘͞ํʑ
    ɹ
    ɹɹদా໌͞Μ
    ɹɹେ૔խ࢙͞Μ
    ɹɹͶ͜͞Μ
    "TBLVTBSC
    ɹɹ5BNBSC
    ɹ
    ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ---

    View full-size slide

  80. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ

    View full-size slide