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

A Ruby Programming Episode: Ruby is my glasses, my stationery, and my language

A Ruby Programming Episode: Ruby is my glasses, my stationery, and my language

福岡Ruby会議02での発表資料です。
http://regional.rubykaigi.org/fukuoka02/

Koji SHIMADA

November 24, 2017
Tweet

More Decks by Koji SHIMADA

Other Decks in Programming

Transcript

  1. ౡాߒೋ !TOPP[FS

    ෱Ԭ3VCZձٞ/PW
    "3VCZ1SPHSBNNJOH&QJTPEF
    3VCZJTNZHMBTTFT NZTUBUJPOFSZ BOENZMBOHVBHF

    View full-size slide

  2. ౡాߒೋ!TOPP[FS
    w גࣜձࣾ͑ʹ͠ςοΫ
    w 3VCZࡳຈ
    w Ұൠࣾஂ๏ਓ೔ຊ3VCZͷձ

    View full-size slide

  3. IUUQSFHJPOBMSVCZLBJHJPSHGVLVPLB

    View full-size slide

  4. 普段どおりにRubyでプログラミング
    を⾏い、そこから⾒えてくることから、
    カンファレンスのテーマである「私に
    とってRubyがどのような技術か」を
    考えていきます

    View full-size slide

  5. ϓϩάϥϛϯάΤϐιʔυ

    View full-size slide

  6. ΅͘ͷ೔ʑͷϓϩάϥϛϯά
    w ى͖͙ͯ͢΍Δɻ͍͍ͩͨຖே̍̌෼ఔ౓
    w FYFSDJTNJPͷ໰୊Λ΍Δ
    w ͲΜͳ෩ʹղ͍͔ͨΛձࣾͰฉ͍ͯ΋Βͬ
    ͯϑΟʔυόοΫΛ΋Β͏

    View full-size slide

  7. ΅͘ͷ೔ʑͷϓϩάϥϛϯά
    w ى͖͙ͯ͢΍Δɻ͍͍ͩͨຖே̍̌෼ఔ౓
    w FYFSDJTNJPͷ໰୊Λ΍Δ
    w ͲΜͳ෩ʹղ͍͔ͨΛձࣾͰฉ͍ͯ΋Βͬ
    ͯϑΟʔυόοΫΛ΋Β͏

    View full-size slide

  8. ΅͘ͷ೔ʑͷϓϩάϥϛϯά
    w ى͖͙ͯ͢΍Δɻ͍͍ͩͨຖே̍̌෼ఔ౓
    w FYFSDJTNJPͷ໰୊Λ΍Δ
    w ͲΜͳ෩ʹղ͍͔ͨΛձࣾͰฉ͍ͯ΋Βͬ
    ͯϑΟʔυόοΫΛ΋Β͏

    View full-size slide

  9. 実際にやっていきましょう

    View full-size slide

  10. ΅͘ͷϓϩάϥϛϯά࡞๏
    w ͍͍ͩͨ͸࠷ॳͷ͏ͪ͸໰୊ͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍
    w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣ໰୊Λղ͘
    w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠໰୊ͱͷڑ཭Λ٧Ί͍ͯ͘
    w ೿ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠
    w ͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ

    View full-size slide

  11. ΅͘ͷϓϩάϥϛϯά࡞๏
    w ͍͍ͩͨ͸࠷ॳͷ͏ͪ͸໰୊ͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍
    w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣ໰୊Λղ͘
    w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠໰୊ͱͷڑ཭Λ٧Ί͍ͯ͘
    w ೿ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠
    w ͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ

    View full-size slide

  12. ΅͘ͷϓϩάϥϛϯά࡞๏
    w ͍͍ͩͨ͸࠷ॳͷ͏ͪ͸໰୊ͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍
    w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣ໰୊Λղ͘
    w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠໰୊ͱͷڑ཭Λ٧Ί͍ͯ͘
    w ೿ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠
    w ͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ

    View full-size slide

  13. ΅͘ͷϓϩάϥϛϯά࡞๏
    w ͍͍ͩͨ͸࠷ॳͷ͏ͪ͸໰୊ͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍
    w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣ໰୊Λղ͘
    w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠໰୊ͱͷڑ཭Λ٧Ί͍ͯ͘
    w ೿ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠
    w ͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ

    View full-size slide

  14. ΅͘ͷϓϩάϥϛϯά࡞๏
    w ͍͍ͩͨ͸࠷ॳͷ͏ͪ͸໰୊ͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍
    w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣ໰୊Λղ͘
    w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠໰୊ͱͷڑ཭Λ٧Ί͍ͯ͘
    w ೿ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠
    w ͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ

    View full-size slide

  15. ΅͘ͷϓϩάϥϛϯά࡞๏
    w ͍͍ͩͨ͸࠷ॳͷ͏ͪ͸໰୊ͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍
    w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣ໰୊Λղ͘
    w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠໰୊ͱͷڑ཭Λ٧Ί͍ͯ͘
    w ೿ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠
    w ͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ

    View full-size slide

  16. ΅͘ͷϓϩάϥϛϯά࡞๏
    w ͍͍ͩͨ͸࠷ॳͷ͏ͪ͸໰୊ͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍
    w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣ໰୊Λղ͘
    w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠໰୊ͱͷڑ཭Λ٧Ί͍ͯ͘
    w ೿ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠
    w ͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ
    Ҏ্Λे෼ͩͱࢥ͑Δ·Ͱଓ͚ɺ͍ͪ͹Μͬ͘͠Γ͘ΔղΛબ୒͢Δ

    View full-size slide

  17. ΅͘ͷϓϩάϥϛϯά࡞๏
    w ͍͍ͩͨ͸࠷ॳͷ͏ͪ͸໰୊ͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍
    w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣ໰୊Λղ͘
    w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠໰୊ͱͷڑ཭Λ٧Ί͍ͯ͘
    w ೿ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠
    w ͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ
    Ҏ্Λे෼ͩͱࢥ͑Δ·Ͱଓ͚ɺ͍ͪ͹Μͬ͘͠Γ͘ΔղΛબ୒͢Δ

    View full-size slide

  18. ࠓ೔ͷ͓୊

    View full-size slide

  19. IUUQFYFSDJTNJPFYFSDJTFTSVCZTFSJFT

    View full-size slide

  20. IUUQFYFSDJTNJPFYFSDJTFTSVCZTFSJFT
    จࣈྻͱO͕༩͑ΒΕΔͱ͖ɺจࣈྻ಺͔ΒOࣈ
    ͣͭ࿈ଓ͢Δ෦෼จࣈྻͷू߹ΛऔΓग़ͯ͠ग़
    ྗ͢Δ
    series = Series.new('01234')
    series.slices(1) #=> ['0', '1', '2', '3', '4']
    series.slices(2) #=> ['01', '12', '23', ’34']
    series.slices(3) #=> ['012', '123', '234']

    View full-size slide

  21. class Series
    def initialize(string)
    @string = string
    end
    def slices(n)
    #TODO
    end
    end
    ४උ

    View full-size slide

  22. string = '01234'
    n = 2
    string[0, n] #=> `01`
    string[1, n] #=> `12`
    string[2, n] #=> `23`
    n = 3
    string[0, n] #=> `012`
    string[1, n] #=> `123`
    string[2, n] #=> `234`
    ఴࣈΛҠಈͤ͞ͳ͕Β෦෼จࣈྻΛूΊ͍͚ͯ͹͍͍ʁ

    View full-size slide

  23. def slices(n)
    slices = []
    0.upto(@string.length-n) do |i|
    slices << @string[i, n]
    end
    slices
    end
    Ҋ̍

    View full-size slide

  24. def slices(n)
    slices = []
    0.upto(@string.length-n) do |i|
    slices << @string[i, n]
    end
    slices
    end
    Ҋ̍
    จࣈྻ಺ͷ֤จࣈΛͣΒ͠ͳ͕Βɺ௕͞Oͷ࿈ଓ͢Δ෦෼จࣈྻΛ
    औΓग़͍ͯ͘͠ͱ͍͏໰୊ʁ

    View full-size slide

  25. def slices(n)
    slices = []
    0.upto(@string.length-n) do |i|
    slices << @string[i, n]
    end
    slices
    end
    Ҋ̍

    View full-size slide

  26. def slices(n)
    slices = []
    0.upto(@string.length-n) do |i|
    slices << @string[i, n]
    end
    slices
    end
    Ҋ̍
    ࠷ޙʹ໭Γ஋ΛΘ͟Θ͟ॻ͔ͳͯ͘͸͍͚ͳ͍ͷ͕ؾʹͳΔ

    View full-size slide

  27. def slices(n)
    slices = []
    0.upto(@string.length-n) do |i|
    slices << @string[i, n]
    end
    slices
    end
    Ҋ̍
    ࠷ޙʹ໭Γ஋ΛΘ͟Θ͟ॻ͔ͳͯ͘͸͍͚ͳ͍ͷ͕ؾʹͳΔ
    &OVNFSBCMFXJUI@PCKFDUΛ࢖͓͏

    View full-size slide

  28. def slices(n)
    0.upto(@string.length-n).with_object([]) do |i, slices|
    slices << @string[i, n]
    end
    end
    Ҋ̎

    View full-size slide

  29. def slices(n)
    0.upto(@string.length-n).with_object([]) do |i, slices|
    slices << @string[i, n]
    end
    end
    Ҋ̎
    Ϧετ͔ΒҰͭͣͭऔΓग़ͯ͠Ճ޻͠ͳ͕Β
    ผͷϦετʹೖΕͯΔͷͰ͸

    View full-size slide

  30. def slices(n)
    0.upto(@string.length-n).with_object([]) do |i, slices|
    slices << @string[i, n]
    end
    end
    Ҋ̎
    Ϧετ͔ΒҰͭͣͭऔΓग़ͯ͠Ճ޻͠ͳ͕Β
    ผͷϦετʹೖΕͯΔͷͰ͸
    &OVNFSBCMFNBQͰྑ͍ͷͰ͸

    View full-size slide

  31. def slices(n)
    0.upto(@string.length-n).map do |i|
    @string[i, n]
    end
    end
    Ҋ̏

    View full-size slide

  32. def slices(n)
    0.upto(@string.length-n).map do |i|
    @string[i, n]
    end
    end
    Ҋ̏
    ௕͞Oͷ࿈ଓ͢Δ෦෼จࣈྻΛऔΓग़ͤΔఴࣈΛ
    ରԠ͢Δ஋ʹม׵͢Δ໰୊ʁ

    View full-size slide

  33. def slices(n)
    0.upto(@string.length-n).map do |i|
    @string[i, n]
    end
    end
    Ҋ̏

    View full-size slide

  34. def slices(n)
    0.upto(@string.length-n).map do |i|
    @string[i, n]
    end
    end
    Ҋ̏
    <>ͰΞΫηε͍ͯ͠Δͷ͸ந৅౓͕߹ͬͯͳ͍ؾ͕͢Δ

    View full-size slide

  35. def slices(n)
    0.upto(@string.length-n).map do |i|
    @string[i, n]
    end
    end
    Ҋ̏
    <>ͰΞΫηε͍ͯ͠Δͷ͸ந৅౓͕߹ͬͯͳ͍ؾ͕͢Δ
    4USJOHTMJDFʹͯ͠ҙਤΛίʔυͰද໌͠Α͏

    View full-size slide

  36. Ҋ̐
    def slices(n)
    0.upto(@string.length-n).map do |i|
    @string.slice(i, n)
    end
    end

    View full-size slide

  37. Ҋ̐
    def slices(n)
    0.upto(@string.length-n).map do |i|
    @string.slice(i, n)
    end
    end

    View full-size slide

  38. Ҋ̐
    def slices(n)
    0.upto(@string.length-n).map do |i|
    @string.slice(i, n)
    end
    end
    ͚ͩ͜͜ίʔυ͚ͩͰ͏·͘ҙਤΛ఻͖͑Ε͍ͯͳͯ͘ؾʹͳΔ

    View full-size slide

  39. Ҋ̐
    def slices(n)
    0.upto(@string.length-n).map do |i|
    @string.slice(i, n)
    end
    end
    ͚ͩ͜͜ίʔυ͚ͩͰ͏·͘ҙਤΛ఻͖͑Ε͍ͯͳͯ͘ؾʹͳΔ
    ͍ͬͨΜશ෦TMJDFͯ͠͠·͔ͬͯΒαΠζ͕߹Θͳ͍΋ͷΛ
    ϑΟϧλ͢ΔɺͩͱͲ͏͔ͳʁ

    View full-size slide

  40. Ҋ̑
    def slices(n)
    0.upto(@string.length).map {|i|
    @string.slice(i, n)
    }.select {|s| s.length == n }
    end

    View full-size slide

  41. Ҋ̑
    def slices(n)
    0.upto(@string.length).map {|i|
    @string.slice(i, n)
    }.select {|s| s.length == n }
    end

    View full-size slide

  42. Ҋ̑
    def slices(n)
    0.upto(@string.length).map {|i|
    @string.slice(i, n)
    }.select {|s| s.length == n }
    end
    ͜͜͸ఴࣈΛશ෦औΔͱ͍͏෩ʹ΋ॻ͚ͦ͏ʁ

    View full-size slide

  43. Ҋ̒
    def slices(n)
    @string.chars.each_index.map {|i|
    @string.slice(i, n)
    }.select {|s| s.length == n }
    end

    View full-size slide

  44. Ҋ̒
    def slices(n)
    @string.chars.each_index.map {|i|
    @string.slice(i, n)
    }.select {|s| s.length == n }
    end
    TMJDFͷڍಈΛ೺Ѳͯ͠ͳ͍ͱԿͰTFMFDU͠ͳ͍ͱ͍͚ͳ͍͔
    Θ͔Βͳ͍ͷͰඍົ͔ͳ͋

    View full-size slide

  45. Ҋ̒
    def slices(n)
    @string.chars.each_index.map {|i|
    @string.slice(i, n)
    }.select {|s| s.length == n }
    end
    TMJDFͷڍಈΛ೺Ѳͯ͠ͳ͍ͱԿͰTFMFDU͠ͳ͍ͱ͍͚ͳ͍͔
    Θ͔Βͳ͍ͷͰඍົ͔ͳ͋
    ࠷ॳʹTFMFDU͔ͯ͠ΒTMJDF͢ΔͩͱͲ͏ͩΖ͏ʁ

    View full-size slide

  46. Ҋ̓
    def slices(n)
    @string.chars.each_index.select {|i|
    i + n <= @string.length
    }.map {|i|
    @string.slice(i, n)
    }
    end

    View full-size slide

  47. Ҋ̓
    def slices(n)
    @string.chars.each_index.select {|i|
    i + n <= @string.length
    }.map {|i|
    @string.slice(i, n)
    }
    end
    ͬͪ͜ͷํ͕·ͩTMJDFͷڍಈΛؾʹ͠ͳͯ͘΋ಡΊΔ෼
    ϚγͰ͔͢Ͷ͑ɻͰ΋΋͏ͪΐͬͱ͔ͳ͋

    View full-size slide

  48. Ҋ̓
    DIBSTͰϦετʹͯ͠͠·͏ͳΒɺ"SSBZͱ͔&OVNFSBCMFʹ
    ͍ۙ͜ͱΛͰ͖Δಓ۩͕͋ΔͷͰ͸ʁʢ͋Γͦ͏ʣ
    def slices(n)
    @string.chars.each_index.select {|i|
    i + n <= @string.length
    }.map {|i|
    @string.slice(i, n)
    }
    end

    View full-size slide

  49. Ҋ̓
    DIBSTͰϦετʹͯ͠͠·͏ͳΒɺ"SSBZͱ͔&OVNFSBCMFʹ
    ͍ۙ͜ͱΛͰ͖Δಓ۩͕͋ΔͷͰ͸ʁʢ͋Γͦ͏ʣ
    def slices(n)
    @string.chars.each_index.select {|i|
    i + n <= @string.length
    }.map {|i|
    @string.slice(i, n)
    }
    end
    ͦ͏͔ɺͭ·Γ͸FBDI@DPOT͔

    View full-size slide

  50. Ҋ̔
    def slices(n)
    @string.chars.each_cons(n).map(&:join)
    end

    View full-size slide

  51. Ҋ̔
    def slices(n)
    @string.chars.each_cons(n).map(&:join)
    end
    Ϧετ಺͔Β࿈ଓ͢ΔʮOཁૉΛͭʹ·ͱΊͨ΋ͷʯ
    Λ͢΂ͯऔΓग़͢

    View full-size slide

  52. Ҋ̔
    def slices(n)
    @string.chars.each_cons(n).map(&:join)
    end
    Ϧετ಺͔Β࿈ଓ͢ΔʮOཁૉΛͭʹ·ͱΊͨ΋ͷʯ
    Λ͢΂ͯऔΓग़͢
    จࣈྻ಺͔Βʮ௕͞Oͷ࿈ଓ͢Δ෦෼จࣈྻʯ
    Λ͢΂ͯऔΓग़͢

    View full-size slide

  53. Ҋ̔
    def slices(n)
    @string.chars.each_cons(n).map(&:join)
    end
    Ϧετ಺͔Β࿈ଓ͢ΔʮOཁૉΛͭʹ·ͱΊͨ΋ͷʯ
    Λ͢΂ͯऔΓग़͢
    จࣈྻ಺͔Βʮ௕͞Oͷ࿈ଓ͢Δ෦෼จࣈྻʯ
    Λ͢΂ͯऔΓग़͢
    ͏·͘ݴ͑ͯΔͷͰ͸ʁʁʁ

    View full-size slide

  54. ࠷ऴҊ
    class Series
    def initialize(string)
    @string = string
    end
    def slices(n)
    @string.chars.each_cons(n).map(&:join)
    end
    end

    View full-size slide

  55. ࢲʹͱͬͯ
    3VCZ͕ͲΜͳݴޠͰ͋Δ͔

    View full-size slide

  56. ΅͘ʹͱͬͯ3VCZͱ͸

    View full-size slide

  57. ΅͘ʹͱͬͯ3VCZͱ͸
    w Ί͕ͶͰ͋Δ

    View full-size slide

  58. ΅͘ʹͱͬͯ3VCZͱ͸
    w Ί͕ͶͰ͋Δ
    w ϖϯͰ͋Δ

    View full-size slide

  59. ΅͘ʹͱͬͯ3VCZͱ͸
    w Ί͕ͶͰ͋Δ
    w ϖϯͰ͋Δ
    w ݴޠͰ͋Δ

    View full-size slide

  60. ΅͘ʹͱͬͯ3VCZͱ͸
    w Ί͕ͶͰ͋Δ
    w ϖϯͰ͋Δ
    w ݴޠͰ͋Δ

    View full-size slide

  61. 3VCZ͸Ί͕ͶͰ͋Δ

    View full-size slide

  62. 3VCZ͸Ί͕ͶͰ͋Δ
    ໰୊ΛΑ͘ݟ͑ΔΑ͏ʹͯ͘͠ΕΔ

    View full-size slide

  63. 3VCZ͸Ί͕ͶͰ͋Δ
    ੈքΛͲ͏ղऍͨ͠Βྑ͍͔ͷ
    ࢹ࠲Λ༩͑ͯ͘ΕΔ

    View full-size slide

  64. 3VCZ͸ϖϯͰ͋Δ

    View full-size slide

  65. 3VCZ͸ϖϯͰ͋Δ
    ΅͘ʹͱͬͯ3VCZ͸͍ͪ͹Μࣗવͳ
    ॻ͖৺஍͕͢ΔϖϯͷΑ͏ͳ΋ͷ

    View full-size slide

  66. 3VCZ͸ϖϯͰ͋Δ
    ⾝体になじむペンは思考を促進する
    l
    ʰത࢜ͷѪͨ͠3VCZͱ਺ֶʱʢݪ৴Ұ࿠ ͱͪ͗3VCZձٞʣ

    View full-size slide

  67. 3VCZ͸ϖϯͰ͋Δ
    l
    ʰത࢜ͷѪͨ͠3VCZͱ਺ֶʱʢݪ৴Ұ࿠ ͱͪ͗3VCZձٞʣ
    計算をする⼈間と紙の間にあるの
    がペン。投げ出しそうになった瞬
    間に、あと10秒余計に考えられる
    かどうかはペンで決まる。

    View full-size slide

  68. 3VCZ͸ݴޠͰ͋Δ

    View full-size slide

  69. 3VCZ͸ݴޠͰ͋Δ
    ᅳ෼ޭҰ࿠ʰதಈଶͷੈքҙࢤͱ੹೚ͷߟݹֶʱ
    l思考の可能性は、⾔語能⼒に結びつい
    ている。というのも、⾔語とは形式を
    持った意味の構造であり、思考すると
    は⾔語の記号を操ることだからである。

    View full-size slide

  70. 3VCZ͸ݴޠͰ͋Δ
    FBDI@DPOTͯ͠౉͖ͬͯͨϦετͷ֤ཁૉΛ
    KPJOͨ͠จࣈྻ΁ͱNBQͯ͠΍Δ

    View full-size slide

  71. 3VCZ͸ݴޠͰ͋Δ
    ϙʔϧάϨΞϜʰϋοΧʔͱըՈίϯϐϡʔλ࣌୅ͷ૑଄ऀͨͪʱ
    lプログラミング⾔語はプログラマ
    がプログラムを考えるためのもの
    であって、既に考えたプログラム
    を書き下すためのものじゃない。

    View full-size slide

  72. 3VCZ͸ݴޠͰ͋Δ
    l私たちはもはや、正直⾔ってそれ
    をコンピュータ⾔語とは呼べない。
    それはプログラマ語だ。それは私
    たちが思考する⾔語なのだ。
    XIZUIFMVDLZTUJ⒎ʰϗϫΠͷ ײಈత
    3VCZΨΠυʱ
    ʮݴޠͱɺݴޠͰҙຯ͍ͯ͠Δ΋ͷʯ

    View full-size slide

  73. ΅͘ʹͱͬͯ3VCZͱ͸
    w Ί͕ͶͰ͋Δ
    w ϖϯͰ͋Δ
    w ݴޠͰ͋Δ

    View full-size slide

  74. ところで、私はRubyというめがねを通して問題を
    認識して、Rubyというペンをつかって外部へアウ
    トプットしていて、頭ではRubyで思考している。
    これはもう私⾃⾝がRubyと⾔ってしまっても過⾔
    ではないのではないだろうか…??

    View full-size slide

  75. けれど、実際には⼀体ではないからこそいい
    のである。⼤事なのはRubyと⾃分が息が合
    うこと。⼀体だと錯覚してしまうと、協⼒関
    係から依存関係になってしまう(よくない)

    View full-size slide

  76. ҧ͏΋ͷʹ৮ΕΔͱɺΑΓʮͦͷ΋ͷʯͷ͜ͱ͕Θ͔Δ
    w ҧ͏Ί͕ͶͰ෺ࣄΛݟΔ
    w ҧ͏ॻ͖৺஍ͷϖϯΛ࢖͏
    w ҧ͏ݴޠͰࢥߟͯ͠ΈΔ

    View full-size slide

  77. ϓϩάϥϛϯάΤϐιʔυɿ

    View full-size slide

  78. ΅͘ͷϓϩάϥϛϯά࡞๏
    w ͍͍ͩͨ͸࠷ॳͷ͏ͪ͸໰୊ͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍
    w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣ໰୊Λղ͘
    w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠໰୊ͱͷڑ཭Λ٧Ί͍ͯ͘
    w ೿ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠
    w ͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ
    Ҏ্Λे෼ͩͱࢥ͑Δ·Ͱଓ͚ɺ͍ͪ͹Μద੾ͩͱײ͡ΔղΛબ୒͢Δ

    View full-size slide

  79. 今⽇ご覧いただいたような、⼩さな表
    現の選択を積み重ねながら「そのもの
    がソフトウェアのことを語っているよ
    うなコード」を探っていく⾏為が、プ
    ログラミングという活動において⾮常
    に重要な点なのではないかと考えてい
    ます。

    View full-size slide

  80. ࢲʹͱͬͯ
    3VCZͱ͸ͲΜͳٕज़Ͱ͋Δ͔ɿ

    View full-size slide

  81. ΅͘ʹͱͬͯ3VCZͱ͸
    w Ί͕ͶͰ͋Δ໰୊ͷݟํΛ༩͑Δ΋ͷ
    w ϖϯͰ͋ΔࢥߟΛεέον͢ΔͨΊͷ΋ͷ
    w ݴޠͰ͋ΔϓϩάϥϚͱͯ͠ࢥߟ͢Δݴޠ

    View full-size slide

  82. ΅͘ʹͱͬͯ3VCZͱ͸
    w Ί͕ͶͰ͋Δ໰୊ͷݟํΛ༩͑Δ΋ͷ
    w ϖϯͰ͋ΔࢥߟΛεέον͢ΔͨΊͷ΋ͷ
    w ݴޠͰ͋ΔϓϩάϥϚͱͯ͠ࢥߟ͢Δݴޠ

    View full-size slide

  83. ΅͘ʹͱͬͯ3VCZͱ͸
    w Ί͕ͶͰ͋Δ໰୊ͷݟํΛ༩͑Δ΋ͷ
    w ϖϯͰ͋ΔࢥߟΛεέον͢ΔͨΊͷ΋ͷ
    w ݴޠͰ͋ΔϓϩάϥϚͱͯ͠ࢥߟ͢Δݴޠ

    View full-size slide

  84. ΅͘ʹͱͬͯ3VCZͱ͸
    w Ί͕ͶͰ͋Δ໰୊ͷݟํΛ༩͑Δ΋ͷ
    w ϖϯͰ͋ΔࢥߟΛεέον͢ΔͨΊͷ΋ͷ
    w ݴޠͰ͋ΔϓϩάϥϚͱͯ͠ࢥߟ͢Δݴޠ

    View full-size slide

  85. ΅͘ʹͱͬͯ3VCZͱ͸
    w ΦϒδΣΫτࢦ޲ݴޠ
    w ϖϯͰ͋ΔࢥߟΛεέον͢ΔͨΊͷ΋ͷ
    w ݴޠͰ͋ΔϓϩάϥϚͱͯ͠ࢥߟ͢Δݴޠ

    View full-size slide

  86. ΅͘ʹͱͬͯ3VCZͱ͸
    w ΦϒδΣΫτࢦ޲ݴޠ
    w εΫϦϓτݴޠ
    w ݴޠͰ͋ΔϓϩάϥϚͱͯ͠ࢥߟ͢Δݴޠ

    View full-size slide

  87. ΅͘ʹͱͬͯ3VCZͱ͸
    w ΦϒδΣΫτࢦ޲ݴޠ
    w εΫϦϓτݴޠ
    w ϓϩάϥϛϯάݴޠ

    View full-size slide

  88. ΅͘ʹͱͬͯ3VCZͱ͸
    w ΦϒδΣΫτࢦ޲
    w εΫϦϓτ
    w ϓϩάϥϛϯάݴޠ
    Ͱ͋Δ

    View full-size slide

  89. ΦϒδΣΫτࢦ޲εΫϦϓτݴޠ3VCZ

    View full-size slide

  90. ちょっと⼤げさに表現すると、Ruby
    の究極の⽬的は、有限の⼈⽣において
    プログラミングの楽しい部分にできる
    だけ集中できるように助けることです。
    ·ͭ΋ͱΏ͖ͻΖɺੴ௩ܓथʰΦϒδΣΫτࢦ޲εΫϦϓτݴޠ3VCZʱ
    l

    View full-size slide

  91. ౡాߒೋ !TOPP[FS

    ෱Ԭ3VCZձٞ/PW
    "3VCZ1SPHSBNNJOH&QJTPEF
    3VCZJTNZHMBTTFT NZTUBUJPOFSZ BOENZMBOHVBHF

    View full-size slide