Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
A Ruby Programming Episode: Ruby is my glasses,...
Search
Koji SHIMADA
PRO
November 24, 2017
Programming
9.1k
17
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
More Decks by Koji SHIMADA
See All by Koji SHIMADA
Railsのように考える: See through the Master
snoozer05
PRO
3
900
ソフトウェアアーキテクトのための意思決定術: Create Decision Readiness—The Real Skill Behind Architectural Decision
snoozer05
PRO
36
13k
日本Rubyの会: これまでとこれから
snoozer05
PRO
6
1k
Rubyist入門: The Way to The Timeless Way of Programming
snoozer05
PRO
8
730
One Enishi After Another
snoozer05
PRO
1
550
ソフトウェアアーキテクトのための意思決定術: Software Architecture and Decision-Making
snoozer05
PRO
26
8.8k
WHOLENESS, REPAIRING, AND TO HAVE FUN: 全体性、修復、そして楽しむこと
snoozer05
PRO
10
26k
スタッフエンジニアの道: The Staff Engineer’s Path
snoozer05
PRO
55
22k
ソフトウェアアーキテクチャメトリクスの基礎: Software architecture metrics in a nutshell
snoozer05
PRO
35
15k
Other Decks in Programming
See All in Programming
スマート反転とウェブアクセシビリティ
camiha
0
210
SONY CISC-NEWS NWS-1750 + NWB-225 フレームバッファの NetBSD/news68k ドライバ実装 / OSC2026Hiroshima
tsutsui
0
110
A2UI for Android: Safely Rendering AI-Generated UI with Jetpack Compose - DroidKaigi 2026
itsmedreamwalker
0
140
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
580
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
120
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
1.9k
Security issues being discussed on Web Platforms
petamoriken
0
940
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
490
TiDB Cloudのカスタムコントローラーによるオートスケール対応
takaidohigasi
0
120
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
180
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
4
2.9k
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
6
2k
Featured
See All Featured
How GitHub (no longer) Works
holman
316
150k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
290
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Agile that works and the tools we love
rasmusluckow
331
22k
Code Reviewing Like a Champion
maltzj
528
40k
Design in an AI World
tapps
1
320
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
660
KATA
mclloyd
PRO
35
15k
Thoughts on Productivity
jonyablonski
76
5.4k
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