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
PRO

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 Slide

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

    View Slide

  3. IUUQSFHJPOBMSVCZLBJHJPSHGVLVPLB

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  8. FYFSDJTNJP

    View Slide

  9. FYFSDJTNJP

    View Slide

  10. FYFSDJTNJP

    View Slide

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

    View Slide

  12. Inner Peace

    View Slide

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

    View Slide

  14. ͦͷલʹʜ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  23. ࠓ೔ͷ͓୊

    View Slide

  24. IUUQFYFSDJTNJPFYFSDJTFTSVCZTFSJFT

    View Slide

  25. 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 Slide

  26. ࣮ԋ

    View Slide

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

    View Slide

  28. 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  55. Ҋ̓
    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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  61. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  67. ʁʁʁ

    View Slide

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

    View Slide

  69. 3VCZ͸Ί͕ͶͰ͋Δ

    View Slide

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

    View Slide

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

    View Slide

  72. 3VCZ͸ϖϯͰ͋Δ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  76. 3VCZ͸ݴޠͰ͋Δ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  85. ·ͱΊ

    View Slide

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

    View Slide

  87. FYFSDJTNJP

    View Slide

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

    View Slide

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

    View Slide

  90. Inner Peace

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  102. ౡాߒೋ !TOPP[FS

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

    View Slide