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
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
570
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
290
Security issues being discussed on Web Platforms
petamoriken
0
1.4k
APNsからLive Activityを開始する話
yumnumm
0
150
Are APIs Still Relevant in the AI Era?
soyuka
0
410
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
330
AWS CDKのカスタムリソースでContinuum(旧Security Agent)を実装した話 | Implementing Continuum (formerly Security Agent) via AWS CDK Custom Resource
akihisaikeda
2
120
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
220
すこし踏み込む CancellationToken
htkym
2
1.6k
The Rails Doctrine Decade
koic
2
470
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.4k
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.3k
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
76k
The Invisible Side of Design
smashingmag
301
52k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
850
Paper Plane
katiecoart
PRO
4
53k
Leo the Paperboy
mayatellez
10
2.3k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Navigating Weather and Climate Data
rabernat
0
540
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
550
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
530
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
550
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
58k
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ͱͯ͠ѻ͏ͷ͕ࠓͷͱ͜Ζͷղܾࡦ😢