Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

ApplaudHerJp.pdf

 ApplaudHerJp.pdf

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

Other Decks in Programming

Transcript

  1. 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
  2. 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 ίϯύΫτʂʂ
  3. 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ͱ͍͏໊લ͕͍͍ͭͯΔϑΝΠϧΛݟͯΈΔ
  4. 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ϝιου
  5. 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Λݺͼग़͍ͯ͠Δ ‑
  6. 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Λݺͼग़͍ͯ͠Δ ‑
  7. 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Λݺͼग़͍ͯ͠Δ ‑
  8. SFOEFS@UFNQMBUFϝιουҎ߱ BDUJPOQBDLMJCBDUJPO@WJFXCBTFSC module ActionView # … class Base # …

    def render_template(…) # Ҿ਺Ͱ༩͑ΒΕͨ৚݅ʹΑͬͯ෼ذ͍ͯ͠Δ # ࠷ऴతʹcompile_and_render_templateͱ͍͏ϝιουΛݺͼग़͍ͯ͠Δ end end ɹ ɹ ɹ ‏ઌ΄Ͳͱಉ͡ϑΝΠϧ ‏SFOEFS@UFNQMBUFϝιου
  9. 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ϝιου
  10. 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ϝιου
  11. Կ͔Λൃݟ 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ͱ͍͏ϑΝΠϧͷத
  12. Կ͔Λൃݟ 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ͱ͍͏ϑΝΠϧͷத
  13. Կ͔Λൃݟ 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ϝιου͸ ɹͲ͔͜Βݺ͹Ε͍ͯΔʁ ‏
  14. TFMGDMBTTWJFX@DMBTTϝιου͸Ͳ͔͜Βݺ͹Ε͍ͯΔʁ BDUJPOQBDLMJCBDUJPO@DPOUSPMMFSCBTFSC module ActionController # … class Base # …

    private def initialize_template_class(response) # … response.template = self.class.view_class.new(…) # … end # … end end ɹ ɹ ɹ ɹ ɹ ɹ ɹ ‏ઌ΄Ͳͱಉ͡ϑΝΠϧ
  15. 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ϝιουΛݺͼग़ͤΔΑ͏ʹͳΔ ‏ઌ΄Ͳͱಉ͡ϑΝΠϧ
  16. 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ϝιουΛݺͿ
  17. 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ϝιου͸Ͳ͔͜Βʢུʣ ‏
  18. 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ΫϥεʹؔΘΔૢ࡞͕͋Δ͸ͣ
  19. 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͕ఆٛ͞Ε͍ͯΔϑΝΠϧ
  20. 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͕ఆٛ͞Ε͍ͯΔϑΝΠϧ
  21. ͭ·Γ͜͏ SBJMUJFTMJCEJTQBUDIFSSC class Dispatcher class << self def dispatch(…) #

    … ActionController::Routing::Routes.recognize!(request) .process(request, response) .out(output) #… end end end ɹ ɹ ɹ ɹ ɹ ɹ ‏QSPDFTTϝιου͕ݟ͔ͭͬͨϑΝΠϧ
  22. ͭ·Γ͜͏ 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ϝιου͕ݟ͔ͭͬͨϑΝΠϧ
  23. ͭ·Γ͜͏ 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ϝιου͕ݟ͔ͭͬͨϑΝΠϧ
  24. ͭ·Γ͜͏ 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ϝιου͸Ͳ͔͜Βݺ͹Ε͍ͯΔʁ ‏
  25. TFSWJDFϝιου͸Ͳ͔͜Βݺ͹Ε͍ͯΔʁ Ϋϥε໊ %JTQBUDI4FSWMFU ͰHSFQͯ͠Έ·ͨ͠ ‐͋΍͍͠Կ͔Λൃݟ $ grep -r ‘DispatchServlet’ ./*

    ※rails σΟϨΫτϦ௚Լ … ./railties/lib/webrick_server.rb: server.mount(‘/’, DispatchServlet, option) ※վߦ͍ͯ͠·͢ %JTQBUDI4FSWMFUΫϥε͕ݺ͹Ε͍ͯΔ SBJMUJFTMJCXFCSJDL@TFSWFSSCΛݟʹ͍͖·͢
  26. 8&#SJDL͕ొ৔ SBJMUJFTMJCXFCSJDL@TFSWFSSC class DispatchServlet < WEBrick::HTTPServlet::AbstractServlet # … def self.dispatch(…)

    # … server = WEBrick::HTTPServer.new(…) server.mount(‘/’, DispatchServlet, options) # … end end end ɹ ɹ ɹ %JTQBUDI4FSWMFUΫϥε ʜ8&#SJDL)5514FSWMFU"CTUSBDU4FSWMFUΛܧঝͨ͠Ϋϥε
  27. 8&#SJDL͕ొ৔ SBJMUJFTMJCXFCSJDL@TFSWFSSC class DispatchServlet < WEBrick::HTTPServlet::AbstractServlet # … def self.dispatch(…)

    # … server = WEBrick::HTTPServer.new(…) server.mount(‘/’, DispatchServlet, options) # … end end end ɹ ɹ ɹ ‐8&#SJDLͱ͸ʁ)551αʔόʔϑϨʔϜϫʔΫ ɹ֎෦ϥΠϒϥϦ͔ΒαʔόʔͷػೳΛܧঝ͍ͯ͠Δ ‑8&#SJDLΠϯελϯεΛੜ੒ %JTQBUDI4FSWMFUΫϥε ʜ8&#SJDL)5514FSWMFU"CTUSBDU4FSWMFUΛܧঝͨ͠Ϋϥε
  28. 8&#SJDL͕ొ৔ SBJMUJFTMJCXFCSJDL@TFSWFSSC class DispatchServlet < WEBrick::HTTPServlet::AbstractServlet # … def self.dispatch(…)

    # … server = WEBrick::HTTPServer.new(…) server.mount(‘/’, DispatchServlet, options) # … end end end ɹ ɹ ɹ ‐8&#SJDLͱ͸ʁ)551αʔόʔϑϨʔϜϫʔΫ ɹ֎෦ϥΠϒϥϦ͔ΒαʔόʔͷػೳΛܧঝ͍ͯ͠Δ ‑8&#SJDLΠϯελϯεΛੜ੒ ‏8&#SJDLΠϯελϯε͕ ɹNPVOUϝιουΛݺͼग़͠ %JTQBUDI4FSWMFUΫϥε ʜ8&#SJDL)5514FSWMFU"CTUSBDU4FSWMFUΛܧঝͨ͠Ϋϥε
  29. 8&#SJDL͕ొ৔ SBJMUJFTMJCXFCSJDL@TFSWFSSC class DispatchServlet < WEBrick::HTTPServlet::AbstractServlet # … def self.dispatch(…)

    # … server = WEBrick::HTTPServer.new(…) server.mount(‘/’, DispatchServlet, options) # … end end end ɹ ɹ ɹ ‐8&#SJDLͱ͸ʁ)551αʔόʔϑϨʔϜϫʔΫ ɹ֎෦ϥΠϒϥϦ͔ΒαʔόʔͷػೳΛܧঝ͍ͯ͠Δ ‑8&#SJDLΠϯελϯεΛੜ੒ ‏8&#SJDLΠϯελϯε͕ ɹNPVOUϝιουΛݺͼग़͠ %JTQBUDI4FSWMFUΫϥε ʜ8&#SJDL)5514FSWMFU"CTUSBDU4FSWMFUΛܧঝͨ͠Ϋϥε ‎NPVOUϝιουʁʁʁ
  30. ࠷ޙͷٙ໰ SBJMUJFTMJCXFCSJDL@TFSWFSSC class DispatchServlet < WEBrick::HTTPServlet::AbstractServlet # … def self.dispatch(…)

    # … server = Webrick::HTTPServer.new(…) server.mount(‘/’, DispatchServlet, options) # … end end end ɹ ɹ ɹ ɹ ɹ ɹ ɹ ‏ઌ΄ͲͷϑΝΠϧ EJTQBUDIϝιου͸ Ͳ͔͜Βݺ͹ΕΔʁ ‏
  31. ࠷ޙͷٙ໰ 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ͷίϚϯυ͕ఆٛ͞Ε͍ͯΔσΟϨΫτϦͷத
  32. ࠷ޙͷٙ໰ 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ͷίϚϯυ͕ఆٛ͞Ε͍ͯΔσΟϨΫτϦͷத
  33. ࠷ޙͷٙ໰ 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ͷίϚϯυ͕ఆٛ͞Ε͍ͯΔσΟϨΫτϦͷத ‑ݟ֮͑ͷ͋Δهड़
  34. ࠷ޙͷٙ໰ 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 ‑ݟ֮͑ͷ͋Δهड़
  35. ࠷ޙͷٙ໰ 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͕ࣗಈతʹ࣮ߦ͞ΕΔ ‑ݟ֮͑ͷ͋Δهड़
  36. ࠷ޙͷٙ໰ 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͕ࣗಈతʹ࣮ߦ͞ΕΔ ‑ݟ֮͑ͷ͋Δهड़