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
Ruby2.7の新機能で簡易版Rubyインタプリタを実装してみる
Search
fuqda
May 09, 2019
Programming
0
610
Ruby2.7の新機能で簡易版Rubyインタプリタを実装してみる
Hello hey for Engineers vol.3(day2)の発表資料です。
Ruby2.7の新機能パターンマッチを使って簡易版Rubyインタプリタを実装してみるという話です。
fuqda
May 09, 2019
Tweet
Share
More Decks by fuqda
See All by fuqda
Composition API時代の Pub/Subパターンでの状態管理
fuqda
4
3.9k
RubyでPrettierを使ってみた
fuqda
0
360
RSpecによるOpen API自動テスト
fuqda
3
1.1k
OSSへの プルリクエスト作成の手引き
fuqda
1
330
Rails Girls Tokyo 13th Sponsor LT by STORES
fuqda
0
210
黒歴史リポジトリを使ったリファクタリング勉強法のススメ
fuqda
1
1.1k
OSS初心者がつまづきながらOSSマナーを学んでいく話
fuqda
4
3.3k
カンファレンスで技術的お土産を 増やすために出来ることを考えた
fuqda
2
550
Other Decks in Programming
See All in Programming
perlをWebAssembly上で動かすと何が嬉しいの??? / Where does Perl-on-Wasm actually make sense?
mackee
0
200
Java 25, Nuevas características
czelabueno
0
120
[AtCoder Conference 2025] LLMを使った業務AHCの上⼿な解き⽅
terryu16
6
850
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
410
AIコーディングエージェント(Manus)
kondai24
0
230
Cap'n Webについて
yusukebe
0
150
Spinner 軸ズレ現象を調べたらレンダリング深淵に飲まれた #レバテックMeetup
bengo4com
0
190
Navigation 3: 적응형 UI를 위한 앱 탐색
fornewid
1
480
モデル駆動設計をやってみようワークショップ開催報告(Modeling Forum2025) / model driven design workshop report
haru860
0
290
クラウドに依存しないS3を使った開発術
simesaba80
0
180
Claude Codeの「Compacting Conversation」を体感50%減! CLAUDE.md + 8 Skills で挑むコンテキスト管理術
kmurahama
1
660
TestingOsaka6_Ozono
o3
0
180
Featured
See All Featured
Chasing Engaging Ingredients in Design
codingconduct
0
89
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
0
320
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
320
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
How GitHub (no longer) Works
holman
316
140k
GraphQLとの向き合い方2022年版
quramy
50
14k
Building Applications with DynamoDB
mza
96
6.9k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
230
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
52
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
680
Transcript
Ruby2.7ͷ৽ػೳͰ ؆қ൛RubyΠϯλϓϦλΛ ࣮ͯ͠ΈΔ 2019/05/09 Hello hey for Engineers vol.3ɹɹ
fuqda(fuqda90)
fuqdaͱਃ͠·͢ ʲܦྺʳ 4*FS ϲ݄ ͔Β ແڅΠϯλʔϯϲ݄Λܦͯ 4503&4KQྲྀΕண͖ ʲͦͷଞʳ ීஈ5BNBSCͱ͍͏
ଟຎҬ ٢ࣉʙീԦࢠ·Ͱ ͷ Ҭ3VCZίϛϡχςΟΛɹ ओ࠵ͯ͠·͢
ࠂ ݸਓత
݄ʹ5BNBSCͰ ΧϯϑΝϨϯε Γ·͢✨
ςʔϚʮRubyistͱͯ͠ͷʯ
Tama Rubyձٞ01 d ҙࢀՃͷ࠙ձd·Ͱ !ौ୩ηϧϦΞϯλϫʔ' (.0:PVST
جௐߨԋɿҏ౻३Ұ͞Μ !KODIJUP جௐߨԋɿޒेཛྷ໌͞Μ !JHBJHB ͦͷଞ$'1ʴ5BNBSCϝϯόʔ-5
CFPઈࢍडதͰ͢ (ҰൠࢀՃืू6݄։࢝༧ఆ) https://tama-rb.github.io/tamarubykaigi01/
ࠓͷ͓
Ruby2.7ͷύλʔϯϚονΛ ࢼͯ͠ΈΔͱ͍͏ 3VCZͷτϥϯΫ NBTUFS ʹ 1BUUFSO.BUDIJOHͱ͍͏৽ػೳ͕ Ճ͞Ε͍ͯΔͱͷ͜ͱ ͱ͍͏Θ͚Ͱʂຊ ͦΕΛࢼͯ͠Έ·͢
ิɿRubyKaigi2019Ͱͷ ൃදͪ͜Β https://speakerdeck.com/k_tsj/pattern-matching-new-feature-in-ruby-2-dot-7
ࠓճ ύλʔϯϚονϯάΛ ࢼ͢ࡐ
3VCZͰ࡞Δ ؆қ൛ 3VCZΠϯλϓϦλ ✨
ʲલఏʳ ͜͜Ͱ࡞ΔΠϯλϓϦλʹ͍ͭͯɺ िץΞεΩʔͰ࿈ࡌ͞Ε͍ͯͨ (2016.09~2017.01) RubyͰֶͿRubyͷίʔυΛҰ෦ྲྀ༻͠ɺ ͦ͜ʹखΛೖΕ͍ͯ͘ܗͰ ਐΊ͍͖ͯ·͢ refs :ʮୈ5ճ RubyͰม͖ిΛ࡞ͬͯΈΔʯ
https://ascii.jp/elem/000/001/230/1230449/
ͦͦΠϯλϓϦλͬͯ… JUFSQSFUFSˠҙຯɿʮ௨༁ʯ ਓ͕ؒॻ͍ͨιʔείʔυΛ ಡΈࠐΜͰϓϩάϥϜͱͯ͠ ࣮ߦ͢ΔϓϩάϥϜͷ͜ͱ
ྫ͑͜ΜͳࣜΛಡΈࠐΜͰ ΠϯλʔϓϦλ͕ղऍ͢Δ߹
ΠϯλϓϦλ͕ Δ͜ͱͬͯʁ
ࣈ۟ղੳ ߏจղੳ ࣮ߦ
1. ࣈ۟ղੳ จࣈྻΛͭͭ෦ͷྻʹม͢Δ
2. ߏจղੳ ϓϩάϥϜͱ࣮ͯ͠ߦՄೳͳߏจʹม͢Δ
3. ࣮ߦ ߏจΛೖྗͱͯ͠ϓϩάϥϜΛ࣮ߦ͢Δ
ࣈ۟ղੳ ߏจղੳ ࣮ߦ ࣌ؒͷ߹ʹΑΓ ͷ ෦ग़དྷ߹͍ͷϥΠϒϥϦΛ ྲྀ༻͠·͢
͍ͬͯ͘
ࠓճͷࡐྉᶃ ߏจղੳ༻ͷgem NJOSVCZ https://github.com/mame/minruby
ࠓճͷࡐྉᶄ ߏจΛRubyͱ࣮ͯ͠ߦ͢ΔΫϥε ࣮ߦ͢ΔϑΝΠϧ JOUFSQSFUFSSC
ࠓճͷࡐྉᶅ ߏจΛ࡞ΔͨΊͷܭࢉࣜΛهࡌͨ͠Ϋϥε ίϚϯυ࣮ߦ͢ΔϑΝΠϧͷҾͱͳΔϑΝΠϧ ʮ ʯ͕هࡌ͞Ε͍ͯΔ͚ͩ GPSNVMBSC
͡Ό࣮͋ࡍɺ 3VCZͷύλʔϯϚονϯάΛ ΠϯλϓϦλͷॲཧͰ͏ͱͯ͠ɺ ͲΜͳ෦Ͱ͑ΔͩΖ͏ʁ
ߟ͑ͯΈΔ
case~whenΛεοΩϦॻ͘ ͨΊʹ͏ͷͲ͏ͩΖ͏ʁ ɹɹɹɹ ߏจղੳޙͷྻ Λ ࠶ؼతʹݕࡧͯ͠Լهͷϝιουͷ 3VCZͱͯ͠ ࣮ߦ͢Δ෦ʹ खΛೖΕͯΈΔ
ࢼͯ͠ΈΑ͏
ࠓճ͏ ύλʔϯϚονϯάͷ छྨ ɹɹɹɹ˞ύλʔϯϚονϯάͷه๏ʹ ɹɹɹɹ͍͔ͭ͘ͷόϦΤʔγϣϯ͕͋Γ·͢
As Pattern DBTFʹ͕ͬͨ ύλʔϯʹҰக͢Δͱ Ұகͨ͠ͱ Ҏ߱ͷมΛ ඥ͚ͮΔ͜ͱ͕ग़དྷΔ
ͦͷଞͷύλʔϯϚονϯάʹ͍ͭͯ 7BMVF1BUUFSO 7BSJBCMF1FUUFSO "MUFSOBUJWF1BUUFSO "SSBZ1BUUFSO )BTI1BUUFSO ͪ͜Βͷهࣄ͕͔Γ͔ͬͨ͢ͷͰؾʹͳΔํͦͪΒ !NBLJDBNFMʮ3VCZͷ৽ػೳ1BUUFSO.BUDIJOH͕࠷ߴͰͨ͠ʯ IUUQTRJJUBDPNNBLJDBNFMJUFNTDEFGEFEC
ͬͯΈͨ
As PatternΛ͏લޙͷมߋࠩ ࠓճͷέʔεͰ࠶ؼॲཧΛॻ͔ͳͯ͘Α͘ͳΓ·ͨ͠ ଟগγϡοͱॻ͚͔ͨ͠Ε·ͤΜɻ ͬͱ៉ྷʹॻ͚ΔͩΖ͏͚Ͳࠓճΰϝϯͳ͍͞ʜ
खݩͰಈ͔͢߹ ͠खݩͰࢼͯ͠Έ͍ͨ ͱ͍͏ํHJTUʹιʔεΛ ஔ͍͓͖ͯ·ͨ͠ͷͰɺ ͦͪΒͰ͓ܰ͘ࢼ͚͠·͢ ) Rubyͷόʔδϣϯ2.7.0devͰ͢ https://gist.github.com/Shigeyuki-fukuda/37c2e9da1ac3744ea24920dacd25580f
࣮ࡍʹಈ͔ͨ݁͠Ռ SBJMTSVOOFSίϚϯυʹҾΛͯ͠ ࣮ߦͯ͠Έͨͱ͜ΖΩϟϓνϟͷ௨Γ ఆ௨Γͷܭࢉ͕͞Ε·ͨ͠ ܭࢉ݁Ռ͕Ͱ͋Δ͜ͱΛ֬ೝ
ײ
ࠓճͬͯΈͯ… ࠓճɺ ͷΑ͏ͳԋࢉࢠͱͭͷ୯७ͳܭࢉࣜͰ͕ͨ͠ɺ ԼهͷΑ͏ͳෳߦͷܭࢉʹରԠ͠Α͏ͱ͢Δͱ ͏গ͍͠ํΛ͢Δඞཁ͕͋Γͦ͏Ͱ͢ ͏গͯ͠͠࡞Γ͔ͨͬͨͰ͕͢ɺ·ͨ࣍ͷػձʹ ɹɹɹɹɹɹɹɹɹɹ
ɹɹɹɹɹɹɹɹɹɹ FYෳߦͷܭࢉࣜΛಡΈࠐΉࡍͷྫ
·ͱΊ
RubyͬͯΠΠͰ͢ΑͶ✨ ࠓճ3VCZͷτϥϯΫʹՃ͞Εͨ ϕʔλ൛ͷύλʔϯϚονϯάΛ3VCZͷΠϯλϓϦλͷ࣮ ͱ͍͏έʔεΛྫʹ͍ͬͯ͡Έ·ͨ͠ ͬͺΓ3VCZͰίʔυΛॻ͘ͷָ͍ͬͯ͠Ͱ͢ΑͶ✨☺ 3VCZͷདྷϦϦʔε͕ࠓ͔Βָ͠ΈͰ͢ SCFOW͔ΒखܰʹམͱͤΔͷͰ ·ͩͷํ2.7Λࢼͯ͠Έ͍͔͕ͯͰ͠ΐ͏͔
ͱ͍͏Θ͚Ͱ
8FBSF)JSJOH 4503&4KQ Ұॹʹಇ͍ͯ͘ΕΔؒΛืू͍ͯ͠·͢