Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
A Ruby Programming Episode: Ruby is my glasses,...
Search
Koji SHIMADA
PRO
November 24, 2017
Programming
17
8.7k
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
Share
More Decks by Koji SHIMADA
See All by Koji SHIMADA
One Enishi After Another
snoozer05
PRO
0
180
ソフトウェアアーキテクトのための意思決定術: Software Architecture and Decision-Making
snoozer05
PRO
26
7.7k
WHOLENESS, REPAIRING, AND TO HAVE FUN: 全体性、修復、そして楽しむこと
snoozer05
PRO
8
19k
スタッフエンジニアの道: The Staff Engineer’s Path
snoozer05
PRO
55
20k
ソフトウェアアーキテクチャメトリクスの基礎: Software architecture metrics in a nutshell
snoozer05
PRO
35
14k
これから学ぶ人のための ソフトウェアアーキテクチャ入門: Software architecture is a tool to enhance our humanity
snoozer05
PRO
44
27k
ソフトウェアアーキテクチャ・ ハードパーツ: Software Architecture The Hard Parts
snoozer05
PRO
12
6.3k
ソフトウェアアーキテクチャの基礎: Software Architecture in a Nutshell
snoozer05
PRO
70
45k
Ready Player One: 『ユニコーン企業のひみつ』に学べること
snoozer05
PRO
10
12k
Other Decks in Programming
See All in Programming
SODA - FACT BOOK(JP)
sodainc
1
9.3k
CSC509 Lecture 09
javiergs
PRO
0
290
Verilator + Rust + gRPC と Efinix の RISC-V でAIアクセラレータをAIで作ってる話 RTLを語る会(18) 2025/11/08
ryuz88
0
320
Kotlin + Power-Assert 言語組み込みならではのAssertion Library採用と運用ベストプラクティス by Kazuki Matsuda/Gen-AX
kazukima
0
100
Bakuraku E2E Scenario Test System Architecture #bakuraku_qa_study
teyamagu
PRO
0
470
Health Kit × Foundation Models でAIコーチを作ってみた
ryunakayama
0
100
自動テストのアーキテクチャとその理由ー大規模ゲーム開発の場合ー
segadevtech
2
730
Blazing Fast UI Development with Compose Hot Reload (Bangladesh KUG, October 2025)
zsmb
2
480
CSC305 Lecture 14
javiergs
PRO
0
240
GitHub Copilotを使いこなせ!/mastering_github_copilot!
kotakageyama
2
840
Reactive Thinking with Signals and the Resource API
manfredsteyer
PRO
0
130
AI時代に必須!状況言語化スキル / ai-context-verbalization
minodriven
2
360
Featured
See All Featured
The Invisible Side of Design
smashingmag
302
51k
Documentation Writing (for coders)
carmenintech
76
5.1k
Designing Experiences People Love
moore
142
24k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
For a Future-Friendly Web
brad_frost
180
10k
Thoughts on Productivity
jonyablonski
73
4.9k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Statistics for Hackers
jakevdp
799
220k
GitHub's CSS Performance
jonrohan
1032
470k
Being A Developer After 40
akosma
91
590k
Transcript
ౡాߒೋ !TOPP[FS Ԭ3VCZձٞ/PW "3VCZ1SPHSBNNJOH&QJTPEF 3VCZJTNZHMBTTFT NZTUBUJPOFSZ BOENZMBOHVBHF
ౡాߒೋ!TOPP[FS w גࣜձࣾ͑ʹ͠ςοΫ w 3VCZࡳຈ w Ұൠࣾஂ๏ਓຊ3VCZͷձ
IUUQSFHJPOBMSVCZLBJHJPSHGVLVPLB
普段どおりにRubyでプログラミング を⾏い、そこから⾒えてくることから、 カンファレンスのテーマである「私に とってRubyがどのような技術か」を 考えていきます
ϓϩάϥϛϯάΤϐιʔυ
΅͘ͷʑͷϓϩάϥϛϯά w ى͖͙ͯ͢Δɻ͍͍ͩͨຖே̍̌ఔ w FYFSDJTNJPͷΛΔ w ͲΜͳ෩ʹղ͍͔ͨΛձࣾͰฉ͍ͯΒͬ ͯϑΟʔυόοΫΛΒ͏
΅͘ͷʑͷϓϩάϥϛϯά w ى͖͙ͯ͢Δɻ͍͍ͩͨຖே̍̌ఔ w FYFSDJTNJPͷΛΔ w ͲΜͳ෩ʹղ͍͔ͨΛձࣾͰฉ͍ͯΒͬ ͯϑΟʔυόοΫΛΒ͏
FYFSDJTNJP
FYFSDJTNJP
FYFSDJTNJP
΅͘ͷʑͷϓϩάϥϛϯά w ى͖͙ͯ͢Δɻ͍͍ͩͨຖே̍̌ఔ w FYFSDJTNJPͷΛΔ w ͲΜͳ෩ʹղ͍͔ͨΛձࣾͰฉ͍ͯΒͬ ͯϑΟʔυόοΫΛΒ͏
Inner Peace
実際にやっていきましょう
ͦͷલʹʜ
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ Ҏ্Λेͩͱࢥ͑Δ·Ͱଓ͚ɺ͍ͪΜͬ͘͠Γ͘ΔղΛબ͢Δ
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ Ҏ্Λेͩͱࢥ͑Δ·Ͱଓ͚ɺ͍ͪΜͬ͘͠Γ͘ΔղΛબ͢Δ
ࠓͷ͓
IUUQFYFSDJTNJPFYFSDJTFTSVCZTFSJFT
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']
࣮ԋ
class Series def initialize(string) @string = string end def slices(n)
#TODO end end ४උ
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` ఴࣈΛҠಈͤ͞ͳ͕Β෦จࣈྻΛूΊ͍͚͍͍ͯʁ
def slices(n) slices = [] 0.upto(@string.length-n) do |i| slices <<
@string[i, n] end slices end Ҋ̍
def slices(n) slices = [] 0.upto(@string.length-n) do |i| slices <<
@string[i, n] end slices end Ҋ̍ จࣈྻͷ֤จࣈΛͣΒ͠ͳ͕Βɺ͞Oͷ࿈ଓ͢Δ෦จࣈྻΛ औΓग़͍ͯ͘͠ͱ͍͏ʁ
def slices(n) slices = [] 0.upto(@string.length-n) do |i| slices <<
@string[i, n] end slices end Ҋ̍
def slices(n) slices = [] 0.upto(@string.length-n) do |i| slices <<
@string[i, n] end slices end Ҋ̍ ࠷ޙʹΓΛΘ͟Θ͟ॻ͔ͳ͍͚ͯ͘ͳ͍ͷ͕ؾʹͳΔ
def slices(n) slices = [] 0.upto(@string.length-n) do |i| slices <<
@string[i, n] end slices end Ҋ̍ ࠷ޙʹΓΛΘ͟Θ͟ॻ͔ͳ͍͚ͯ͘ͳ͍ͷ͕ؾʹͳΔ &OVNFSBCMFXJUI@PCKFDUΛ͓͏
def slices(n) 0.upto(@string.length-n).with_object([]) do |i, slices| slices << @string[i, n]
end end Ҋ̎
def slices(n) 0.upto(@string.length-n).with_object([]) do |i, slices| slices << @string[i, n]
end end Ҋ̎ Ϧετ͔ΒҰͭͣͭऔΓग़ͯ͠Ճ͠ͳ͕Β ผͷϦετʹೖΕͯΔͷͰ
def slices(n) 0.upto(@string.length-n).with_object([]) do |i, slices| slices << @string[i, n]
end end Ҋ̎ Ϧετ͔ΒҰͭͣͭऔΓग़ͯ͠Ճ͠ͳ͕Β ผͷϦετʹೖΕͯΔͷͰ &OVNFSBCMFNBQͰྑ͍ͷͰ
def slices(n) 0.upto(@string.length-n).map do |i| @string[i, n] end end Ҋ̏
def slices(n) 0.upto(@string.length-n).map do |i| @string[i, n] end end Ҋ̏
͞Oͷ࿈ଓ͢Δ෦จࣈྻΛऔΓग़ͤΔఴࣈΛ ରԠ͢Δʹม͢Δʁ
def slices(n) 0.upto(@string.length-n).map do |i| @string[i, n] end end Ҋ̏
def slices(n) 0.upto(@string.length-n).map do |i| @string[i, n] end end Ҋ̏
<>ͰΞΫηε͍ͯ͠Δͷந͕߹ͬͯͳ͍ؾ͕͢Δ
def slices(n) 0.upto(@string.length-n).map do |i| @string[i, n] end end Ҋ̏
<>ͰΞΫηε͍ͯ͠Δͷந͕߹ͬͯͳ͍ؾ͕͢Δ 4USJOHTMJDFʹͯ͠ҙਤΛίʔυͰද໌͠Α͏
Ҋ̐ def slices(n) 0.upto(@string.length-n).map do |i| @string.slice(i, n) end end
Ҋ̐ def slices(n) 0.upto(@string.length-n).map do |i| @string.slice(i, n) end end
Ҋ̐ def slices(n) 0.upto(@string.length-n).map do |i| @string.slice(i, n) end end
͚ͩ͜͜ίʔυ͚ͩͰ͏·͘ҙਤΛ͖͑Ε͍ͯͳͯ͘ؾʹͳΔ
Ҋ̐ def slices(n) 0.upto(@string.length-n).map do |i| @string.slice(i, n) end end
͚ͩ͜͜ίʔυ͚ͩͰ͏·͘ҙਤΛ͖͑Ε͍ͯͳͯ͘ؾʹͳΔ ͍ͬͨΜશ෦TMJDFͯ͠͠·͔ͬͯΒαΠζ͕߹Θͳ͍ͷΛ ϑΟϧλ͢ΔɺͩͱͲ͏͔ͳʁ
Ҋ̑ def slices(n) 0.upto(@string.length).map {|i| @string.slice(i, n) }.select {|s| s.length
== n } end
Ҋ̑ def slices(n) 0.upto(@string.length).map {|i| @string.slice(i, n) }.select {|s| s.length
== n } end
Ҋ̑ def slices(n) 0.upto(@string.length).map {|i| @string.slice(i, n) }.select {|s| s.length
== n } end ͜͜ఴࣈΛશ෦औΔͱ͍͏෩ʹॻ͚ͦ͏ʁ
Ҋ̒ def slices(n) @string.chars.each_index.map {|i| @string.slice(i, n) }.select {|s| s.length
== n } end
Ҋ̒ def slices(n) @string.chars.each_index.map {|i| @string.slice(i, n) }.select {|s| s.length
== n } end TMJDFͷڍಈΛѲͯ͠ͳ͍ͱԿͰTFMFDU͠ͳ͍ͱ͍͚ͳ͍͔ Θ͔Βͳ͍ͷͰඍົ͔ͳ͋
Ҋ̒ def slices(n) @string.chars.each_index.map {|i| @string.slice(i, n) }.select {|s| s.length
== n } end TMJDFͷڍಈΛѲͯ͠ͳ͍ͱԿͰTFMFDU͠ͳ͍ͱ͍͚ͳ͍͔ Θ͔Βͳ͍ͷͰඍົ͔ͳ͋ ࠷ॳʹTFMFDU͔ͯ͠ΒTMJDF͢ΔͩͱͲ͏ͩΖ͏ʁ
Ҋ̓ def slices(n) @string.chars.each_index.select {|i| i + n <= @string.length
}.map {|i| @string.slice(i, n) } end
Ҋ̓ def slices(n) @string.chars.each_index.select {|i| i + n <= @string.length
}.map {|i| @string.slice(i, n) } end ͬͪ͜ͷํ͕·ͩTMJDFͷڍಈΛؾʹ͠ͳͯ͘ಡΊΔ ϚγͰ͔͢Ͷ͑ɻͰ͏ͪΐͬͱ͔ͳ͋
Ҋ̓ DIBSTͰϦετʹͯ͠͠·͏ͳΒɺ"SSBZͱ͔&OVNFSBCMFʹ ͍ۙ͜ͱΛͰ͖Δಓ۩͕͋ΔͷͰʁʢ͋Γͦ͏ʣ def slices(n) @string.chars.each_index.select {|i| i + n
<= @string.length }.map {|i| @string.slice(i, n) } end
Ҋ̓ 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͔
Ҋ̔ def slices(n) @string.chars.each_cons(n).map(&:join) end
Ҋ̔ def slices(n) @string.chars.each_cons(n).map(&:join) end Ϧετ͔Β࿈ଓ͢ΔʮOཁૉΛͭʹ·ͱΊͨͷʯ Λͯ͢औΓग़͢
Ҋ̔ def slices(n) @string.chars.each_cons(n).map(&:join) end Ϧετ͔Β࿈ଓ͢ΔʮOཁૉΛͭʹ·ͱΊͨͷʯ Λͯ͢औΓग़͢ จࣈྻ͔Βʮ͞Oͷ࿈ଓ͢Δ෦จࣈྻʯ Λͯ͢औΓग़͢
Ҋ̔ def slices(n) @string.chars.each_cons(n).map(&:join) end Ϧετ͔Β࿈ଓ͢ΔʮOཁૉΛͭʹ·ͱΊͨͷʯ Λͯ͢औΓग़͢ จࣈྻ͔Βʮ͞Oͷ࿈ଓ͢Δ෦จࣈྻʯ Λͯ͢औΓग़͢ ͏·͘ݴ͑ͯΔͷͰʁʁʁ
࠷ऴҊ class Series def initialize(string) @string = string end def
slices(n) @string.chars.each_cons(n).map(&:join) end end
None
ࢲʹͱͬͯ 3VCZ͕ͲΜͳݴޠͰ͋Δ͔
΅͘ʹͱͬͯ3VCZͱ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋Δ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋Δ w ϖϯͰ͋Δ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋Δ w ϖϯͰ͋Δ w ݴޠͰ͋Δ
ʁʁʁ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋Δ w ϖϯͰ͋Δ w ݴޠͰ͋Δ
3VCZΊ͕ͶͰ͋Δ
3VCZΊ͕ͶͰ͋Δ ΛΑ͘ݟ͑ΔΑ͏ʹͯ͘͠ΕΔ
3VCZΊ͕ͶͰ͋Δ ੈքΛͲ͏ղऍͨ͠Βྑ͍͔ͷ ࢹ࠲Λ༩͑ͯ͘ΕΔ
3VCZϖϯͰ͋Δ
3VCZϖϯͰ͋Δ ΅͘ʹͱͬͯ3VCZ͍ͪΜࣗવͳ ॻ͖৺͕͢ΔϖϯͷΑ͏ͳͷ
3VCZϖϯͰ͋Δ ⾝体になじむペンは思考を促進する l ʰത࢜ͷѪͨ͠3VCZͱֶʱʢݪ৴Ұ ͱͪ͗3VCZձٞʣ
3VCZϖϯͰ͋Δ l ʰത࢜ͷѪͨ͠3VCZͱֶʱʢݪ৴Ұ ͱͪ͗3VCZձٞʣ 計算をする⼈間と紙の間にあるの がペン。投げ出しそうになった瞬 間に、あと10秒余計に考えられる かどうかはペンで決まる。
3VCZݴޠͰ͋Δ
3VCZݴޠͰ͋Δ ᅳޭҰʰதಈଶͷੈքҙࢤͱͷߟݹֶʱ l思考の可能性は、⾔語能⼒に結びつい ている。というのも、⾔語とは形式を 持った意味の構造であり、思考すると は⾔語の記号を操ることだからである。
3VCZݴޠͰ͋Δ FBDI@DPOT͖ͯͬͯͨ͠Ϧετͷ֤ཁૉΛ KPJOͨ͠จࣈྻͱNBQͯ͠Δ
3VCZݴޠͰ͋Δ ϙʔϧάϨΞϜʰϋοΧʔͱըՈίϯϐϡʔλ࣌ͷऀͨͪʱ lプログラミング⾔語はプログラマ がプログラムを考えるためのもの であって、既に考えたプログラム を書き下すためのものじゃない。
3VCZݴޠͰ͋Δ l私たちはもはや、正直⾔ってそれ をコンピュータ⾔語とは呼べない。 それはプログラマ語だ。それは私 たちが思考する⾔語なのだ。 XIZUIFMVDLZTUJ⒎ʰϗϫΠͷ ײಈత 3VCZΨΠυʱ ʮݴޠͱɺݴޠͰҙຯ͍ͯ͠Δͷʯ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋Δ w ϖϯͰ͋Δ w ݴޠͰ͋Δ
ところで、私はRubyというめがねを通して問題を 認識して、Rubyというペンをつかって外部へアウ トプットしていて、頭ではRubyで思考している。 これはもう私⾃⾝がRubyと⾔ってしまっても過⾔ ではないのではないだろうか…??
けれど、実際には⼀体ではないからこそいい のである。⼤事なのはRubyと⾃分が息が合 うこと。⼀体だと錯覚してしまうと、協⼒関 係から依存関係になってしまう(よくない)
ҧ͏ͷʹ৮ΕΔͱɺΑΓʮͦͷͷʯͷ͜ͱ͕Θ͔Δ w ҧ͏Ί͕ͶͰࣄΛݟΔ w ҧ͏ॻ͖৺ͷϖϯΛ͏ w ҧ͏ݴޠͰࢥߟͯ͠ΈΔ
·ͱΊ
ϓϩάϥϛϯάΤϐιʔυɿ
FYFSDJTNJP
΅͘ͷϓϩάϥϛϯά࡞๏ w ͍͍ͩͨ࠷ॳͷ͏ͪͷ͜ͱΛΑ͘Θ͔͍ͬͯͳ͍ w ͷͰɺ3VCZʹฉ͖ͳ͕ΒͱΓ͋͑ͣΛղ͘ w ίʔυΛ͍͡Γͳ͕Βɺগͣͭ͠ͱͷڑΛ٧Ί͍ͯ͘ w ੜͯ͠ࢥ͍͍ͭͨΞΠσΞͳͲΛࢼ͍ͯ͘͠ w
͋Δͱ͜Ζ·Ͱ͍ͬͨΒɺผͷΞϓϩʔνΛ୳ࡧ͢Δ Ҏ্Λेͩͱࢥ͑Δ·Ͱଓ͚ɺ͍ͪΜదͩͱײ͡ΔղΛબ͢Δ
今⽇ご覧いただいたような、⼩さな表 現の選択を積み重ねながら「そのもの がソフトウェアのことを語っているよ うなコード」を探っていく⾏為が、プ ログラミングという活動において⾮常 に重要な点なのではないかと考えてい ます。
Inner Peace
ࢲʹͱͬͯ 3VCZͱͲΜͳٕज़Ͱ͋Δ͔ɿ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋ΔͷݟํΛ༩͑Δͷ w ϖϯͰ͋ΔࢥߟΛεέον͢ΔͨΊͷͷ w ݴޠͰ͋ΔϓϩάϥϚͱͯ͠ࢥߟ͢Δݴޠ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋ΔͷݟํΛ༩͑Δͷ w ϖϯͰ͋ΔࢥߟΛεέον͢ΔͨΊͷͷ w ݴޠͰ͋ΔϓϩάϥϚͱͯ͠ࢥߟ͢Δݴޠ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋ΔͷݟํΛ༩͑Δͷ w ϖϯͰ͋ΔࢥߟΛεέον͢ΔͨΊͷͷ w ݴޠͰ͋ΔϓϩάϥϚͱͯ͠ࢥߟ͢Δݴޠ
΅͘ʹͱͬͯ3VCZͱ w Ί͕ͶͰ͋ΔͷݟํΛ༩͑Δͷ w ϖϯͰ͋ΔࢥߟΛεέον͢ΔͨΊͷͷ w ݴޠͰ͋ΔϓϩάϥϚͱͯ͠ࢥߟ͢Δݴޠ
΅͘ʹͱͬͯ3VCZͱ w ΦϒδΣΫτࢦݴޠ w ϖϯͰ͋ΔࢥߟΛεέον͢ΔͨΊͷͷ w ݴޠͰ͋ΔϓϩάϥϚͱͯ͠ࢥߟ͢Δݴޠ
΅͘ʹͱͬͯ3VCZͱ w ΦϒδΣΫτࢦݴޠ w εΫϦϓτݴޠ w ݴޠͰ͋ΔϓϩάϥϚͱͯ͠ࢥߟ͢Δݴޠ
΅͘ʹͱͬͯ3VCZͱ w ΦϒδΣΫτࢦݴޠ w εΫϦϓτݴޠ w ϓϩάϥϛϯάݴޠ
΅͘ʹͱͬͯ3VCZͱ w ΦϒδΣΫτࢦ w εΫϦϓτ w ϓϩάϥϛϯάݴޠ Ͱ͋Δ
ΦϒδΣΫτࢦεΫϦϓτݴޠ3VCZ
ちょっと⼤げさに表現すると、Ruby の究極の⽬的は、有限の⼈⽣において プログラミングの楽しい部分にできる だけ集中できるように助けることです。 ·ͭͱΏ͖ͻΖɺੴ௩ܓथʰΦϒδΣΫτࢦεΫϦϓτݴޠ3VCZʱ l
ౡాߒೋ !TOPP[FS Ԭ3VCZձٞ/PW "3VCZ1SPHSBNNJOH&QJTPEF 3VCZJTNZHMBTTFT NZTUBUJPOFSZ BOENZMBOHVBHF