ruby.wasmで多人数リアルタイム通信ゲームを作ろう
by
lni_T
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
#kanrk08_preparty @Lni_T / ϧχ ruby.wasmͰ ଟਓϦΞϧλΠϜ ௨৴ήʔϜΛ࡞Ζ͏ʂ
Slide 2
Slide 2 text
ࣗݾհ 5XJUUFS 9 *%!-OJ@5 ϧχ ग़Վࢁ +BWBΛ3BJMTʹҠߦͨ͠Γ 1)1Λ3BJMTʹҠߦͨ͠Γɹͱ͍ͬͨ αʔόҾͬӽ͠ۀͰੜܭΛཱ͍ͯͯΔ ʘΑΖ͘͠Ͷʗ
Slide 3
Slide 3 text
No content
Slide 4
Slide 4 text
No content
Slide 5
Slide 5 text
աڈͭͬͨ͘ͷ SVCZXBTNͰ3VCZίʔυ͔Β ԻܗΛੜ͢Δ SVCZXBTNTZOUIFTJ[FS ։࠵ େࡕ3VCZձٞʹͯൃද
Slide 6
Slide 6 text
* NOTICE * ຊͷτʔΫՌͷσϞؚ͕·Ε·͢ɻ ͥͻ͓खݩʹ1$εϚʔτϑΥϯΛ͝༻ҙͷ্ɺ͝ཡ͍ͩ͘͞ɻ
Slide 7
Slide 7 text
দࢁʂ দࢁʂ দࢁʂ ݄ͷ3VCZ,BJHJ ͓ർΕ༷Ͱͨ͠ʂ
Slide 8
Slide 8 text
ڵຯਂ͍ొஃʜ
Slide 9
Slide 9 text
ٱʑʹձ͏3VCJFTUͨͪʜ
Slide 10
Slide 10 text
ܹΛड͚ͯΔؾ61ʂ
Slide 11
Slide 11 text
ͦͷ··ͷྲྀΕͰؔ3VCZ
Slide 12
Slide 12 text
εέδϡʔϧΛߟ͑ͣʹCFPԠืͨ݁͠Ռ… Πϕϯτཌʹຊ൪ϦϦʔεΛ͢ΔӋʹ
Slide 13
Slide 13 text
ຊඍྗͳ͕Β Γ্͛ʹߩݙͰ͖Εʂ
Slide 14
Slide 14 text
ຊͷτʔΫςʔϚ ruby.wasm
Slide 15
Slide 15 text
ruby.wasm ͓͞Β͍ গʑ͓͖߹͍͍ͩ͘͞
Slide 16
Slide 16 text
WebAssembly
Slide 17
Slide 17 text
WebAssembly(Wasm) ϞμϯϒϥβͰಈ࡞͢Δ όΠφϦίʔυͷ৽͍͠ϑΥʔϚοτ ಛ ✤ )JHI1FSGPSNBODF ✤ 4FDVSF 4BOECPYڥͰಈ࡞͢Δ ✤ -BOHVBHF*OEFQFOEFOU ಛఆͷݴޠʹґଘ͠ͳ͍ ✤ 1PSUBCMF
Slide 18
Slide 18 text
WebAssembly(Wasm) )JHI1FSGPSNBODF ✤ αΠζͱಡΈࠐΈ࣌ؒΛޮΑ͘અͰ͖Δ όΠφϦܗࣜͰΤϯίʔυ ✤ ωΠςΟϒͰͷಈ࡞Λࢦ͍ͯ͠Δ 4FDVSF ✤ 8BTNόΠφϦ4BOECPYڥͰಈ࡞͢Δ ✤ ࢀߟIUUQTXFCBTTFNCMZPSHEPDTTFDVSJUZ
Slide 19
Slide 19 text
Language-Independent ಛఆͷݴޠʹґଘ͠ͳ͍ $$ 4XJGU 3VTU (PͳͲͷ༷ʑͳϓϩάϥϛϯάݴޠ͔Β 8BTNόΠφϦΛੜͰ͖Δ ✤ 3VCZؒೖΓͨ͠ʂ
Slide 20
Slide 20 text
Portable ࠷ॳʹʮϞμϯϒϥβͰಈ࡞͢Δʜʯͱհ͠·͕ͨ͠ʜ ಛఆͷϓϥοτϑΥʔϜʹґଘͤͣಈ࡞͢Δʂ ✤ ݩʑ8FCϒϥβͰͷར༻͕ओత͕ͩͬͨ 8BTNͷϥϯλΠϜ͕͋ΕϒϥβҎ֎Ͱಈ͘
Slide 21
Slide 21 text
Portable 8BTNϥϯλΠϜ͕͋ΕϒϥβҎ֎Ͱಈ͘ ✤ $%/ͷ&EHFڥ ✤ 'BB4ڥ ✤ ͦͷଞ8BTNϥϯλΠϜ XBTNUJNF XBTNFS ͨͩ͠ɺ8BTNݱࡏ༷͕Ճ͞Ε͓ͯΓ ϥϯλΠϜʹΑͬͯαϙʔτ͍ͯ͠Δ͔Ͳ͏͔͕ҟͳΔ
Slide 22
Slide 22 text
WASI
Slide 23
Slide 23 text
ʮ༷ʑͳڥʯͰ ʮ҆શʯ͔ͭʮޮతʯʹ ϓϩάϥϜΛಈ͔͍ͨ͠ !
Slide 24
Slide 24 text
WASI 8FC"TTFNCMZ4ZTUFN*OUFSGBDF 04ʹґଘ͢ΔγεςϜίʔϧΛநԽ͢Δ༷ ✤ ϑΝΠϧγεςϜΞΫηε ✤ ωοτϫʔΫΞΫηε ✤ FUD 8BTN3VOUJNF 7. )PTU4ZTUFN 8"4*
Slide 25
Slide 25 text
WASI 8BTNࣗମγεςϜΠϯλʔϑΣΠεΛ࣋ͨͳ͍ 7.ͷ্Ͱ࣮ߦ͞ΕΔ 8"4*͜ΕΛن֨Խ͢Δ 8BTN3VOUJNF 7. )PTU4ZTUFN 8"4*
Slide 26
Slide 26 text
͔͜͜ΒRubyͷ
Slide 27
Slide 27 text
Ruby / WebAssembly 3VCZ8"4*ϕʔεͷ8FC"TTFNCMZαϙʔτ ✤ 8BTNڥͰ$3VCZ͕ಈ࡞͢ΔΑ͏ʹͳͬͨ
Slide 28
Slide 28 text
ҰൠతͳWasm࣮ߦϑϩʔ ֤ݴޠͷϓϩάϥϜΛ8BTNόΠφϦʹίϯύΠϧ XBTN ϒϥβ $$ 4XJGU 3VTU (P
Slide 29
Slide 29 text
RubyͷWasm࣮ߦϑϩʔ 3VCZ*OUFSQSFUFSΛ8BTNόΠφϦʹίϯύΠϧ ✤ ͦͷόΠφϦΛར༻ͯ͠3VCZίʔυ͕ಈ͘ SVCZXBTN 3VCZΠϯλϓϦλ $3VCZ ϒϥβ BQQSC
Slide 30
Slide 30 text
WASI / VFS ԾϑΝΠϧγεςϜ 7'4 Λ8"4*্ʹ࣮ ✤ ϑΝΠϧૢ࡞͕Ͱ͖ͳ͍ڥͰ ϑΝΠϧγεςϜ͔ΒͷಡΈࠐΈ͕Ͱ͖ΔΑ͏ʹ 7'4ʹʮSCʯΛຒΊࠐΉ͜ͱͰ୯ҰϑΝΠϧʹύοέʔδԽՄೳ
Slide 31
Slide 31 text
WASI / VFS 7'4ʹʮSCʯΛຒΊࠐΉ͜ͱͰ୯ҰϑΝΠϧʹύοέʔδԽՄೳ SVCZXBTN 3VCZΠϯλϓϦλ $3VCZ BQQSC SVCZXBTN SVCZίʔυΛ࣮ߦՄೳ
Slide 32
Slide 32 text
WASI / VFS 7'4ʹʮSCʯΛຒΊࠐΉ͜ͱͰ୯ҰϑΝΠϧʹύοέʔδԽՄೳ SVCZXBTN 3VCZΠϯλϓϦλ $3VCZ BQQSC XBTJWGTͰύοέʔδʂ
Slide 33
Slide 33 text
WASI / VFS 7'4ʹʮSCʯΛຒΊࠐΉ͜ͱͰ୯ҰϑΝΠϧʹύοέʔδԽՄೳ SVCZXBTN 3VCZΠϯλϓϦλ $3VCZ NZBQQXBTN BQQSC XBTJWGTͰύοέʔδʂ
Slide 34
Slide 34 text
ruby.wasm ͷ ͡Ί͔ͨ
Slide 35
Slide 35 text
github.com/ruby/ruby.wasm
Slide 36
Slide 36 text
ruby.wasm npm package OQNQBDLBHFͰ͞Ε͍ͯΔͷΛ͏ͱΒ͘Β͘ ✤ 8BTNόΠφϦϏϧυෆཁʂ
Slide 37
Slide 37 text
ruby_wasm gem SVCZXBTNόΠφϦΛੜͰ͖ΔHFN ✤ SCXBTN$-*Λ༻͍ͯɺHFN3VCZεΫϦϓτΛؚΜͩ 8BTNόΠφϦ͕ϏϧυͰ͖Δ
Slide 38
Slide 38 text
ruby.wasm ͦͷଞɺDIFBU@TIFFUNEΛಡ͏ʂ ✤ IUUQTHJUIVCDPNSVCZSVCZXBTNCMPCNBJOEPDTDIFBU@TIFFUNE
Slide 39
Slide 39 text
͔͜͜Β ʮϦΞϧλΠϜ௨৴ʯ ·ͰḷΓண͘ʹʁ
Slide 40
Slide 40 text
RubyKaigi 2025 Ͱ
Slide 41
Slide 41 text
dRuby on Browser Again! Ҿ༻IUUQTTMJEFZPVDIBOBQQTOFU
Slide 42
Slide 42 text
dRuby ࢄΦϒδΣΫτϓϩάϥϛϯάͷͨΊͷϥΠϒϥϦ 3VCZ͔Βଞͷ3VCZϓϩηεͷΦϒδΣΫτͷϝιουΛ ݺͼͩ͢͜ͱ͕Ͱ͖Δ 5$1TPDLFUͷΑ͏ͳ3VCZຊମ͕ఏڙ͢Δ௨৴खஈ͕͋Ε ՃͷΠϯετʔϧͳ͠ʹར༻Մೳ
Slide 43
Slide 43 text
dRuby on Browser αʔόʔɾΫϥΠΞϯτؒͰ3VCZΦϒδΣΫτ͕ڞ༗Ͱ͖Δʂ ✤ ෦తʹʮ8FC4PDLFU௨৴ʯΛ͍ͬͯΔͱͷ͜ͱ 8FC4PDLFU ✤ )551ͱҟͳΔ௨৴खஈ ✤ αʔόʔɾΫϥΠΞϯτํͷϦΞϧλΠϜ௨৴
Slide 44
Slide 44 text
TCPSocket on Browser? 3VCZͷ5$14PDLFU͕ͦͷ··ϒϥβͰಈ͘༁Ͱͳ͍༷ SVCZXBTNͰSFRVJSFTPDLFUࣦͯ͠ഊͯ͠͠·͏
Slide 45
Slide 45 text
ͳͥϒϥβͰಈ͘ͷ͔
Slide 46
Slide 46 text
ͳͥಈ͘ͷ͔ ιʔείʔυΛഈݟ
Slide 47
Slide 47 text
No content
Slide 48
Slide 48 text
+4NPEVMFΛ͍ͬͯΔ
Slide 49
Slide 49 text
JS module KTHFNʹΑΓఏڙ͞ΕΔ 8"4*8BTNϞδϡʔϧΛ +BWB4DSJQUͷ8FC"TTFNCMZϥϯλΠϜͱඥ͚ͮ ✤ ͜ΕͷྗͰSVCZXBTN͕ϒϥβͰ࣮ߦՄೳʹͳΔ +BWB4DSJQUͷϝιουݺͼग़ͤΔΑ͏ʹͳΔ
Slide 50
Slide 50 text
Sample
Slide 51
Slide 51 text
ϒϥβͷWebSocket APIΛ ruby.wasm͔Β׆༻ͯͦ͠͏ʂ
Slide 52
Slide 52 text
SVCZXBTNͰಛఆػೳʹରԠ͍ͨ͠ ɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹΛɹ ɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹͷ͔ʁ
Slide 53
Slide 53 text
SVCZXBTNͰಛఆػೳʹରԠ͍ͨ͠ +4HFNΛར༻ͯ͠ ϒϥβͷ"1*ͱXBTNͷڮ͠ɹ ؾ߹Ͱ࣮͢Εಈ͘ ɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹΛɹ ɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹͷ͔ʁ
Slide 54
Slide 54 text
SVCZXBTNͰಛఆػೳʹରԠ͍ͨ͠ ͏Μɻ͖ͬͱͦ͏ʂ XBTN ɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹΛɹ ɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹͷ͔ʁ +4HFNΛར༻ͯ͠ ϒϥβͷ"1*ͱXBTNͷڮ͠ɹ ؾ߹Ͱ࣮͢Εಈ͘ 💪
Slide 55
Slide 55 text
࣮ફ WebSocket
Slide 56
Slide 56 text
࠲ֶ͕ଓ͍ͨͷͰ ଈ demo
Slide 57
Slide 57 text
ࢹௌऀࢀՃܕ IUUQTEFNPMOJMBCOFUDPOUFOUT
Slide 58
Slide 58 text
ँࡑ J04J1BE04ͷಈ࡞͕͍͋͠🙇🙇🙇
Slide 59
Slide 59 text
dRuby? /05E3VCZ 3VCZ,BJHJͱಉ͡ωλΛ ͯ͠͠ΐ͏͕ͳ͍ͷͰʜ
Slide 60
Slide 60 text
Rubyʹ ৺ڧ͍ຯํ͕
Slide 61
Slide 61 text
Rails
Slide 62
Slide 62 text
৺ڧ͍ຯํ Rails ʮ"DUJPO$BCMFʯʹΑΓ 8FC4PDLFU͕αϙʔτ͞Ε͍ͯΔʂ "DUJPO$BCMF ✤ 3BJMTʹ8FC4PDLFUΛಋೖ ✤ 3VCZ+4྆ํͷ'8Λఏڙ
Slide 63
Slide 63 text
ؾ߹ SVCZXBTNͷ7.ʹϝοηʔδΛ͛Δ
Slide 64
Slide 64 text
(΄΅)શ෦RubyͰॻ͚Δʂ
Slide 65
Slide 65 text
தͰԿΛ͍ͯ͠Δ͔
Slide 66
Slide 66 text
Slide 67
Slide 67 text
CanvasͰࣗ༝ʹඳը 8FC"TTFNCMZʹը໘දࣔͷػೳͳ͍͕ʜ ✤ ϒϥβʹ͋Δʂ
Slide 68
Slide 68 text
CanvasͰࣗ༝ʹඳը )5.-$BOWBT&MFNFOUHFU$POUFYU Λ࣮ߦ͢Δ
Slide 69
Slide 69 text
CanvasͰࣗ༝ʹඳը ը໘ඳը༻ͷϝιου͕͑ΔΑ͏ʹͳΔ
Slide 70
Slide 70 text
ruby.wasm ʮը໘ʯΛ ͯʹ͍Εͨʂ
Slide 71
Slide 71 text
Web Audio API
Slide 72
Slide 72 text
Web Audio API 8FC"TTFNCMZʹԻ࠶ੜυϥΠόͳ͍͕ʜʜ ✤ ϒϥβʹ͋Δʂ 8FC"VEJP"1* ✤ Σϒ্ͰԻΛѻ͏ͨΊͷڧྗͳγεςϜΛఏڙ Իͷ߹ɺಛघޮՌ Τίʔͱ͔ ͳͲ͕Ͱ͖Δ ✤ BVEJPλάΑΓߴػೳ
Slide 73
Slide 73 text
Web Audio API +4Ͱʜ
Slide 74
Slide 74 text
Web Audio API 3VCZʹOFXԋࢉࢠແ͍ͷͰʂʁ
Slide 75
Slide 75 text
newԋࢉࢠ ҆͝৺͍ͩ͘͞ ↑new͕͑·͢
Slide 76
Slide 76 text
Web Audio API ͯ͞ɺGFUDIͰԻσʔλΛμϯϩʔυʜ
Slide 77
Slide 77 text
Web Audio API 3VCZʹ1SPNJTFແ͍ͷͰʂʁ
Slide 78
Slide 78 text
Promise ͏͓͔ΓͰ͢Ͷ ↑await͍͚·͢
Slide 79
Slide 79 text
Ի͕໐Δʂ 8FC"VEJP"1*͕ѻ͑Δ ԻσʔλΛμϯϩʔυɾσίʔυͰ͖Δ
Slide 80
Slide 80 text
ruby.wasm ʮԻʯΛ ͯʹ͍Εͨʂ
Slide 81
Slide 81 text
ଟਓ௨৴
Slide 82
Slide 82 text
ଟਓ௨৴ 1VC4VCϝοηʔδ 1VCMJTI4VCTDSJCF ✤ ૹ৴ऀநΫϥεʹϝοηʔδΛૹ৴ ✤ ड৴ऀΫϥεʹಧ͘ϝοηʔδΛߪಡ ૹ৴ऀड৴ऀ͓ޓ͍ΛΔඞཁ͕ͳ͍
Slide 83
Slide 83 text
Pub/Sub ࣗͷݱࡏҐஔΛ1VCMJTI ࢀՃऀͷҐஔΛ4VCTDSJCF
Slide 84
Slide 84 text
Pub/Sub ԆಉظͳͲ͋·Γؾʹ͠ͳ͍ ΏΔ͍ϦΞϧλΠϜ௨৴͕࣮ݱʂ
Slide 85
Slide 85 text
ruby.wasm ʮ௨৴ରઓʯΛ ͯʹ͍Εͨʂ
Slide 86
Slide 86 text
ࠓޙͷ՝
Slide 87
Slide 87 text
ήʔϜΤϯδϯΆ͘ ͳ͖ͬͯͨ
Slide 88
Slide 88 text
ར༻ऀͷײ ػೳ͕ͨΓͳ͍
Slide 89
Slide 89 text
WebSocket × Game
Slide 90
Slide 90 text
WebSocket × Game 8FC4PDLFU5$1্Ͱ௨৴͢Δ ✤ ॱংอূͷͨΊɺԆ͢Δͱޙଓύέοτ͕٧·ͬͯ͠·͏ ✤ ήʔϜʹ͔ͳ͍͔ʂ 8FC5SBOTQPSU͕࣍ظٕज़ͱͯ͠ ✤ ͨͩϓϩτίϧ͕26*$ͳͷͰԿΘ͔Βͳ͍ʜ
Slide 91
Slide 91 text
ͳʹͱ͋Ε
Slide 92
Slide 92 text
rubyͰ࡞ΕΔͷ͕૿͑Δͱ ͨͷ͍͠Ͷʂ
Slide 93
Slide 93 text
͓͠·͍