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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Koji SHIMADA
PRO
November 24, 2017
Programming
9.2k
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
5
1.5k
ソフトウェアアーキテクトのための意思決定術: Create Decision Readiness—The Real Skill Behind Architectural Decision
snoozer05
PRO
36
13k
日本Rubyの会: これまでとこれから
snoozer05
PRO
6
1.1k
Rubyist入門: The Way to The Timeless Way of Programming
snoozer05
PRO
8
780
One Enishi After Another
snoozer05
PRO
1
560
ソフトウェアアーキテクトのための意思決定術: Software Architecture and Decision-Making
snoozer05
PRO
26
8.9k
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
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
120
mrbgem 三角測量 開発
ogom
0
130
スマート反転とウェブアクセシビリティ
camiha
0
220
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
240
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
460
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
280
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
1
2k
AHC070解法紹介
eijirou
0
140
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
240
GitHubハンズオン講座 — 実務レベルのチーム開発のフローを身につけよう
junhat6
0
110
iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門
kaseken
2
400
FreeBSDでZabbixを動かす
kenkino
0
340
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
540
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
420
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Embracing the Ebb and Flow
colly
88
5.2k
Building an army of robots
kneath
307
47k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
530
Mobile First: as difficult as doing things right
swwweet
225
10k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
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