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
Vue.jsで実現するMVVMパターン Fluxアーキテクチャとの距離
Search
Shinpei Maruyama
December 03, 2016
22
32k
Vue.jsで実現するMVVMパターン Fluxアーキテクチャとの距離
Shinpei Maruyama
December 03, 2016
Tweet
Share
More Decks by Shinpei Maruyama
See All by Shinpei Maruyama
過去や未来を扱うのは難しい? 過去と未来に立ち向かうための勘所
shinpeim
3
3.2k
設計ナイト2022 トランザクションスクリプト
shinpeim
11
3.4k
Ruby (off|with) the Rails
shinpeim
20
4.9k
綱渡りバッチ脱出大作戦
shinpeim
3
3.4k
Building native apps with scala.js
shinpeim
2
1.2k
今あえてDRY原則に向き合う
shinpeim
51
560k
Nekogata Drum Sequencer written in Scala.js
shinpeim
2
3.8k
複雑なJavaScriptアプリケーションに立ち向かうためのアーキテクチャ
shinpeim
36
15k
Using Scala.js with the JavaScript ecosystems
shinpeim
0
2.2k
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
Designing for Performance
lara
604
68k
Producing Creativity
orderedlist
PRO
341
39k
4 Signs Your Business is Dying
shpigford
180
21k
Happy Clients
brianwarren
97
6.7k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
A better future with KSS
kneath
238
17k
Building a Scalable Design System with Sketch
lauravandoore
459
33k
Adopting Sorbet at Scale
ufuk
73
9k
Speed Design
sergeychernyshev
24
560
The Power of CSS Pseudo Elements
geoffreycrofte
72
5.3k
Documentation Writing (for coders)
carmenintech
65
4.4k
Transcript
CZ͠Μ͍BLBೣܕԻػ 7VFKTͰ࣮ݱ͢Δ .77.ύλʔϯ 'MVYΞʔΩςΫνϟͱͷ ڑ
BCPVUNF w ג ϦϥΫ w 4DBMB+BWB4DSJQU1FSM 3VCZ w 5XJUUFS!TIJOQFJ w
(JUIVC4IJOQFJN w IBUFOBJEOLHU@DILPOL
ࠓ͢͜ͱ
ࠓ͞ͳ͍͜ͱ w 7VFKTͷ͍ํ w .77.ͱͦͷଞͷ.7 ͱͷҧ͍ w Ϟμϯͳ+BWB4DSJQUͷϏϧυ πʔϧͱ͔ͦ͏͍͏
"ύʔτ .77.ʹΑΔ 1%4ͷಋೖ
ྫɿը૾QJDLFS w ͯͳϑΥτϥΠϑΈ͍ͨͳͱ͜Ζ ͕͋ΔͱԾఆ͢Δ w ʮ࠷ۙߘ͞Εͨը૾ҰཡʯΛαʔ όʔ͔Βऔ͖ͬͯͯදࣔ
ը૾QJDLFS w ʮ࠷ۙߘ͞Εͨը૾Ұཡʯͷը૾ ΛΫϦοΫ͢Δͱબ͞Εɺʮબ ͞Εͨը૾ʯͬͯͱ͜Ζʹදࣔ͞Ε ΔʢෳબՄʣ w ʮબ͞Εͨը૾Ұཡʯͷը૾ΛΫ ϦοΫ͢Δͱඇબঢ়ଶʹͳΔ
ը૾QJDLFS
K2VFSZͰ͕ΜΔ
)5.-
+4
ίϯετϥΫλ
࠷ۙߘ͞Εͨը૾
ΫϦοΫͰը૾Λબ
ݏͳ༧ײ͕͢Δ
%0.ΛίʔυͰ࡞ͬͯΔ
%0.ΛίʔυͰ࡞ͬͯΔ w ʮબ͞Εͨը૾ͷJNHλάʹDMBTT ઃఆ͍ͨ͠Μ͚ͩͲʯ w ʮ͑ʔͱɺબ͞Εͨը૾ͷJNHλ άΛ࡞ͬͯΔͷ͔ͩ͜͜Βʯ w ݟͨม͍͚͑ͨͩͳͷʹίʔυ Θͳ͍ͱ͍͚ͳ͍
Πϕϯτϋϯυϥ͕ࢄΒ͔ͬͯΔ
Πϕϯτϋϯυϥ͕ࢄΒ͔ͬͯΔ
w ʮͳΜ͔)5.-্Ͱϋϯυϥઃ ఆ͞Εͯͳ͍Μ͚ͩͲΫϦοΫͨ͠ Βͳʹ͔͕ىͬͨ͜͠όάͬͯΔʯ w ʮ͜ͷΠϕϯτϋϯυϥઃఆͯ͠Δ ίʔυͲͩ͜ʁʯ Πϕϯτϋϯυϥ͕ࢄΒ͔ͬͯΔ
ঢ়ଶ͕%0.্ͷΈͰཧ͞Ε͍ͯΔ
ঢ়ଶ͕%0.্ͷΈͰཧ͞Ε͍ͯΔ w ʮબ͞Εͨը૾ͷϦετΛ"1*ʹ ͍͛ͨʯ w ʮ͑ʔͱɺTFMFDUFE*NBHFTͷ ΤϨϝϯτ͔ΒJNHλάͱ͖ͬͯ ͯɺTSDΛશ෦ूΊͯʜʜʯ
ഁ͍ۙͧ w %0.࡞Δॴ͕͍ΖΜͳͱ͜Ζʹࢄ ΒͬͯΔ w Πϕϯτϋϯυϥͷઃఆ͍ΖΜͳͱ ͜ΖʹࢄΒͬͯΔ w ঢ়ଶ͕%0.ʹ͔͠ͳͯ͘ɺ%0.Λ ݟͳ͍ͱԿΘ͔Βͳ͍
ͭ✱A ͭ
ॾѱͷࠜݯͳʹʁ w 6*Λ࣮ݱ͢ΔͨΊͷίʔυͱɺϩ δοΫ͕zີ݁߹͍ͯ͠Δͷ͕ॾѱ ͷࠜݯͳͷͰʜʜʁ
1%4 w 1SFTFOUBUJPO%PNBJO 4FQBSBUJPO w IUUQCJUMZH7)
1%4 w ৄ͘͠:"1$"TJB)BDIJPKJ ͷτʔΫͰ w IUUQCJUMZG)NJ
1%4 ࠷༗༻ͳઃܭݪଇʹɺϓϩάϥϜʢϢʔ βʔΠϯλʔϑΣΠεʣͷϓϨθϯςʔγϣ ϯͱͦͷଞͷػೳΛ͏·͚͘Δɺͱ͍͏ ͷ͕͋Γ·͢ɻࢲ͜ΕΛൃݟͯ͠Ҏདྷɺͣͬ ͱ׳ߦ͍ͯ͠·͢ɻ͍ؒ͜ΕΛ͖ͬͯͯɺ ͍ͭ͘ͷϝϦοτΛൃݟ͠·ͨ͠ɻ ʮϓϨθϯςʔγϣϯͱυϝΠϯͷʯ .BSUJO'PXMFST#MJLJ KB
1%4 w %%%ͱؔͳ͍ w ϓϥοτϑΥʔϜґଘͳ6*Λ࣮ݱ͢ ΔίʔυͱʮͦΕҎ֎શ෦ʯΛ͚ Δ w ͜͜Ͱ͍͏%PNBJOͬͯͷʮͦΕ Ҏ֎ʯͷ͜ͱ
1%4ͷ࣮ݱํ๏ w ͍Ζ͍Ζ͋Δɻ.7 ͥΜͿ1%4 Λ࣮ݱ͢ΔͨΊͷΞʔΩςΫνϟɻ w ࠓճ7VFKTͬͯ.77.Γ ·͢
)5.- 7JFX
ϙΠϯτ w %0.ͱɺΠϕϯτϋϯυϥ͕͜͜ʹ ू͞Ε͍ͯΔ w JNHλάʹDMBTTΛઃఆ͍ͨ͠ͱ͖ ී௨ʹ)5.-Λ͍͡Εྑ͍ w Ͳ͜ͰΠϕϯτϋϯυϥઃఆ͍ͯ͠Δ ͔Ұྎવ
ʆɾ✱ɾ
.PEFM
ϙΠϯτ w 7JFXͷ͜ͱʢ%0.ͱ͔DTTͱ ͔ʣ͕Ͱͯ͜ͳ͍ w ϒϥβ͕ͳͯ͘ςετͰ͖ͦ͏ ͳؾ͕͖ͯ͠·ͨ͠Ͷ w ΞϓϦέʔγϣϯͷཧతͳڍಈ͕ ʮϞσϦϯάʯ͞Ε͍ͯΔ
ʆɾ✱ɾ
.ͱ7͕Ͱ͖ͨ 7JFX .PEFM 1SFTFOUBUJPO %PNBJO
7ͱ.ͷؒͰ w Ͳ͏ʹ͔ͯ͜͠ͷ7ͱ.ͷؒͷίϛϡ χέʔγϣϯΛΓཱͨͤΔඞཁ͕ ͋Δɻ w ͜͜Λͬͯ͘ΕΔͷ͕.7 ͷ w
.77.ͷ7.͜͜Λͬͯ͘ΕΔ
.77. 7JFX .PEFM 1SFTFOUBUJPO %PNBJO 7JFX.PEFM
7VFKTʹ͓͚Δ7.ͷׂ w 7JFXͷͨΊͷঢ়ଶετΞ w ΠϕϯτΛͪड͚ͯɺ.PEFMͷ ϝιουΛEJTQBUDI͢Δ w .PEFMͷมԽΛಡΈऔͬͯࣗͷ ঢ়ଶετΞΛมߋ͢Δ
ঢ়ଶετΞ 7.
ঢ়ଶετΞ
ঢ়ଶετΞ
None
.77. 7JFX .PEFM 1SFTFOUBUJPO %PNBJO 7JFX.PEFM EBUBCJOEJOHػߏͰ 7JFX.PEFMͷঢ়ଶΛ 7JFXʹඳը͢Δ
7VFKTʹ͓͚Δ7.ͷׂ w 7JFXͷͨΊͷঢ়ଶετΞ w 7JFXΠϕϯτΛͪड͚ͯɺ .PEFMͷϝιουΛEJTQBUDI͢Δ w .PEFMͷมԽΛಡΈऔͬͯࣗͷঢ় ଶετΞΛมߋ͢Δ
ΠϕϯτΛͪड͚ͯ
.PEFMΛEJTQBUDI
.PEFMͷঢ়ଶ͕มΘΔ
.77. 7JFX .PEFM 1SFTFOUBUJPO %PNBJO 7JFX.PEFM 7.͔Β .ͷϝιουΛୟ͖ .PEFMͷঢ়ଶʹ มԽΛى͜͢
7VFKTʹ͓͚Δ7.ͷׂ w 7JFXͷͨΊͷঢ়ଶετΞ w ΠϕϯτΛͪड͚ͯɺϞσϧͷϝ ιουΛEJTQBUDI͢Δ w .PEFMͷมԽΛಡΈऔͬͯࣗͷ ঢ়ଶετΞΛมߋ͢Δ
.PEFMͷมԽΛಡΈऔΓ w .PEFMͷঢ়ଶ͕มΘͬͨΒ w 7JFX.PEFM͕ͦΕΛಡΈऔͬͯ w 7JFX.PEFMͷEBUBʹઃఆ͢Δ w ͭ·Γ0CTFSWFSύλʔϯ
௨͘Μ
௨܅Λ.PEFM͕࣋ͬͯ
ηολʔͰpSF
௨Λड͚औΔ
.77. 7JFX .PEFM 1SFTFOUBUJPO %PNBJO 7JFX.PEFM 0CTFSWFSύλʔϯͰ .PEFMͷมԽΛࢹ
ܗ
ܗ 7JFXͷͨΊͷঢ়ଶετΞ
ܗ .PEFMΛEJTQBUDI
ܗ .PEFMͷมߋΛࢹͯ͠ ঢ়ଶετΞʹө
.77. 7JFX .PEFM 1SFTFOUBUJPO %PNBJO 7JFX.PEFM EBUBCJOE FWFOU EJTQBUDI 0CTFSWF
1%4ಋೖલ w ֎؍Λม͑Δͷʹ+4͍͡Δඞཁ͋ͬ ͨ w Πϕϯτϋϯυϥ͕ͱͬͪΒ͔ͬͯͨ w ঢ়ଶ͕%0.ʹ͔͠ͳ͔ͬͨ w ςετͲ͏ͬͯॻ͔ͬ͜ʜʜ
1%4ಋೖޙ w ͕͖ͬΓͯ͠ݟ௨͕͠Α͘ͳͬ ͨ w มߋʹڧ͘ͳͬͨ w .PEFMͷςετ͘͢͠ͳͬͨ
ʆɾ✱ɾ
ͱ͜ΖͰ w 1SFTFOUBUJPOଆͷςετʁʁ w )BUFOB%FWFMPQFS#MPHಡ͏ w IUUQ EFWFMPQFSIBUFOBTUBGGDPN FOUSZ
#ύʔτ 7VFKTʹΑΔ .77.ͱ 'MVYͷڑ
'MVY w 'BDFCPPL.7$%PFT/PU 4DBMF 6TF'MVY*OTUFBE IUUQCJUMZpPZ%3 w .7$ͷͷղܾͱͯ͠ఏݴ͞ Ε͍ͯΔ
None
'MVY w BOBQQMJDBUJPOXPVMECF EJGpDVMUUPVOEFSTUBOEBOE EFCVHFTQFDJBMMZEVFUPUIF QPTTJCMFCJEJSFDUJPOBMEBUB qPXCFUXFFONPEFMTBOE WJFXT
'MVY w 'MVYJTBTZTUFN BSDIJUFDUVSFUIBUQSPNPUFT TJOHMFEJSFDUJPOBMEBUBqPX UISPVHIBOBQQMJDBUJPO
'MVY w .ͱ7ͷؒʹํͷσʔλϑϩʔ ͕͋Δͱ.7$͙͢ഁ͢ΔͷͰɺ ୯ํͷσʔλϑϩʔΛڧ੍͠Α ͏ɺͱ͍͏ͷ͕جຊతͳΞΠσΞ
None
7JFX͔Β"DUJPO͕ ൃੜͯ͠
%JTQBUDIFS͕ ͲΜͳϩδοΫΛݺͿͷ͔ ܾఆͯ͠
ͦͷϩδοΫͰ 4UPSFͷঢ়ଶΛ ॻ͖͑ͯ
4UPSFͷঢ়ଶ͕ 7JFXʹө͞ΕΔ
ͱ͜ΖͰΘΕΘΕͷ .77.ʹ͍ͭͯ ݟͯΈ·͠ΐ͏
.77. 7JFX .PEFM 1SFTFOUBUJPO %PNBJO 7JFX.PEFM 7JFXͰ ΫϦοΫΠϕϯτ͕ ൃੜͯ͠
7JFX͔Β"DUJPO͕ ൃੜͯ͠
.77. 7JFX .PEFM 1SFTFOUBUJPO %PNBJO 7JFX.PEFM 7JFX.PEFM͕ .PEFMͷ ͲΜͳϝιουΛ ୟ͔ܾ͘ఆͯ͠
%JTQBUDIFS͕ ͲΜͳϩδοΫΛݺͿͷ͔ ܾఆͯ͠
.77. 7JFX .PEFM 1SFTFOUBUJPO %PNBJO 7JFX.PEFM .PEFMͷϝιου͕ .PEFMͷ༰Λ ॻ͖͑ͯ
ͦͷϩδοΫͰ 4UPSFͷঢ়ଶΛ ॻ͖͑ͯ
.77. 7JFX .PEFM 1SFTFOUBUJPO %PNBJO 7JFX.PEFM 0CTFSWFSύλʔϯͰ .PEFMͷมԽΛࢹ ͨ݁͠Ռ͕7JFXʹ ө͞ΕΔ
4UPSFͷঢ়ଶ͕ 7JFXʹө͞ΕΔ
͓ͳ͡Ͱʂʁ
͍ͬ͜͡͞ͷΑ͏ͳԠ
'MVYͱ.7 w ҙਂ͘ઃܭ͞Εͨ.7 ୯ํ σʔλϑϩʔʹͳΔ
Ͱ'MVYʹ Ձͳ͍ͷ͔ʁ
'MVYͷՁ<ཁग़య> w ୯ํσʔλϑϩʔͷڧ੍ w ୯Ұͷ4UPSF
ඌ্͞Μͷهࣄ
.77.ͷ.PEFMʹ·ͭΘΔޡղ w IUUQCJUMZ[CQH, w .PEFMʹ͍ͭͯ7JFX.PEFM͕ ߦ͏͜ͱɺΠϕϯτʹର͢ΔԠ ͱΓͷͳ͍ϝιουͷݺͼग़͠ ͔͠ͳ͍
෮श
ٯʹݴ͏ͱʁ w Γͷ͋ΔϝιουΛୟ͍ͯΓ Λར༻ͯ͠͠·͏ͱɺ͋Δ͖࢟ ͔Β؆୯ʹઢͯ͠͠·͏
͏͍ͪͲ w ҙਂ͘ઃܭ͞Εͨ.7 ୯ํ σʔλϑϩʔʹͳΔ
͔͠͠զʑ ҙਂ͘ͳ͍ ͔͠͠զʑ ҙਂ͘ͳ͍
ͭ✱A ͭ
୯ํσʔλϑϩʔͷڧ੍ w 'MVYύλʔϯΛར༻͢Δ͜ͱͰ ʮڧ੍తʹʯ୯ํσʔλϑϩʔʹ Ͱ͖Δ w ϝϯόʔʹΞϗ͕͍ͯ୯ํσʔ λϑϩʔʹͰ͖Δ
ʆɾ✱ɾ
'MVYͷՁ<ཁग़య> w ୯ํσʔλϑϩʔͷڧ੍ w ୯Ұͷ4UPSF
w 7VFKTͷ7.ίϯϙʔωϯτΛ ωετͰ͖Δʢͱ͍͏͔ͦΕ͕ͳ͍ ͱෳࡶͳͷ࡞Εͳ͍ʣ w ͍ͭͰʹϞσϧ͚ͯΈΑ͏ .77.ͷ͠͞
ࢠ બ͞Εͨը૾
ࢠ ࠷ۙͷը૾ʣ
͜͏͍͏ঢ়ଶ 7JFX .PEFM 1SFTFOUBUJPO %PNBJO 7JFX.PEFM
w 3FDFOUMZ1PTUFE*NBHFTͷΠ ϕϯτʹ*NBHF4FMFDUPS͕ຊ࣭ తʹґଘ͍ͯ͠Δ w ͳΜͱ͔ͯ͠"Ͱىͬͨ͜Πϕϯτ #ʹ͑ͳ͍ͱ͍͚ͳ͍ ΠϕϯτૹͲ͏͢Δʁ
&WFOU#VTͷར༻
ෳࡶͳͭͩͱʜ 7JFX .PEFM 1SFTFOUBUJPO %PNBJO 7JFX.PEFM FWFOUCVT
ͭ✱A ͭ
w ͦͦ.ͱ7.ͬͯ͡Όͳ͍ ͜ͱͷํ͕ଟ͍ΑͶʁ w ͋Δ.PEFM͕ॻ͖ΘͬͨΒෳ ͷ7.ʹมԽΛ͍͑ͨͱ͔͟Βʹ ͋Δ 7.ͱ.ͷઢ
7JFX .PEFM 1SFTFOUBUJPO %PNBJO 7JFX.PEFM 7.ͱ.ͷઢ
ͭ✱A ͭ
ͱ͍͑ w ϞσϧͷϥΠϑαΠΫϧཻͳͲ ͕%PNBJOଆʹ͓͍ͯదʹઃܭ ͞Ε͍ͯΕͦΜͳʹʹͳ Βͳ͍ͣͰ͋Δ
͔͠͠զʑ ҙਂ͘ͳ͍ ͔͠͠զʑ ҙਂ͘ͳ͍
ͭ✱A ͭ
ͦ͜Ͱʜ IUUQTWVFKTPSHWHVJEFDPNQPOFOUTIUNM
୯Ұͷ4UPSFΛ༻ҙ IUUQTWVFKTPSHWHVJEFTUBUFNBOBHFNFOUIUNM ঢ়ଶετΞ ঢ়ଶNVUBUPS
4UPSFΛෳͷ7.Ͱڞ༗ IUUQTWVFKTPSHWHVJEFTUBUFNBOBHFNFOUIUNM
ͦͯ͜͠͏ IUUQTWVFKTPSHWHVJEFTUBUFNBOBHFNFOUIUNM
'MVYͷۙ IUUQTWVFKTPSHWHVJEFTUBUFNBOBHFNFOUIUNM
ݟํΛม͑Δͱ w 'MVY.7 ʹʮڊେͳͻͱͭͷϞ σϧʯΛಋೖ͠ɺ୯ํσʔλϑ ϩʔΛڧ੍ͨ͠ͷɺͱଊ͑Δ͜ͱ ͕Ͱ͖Δ
ͭ·Γ͜͏ 7JFX 4UPSF 1SFTFOUBUJPO %PNBJO 7JFX.PEFM
͑ͬ 7JFX 4UPSF 1SFTFOUBUJPO %PNBJO 7JFX.PEFM ͭ✱A ͭ
ڊେͳ4UPSFා͍ w ͑ͬڊେͳ୯ҰͷΠϯελϯεʹશ ෦ͷใͱશ෦ͷૢ࡞Λ࣋ͨͤΔͷ w ͜Θ͍͜Θ͍͜Θ͍͜Θ͍ w ཁ͢Δʹ͜Εάϩʔόϧม͡ΌΜ
ͭ✱A ͭ
ڊେͳ4UPSFා͘ͳ͍ w 4UPSFΛNVUBUFͰ͖Δͷ4UPSF ͚ͩʢ1SFTFOUBUJPOଆ4UPSFʹ ΠϕϯτΛ͑Δ͚ͩʣ w 4UPSF͕͍ΖΜͳΫϥεΛར༻ͯ͠ ͍͍ w 4UPSFͷׂ౷࣏
ڊେͳ4UPSFා͘ͳ͍ w ͜ͷׂ౷࣏ͷํΛߟ͑Δͷ͕ 'MVYΞʔΩςΫνϟʹ͓͚Δ ʮ%PNBJOͷઃܭʯʹͨΔ w વ͜͜ઃܭྗ͕ΘΕΔ
ͭ·Γ͜͏ 7JFX 4UPSF 1SFTFOUBUJPO %PNBJO 7JFX.PEFM NPEVMF NPEVMF NPEVMF
'MVYͷՁϙΠϯτ w 1ͷׂߏͱɺ%ͷׂߏಉܕ ͱݶΒͳ͍ʢͱ͍͏͔ଟ͘ͷ߹ ҟͳΔʣ w ʮదʹϞσϧΛઃܭʯ͠ͳ͍ͱɺ7. ͱ.ͷઢΠϕϯτϑϩʔ͕ͪ͝Ό ͪ͝ΌʹͳΔʢզʑҙਂ͘ͳ͍ʣ
'MVYͷՁϙΠϯτ w ୯Ұͷ4UPSFΛར༻͢Δ͜ͱͰɺ Ұ୴શ෦4UPSFʹঢ়ଶΛूΊΔ w ͜ͷ4UPSFΛదʹϞδϡʔϧԽ͢ Ε1SFTFOUBUJPOʹҾ͖ͣΒΕ Δ͜ͱͳ͘%PNBJOΛઃܭͰ͖Δ
ʆɾ✱ɾ
#ύʔτऴྃ
$ύʔτɿ·ͱΊ w 7VFKTʹΑΔ.77.ಋೖͷϝϦο τɺ1%4ʹ͍ͭͯݟ͖ͯ·ͨ͠ w 7VFKTʹΑΔૉͳ.77.ͳ ͔ͳ͔ʹ͍͠ͷͰ͋Δ͜ͱݟ ͖ͯ·ͨ͠
$ύʔτɿ·ͱΊ w 4UPSF1BUUFSOΛಋೖ͠ɺ'MVYʹ ۙ͢Δ͜ͱͰɺগ͕͠ѻ͍ ͘͢ͳΔͱ͍͏͜ͱΛݟ͖ͯ·͠ ͨ w ͔݁͠͠ہ%PNBJOͷઃܭඞཁ ͳͷͰ͕Μ͍͖ͬͯͬͯ·͠ΐ͏
$ύʔτɿ͓·͚ w ฐࣾϝϯόʔืूதͳͷͰ͔͚ ͍ͯͩ͘͞ w <ٻ>4DBMB"OESPJE+BWB 4XJGU+BWB4DSJQU