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
RubyをRubyらしく書く!
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
t0w4
July 10, 2018
59
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RubyをRubyらしく書く!
t0w4
July 10, 2018
More Decks by t0w4
See All by t0w4
golangでマンデンブロ集合の エモい?gif画像作成を高速化する
t0w4
0
190
Featured
See All Featured
How to Ace a Technical Interview
jacobian
280
24k
ラッコキーワード サービス紹介資料
rakko
1
5.3M
A better future with KSS
kneath
240
18k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.3k
The Cult of Friendly URLs
andyhume
79
7k
Thoughts on Productivity
jonyablonski
76
5.4k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Amusing Abliteration
ianozsvald
1
350
Heart Work Chapter 1 - Part 1
lfama
PRO
10
37k
Into the Great Unknown - MozCon
thekraken
41
2.8k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
HDC tutorial
michielstock
2
960
Transcript
Λ Β͘͠ॻ͘ʂ
࣍ 1.RubyͬͯԿʁ 2.RubyRubyΒ͔͘͘͠ʂ 3.RubyΛॻ͖ͨ͘ͳͬͨ͋ͳͨ… 4.͓·͚
ୈ1ষ RubyͬͯԿʁ
ୈ1ষ RubyͬͯԿʁ ·ͭͱΏ͖ͻΖʢ௨শ MatzʣʹΑΓ։ൃ͞Εͨ ΦϒδΣΫτࢦεΫϦϓτݴޠɻ
ୈ1ষ RubyͬͯԿʁ Ҏ্ ࠓճRubyͷྑ͞Λײ͡औͬͯΒ͏ͷ͕ తͳͷͰݴޠࣗମͷৄ͍͠આ໌͋Γ·ͤΜɻ ಄Ͱͳ͘৺Ͱฉ͍͍ͯͩ͘͞ɻ
ୈ2ষ RubyRubyΒ͔͘͘͠ʂ ͔͜͜Β࣮ࡍʹमਖ਼લޙͷιʔεΛ ݟͳ͕Βઆ໌͍͖ͯ͠·͢. ͍ͭͰʹଞͷݴޠͰͲ͏͔ฉ͔͍ͤͯͩ͘͞ʂ (ݴޠʹґΒͳ͍༰͋ΔͷͰ͝ҙΛ…)
˙؆୯ͳJGจߦͰ JGGSBH0, QVUT0, FOE ίʔυઆ໌ɿ มGSBH͕z0,zͷ߹จࣈྻz0,zΛඪ४ग़ྗ मਖ਼લ ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
JGGSBH0, QVUT0, FOE ˙؆୯ͳJGจߦͰ ίʔυઆ໌ɿ มGSBH͕z0,zͷ߹จࣈྻz0,zΛඪ४ग़ྗ मਖ਼લ ここ!!! ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
˙؆୯ͳJGจߦͰ QVUT0,JGGSBH0, JGจͷத͕ߦఔͷ༰Ͱ͋ΕɺޙஔJGͰߦΛ मਖ਼ޙ ݮΒ͠·͠ΐ͏ʂ ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
˙JGͷ͕݅ࣜ൱ఆͷ࣌VOMFTTΛ͏ʂ JGGSBH/( QVUT0, FOE ίʔυઆ໌ɿ มGSBH͕z/(zҎ֎ͷ߹ɺจࣈྻz0,zΛඪ४ग़ྗ मਖ਼લ ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
˙JGͷ͕݅ࣜ൱ఆͷ࣌VOMFTTΛ͏ʂ ίʔυઆ໌ɿ มGSBH͕z/(zҎ֎ͷ߹ɺจࣈྻz0,zΛඪ४ग़ྗ JGGSBH/( QVUT0, FOE मਖ਼લ ここ!!! ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
10/46
VOMFTTGSBH/( QVUT0, FOE ؆୯ͳ൱ఆͷ݅ࣜͰ͋ΕVOMFTTΛ༻ͯ͠ मਖ਼ޙ ݅ࣜΛߠఆจʹ͠·͠ΐ͏ʂ ˙JGͷ͕݅ࣜ൱ఆͷ࣌VOMFTTΛ͏ʂ ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
˙؆୯ͳJGFMTFจࡾ߲ԋࢉࢠΛ͑ͳ͍͔ࢼ͢ʂ JGGSBH0, SFTVMU FMTF SFTVMU FOE ίʔυઆ໌ɿ มGSBH͕z0,zͳΒSFTVMUʹɺͦΕҎ֎ͳΒΛೖ मਖ਼લ ୈ2ষ
RubyRubyΒ͔͘͘͠ʂ
˙؆୯ͳJGFMTFจࡾ߲ԋࢉࢠΛ͑ͳ͍͔ࢼ͢ʂ JGGSBH0, SFTVMU FMTF SFTVMU FOE ίʔυઆ໌ɿ มGSBH͕z0,zͳΒSFTVMUʹɺͦΕҎ֎ͳΒΛೖ मਖ਼લ ここ!!(全部)
ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
˙؆୯ͳJGFMTFจࡾ߲ԋࢉࢠΛ͑ͳ͍͔ࢼ͢ʂ SFTVMU GSBH0, ؆୯ͳJGFMTFจͰಉ͡มʹର͠ೖͳͲΛߦͳ͍ͬͯΔ मਖ਼ޙ ߹ੵۃతʹࡾ߲ԋࢉࢠΛͬͯݟ·͠ΐ͏ɻ ˞جຊతʹJGจ͕ωετ͢Δ࣌͏͖Ͱͳ͍ʂʂ ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
˙ΞʔϦʔϦλʔϯ def hogehoge(frag) if frag == "OK" ԿΒ͔ͷॲཧ ԿΒ͔ͷॲཧ return
true end return false end JGจͷத͕ߦఔͷ༰Ͱ͋ΕɺޙஔJGͰߦΛ ݮΒ͠·͠ΐ͏ʂ मਖ਼લ def hogehoge(frag) return false if frag != "OK" ԿΒ͔ͷॲཧ ԿΒ͔ͷॲཧ return "OK!" end मਖ਼ޙ ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
˙ϝιουͷΓΛฦ࣌͢Ͱ͖Δ͚ͩSFUVSOΛ Θͳ͍ def hogehoge result = "OK" result += "!"
return result end ίʔυઆ໌ɿ จࣈྻΛՃ͠z0,zΛฦ͢ϝιουΛఆٛ͢Δɻ मਖ਼લ ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
˙ϝιουͷΓΛฦ࣌͢Ͱ͖Δ͚ͩSFUVSOΛ Θͳ͍ def hogehoge result = "OK" result += "!"
return result end ίʔυઆ໌ɿ จࣈྻΛՃ͠z0,zΛฦ͢ϝιουΛఆٛ͢Δɻ मਖ਼લ ここ!!! ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
˙ϝιουͷΓΛฦ࣌͢Ͱ͖Δ͚ͩSFUVSOΛ Θͳ͍ 3VCZϝιουఆٛͷ࠷ޙͷΦϒδΣΫτΛฦ͢ͷͰ ࠷ޙ͕SFUVSOจͷ߹ͦͷSFUVSOΛഉআͰ͖Δɻ def hogehoge result = "OK" result
+= "!" result end मਖ਼ޙ ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
˙ϝιουͷΓΛฦ࣌͢Ͱ͖Δ͚ͩSFUVSOΛ Θͳ͍ ࣮࠷ޙͷSFTVMUͳͯ͘େৎͰ͢ def hogehoge result = "OK" result +=
"!" result end मਖ਼ޙ ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
˙GPSΛ͏ͳFBDIΛ͑ʂ GPSOBNFJO<#0# +0/ "-*$&>EP QVUTOBNF FOE ίʔυઆ໌ɿ ྻͷ֤ཁૉΛඪ४ग़ྗ͢ΔɻKBWBͷ֦ுGPSจΆ͍ʁ मਖ਼લ ୈ2ষ
RubyRubyΒ͔͘͘͠ʂ 20/46
˙GPSΛ͏ͳFBDIΛ͑ʂ GPSOBNFJO<#0# +0/ "-*$&>EP QVUTOBNF FOE ίʔυઆ໌ɿ ྻͷ֤ཁૉΛඪ४ग़ྗ͢ΔɻKBWBͷ֦ுGPSจΆ͍ʁ मਖ਼લ ここ!!!
ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
<#0# +0/ "-*$&>FBDIEPcOBNFc QVUTOBNF FOE ผͷݴޠ͔Βདྷͨਓͩͱ͍͕ͪͰ͕͢ɺجຊతʹ 3VCZͰGPS΄΅΄΅͍·ͤΜʂݟͨ͜ͱͳ͍Ͱ͢ɻ मਖ਼ޙ ˙GPSΛ͏ͳFBDIΛ͑ʂ 3VCZͰྻʹྻʹΞΫηε͢ΔΠςϨʔλ͕ͨ͘͞Μ
͋ΔͷͰ༻్ʹ߹Θ͍͚ͤͯ·͠ΐ͏ʂ ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
X #0#+0/"-*$& FBDIEPcOBNFc QVUTOBNF FOE จࣈྻྻXΛ͏ํ͕3VCZΒ͍͠Ͱ͢ɻ zzඞཁͳ͍ͷͰλΠϙ͠ʹ͍͘Ͱ͢ɻ मਖ਼ޙ ˙GPSΛ͏ͳFBDIΛ͑ʂ ୈ2ষ
RubyRubyΒ͔͘͘͠ʂ
˙จࣈྻͷܗ EFGBJTBUV OBNF QVUT.ZOBNFJT OBNF FOE ίʔυઆ໌ɿ ҾͷΛݩʹʮ.ZOBNFJTʙʙʯܗࣜͷ
ඪ४ग़ྗΛߦ͏ɻ मਖ਼લ ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
˙จࣈྻͷܗ EFGBJTBUV OBNF QVUT.ZOBNFJT OBNF FOE ίʔυઆ໌ɿ ҾͷΛݩʹʮ.ZOBNFJTʙʙʯܗࣜͷ
ඪ४ग़ྗΛߦ͏ɻ मਖ਼લ ここ!!! ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
EFGBJTBUV OBNF QVUT.ZOBNFJT\OBNF^ FOE จࣈྻͷ݁߹ͳͲͰ͖Δ͚ͩʮ ʯͳͲΛΘͣ \ɾɾɾ^ܗࣜͷมల։Λ͍·͠ΐ͏ʂ मਖ਼ޙ ""ͷด͡Εɺʮ+ʯͷ͚ͭΕ͕ݮΔ͏͑ݟ͍͢ʂʂ
˙จࣈྻͷܗ ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
˙จࣈྻͷܗ ෳߦ EFGNBJM@DPOUFOUT OBNF DPOUFOUT)FMMPaO DPOUFOUT .ZOBNFJT\OBNF^ FOE ίʔυઆ໌ɿ
ҾͷΛݩʹʮ)FMMP.ZOBNFJTʙʙʯͷจࣈྻΛ վߦࠐΈͰฦ͢ɻ मਖ਼લ ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
˙จࣈྻͷܗ ෳߦ EFGNBJM@DPOUFOUT OBNF DPOUFOUT)FMMPaO DPOUFOUT .ZOBNFJT\OBNF^ FOE ίʔυઆ໌ɿ
ҾͷΛݩʹʮ)FMMP.ZOBNFJTʙʙʯͷจࣈྻΛ վߦࠐΈͰฦ͢ɻ मਖ਼લ ここ!!! ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
EFGNBJM@DPOUFOUT OBNF d&04 )FMMP .ZOBNFJT\OBNF^ &04 FOE ෳߦͷ؆୯ͳจࣈྻܗώΞυΩϡϝϯτΛͬͨํ͕ ݟͯ͘͢मਖ਼͍͢͠Ͱ͢ʂ
मਖ਼ޙ ※~EOSͱॻ͘ͱʮHello!ʯͷલͷεϖʔεΛແࢹͯ͘͠ΕΔ ˙จࣈྻͷܗ ෳߦ ୈ2ষ RubyRubyΒ͔͘͘͠ʂ 30/46
˙ೖྗ͕OJM 3VCZͷ/6-- ͷ͚࣌ͩॳظԽ EFGIPHF BSH BSH)PHFOFXJGBSHOJM BSH FOE
ίʔυઆ໌ɿ Ҿ͕OJMͳΒ)PHFΫϥεͷΠϯελϯεΛฦ͢ɻ मਖ਼લ ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
˙ೖྗ͕OJM 3VCZͷ/6-- ͷ͚࣌ͩॳظԽ EFGIPHF BSH BSH)PHFOFXJGBSHOJM BSH FOE
ίʔυઆ໌ɿ Ҿ͕OJMͳΒ)PHFΫϥεͷΠϯελϯεΛฦ͢ɻ मਖ਼લ ここ!!! ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
EFGIPHF BSH BSHcc)PHFOFX FOE ҙຯʮBSHBSHcc)PHFOFXʯͱಉ͡Ͱɺ मਖ਼ޙ ˙ೖྗ͕OJM 3VCZͷ/6-- ͷ͚࣌ͩॳظԽ
BSH͕OJM GBMTF ͳΒ)PHFͷΠϯελϯεΛฦ͢ɻ ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
˙มͷॳظԽɺฤूɺΓͷηοτΛεϚʔτʹʂ EFGBMM@GJMFT GJMFT<> %JSHMPC UYU EPcGJMFc GJMFTGJMF FOE GJMFT
FOE ίʔυઆ໌ɿ ΧϨϯτσΟϨΫτϦʹ͋Δ֦ுࢠ͕ʮUYUʯͷϑΝΠϧ ҰཡΛྻͰฦ͢ɻ मਖ਼લ ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
˙มͷॳظԽɺฤूɺΓͷηοτΛεϚʔτʹʂ EFGBMM@GJMFT GJMFT<> %JSHMPC UYU EPcGJMFc GJMFTGJMF FOE GJMFT
FOE ίʔυઆ໌ɿ ΧϨϯτσΟϨΫτϦʹ͋Δ֦ுࢠ͕ʮUYUʯͷϑΝΠϧ ҰཡΛྻͰฦ͢ɻ मਖ਼લ ここ!!! ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
EFGBMM@GJMFT <>UBQEPcGJMFTc %JSHMPC EPcGJMFc GJMFTGJMF FOE FOE FOE
ߦमਖ਼લͱมΘΓ·ͤΜ͕ɺमਖ਼ޙॳظԽɺ मਖ਼ޙ ΓͷηοτΛলུͰ͖ɺͪ͜Βͷํ͕3VCZΒ͍͠ɻ ˙มͷॳظԽɺฤूɺΓͷηοτΛεϚʔτʹʂ ୈ2ষ RubyRubyΒ͔͘͘͠ʂ
ୈ2ষ RubyRubyΒ͔͘͘͠ʂ ࠓ͓ݟͤͨ͠ه๏Ҏ֎ʹ3VCZΒ͍͠ॻ͖ํ ศརͳϝιου͕ͨͪ͋Γ·͢ɻ ڵຯ͕͋Δਓͥͻࢼͯ͠Έ͍ͯͩ͘͞ʂ
ୈ2ষ RubyRubyΒ͔͘͘͠ʂ ͨͩࣗ༝ʹॻ͚ΔจɺෳਓͰ։ൃΛ͍ͯ͠Δͱ Ͳ͏ͯ͠ίʔσΟϯάϧʔϧॻ͖ํͷΫηͳͲ ͷ౷Ұ͕͍͠Ͱ͢ΑͶɺɺ ࠓճ͋Θ্ͤͯهͷʹ༗ޮͳHFN 3VCZͷ ϥΠϒϥϦ Λհ͠·͢ʂ
ୈ2ষ RubyRubyΒ͔͘͘͠ʂ SVCPDPQίϚϯυΛ࣮ߦ͢Δ͜ͱʹΑΓɺنʹ४ڌ͍ͯ͠Δ͔ɺ ΑΓྑ͍ه๏͔νΣοΫͯ͘͠ΕΔɻBΦϓγϣϯΛ͚Ε͋Δ ఔࣗಈͰमਖ਼ͯ͘͠ΕΔɻ جຊతʹSVCZTUZMFHVJEFʹ४ڌ͍ͯ͠·͕͢ɺ SVCPDPQZNMΛमਖ਼͢Δ͜ͱͰ४ڌͷ༗ແΛௐͰ͖·͢ʂ
ୈ2ষ RubyRubyΒ͔͘͘͠ʂ ͪ͜ΒSBJMT@CFTU@QSBDUJDFTίϚϯυΛ࣮ߦ͢Δ͜ͱʹΑΓɺ 3BJMTͷϕετϓϥΫςΟεతͳه๏Λ͍ͯ͠Δ͔νΣοΫͯ͠ ͘Ε·͢ɻ SVCPDPQͱಉ͘͡ZNMΛमਖ਼͢Δ͜ͱͰ४ڌͷ༗ແΛௐͰ͖ ·͢ʂ rails_best_practices
ୈ2ষ RubyRubyΒ͔͘͘͠ʂ ͜ΕίʔσΟϯάنͱҧ͍·͕͢ɺCSBLFNBOίϚϯυΛ࣮ ߦ͢Δ͜ͱʹΑΓɺ3BJMTͷηΩϡϦςΟνΣοΫͱͯ͘͠Ε·͢ɻ ݁Ռ)5.-ͰऔಘՄೳɻ ͪΖΜ։ൃऀͷࣝνΣοΫඞཁͰ͕͋͢ΔఔͷϨϕϧ ·ͰࣗಈͰ֬ೝ͢Δͷ͕୭ʹͱ͍͍ͬͯͱࢥ͍·͢ɻɻɻ 40/46
ୈ3ষ RubyΛॻ͖ͨ͘ͳͬͨ͋ͳͨ… ͜͜·ͰདྷͨΒ͏Rubyɺɺ ॻ͖ͨ͘ͳͬͯདྷͨΜ͡Όͳ͍Ͱ͔͢ʁ Θ͔Γ·͢ɻ ͱ͍͏Θ͚ͰΦεεϝͷॻ੶Λհ͠·͢ɻ
ύʔϑΣΫτ 3VCZʲվఆ൛ʳ 3VCZαϙʔλʔζ ஶ ڥߏஙͪΖΜͷ͜ͱɺ 3VCZͷجૅΛཏͨ͠ॳ৺ऀʹ ͋Γ͕͍ͨҰɻHFNͷ࡞Γํ͕ ͳʹ͛ʹ͋Γ͕͍ͨɻ ԁ ੫ࠐ
w w w w w ݹ͍ํΛങΘͳ͍ Α͏ʹҙɹɹˠ
ϝλϓϩάϥϛϯά 3VCZ 1BPMP1FSSPUUB ஶ 3VCZͷࣗ༝ͳ෦ ҋΛؚΉ ͕આ໌͞Ε͍ͯΔྑॻɻ ໘നͯ͘Θ͔Γ͍͢ͷͰ ΦεεϝͰ͢ɻࠇຐज़ॻ
ԁ ੫ࠐ w w w w w
ϓϩάϥϛϯάݴޠ 3VCZ ύʔϑΣΫτ3VCZ͡Ό༰͕গ͠ Γͳ͍ͳͬͯਓʹΦεεϝͷຊɻ 3VCZ։ൃऀࣗΒ͕ॻ͍͍ͯͯΑΓ ৄ͍͠ݴޠͷ͕ࣝಘΒΕ·͢ɻ ԁ ੫ࠐ w w
w w w
ύʔϑΣΫτ 3VCZPO3BJMT ڥߏஙͪΖΜͷ͜ͱɺ 3BJMTͷجૅΛཏͨ͠ॳ৺ऀʹ ͋Γ͕͍ͨҰɻ ύʔϑΣΫτγϦʔζϋζϨ͕ͳ͍ ؾ͕͠·͢Ͷɺɺɺ ԁ ੫ࠐ w
w w w w
ݸਓతʹ3BJMT͔Βೖͬͯศར͞Λֶͼɺ ͔ͦ͜Β3VCZΛਂΊ͍ͯͬͨํָ͕͘͠ ษڧͰ͖Δ͔ͳʔͱࢥ͍·͢ɻ ϝλϓϩάϥϛϯά3VCZઈରಡΉ͖ɻ શ෦ങͬͯԁҎͰ͢ɺ͍҆ʂ
˙ΦʔϓϯΫϥε [1] pry(main)> [2] pry(main)> class String [2] pry(main)* def
upcase [2] pry(main)* self.downcase [2] pry(main)* end [2] pry(main)* end => :upcase [3] pry(main)> "abCD".upcase => "abcd" [4] pry(main)> 3VCZఆٛࡁΈͷΫϥεʹର͠ఆٛͷมߋɺϝιουͷ Ճɺ্ॻ͖ΛͲͷΫϥεʹରͯ͠ߦ͑·͢ɻ ্ͷྫจࣈྻΛେจࣈԽ͢ΔϝιουΛʮখจࣈԽʯ͢ Δϝιουʹॻ͖͍͑ͯ·͢ɻ͍ मਖ਼લ ͓·͚ɿRubyͷҋ෦
˙ϝιουͷಈతՃ [1] pry(main)> define_method :my_method do |arg| [1] pry(main)* "#{arg}
is method" [1] pry(main)* end => :my_method [2] pry(main)> my_method("hoge") => "hoge is method" [3] pry(main)> 3VCZʹϝιουΛՃ͢ΔͨΊͷϝιου͕͋Γɺ໊ শɾಈ࡞ͳͲΛมΛ༻ͯ͠ಈతʹఆٛͰ͖·͢ɻ ্ͷྫҾΛड͚औΓɺzҾJTNFUIPEzͱ͍͏จࣈྻ Λฦ͢ϝιουΛఆ͍ٛͯ͠·͢ɻ ͓·͚ɿRubyͷҋ෦
˙ΞϥϯυΤΠϦΞε [1] pry(main)> class String [1] pry(main)* alias :orig_upcase :upcase
[1] pry(main)* def upcase [1] pry(main)* self.orig_upcase + " is upcased!" [1] pry(main)* end [1] pry(main)* end => :upcase [2] pry(main)> "hoge".upcase => "HOGE is upcased!" [3] pry(main)> ΞϥϯυΤΠϦΞεͱɺݩͷϝιου໊Λม͑ͣʹ ϝιουͷಈ͖ΛՃ͠·͢ɻ ্ͷྫจࣈྻΛେจࣈʹ͢ΔϝιουΛमਖ਼ͯ͠ɺ ඌʹzJTVQDBTFEz͕Ճ͞ΕΔΑ͏ʹ͍ͯ͠·͢ɻ ͓·͚ɿRubyͷҋ෦
Ҏ্ɺ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ ҋͷ෦ͷଓ͖ ϝλϓϩάϥϛϯά3VCZͰͲ͏ͧ