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

941b170e5a115a295cccb5f5cdf0a800?s=47 Koji SHIMADA
November 24, 2017

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

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

941b170e5a115a295cccb5f5cdf0a800?s=128

Koji SHIMADA

November 24, 2017
Tweet

Transcript

  1. ౡాߒೋ !TOPP[FS  ෱Ԭ3VCZձٞ/PW  "3VCZ1SPHSBNNJOH&QJTPEF 3VCZJTNZHMBTTFT NZTUBUJPOFSZ BOENZMBOHVBHF

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

  3. IUUQSFHJPOBMSVCZLBJHJPSHGVLVPLB

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

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

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

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

  8. FYFSDJTNJP

  9. FYFSDJTNJP

  10. FYFSDJTNJP

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

  12. Inner Peace

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

  14. ͦͷલʹʜ

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

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

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

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

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

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

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

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

    ͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ Ҏ্Λे෼ͩͱࢥ͑Δ·Ͱଓ͚ɺ͍ͪ͹Μͬ͘͠Γ͘ΔղΛબ୒͢Δ
  23. ࠓ೔ͷ͓୊

  24. IUUQFYFSDJTNJPFYFSDJTFTSVCZTFSJFT

  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']
  26. ࣮ԋ

  27. class Series def initialize(string) @string = string end def slices(n)

    #TODO end end ४උ
  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` ఴࣈΛҠಈͤ͞ͳ͕Β෦෼จࣈྻΛूΊ͍͚ͯ͹͍͍ʁ
  29. def slices(n) slices = [] 0.upto(@string.length-n) do |i| slices <<

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    }.map {|i| @string.slice(i, n) } end ͬͪ͜ͷํ͕·ͩTMJDFͷڍಈΛؾʹ͠ͳͯ͘΋ಡΊΔ෼ ϚγͰ͔͢Ͷ͑ɻͰ΋΋͏ͪΐͬͱ͔ͳ͋
  54. Ҋ̓ DIBSTͰϦετʹͯ͠͠·͏ͳΒɺ"SSBZͱ͔&OVNFSBCMFʹ ͍ۙ͜ͱΛͰ͖Δಓ۩͕͋ΔͷͰ͸ʁʢ͋Γͦ͏ʣ def slices(n) @string.chars.each_index.select {|i| i + n

    <= @string.length }.map {|i| @string.slice(i, n) } end
  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͔
  56. Ҋ̔ def slices(n) @string.chars.each_cons(n).map(&:join) end

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

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

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

  60. ࠷ऴҊ class Series def initialize(string) @string = string end def

    slices(n) @string.chars.each_cons(n).map(&:join) end end
  61. None
  62. ࢲʹͱͬͯ 3VCZ͕ͲΜͳݴޠͰ͋Δ͔

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

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

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

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

  67. ʁʁʁ

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

  69. 3VCZ͸Ί͕ͶͰ͋Δ

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

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

  72. 3VCZ͸ϖϯͰ͋Δ

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

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

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

  76. 3VCZ͸ݴޠͰ͋Δ

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

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

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

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

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

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

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

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

  85. ·ͱΊ

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

  87. FYFSDJTNJP

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

    ͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ Ҏ্Λे෼ͩͱࢥ͑Δ·Ͱଓ͚ɺ͍ͪ͹Μద੾ͩͱײ͡ΔղΛબ୒͢Δ
  89. 今⽇ご覧いただいたような、⼩さな表 現の選択を積み重ねながら「そのもの がソフトウェアのことを語っているよ うなコード」を探っていく⾏為が、プ ログラミングという活動において⾮常 に重要な点なのではないかと考えてい ます。

  90. Inner Peace

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

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

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

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

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

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

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

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

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

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

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

  102. ౡాߒೋ !TOPP[FS  ෱Ԭ3VCZձٞ/PW  "3VCZ1SPHSBNNJOH&QJTPEF 3VCZJTNZHMBTTFT NZTUBUJPOFSZ BOENZMBOHVBHF