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
210
CSSだけでCookie Clickerを作る
kthatoto
0
1.1k
いろいろな駆動開発の話 / various-driven-development
kthatoto
0
99
最強の放置ゲームを作ってる話 ~ と、そのうちのゲーム作るためのゲームデータエディタを作ってる話 ~
kthatoto
0
74
ぼくのかんがえたさいきょうのぶろぐしすてむ
kthatoto
0
750
Other Decks in Programming
See All in Programming
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
150
Snowflakeで業務アプリを作ろう。 Snowflakeのアプリ機能解説&実践ガイド
ayumu_yamaguchi
1
260
型解析で実現する Go の言語内 DSL / Conference に Go! タイムテーブルの歩き方 for Gophers
mazrean
0
140
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
310
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
0
150
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
3
280
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
4k
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
140
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
180
Swift愛好会と私(ウホーイ) / Swift Fan Club and Uhooi
uhooi
0
150
Webの地図
yosuke_furukawa
PRO
6
4.3k
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
3
320
Featured
See All Featured
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
500
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
490
Paper Plane (Part 1)
katiecoart
PRO
1
11k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
530
YesSQL, Process and Tooling at Scale
rocio
174
15k
Facilitating Awesome Meetings
lara
57
7.1k
BBQ
matthewcrist
89
10k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.9k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
660
Building a Scalable Design System with Sketch
lauravandoore
464
34k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
330
Bash Introduction
62gerente
615
220k
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ͱͯ͠ѻ͏ͷ͕ࠓͷͱ͜Ζͷղܾࡦ😢