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
ぼくのかんがえたさいきょうの放置ゲームを作ってる話 / saikyou-houti-game
Search
kthatoto
June 28, 2021
Programming
490
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ぼくのかんがえたさいきょうの放置ゲームを作ってる話 / saikyou-houti-game
kthatoto
June 28, 2021
More Decks by kthatoto
See All by kthatoto
複数ブラウザウィンドウを 単一平面とみなしてボールの 衝突判定をする
kthatoto
0
220
CSSだけでCookie Clickerを作る
kthatoto
0
1.1k
いろいろな駆動開発の話 / various-driven-development
kthatoto
0
100
最強の放置ゲームを作ってる話 ~ と、そのうちのゲーム作るためのゲームデータエディタを作ってる話 ~
kthatoto
0
79
ぼくのかんがえたさいきょうのぶろぐしすてむ
kthatoto
0
750
Other Decks in Programming
See All in Programming
Jetpack Compose Mechanisms
skydoves
3
860
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
5.5k
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
180
気持ちぃ〜角丸 Squircle
ryu1013
0
330
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
Coding with AI: How to trust the storyteller (AWS Community Day Adria, Ljubljana 2026)
slobodan
0
110
graphql-ruby を Spinel で速くしようとした話
mtsmfm
0
120
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
330
dotNET_vulnclicker_intro.pdf
deka_morita
0
150
sbt 2.0: takeoff
eed3si9n
0
170
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
940
[JA] Domain Modeling with Vanilla Rails: 「操作」から再考するRailsの設計論
yasaichi
4
880
Featured
See All Featured
Building an army of robots
kneath
307
47k
The Spectacular Lies of Maps
axbom
PRO
1
1.1k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
330
エンジニアに許された特別な時間の終わり
watany
109
250k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
47k
Making the Leap to Tech Lead
cromwellryan
135
10k
The Pragmatic Product Professional
lauravandoore
37
7.5k
RailsConf 2023
tenderlove
30
1.6k
How STYLIGHT went responsive
nonsquared
100
6.3k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
320
Amusing Abliteration
ianozsvald
1
360
Transcript
"΅͘ͷ͔Μ͕͍͖͑ͨ͞ΐ͏ͷ์ஔήʔϜ" Λ࡞ͬͯΔ ͍ͯಘͨݟͷ by @kthatoto
ࣗݾհ ͱ ɾTwitterɿ@kthatoto ɾVue, Nuxt, TypeScript, Ruby, Rails, Go ɹFirebase,
AWS ɾझຯɿLTۦಈ։ൃ, ์ஔήʔϜ ɾΤϯδχΞ6 ɾࠇ͍ը໘͔ͬ͜Α͖ͯ͘Ͱ͢ ɾVue Composition API ͕͖Ͱ͢ ɹ (ྺ1ͪΐ͍)
͢༰ ʔ ์ஔήʔϜʹ͍ͭͯ ʔ ࣗ࡞์ஔήʔϜ(Λࢦͨ͠ͷ)ͷφϯόϦϯάλΠτϧͷհ ʔ Vue Composition APIͷType Error͔ΒֶͿ
Generics, Conditional Types, infer
์ஔήʔϜͬͯ·͔͢ʁ ༗໊ͳͷ Cookie Clicker খֶੜ࣌ͷ์ஔήʔϜ ҭͯʹ༬͚ͯΞΠεͷΛચ୕όαϛͰ ڬΜͰ্Ωʔԡͬ͠ͺঢ়ଶͰֶߍ (1าา͘ͱܦݧ1Β͑ΔγεςϜ) ॳΊͯLv100ʹͨ͠ϙέϞϯ ΩϞϦ
(ਐԽ͠ͳ͔ͬͨ) 2ສऑ࣌ؒ༡Μͩ ΅͘ΒͷΞΠϥϯυ 2018/12/28͔ΒຖඞͣԿ͔͠Βͷߋ৽͕͋ͬͨήʔϜ 2021/4/30Ͱߋ৽ఀࢭɻ͔ͨ͠20191݄͘Β͍͔Βࢀઓ
࡞ΔʹࢸͬͨܦҢ λʔϛφϧ͕͖ (өըͰݟΔϋοΧʔΈ͍ͨͳײ͡) λʔϛφϧͰήʔϜ͕͍ͨ͠ʂʂʂ ୳ͦ͏ʂϛχήʔϜతͳͷ৭ʑ͋ͬͯ ఢͯ͠Ϩϕϧ্͛ͨΓΞΠςϜूΊͨΓͯ͠ΓࠐΊΔήʔϜ͕ͳ͍ ࡞Ζ͏ʂʂʂ (ͪΌΜͱௐͨΒ͍͢͝લ͔Β͋ͬͨΈ͍ͨ... ࣗͰ࡞Δ͜ͱʹมΘΓͳ͍͚Ͳ...) λʔϛφϧʹੈքΛ࡞Δɺͯ͜ͱήʔϜ໊
Termworld ͩʂ // TODO: ໊લͪΌΜͱߟ͑Δ
Ͳ͏͍͏ήʔϜʹ͢Δ͔ CLI͕͋ͬͯλʔϛφϧ্ͰͰ͖Δ ࣗҰਓͰෳΩϟϥΫλʔΛૢ࡞Ͱ͖Δ ʔ ήʔϜͷNPC AIͬͯऑ͔ͬͨΒ͑ͳ͍͠ڧ͗ͯࣗ͢Ͱ ɹ ͬͯΔײͳ͍͠ΧελϚΠζͰ͖ͯ͋Μ·Γࢥ͏௨Γ͍͔ͳ͍ શ෦ࣗͰૢ࡞Ͱ͖ΔΑ͏ʹͯ͠͠·͑ʂ CLI͕͋ΕࣗͰϓϩάϥϜΜͰશʹࣗͰෳΩϟϥૢ࡞Ͱ͖Δ
Player1 Player2 Player3 Player4 ࢜ ຐ๏ ճ෮ ϐοέϧ Player5 ϐοέϧ
ͭ·Γ͜͏͍͏͜ͱ ϢʔβʔPC ϒϥβ ࢜.rb ૐཿ.js $ ruby ࢜.rb ࢜ૢ࡞த... $
node ૐཿ.rb ૐཿૢ࡞த... ήʔϜαʔόʔ ૢ࡞ ΞΧϯτσʔλ ϓϨΠϠʔσʔλ Ϟϯελʔσʔλ Ϛελʔσʔλ ϓϨΠϠʔૢ࡞ ότϧγεςϜ ΞΠςϜ༻ ϞϯελʔAI etc... API API CLI JavaScript
Termworld 0 Α͠࡞Δͧʂ ޠϧʔϯϑΝΫτϦʔͷΑ͏ʹۀܥίϯςϯπཉ͍͠ʂ ·ͣۀܥίϯςϯπͷΈͷίϚϯυΛ࡞ͬͯΈΑ͏ʂ λʔϛφϧ্Ͱ࡞Λҭͯͯग़ՙɺಘͨࢿۚࢿݯ Λผίϯςϯπ(ݥ,қ,ΞΠςϜ࡞ͱ͔ͱ͔) ͷࢿۚࢿݯͱͯ͠ѻ͑ΔΑ͏ʹ͠Α͏ʂ (ήʔϜͷϚΠΫϩαʔϏεԽͩʂ) rubyಘҙͩ͠gemͱͯ͠࡞ͬͯΈΔ
gem install ͚ͩͨ͠Β༡ͼ͍ͨ ݴޠɾϥΠϒϥϦ Ruby thor (for CLI) sqlite3 (ϑΝΠϧʹσʔλॻ͖ࠐΈ) $ tw-farm show field --id=1 ┏━━━┳━━━┳━━━┓ ┃ b ┃ v ┃ ┃ ┣━━━╋━━━╋━━━┫ ┃ f ┃ v ┃ f ┃ ┗━━━┻━━━┻━━━┛ Πϝʔδ
Termworld 0 termworld 0-Ⅰ https://github.com/kthatoto/tw-farm--old छΛങͬͯ छΛ২͑ͯ ঢ়ଶΛ֬ೝͯ͠ ҭͬͨΒऩ֭ʂʂ ϓϩηεىಈ
์ஔ... ࣋ͪ֬ೝ (छͱ͓ۚ) DockerͰ༡·͢
Termworld 0 termworld 0-Ⅱ https://github.com/kthatoto/tw-farm छͷҰཡ ാͷҰཡ ാͷৄࡉΛγΣϧܳͰ֬ೝʂ ֬ೝͰ͖Δ͚ͩʂʂʂ ാछʹݻ༗Λ࣋ͨͤͯ
छվྑ͕Ͱ͖ΔΑ͏ͳ ͷΛߏɺ։ൃஅ೦... DockerͰ༡·͢
Termworld 0 ࣄͯͨ͠ΒཪଆͰ࡞͕ҭͬͯΔͷϫΫϫΫ ίϚϯυͰૢ࡞Ͱ͖Δ͠ҰݟήʔϜͬͯΘ͔ΓͮΒ͍͔Β ࣄதʹऩ֭Ͱ͖ͪΌ͏ ޮԽ͢ΔͳΒγΣϧܳඞཁʹͳͬͯ͘Δֶָ͘͠͠Δ ͔͠͠ ͳΜ͔ҧ͏ɺͬͺRPGΈ͍ͨͳͷ͕͍͍ɺgem installͪ͠Ό͏͠ ݁ہ͜ͷۀܥίϯςϯπΛଞͱܨ͛Δ͜ͱͳ͘ɺ·ͯ͜͠Εࣗମ
࡞Γ͖Δ͜ͱΛͤͣ։ൃதࢭ
Termworld Ⅰ Α͠࡞Δͧʂʂͬͺ2DRPGΈ͍ͨͳͷ͕͍͍ʂ ͦΕʹͯ͠cursesͰͷඳըͨΒΊΜͲ͍͘͞ ৭ͷѻ͍Կ͔ͱෆศͩ͠ ruby༻λʔϛφϧඳըϥΠϒϥϦ͔Β࡞Ζ͏ʂ https://github.com/kthatoto/term_canvas ͬͺΓrubyͰͪΐͪΐ͍ͱ࡞ͬͪΌ͓͏ɺMMORPGͳγεςϜΛ࡞Γ͍͔ͨΒ αʔόʔ͕ඞཁʹͳΔͳɻͦͨ͠ΒΞΧϯτ࡞ΔͷʹϝʔϧΞυϨεೝূೖΕΑ͏ʂ ӬଓԽ͢ΔσʔλΛDBαʔόʔʹอଘͯ͠
شൃ͍͍ͯ͠σʔλΛΫϥΠΞϯτଆͰ sqlite3Ͱ࣋ͭ͜ͱʹ͠Α͏ɻ ϓϨΠϠʔΛૢ࡞͢ΔͷʹCLIಋೖ͠Α͏ $ termworld user:<name> move up ༻ݴޠɾϥΠϒϥϦ Ruby thor, sqlite3, Rails curses (λʔϛφϧඳը) Πϝʔδ
Termworld Ⅰ CLI: https://github.com/kthatoto/termworld-ruby Server: https://github.com/kthatoto/termworld-server-rails $ termworld login ϝʔϧΞυϨεೖྗ
$ termworld user create PlayerΛ࡞ $ termworld user:<name> wakeup PlayerΛىಈ $ termworld user:<name> terminal ήʔϜλʔϛφϧΠϯλʔϑΣʔεΛىಈ खؒͱίπ͕͍ΔͷͰ Docker͚ͩͰ༡ͳ͍Ͱ͢
Termworld Ⅰ σϞɹhttps://github.com/kthatoto/termworld-ruby/blob/master/README.md ɹɹɹ⬛ ૢ࡞தϓϨΠϠʔ ɹɹɹ⬛ ࠨը໘ͷCLIͰૢ࡞͍ͯ͠ΔϓϨΠϠʔ ɹɹɹ⬛ Ϟϯελʔ
Termworld Ⅰ ήʔϜͬΆ͘ͳͬͨʂผϓϩηε͔Βૢ࡞Ͱ͖Δͷ͔͍͍ͬ͜ʂʂ ͔͠͠ Ϋϥεઃܭ͕ͪ͝Όͪ͝ΌʹͳͬͯԿ͕Ͳ͜ʹ͋Δ͔Θ͔ΒΜ rubyͷΈͰɺήʔϜαʔόʔ,UI,λʔϛφϧViewΛѻ͏ͷ͠ΜͲ͗͢Δ gem installͪ͠Ό͏͠ɺͦͦήʔϜαʔόʔ͕ΫϥΠΞϯτଆʹ͋Δ ࣌ͰΦϯϥΠϯԽͰ͖ͳ͍͡ΌΜɺ։ൃதࢭ
Termworld Ⅱ Α͠࡞ΔͧʂʂʂͬͺΓgem install͡Όͳͯ͘όΠφϦ͍ͨ͠... CLIGoͰ࡞ͬͯΔʂͦͨ͠Β͔ͤͬͩ͘͠αʔόʔGoͰ࡞Γ͍ͨ ͣͬͱͩ͜ΘͬͯͨɺλʔϛφϧViewΛΊͯWeb Viewʹ͠Α͏ʂ Ϛελʔσʔλͱ͔࡞Βͳ͍ͱͳ ͍͍πʔϧͳ͍͔ͳ... ͳͦ͞͏
RPGπΫʔϧΈ͍ͨͳͷࣗͰ࡞Δ͔ʂ CLI͔ΒϓϨΠϠʔपลঢ়ଶ(εςʔλε,Ϛοϓ, ଞΩϟϥͷҐஔ,࣋ͪͳͲ)ΛશͯऔಘͰ͖Δ Α͏ʹ͢ΕλʔϛφϧViewΫϥΠΞϯτ ࡞ΕΔͣʂޙ͔Β࡞ΕΔ͜ͱ͕ॏཁ ༻ݴޠɾϥΠϒϥϦ Go cobra(CLI), viper(config file), gin gorilla/websocket Nuxt, Express MongoDB, Cypress, GitHub Actions $ termworld up Πϝʔδ $ termworld attack
Termworld Ⅱ CLI: https://github.com/kthatoto/termworld Server: https://github.com/kthatoto/termworld-server ϝʔϧΞυϨεೝূػೳ $ termworld login
ϝʔϧΞυϨεೖྗ ϩϯάϙʔϦϯάͯ͠ೝূ ͞ΕΔͷΛͭ Token͖URL͕ ϝʔϧͰಧ͘ GETϦΫΤετͰೝূޭΛ αʔόʔʹ௨ ϩϯάϙʔϦϯάͷϨεϙϯεͰ ೝূ͞Εͨ͜ͱΛऔಘ Login success! ϓϨΠϠʔ࡞/Ұཡ CLI $ termworld player create Player࡞ $ termworld player list PlayerҰཡ Player͕ىಈ͞Εͨ͜ͱΛ֬ೝ $ termworld g <name> start PlayerΛ໊લࢦఆͰىಈ ͦͷଞϓϨΠϠʔૢ࡞ (Ҡಈ/ΞΫγϣϯͳͲ) ͜ͷίϚϯυͰߦ͏
σʔλϕʔε Termworld Ⅱ ϢʔβʔPC αʔόʔ ૢ࡞ ΞΧϯτσʔλ ϓϨΠϠʔσʔλ Ϟϯελʔσʔλ Ϛελʔσʔλ
ϓϨΠϠʔૢ࡞ ότϧγεςϜ ΞΠςϜ༻ ϞϯελʔAI etc... WebSocket ΤϯυϙΠϯτ JavaScript ϒϥβGUI API ϫʔΧʔϓϩηε Ϣʔβʔೖྗ $ move up $ login CLI ࢜.rb $ ruby ࢜.rb HTTP௨৴ WebSocket௨৴ RPC௨৴ γεςϜίʔϧ ϚελʔσʔλϚωʔδϟʔ DBίωΫγϣϯ Ϛοϓσʔλ ΞΠςϜσʔλ Ϟϯελʔσʔλ https://github.com/kthatoto/tw-master-data-manager https://github.com/kthatoto/termworld https://github.com/kthatoto/termworld-server
์ஔήʔϜͱͯ͠༡Ϳ ʔ ϞϯελʔΛङΓ·͘ΔεΫϦϓτΛॻ͘ ઓಆಛԽύʔςΟʹରͯ͠ΒͤΔ ʔ ՙ͕͍ͬͺ͍ʹͳͬͨΒ֗ʹͬͯՙཧ͢ΔεΫϦϓτΛॻ͘ ඇઓಆܥՙ࣋ͪಛԽϓϨΠϠʔʹରͯ͠ΒͤΔ ʔ ϞϯελʔΛආ͚ͯΞΠςϜऩू͚ͩ͢ΔεΫϦϓτΛॻ͘ ඇઓಆܥΞΠςϜऩूޮಛԽϓϨΠϠʔʹରͯ͠ΒͤΔ
ʔ ҆શʹ֗ʑΛҠಈͯ͠ަқͯ͠ࢿۚΛՔ͙εΫϦϓτΛॻ͘ ඇઓಆܥճආ&ަқಛԽϓϨΠϠʔʹରͯ͠ΒͤΔ ʔ ͻͨ͢ΒࡶڕϞϯελʔΛ͠·͘ΓϨΞυϩοϓΛૂ͏εΫϦϓτΛॻ͘ ӡۃൣғ߈ܸಛԽϓϨΠϠʔʹରͯ͠ΒͤΔ ͳͲͳͲɻ͜͏͍͏ϓϨΠ͕Ͱ͖ΔήʔϜγεςϜΛࢦͯ͠·͢
Δ͜ͱ ʔ طଘήʔϜͰ༡ΜͰΈΔɻήʔϜγεςϜࢀߟʹ͠Α͏ ʔ ·ͣϚοϓσʔλ࡞Βͳ͍ͱɻRPGπΫʔϧࢀߟʹ͠Α͏ ʔ Ϛοϓͷࣗಈੜɻ͔ͳΓ͍Ϛοϓ࡞Γ͍ͨ ʔ ը૾ͷ৭ҧ͍σʔλࣗಈੜɻڧͦ͏ͳ৭ͷϞϯελʔͱ͔࡞Γ͍ͨ ʔ
ཧը໘࡞Γ͍ͨɻϓϨΠϠʔ͕Ͳ͏͍͏ಈ͖ͯ͠Δ͔Λਆࢹ͍ͨ͠ ʔ υΩϡϝϯτॻ͔ͳ͍ͱɻCLIͩ͠ ʔ ϑϩϯτWebΞϓϦέʔγϣϯɻ͜Εͳ͍ͱʹͳΒͳ͍
Vue Composition API with TypeScript ͍ͯͯ͠ ݟ׳Εͳ͍Type Errorʹૺ۰ͨ͠ ͜͜
Sample Counter using Vue Composition API
͜ͱͷൃ ϩδοΫڞ௨Խ͍ͨ͠ʂ custom hookʹΓग़ͦ͏ʂ ܕ͕ҧ͏͔ΒGenericsͩʂ reactiveʹGenericsܕͷϓϩύςΟΛηοτʂ Type Error...
TileList.vue
useResources.ts
🤔 Genericsܕͷ͚࣌ͩൃੜ ιʔείʔυݟʹߦ͜͏ ͳʹ͜Ε... ͳʹ͜Ε...
node_modules/@vue/composition-api/dist/index.d.ts ֘෦ൈਮ 1ͭͣͭՄೳͳݶΓҙ༁͠ͳ͕Βݟ͍͖ͯ·͢💪
reactive ͱ͍͏ؔ Ҿ obj: T , ܕҾ T ͕༩͑ΒΕΔ (ͦͯ͜͠ͷ
T object ͷαϒλΠϓͰ͋Δ) ͜ͷؔͷΓͷܕ UnwrapRef<T> function reactive
UnwrapRef ͱ͍͏ܕ ܕҾ T ͕༩͑ΒΕΔ ͜ͷܕ T ͕ Ref<V> (Vҙ)
ͷܗΛ͍ͯͨ͠Β UnwrapRefSimple<V> ͦ͏͡Όͳ͚Ε UnwrapRefSimple<T> ͱ͍͏ܕʹͳΔ (Ref ʹ͍ͭͯলུ) Conditional Types & infererence type UnwrapRef
Conditional Types case study toggleStringNumber ͱ͍͏ؔ stringܕΛnumberܕʹมɺͦΕҎ֎Λstringܕʹม͢Δؔ
Infererence case study getFirstValue ͱ͍͏ؔ Ҿ͕"Կ͔(V)"ͷྻͩͬͨΒྻͷதͷ࠷ॳͷ"Կ͔(V)"Λ ͦ͏͡Όͳ͚ΕҾ(:T)Λͦͷ··ฦؔ͢
UnwrapRefSimple ͱ͍͏ܕ ܕҾ T ͕༩͑ΒΕΔ T ͕ Function | CollectionTypes
| BaseTypes | Ref ͷαϒλΠϓͰ͋Ε ͦͷ·· T ͱ͍͏ܕʹͳΔ ͦ͏͡Όͳ͚Ε...(ଓ͘) type UnwrapRefSimple 1/3
T ͕ Array<any> ͷαϒλΠϓͰ͋Ε ͜ͷྻͷͦΕͧΕͷཁૉͷܕΛ T[K] ͱ͢Δͱ ͦΕͧΕͷཁૉ͕ UnwrapRefSimple<T[K]> ͱ͍͏ܕʹͳΔ
ͦ͏͡Όͳ͚Ε...(ଓ͘) type UnwrapRefSimple 2/3 ྫ) UnwrapRefSimple<[number, Resource]> = [UnwrapRefSimple<number>, UnwrapRefSimple<Resource>]
T ͕ object ͷαϒλΠϓͰ͋Ε UnwrappedObject<T> ͱ͍͏ܕʹͳΓ ͦ͏͡Όͳ͚Ε T ͱ͍͏ܕʹͳΔ type
UnwrapRefSimple 3/3
UnwrappedObject ͱ͍͏ܕ ܕҾ T ͕༩͑ΒΕΔ (T extends object Λຬͨ͢લఏͰ) T
ͷͦΕͧΕͷ key,value pairͷ͏ͪvalue(T[P])Λ UnwrapRef<T[P]> ʹมͨ͠ܕʹͳΔ type UnwrappedObject ྫ) UnwrappedObject<{ key1: number, key2: Resource }> = { key1: UnwrapRef<number>, key2: UnwrapRef<Resource> } ͋·Γॏཁ͡Όͳׂ͍ʹෳࡶͳͷͰ লུ͠·͢ (& ͷه๏ Intersection Typesͱ͍͏ػೳͰ͢)
Q1. ͳΜͰܕͷܭࢉ్͕த·ͰͳΜͩΖ͏ʁ🤔 Q2. ͳΜͰUnwrapRefSimpleͱUnwrapRef͕ ɹɹผʑͰ͋ΔΜͩΖ͏ʁ🤔
Q1. ͳΜͰܕͷܭࢉ్͕த·ͰͳΜͩΖ͏ʁ🤔 A. ͦΕҎ্ܾ·͍ͬͯͳͯ͘ܭࢉͰ͖ͳ͍͔Βɻ ͜͜Ͱ݅ذ࢝·Δ͚ͲResource͕ܾ·Β ͳ͍͔Β͜ΕҎ্ແཧ
A. ยํ͕Resourceɺยํ͕Array<Resource>͔ͩΒ Array<Resource>ͷํ Array<any> ͱ్ͯ͠த·ͰܭࢉͰ͖Δ͔Βɻ Q2. ͳΜͰUnwrapRefSimpleͱUnwrapRef͕ผʑͰ͋ΔΜͩΖ͏ʁ🤔 Array<Resource>ͬͯ͜ͱͰ Ref<V> ͷܗ
ͯ͠ͳ͍͔Βͬͪͩ͜ʂ reactive<{ resource: Array<Resource> }> UnwrapRef<Array<Resource>> =>
reactive<{ resources: Array<Resource> }> => UnwrapRef<{ resources: Array<Resource> }> =>
UnwrapRefSimple<{ resources: Array<Resource> }> => UnwrappedObject<{ resources: Array<Resource> }> => { resources: UnwrapRef<Array<Resource>> } => { resources: UnwrapRefSimple<Array<Resource>> } => { resources: Array<UnwrapRefSimple<Resource>> } ऴྃ UnwrapRefSimple<Resource> ͜͜ͷܭࢉ͕Ͱ͖ͳ͍ ͪΌΜͱܭࢉͯ͠ΈΔ
ͦͦ͡Ό͋Ͳ͏͢Δ͔ ࠓͷͱ͜Ζ as Λ͏͔͠ͳͦ͞͏... reactiveʹΑΓੜ͞ΕͨͷΛී௨ͷObjectͱͯ͠ѻ͏ͷ͕ࠓͷͱ͜Ζͷղܾࡦ😢