Slide 1

Slide 1 text

method_missingͷࠇຐज़ͬ΀Γʹ͍ͭͯ 2019/1/29 Ebisu.rb #21 גࣜձࣾΧΧΫίϜ ৯΂ϩάγεςϜຊ෦ ϚΠΫϩαʔϏεԽνʔϜ ௕ాɹᠳ

Slide 2

Slide 2 text

Copyright © Kakaku.com Inc. All Rights Reserved. ࣗݾ঺հ ௕ాɹᠳʢͳ͕ͨɹ͠ΐ͏ʣ • మಓܥSIerͰSEΛ7೥൒ • 2018೥9݄ʹΧΧΫίϜೖࣾ • όοΫΤϯυΤϯδχΞͱͯ͠৯΂ϩάͷϚΠΫϩαʔϏε ԽΛਪਐத • Ruby / Railsྺ͸5ϲ݄ • ݸਓతʹMachine Learning΍Blockchain৮ͬͨΓ • ޷͖ͳݴޠ͸Python • Ϛϥιϯ΍ͬͨΓΪλʔ΍ͬͨΓғޟ΍ͬͨΓ • 2ࣇͷ෕ ˏs_naga03 Sho Nagata nagata03

Slide 3

Slide 3 text

Copyright © Kakaku.com Inc. All Rights Reserved. ࠓ೔࿩͢͜ͱ RubyΛ৮Γ࢝Ίͯ1ϲ݄ࠒʹ܁Γ޿͛ͨϝιουఆٛͱͷઓ͍

Slide 4

Slide 4 text

Copyright © Kakaku.com Inc. All Rights Reserved. ࠓ೔࿩͢͜ͱ RubyΛ৮Γ࢝Ίͯ1ϲ݄ࠒʹ܁Γ޿͛ͨϝιουఆٛͱͷઓ͍ ͦ͜Ͱग़ձͬͨ೉ఢ…

Slide 5

Slide 5 text

ࠇຐज़ɿmethod_missing

Slide 6

Slide 6 text

ࠇຐज़ɿmethod_missing

Slide 7

Slide 7 text

Copyright © Kakaku.com Inc. All Rights Reserved. ࢲͷઓಆྗ ઓಆྗɿ1480

Slide 8

Slide 8 text

Copyright © Kakaku.com Inc. All Rights Reserved. ࢲͷઓಆྗ ઓಆྗɿ1480 ʢϕδʔλऻདྷ࣌ʣ ʢDBެࣜʣ

Slide 9

Slide 9 text

ࠇຐज़ɿmethod_missing

Slide 10

Slide 10 text

ࠇຐज़ɿmethod_missing

Slide 11

Slide 11 text

Copyright © Kakaku.com Inc. All Rights Reserved. Rubyྺ1ϲ݄ࠒͷ͜ͱ ݱࡏͷॲཧ಺༰ͷௐࠪ

Slide 12

Slide 12 text

Copyright © Kakaku.com Inc. All Rights Reserved. Rubyྺ1ϲ݄ࠒͷ͜ͱ ݱࡏͷॲཧ಺༰ͷௐࠪ ϝιουΛݕࡧʢϝιου໊Ͱgrepͱ͔ʣ

Slide 13

Slide 13 text

Copyright © Kakaku.com Inc. All Rights Reserved. Rubyྺ1ϲ݄ࠒͷ͜ͱ ݱࡏͷॲཧ಺༰ͷௐࠪ ϝιουΛݕࡧʢϝιου໊Ͱgrepͱ͔ʣ ϝιου͕ݟ͔ͭΓ·ͤΜʂ

Slide 14

Slide 14 text

Copyright © Kakaku.com Inc. All Rights Reserved. Rubyྺ1ϲ݄ࠒͷ͜ͱ ݱࡏͷॲཧ಺༰ͷௐࠪ ϝιουΛݕࡧʢϝιου໊Ͱgrepͱ͔ʣ ϝιου͕ݟ͔ͭΓ·ͤΜʂ ίίʹ͋Γ·͢Αɻ

Slide 15

Slide 15 text

Copyright © Kakaku.com Inc. All Rights Reserved. Rubyྺ1ϲ݄͝Ζͷ͜ͱ def method_missing(…) # … …… end

Slide 16

Slide 16 text

Copyright © Kakaku.com Inc. All Rights Reserved. Rubyྺ1ϲ݄͝Ζͷ͜ͱ ԿॲͰ͔͢ʁ

Slide 17

Slide 17 text

Copyright © Kakaku.com Inc. All Rights Reserved. Rubyྺ1ϲ݄͝Ζͷ͜ͱ ԿॲͰ͔͢ʁ Ͳ͜Ͱ͔͢ʁ

Slide 18

Slide 18 text

Copyright © Kakaku.com Inc. All Rights Reserved. Rubyྺ1ϲ݄͝Ζͷ͜ͱ ԿॲͰ͔͢ʁ Ͳ͜Ͱ͔͢ʁ υίʂʁ

Slide 19

Slide 19 text

Copyright © Kakaku.com Inc. All Rights Reserved. Rubyྺ1ϲ݄͝Ζͷ͜ͱ ԿॲͰ͔͢ʁ Ͳ͜Ͱ͔͢ʁ υίʂʁ ίίˣ def method_missing(…) # … …… end

Slide 20

Slide 20 text

Copyright © Kakaku.com Inc. All Rights Reserved. Rubyྺ1ϲ݄͝Ζͷ͜ͱ

Slide 21

Slide 21 text

Copyright © Kakaku.com Inc. All Rights Reserved. method_missing • BasicObjectΫϥεʹఆٛ͞Ε͍ͯΔprivateͳΠϯελϯεϝιου BasicObject.private_instance_methods.grep(/^method/) => [:method_missing] • ݺͼग़͞Εͨϝιου͕ɺܧঝπϦʔΛḷͬͯ୳ࡧͨ݁͠ՌͲ͜ʹ ΋ఆٛ͞Ε͍ͯͳ͔ͬͨ৔߹ɺmethod_missing͕ݺͼग़͞Ε NoMethodErrorΛൃੜͤ͞Δ

Slide 22

Slide 22 text

Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷΦʔόʔϥΠυ • method_missingΛΦʔόʔϥΠυ͢Δ͜ͱͰଘࡏ͠ͳ͍ϝιουΛ ݺͼग़ͤΔΑ͏ʹͳΔɹ-> ΰʔετϝιου

Slide 23

Slide 23 text

Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷΦʔόʔϥΠυ class Sample def method_missing(name) puts “͋ͳͨ͸ΰʔετϝιου #{name} ϝιουΛݺͼग़͠·ͨ͠” end end sample = Sample.new sample.ghost #=> ͋ͳͨ͸ΰʔετϝιου ghost ϝιουΛݺͼग़͠·ͨ͠

Slide 24

Slide 24 text

method_missingͷࠇຐज़ͬ΀Γ

Slide 25

Slide 25 text

Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷࠇຐज़ͬ΀Γ • ΰʔετϝιου͸respond_to?Ͱ͸falseͱͳΔ sample = Sample.new sample.ghost #=> ͋ͳͨ͸ΰʔετϝιου ghost ϝιουΛݺͼग़͠·ͨ͠ sample.respond_to?(:ghost) #=> false

Slide 26

Slide 26 text

Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷࠇຐज़ͬ΀Γ • respond_to?ϝιουͰtrueΛฦ͢Α͏ʹ͢Δʹ͸ respond_to_missing?ϝιουʢObjectΫϥεͷprivateΠϯελϯε ϝιουʣΛΦʔόʔϥΠυ͠Α͏

Slide 27

Slide 27 text

Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷΦʔόʔϥΠυ class DS def get_keyboard_info(computer_id); end end class Computer def initialize(id, data_source) @id = id @data_source = data_source end def method_missing(name) @data_source.send(“get_#{name}_info, @id end def respond_to_missing?(method, include_private = false) @data_source.respond_to?(“get_#{method}_info”) || super end end

Slide 28

Slide 28 text

Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷࠇຐज़ͬ΀Γ • ແݶϧʔϓʹೖͬͯ͠·͏Մೳੑ

Slide 29

Slide 29 text

Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷࠇຐज़ͬ΀Γ • ແݶϧʔϓʹೖͬͯ͠·͏Մೳੑ • super ೖΕΑ͏

Slide 30

Slide 30 text

Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷࠇຐज़ͬ΀Γ class Roulette def method_missing(name, *args) person = name.to_s.capitalize 3.times do number = rand(10) + 1 puts “#{number}…” end “#{person} got a #{number}” end end

Slide 31

Slide 31 text

Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷࠇຐज़ͬ΀Γ class Roulette def method_missing(name, *args) person = name.to_s.capitalize 3.times do number = rand(10) + 1 puts “#{number}…” end “#{person} got a #{number}” end end

Slide 32

Slide 32 text

Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷࠇຐज़ͬ΀Γ class Roulette def method_missing(name, *args) person = name.to_s.capitalize super unless %w[Bob Frank Bill].include? person number = 0 3.times do number = rand(10) + 1 puts “#{number}…” end “#{person} got a #{number}” end end

Slide 33

Slide 33 text

Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷࠇຐज़ͬ΀Γ • طଘͷϝιουΛݺͼग़͢Մೳੑ • undef ΍ ϒϥϯΫεϨʔτ ͰରԠ

Slide 34

Slide 34 text

Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷࠇຐज़ͬ΀Γ “ϒϥϯΫεϨʔτ͕ඞཁͰ͋Ε͹ɺBasicObjectΛ௚઀ܧঝ͢Ε͹͍͍ɻ” ʢϝλϓϩάϥϛϯάRuby ୈ2൛ 3ষΑΓʣ

Slide 35

Slide 35 text

Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷࠇຐज़ͬ΀Γ irb(main):002:0> cmp = Computer.new(@id, DS.new) (Object doesn't support #inspect) =>

Slide 36

Slide 36 text

Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷࠇຐज़ͬ΀Γ irb(main):002:0> cmp = Computer.new(@id, DS.new) (Object doesn't support #inspect) => irb(main):003:0> cmp.class NoMethodError (undefined method `class' for #)

Slide 37

Slide 37 text

Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷࠇຐज़ͬ΀Γ “BasicObject͸respond_to?ϝιουΛ͍࣋ͬͯͳ͍ɻ ʢதུʣ respond_to_missing?ϝιου͕ෆཁʹͳΔͷͰɺ࡟আՄೳͩɻ” ʢϝλϓϩάϥϛϯάRuby ୈ2൛ 3ষΑΓʣ

Slide 38

Slide 38 text

Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷࠇຐज़ͬ΀Γ irb(main):003:0> cmp.respond_to?(:keyboard) NoMethodError (undefined method `respond_to?' for #)

Slide 39

Slide 39 text

·ͱΊ

Slide 40

Slide 40 text

Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷΦʔόʔϥΠυ • ఆٛ͞Ε͍ͯͳ͍ϝιουʢΰʔετϝιουʣΛݺͼग़ͤΔΑ͏ʹͳΔ • ΰʔετϝιουʹ͍ͭͯrespond_to?ͰtrueΛฦ͢Α͏ʹ͍ͨ͠ͳΒ respond_to_missing?ϝιουΛΦʔόʔϥΠυ͠Α͏ • super Λ๨Εͣʹ • طଘͷϝιουΛݺͼग़ͯ͠͠·͏ՄೳੑΛ๨Εͣʹ

Slide 41

Slide 41 text

Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷΦʔόʔϥΠυ • ఆٛ͞Ε͍ͯͳ͍ϝιουʢΰʔετϝιουʣΛݺͼग़ͤΔΑ͏ʹͳΔ • ΰʔετϝιουʹ͍ͭͯrespond_to?ͰtrueΛฦ͢Α͏ʹ͍ͨ͠ͳΒ respond_to_missing?ϝιουΛΦʔόʔϥΠυ͠Α͏ • super Λ๨Εͣʹ • طଘͷϝιουΛݺͼग़ͯ͠͠·͏ՄೳੑΛ๨Εͣʹ

Slide 42

Slide 42 text

Copyright © Kakaku.com Inc. All Rights Reserved. ࠷ޙʹ We are hiring! WEBɺΞϓϦɺϑϩϯτΤϯυΤϯδ χΞͳͲ༷ʑͳ৬छͰΤϯδχΞืू தͰ͢ʂ ΧδϡΞϧ໘ஊʢΦϑΟε๚໰ʣ׻ܴ Ͱ͢ʂ