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
Angular with RxJS
Search
shuufei
December 09, 2020
Programming
440
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Angular with RxJS
* RxJSの基礎(ざっくり)
* RxJSを使いたいモチベーション
* RxJSをAngularで使っていくためには
* RxJSを活用してAngular Componentを実装する
shuufei
December 09, 2020
More Decks by shuufei
See All by shuufei
OOUI(オブジェクト指向UIデザイン)
shuufei
2
880
Elmについて
shuufei
0
280
Angularにおける状態管理
shuufei
0
55
AngularにおけるComponent分割
shuufei
0
68
Other Decks in Programming
See All in Programming
『寄り添うラジオ』をAIで作る 体験価値から逆算した、会話しないUXと品質設計
theoriatec2024
3
160
How I Stole PSI from Android Studio - DroidKaigi2026
worker8
0
110
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
130
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
370
[DroidKaigi 2026] Bring your own phones to Gradle Managed Devices
f2lk
0
120
iOSDC2026登壇資料.pdf
riofujimon
0
120
自分的「カンファレンスの楽しみ方」
syumai
0
200
型解析で実現する Go の言語内 DSL / Conference に Go! タイムテーブルの歩き方 for Gophers
mazrean
0
150
App Intentsのビルドプロセスを支える技術
kntkymt
0
320
XP祭りでしか伝わらないフリップネタ #xpjug
murabayashi
0
150
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
6.4k
ゲームコントローラやキーボードのファームウェアをSwiftで書く
kishikawakatsumi
1
230
Featured
See All Featured
We Are The Robots
honzajavorek
0
370
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
The untapped power of vector embeddings
frankvandijk
2
1.9k
HDC tutorial
michielstock
2
860
Designing Powerful Visuals for Engaging Learning
tmiket
1
540
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
410
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
980
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
370
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
450
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Transcript
Angular with RxJS
3Y+4ͷجૅ 3Y+4Λ͍͍ͨϞνϕʔγϣϯ 3Y+4Λ"OHVMBSͰ͍ͬͯͨ͘Ίʹ 3Y+4Λ׆༻ͯ͠"OHVMBS$PNQPOFOUΛ࣮͢Δ 3Y+4ͷςετʹ͍ͭͯ
RxJSͷجૅ
RxJSͷجૅ 3Y+4ɺࢹՄೳͳγʔέϯεΛ༻ͯ͠ඇಉظ͓Αͼ ΠϕϯτϕʔεͷϓϩάϥϜΛ࡞͢ΔͨΊͷϥΠϒϥϦͰ͢ IUUQTSYKTEFWpSFCBTFBQQDPNHVJEFPWFSWJFX
"OHVMBSͷఏڙ͍ͯ͠Δ.PEVMFɺ͜ͷ3Y+4ϕʔεͷΠϯλʔϑΣʔεʹͳ͍ͬͯΔͷ͕ଟ͍ )UUQ$MJFOU 'PSN$POUSPM "DUJWBUFE3PVUF FUD RxJSͷجૅ
جຊߏ Observable Subject Operator RxJSͷجૅ
جຊߏ Observable Subject Operator RxJSͷجૅ ͍ͩͿͬ͘͟Γͨ͠આ໌ʹͳΔͷͰɺৄࡉυΩϡϝϯτΛಡΉ͜ͱΛ͓͢͢Ί͠·͢ʜ
جຊߏ Observable Subject Operator Observable RxJSͷجૅ ετϦʔϜͷΑ͏ͳͷɻ TVCTDSJCF͢Δ͜ͱͰɺ෦Ͱൃߦ͞ΕͨΛड͚औΔ͜ͱ͕Ͱ͖Δɻ
جຊߏ Observable Subject Operator Observable RxJSͷجૅ ετϦʔϜͷΑ͏ͳͷɻ TVCTDSJCF͢Δ͜ͱͰɺ෦Ͱൃߦ͞ΕͨΛड͚औΔ͜ͱ͕Ͱ͖Δɻ
جຊߏ Observable Subject Operator Observable RxJSͷجૅ ετϦʔϜͷΑ͏ͳͷɻ TVCTDSJCF͢Δ͜ͱͰɺ෦Ͱൃߦ͞ΕͨΛड͚औΔ͜ͱ͕Ͱ͖Δɻ
جຊߏ Observable Subject Operator Observable RxJSͷجૅ 0CTFSWBCMFͩͱɺ֎෦͔ΒͷൃߦΛߦ͏͜ͱ͕Ͱ͖ͳ͍ɻ
جຊߏ Observable Subject Operator Observable RxJSͷجૅ https://rxjs-dev.firebaseapp.com/guide/observable ৄͪ͘͜͠Β
جຊߏ Observable Subject Operator Operator RxJSͷجૅ ετϦʔϜʹྲྀΕΔʹԿ͔͠Βͷૢ࡞Λߦ͏ؔɻ ྫɿNBQΦϖϨʔλɺҾʹࢦఆ͞ΕͨؔͷฦΓΛετϦʔϜʹྲྀ͢ɻ
جຊߏ Observable Subject Operator Operator RxJSͷجૅ ετϦʔϜʹྲྀΕΔʹԿ͔͠Βͷૢ࡞Λߦ͏ؔɻ ྫɿNBQΦϖϨʔλɺҾʹࢦఆ͞ΕͨؔͷฦΓΛετϦʔϜʹྲྀ͢ɻ
جຊߏ Observable Subject Operator Operator RxJSͷجૅ ετϦʔϜʹྲྀΕΔʹԿ͔͠Βͷૢ࡞Λߦ͏ؔɻ ྫɿNBQΦϖϨʔλɺҾʹࢦఆ͞ΕͨؔͷฦΓΛετϦʔϜʹྲྀ͢ɻ
جຊߏ Observable Subject Operator Operator RxJSͷجૅ ετϦʔϜʹྲྀΕΔʹԿ͔͠Βͷૢ࡞Λߦ͏ؔɻ ྫɿNBQΦϖϨʔλɺҾʹࢦఆ͞ΕͨؔͷฦΓΛετϦʔϜʹྲྀ͢ɻ
جຊߏ Observable Subject Operator Operator RxJSͷجૅ https://rxjs-dev.firebaseapp.com/guide/operators ৄͪ͘͜͠Β
جຊߏ Observable Subject Operator Subject RxJSͷجૅ 0CTFSWBCMF ֎෦͔ΒΛൃߦͰ͖ΔΑ͏ʹͨ͠ͷɻ
جຊߏ Observable Subject Operator Subject RxJSͷجૅ https://rxjs-dev.firebaseapp.com/guide/subject ৄͪ͘͜͠Β
ͷมԽΠϕϯτͷൃՐΛݕ͠ɺͦΕΛτϦΨʹॲཧΛߦ͏͜ͱ͕Ͱ͖Δ RxJSͷجૅ
Ϙλϯ͕ΫϦοΫ͞Εͨ࣌ʹɺDPOTPMFʹFWFOUΛදࣔ͢Δ RxJSͷجૅ
JUFNTͷʹมԽ͕͋ͬͨ࣌ʹɺαʔόଆͱΛಉظ͢Δ RxJSͷجૅ
RxJSΛ͍͍ͨϞνϕʔγϣϯ
RxJSΛ͍͍ͨϞνϕʔγϣϯ ݸਓతͳݟղΛ͠·͢
RxJSΛ͍͍ͨϞνϕʔγϣϯ 8FCΞϓϦέʔγϣϯෳࡶ ཧ͢Δঢ়ଶ͕ଟ͍ ϋϯυϦϯά͢ΔΠϕϯτ͕ଟ͍ ը໘͔ΒͷΠϕϯταʔόͱͷΓͱΓͳͲ
RxJSΛ͍͍ͨϞνϕʔγϣϯ ࣮͍ͯ࣌͘͠ʹҙࣝ͢ΔϙΠϯτ Ͳ͏͍͏Πϕϯτঢ়ଶͷมԽ͕͋ͬͨ࣌ʹɺͲ͏͍͏ॲཧΛΒͳ͍ͱ͍͚ͳ͍ͷ͔
RxJSΛ͍͍ͨϞνϕʔγϣϯ ࣮͍ͯ࣌͘͠ʹҙࣝ͢ΔϙΠϯτ Ͳ͏͍͏Πϕϯτঢ়ଶͷมԽ͕͋ͬͨ࣌ʹɺͲ͏͍͏ॲཧΛΒͳ͍ͱ͍͚ͳ͍ͷ͔ ͱ͍͏ͱ͜Ζʹͳͬͯ͘Δؾ͕͢Δ
RxJSΛ͍͍ͨϞνϕʔγϣϯ ྫ͑ʜ
RxJSΛ͍͍ͨϞνϕʔγϣϯ ಈըΛΫϦοΫͨ͠ͱ͖ɺಈըͷ࠶ੜը໘ʹભҠ͢Δ :PV5VCF
RxJSΛ͍͍ͨϞνϕʔγϣϯ *TTVFʹ)PWFSͨ͠ͱ͖ɺ*TTVFใΛϙοϓΞοϓදࣔ͢Δ (JU)VC
RxJSΛ͍͍ͨϞνϕʔγϣϯ จࣈͰೖྗ͞Ε͍ͯͨͱ͖ɺૹ৴ϘλϯΛΞΫςΟϒʹ͢Δ (PPHMF$IBU
RxJSΛ͍͍ͨϞνϕʔγϣϯ ͲΕ͔ͷද͕ࣔ݅มߋ͞Εͨͱ͖ɺ݅ʹجͮ͘σʔλͷ࠶औಘΛߦ͍͍ͨ "TBOB
RxJSΛ͍͍ͨϞνϕʔγϣϯ ༧ఆΛ࡞͢Δ࣌ʹ͕࣌ؒมߋ͞Εͨͱ͖ɺΧϨϯμʔ্ͷ֘࣌ؒଳʹΧʔυ͕දࣔ͞ΕΔ (PPHMF$BMFOEBS
RxJSΛ͍͍ͨϞνϕʔγϣϯ ͷมԽΠϕϯτͷൃՐΛݕ͠ɺͦΕΛτϦΨʹॲཧΛߦ͏͜ͱ͕Ͱ͖Δ ʮ999ͨ͠ͱ͖ɺ:::Λߦ͏ʯͱ͍͏ϢʔεέʔεΛએݴతʹ࣮Ͱ͖Δ 3Y+4Λ͏ͱ
RxJSΛ͍͍ͨϞνϕʔγϣϯ ಈըΛΫϦοΫͨ͠ͱ͖ɺಈըͷ࠶ੜը໘ʹભҠ͢Δ
RxJSΛ͍͍ͨϞνϕʔγϣϯ จࣈͰೖྗ͞Ε͍ͯͨͱ͖ɺૹ৴ϘλϯΛΞΫςΟϒʹ͢Δ
RxJSΛ͍͍ͨϞνϕʔγϣϯ ༧ఆΛ࡞͢Δ࣌ʹ͕࣌ؒมߋ͞Εͨͱ͖ɺΧϨϯμʔ্ͷ֘࣌ؒଳʹΧʔυ͕දࣔ͞ΕΔ
RxJSΛ͍͍ͨϞνϕʔγϣϯ ͲΕ͔ͷද͕ࣔ݅มߋ͞Εͨͱ͖ɺ݅ʹجͮ͘σʔλͷ࠶औಘΛߦ͍͍ͨ
RxJSΛ͍͍ͨϞνϕʔγϣϯ ͲΕ͔ͷද͕ࣔ݅มߋ͞Εͨͱ͖ɺ݅ʹجͮ͘σʔλͷ࠶औಘΛߦ͍͍ͨ ද͕ࣔ݅มߋ͞Εͨͱ͖ɺ-PDBM4UPSBHFʹ݅Λอଘ͍ͨ͠
RxJSΛ͍͍ͨϞνϕʔγϣϯ ͲΕ͔ͷද͕ࣔ݅มߋ͞Εͨͱ͖ɺ݅ʹجͮ͘σʔλͷ࠶औಘΛߦ͍͍ͨ ද͕ࣔ݅มߋ͞Εͨͱ͖ɺ-PDBM4UPSBHFʹ݅Λอଘ͍ͨ͠ طଘͷ࣮ʹӨڹΛ༩͑Δ͜ͱͳ͘ɺؔ৺͝ͱʹ࣮ΛՃͰ͖Δ
RxJSΛ͍͍ͨϞνϕʔγϣϯ ʮ999ͨ͠ͱ͖ɺ:::Λߦ͏ʯͱ͍͏ϢʔεέʔεΛಉ͡Α͏ͳߏจͰએݴతʹ࣮Ͱ͖Δ 3Y+4Λ͏ͱ
RxJSΛ͍͍ͨϞνϕʔγϣϯ "OHVMBSͷ50%0ΞϓϦέʔγϣϯͷαϯϓϧ 3Y+4ΛΘͳ͍࣮ྫ
RxJSΛ͍͍ͨϞνϕʔγϣϯ 3Y+4ΛΘͳ͍࣮ྫ
RxJSΛ͍͍ͨϞνϕʔγϣϯ UIJTJUFNT·ͨϑΟϧλ݅ʹมߋ͕͋ͬͨͱ͖ɺ UIJTpMUFSFE*UFNTΛߋ৽͢Δඞཁ͕͋Δ 3Y+4ΛΘͳ͍࣮ྫ ͦΕͧΕͷϝιουͷதͰɺ ຊདྷΓ͍ͨ͜ͱҎ֎ͷॲཧ͕ߦΘΕͯΔ
RxJSΛ͍͍ͨϞνϕʔγϣϯ "OHVMBSͷ50%0ΞϓϦέʔγϣϯͷαϯϓϧ 3Y+4Λ࣮ͬͨྫ
RxJSΛ͍͍ͨϞνϕʔγϣϯ 3Y+4Λ࣮ͬͨྫ
RxJSΛ͍͍ͨϞνϕʔγϣϯ 3Y+4Λ࣮ͬͨྫ pMUFSFE*UFNTɺ UIJTJUFNT·ͨUIJTpMUFS$POEJUJPOʹมԽ͕͋ͬͨͱ͖ɺ DPOEJUJPOʹΑͬͯJUFNT͕ϑΟϧλ͞ΕͨͰ͋Δɻ
RxJSΛ͍͍ͨϞνϕʔγϣϯ 3Y+4Λ࣮ͬͨྫ BEE͞Εͨͱ͖ɺJUFNTʹ৽͍͠JUFN͕Ճ͞ΕΔ SFNPWF͞Εͨͱ͖ɺJUFNT͔ΒରͷJUFN͕আ͞ΕΔ
RxJSΛ͍͍ͨϞνϕʔγϣϯ ʮ999ͨ͠ͱ͖ɺ:::Λߦ͏ʯͱ͍͏ϢʔεέʔεΛಉ͡Α͏ͳߏจͰએݴతʹ࣮Ͱ͖Δ 3Y+4Λ͏ͱ ɾ࣮͢Δͱ͖ɺ࣮͢ΔϢʔεέʔεͷΈʹؔ৺Λ͍͍͑ ɾίʔυΛಡΉͱ͖ɺ࣮͞ΕͨએݴΛಡΉ͜ͱͰɺͲ͏͍͏࣌ʹԿ͕ߦΘΕΔ͔ɺ ɹͲ͏͍͏࣌ʹ͜ͷ͕Ͳ͏มԽ͢Δ͔ͱ͍͏ͷΛѲͰ͖Δɻ
RxJSΛ͍͍ͨϞνϕʔγϣϯ "OHVMBSͷύϑΥʔϚϯε
RxJSΛ͍͍ͨϞνϕʔγϣϯ "OHVMBSͷύϑΥʔϚϯε rx-angular introduction εϥΠυ rx-angular introduction Youtube ը໘ඳըॲཧͷ࠷దԽ
RxJSΛ͍͍ͨϞνϕʔγϣϯ "OHVMBSͷύϑΥʔϚϯε UFNQMBUF͔ΒHFUUFSΛࢀরͨ࣌͠ͷσϝϦοτ UFNQMBUF͔ΒHFUUFSΛࢀর͠ͳͯ͘Α͘ͳΔ ը໘ඳը࣌ʹຖճHFUUFSͷॲཧ͕ߦΘΕΔ
RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ .VMUJDBTU )PU$PME 4VCTDSJQUJPOͷཧ ओཁͳ0QFSBUPS "OHVMBSͷ"TZOD1JQF
"OHVMBSͷ"TZOD1JQF RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
"OHVMBSͷ"TZOD1JQF "TZOD1JQF ࣗಈͰPCTFSWBCMFͳΛTVCTDSJCF͠ɺ࠷৽ͷΛฦ٫͢Δ RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
ओཁͳ0QFSBUPS RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
ओཁͳ0QFSBUPS map filter tap combineLatest merge take takeUntil mergeMap distinctUntilChanged
withLatestFrom RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
.VMUJDBTU RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
.VMUJDBTU ετϦʔϜΛڞ༗͢Δ͔Ͳ͏͔ IUUQTEFWUPSYKTSFTFBSDIPOSFBDUJWFFQIFNFSBMTUBUFJODPNQPOFOUPSJFOUFEGSBNFXPSLTML RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
.VMUJDBTU RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
.VMUJDBTU .VMUJDBTUʹม͢Δ0QFSBUPS Learn RxJS / Multicasting RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
.VMUJDBTU Research on Reactive-Ephemeral-State in component-oriented frameworks#Sharing State and state
derivations RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
)PU$PME RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
)PU$PME TVCTDSJCF͍ͯ͠ͳͯ͘Λྲྀ͔͢Ͳ͏͔ Hot vs Cold Observables RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
TVCTDSJCF͍ͯ͠ͳͯ͘Λྲྀ͔͢Ͳ͏͔ Hot vs Cold Observables )PUʹ͢Δͱɺ.VMUJDBTUʹͳΔ )PU$PME RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
$PMEͳ0CTFSWBCMFͷ߹ɺTVCTDSJCF͢Δલʹൃߦ͞Ε͕ͨर͑ͳ͍ Research on Reactive-Ephemeral-State in component-oriented frameworks#The Late Subscriber Problem
)PU$PME RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
$PMEͳ0CTFSWBCMFͷ߹ɺTVCTDSJCF͢Δલʹൃߦ͞Ε͕ͨर͑ͳ͍ Research on Reactive-Ephemeral-State in component-oriented frameworks#The Late Subscriber Problem
͜ΕΛղܾ͢ΔͨΊʹʜ )PU$PME RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
)PU$PME QVCMJTIΦϖϨʔλ DPOOFDU RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
)PU$PME QVCMJTI3FQMBZΦϖϨʔλ DPOOFDU RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
)PU$PME TIBSFΦϖϨʔλ TVCTDSJCF TVCTDSJCF͢Δ·Ͱ)PUͰͳ͍ RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
)PU$PME TIBSF3FQMBZΦϖϨʔλ TVCTDSJCF TVCTDSJCF͢Δ·Ͱ)PUͰͳ͍ RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
)PU$PME DPOOFDUͰ)PUʹͳΔɻ QVCMJTI TIBSF ࠷ॳͷTVCTDSJCFͰ)PUʹͳΔɻ refCount RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
)PU$PME DPOOFDUޙʹOFYU͞Εͨ࠷৽ͷ͕औಘͰ͖Δ QVCMJTI3FQMBZ TIBSF3FQMBZ ࠷ॳͷTVCTDSJCFޙʹOFYU͞Εͨ࠷৽ͷ͕औಘͰ͖Δ TVCTDSJCF࣌ʹ࠷৽ͷΛऔಘ͍ͨ͠߹ RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
)PU$PME DPOOFDUޙʹOFYU͞Εͨ࠷৽ͷ͕औಘͰ͖Δ QVCMJTI3FQMBZ TIBSF3FQMBZ ࠷ॳͷTVCTDSJCFޙʹOFYU͞Εͨ࠷৽ͷ͕औಘͰ͖Δ TVCTDSJCF࣌ʹ࠷৽ͷΛऔಘ͍ͨ͠߹ DPOOFDUલɺTVCTDSJCFલʹOFYU͞Εͨ࠷৽ͷΛऔಘ͍ͨ͠߹ 4VCKFDUΛ#FIBWJPS4VCKFDUʹ͢Δ RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
)PU$PME #FIBWJPS4VCKFDUͱTIBSF3FQMBZ Λར༻͢Δ͜ͱͰɺ ৗʹTVCTDSJCF࣌ʹ࠷৽ͷΛऔಘͰ͖Δɻ RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
)PU$PME #FIBWJPS4VCKFDUͱTIBSF3FQMBZ Λར༻͢Δ͜ͱͰɺ ৗʹTVCTDSJCF࣌ʹ࠷৽ͷΛऔಘͰ͖Δɻ 4VCKFDU QVCMJTI3FQMBZ DPOOFDUͰಉ༷ͷಈ࡞ʹͳΔ͕ɺ
ͲͪΒ͕ద͍ͯ͠Δͷ͔Θ͔Βͳ͍ʜ SYBOHVMBSTUBUFͰɺ4VCKFDU QVCMJTI3FQMBZ DPOOFDUͰ࣮͞Ε͍ͯΔɻ TVCTDSJCFͤͣʹ)PUʹͳΔͱ͍͏ͱ͜Ζ͕ϙΠϯτͷΑ͏ͳؾ͢Δʜ RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
4VCTDSJQUJPOͷཧ RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
4VCTDSJQUJPOͷཧ TVCTDSJCFΛߦ͏ͱɺ0CTFSWBCMF͕DPNQMFUF͞Εͳ͍ݶΓͣͬͱ͕ྲྀΕͯ͠·͏ɻ DPNQPOFOUͰTVCTDSJCFΛߦͬͨ߹ɺDPNQPOFOU͕ഁغ͞Εͨޙಈ࡞͢ΔͨΊɺ DPNQPOFOUഁغ࣌ʹVOTVCTDSJCF͢Δඞཁ͕͋Δɻ RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
4VCTDSJQUJPOͷཧ UBLF6OUJMΛར༻͢Δ͜ͱͰɺ4VCTDSJQUJPOͷཧΛ؆қԽͰ͖Δ RxJSΛAngularͰ͍ͬͯͨ͘Ίʹ
3Y+4Λ׆༻ͯ͠"OHVMBS$PNQPOFOUΛ࣮͢Δ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ 3Y+4Λ׆༻͠ɺϦΞΫςΟϒͳ࣮Λߦ͏ͨΊʹʜ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ίϯϙʔωϯτͰൃੜ͢ΔΠϕϯτΛ4VCKFDUͰఆٛ ίϯϙʔωϯτͷϝϯόมΛ0CTFSWBCMFͱͯ͠ఆٛ ΠϕϯτϋϯυϦϯάॲཧΛ࣮ 4VCTDSJQUJPOͷཧ 3Y+4Λ׆༻͠ɺϦΞΫςΟϒͳ࣮Λߦ͏ͨΊʹʜ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ͱʹ͔͘શͯͷΠϕϯτΛ0CTFSWBCMFʹ͢Δɻ 0CTFSWBCMFͱͯ͠ఆٛ͞ΕͨΠϕϯτΛ༻͍ͯɺը໘ͷৼΔ͍Λ࣮͢Δɻ ίϯϙʔωϯτͰൃੜ͢ΔΠϕϯτΛ4VCKFDUͰఆٛ ίϯϙʔωϯτͷϝϯόมΛ0CTFSWBCMFͱͯ͠ఆٛ ΠϕϯτϋϯυϦϯάॲཧΛ࣮ 4VCTDSJQUJPOͷཧ 3Y+4Λ׆༻͠ɺϦΞΫςΟϒͳ࣮Λߦ͏ͨΊʹʜ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ؆қతͳ50%0ΞϓϦέʔγϣϯ ɾ50%0ͷՃ͕Ͱ͖Δ ɾ50%0ͷআ͕Ͱ͖Δ ɾ50%0ҰཡΛϑΟϧλͰ͖Δ શͯɺະྃɺྃࡁ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ %FNP αϯϓϧίʔυ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ 3Y+4ΛΘͳ͔ͬͨͱ͖ͷ࣮ UFNQMBUF step0.component.html
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ 3Y+4ΛΘͳ͔ͬͨͱ͖ͷ࣮ $PNQPOFOUͷ*OQVU step0.component.ts 3Y+4ΛΘͳ͔ͬͨͱ͖ͷ࣮ $PNQPOFOUͷϝϯόม
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ 3Y+4ΛΘͳ͔ͬͨͱ͖ͷ࣮ $PNQPOFOUͷϝιου step0.component.ts
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ίϯϙʔωϯτͰൃੜ͢ΔΠϕϯτΛ4VCKFDUͰఆٛ ίϯϙʔωϯτͷϝϯόมΛ0CTFSWBCMFͱͯ͠ఆٛ ΠϕϯτϋϯυϦϯάॲཧΛ࣮ 4VCTDSJQUJPOͷཧ 3Y+4Λ׆༻͠ɺϦΞΫςΟϒͳ࣮Λߦ͏ͨΊʹʜ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ίϯϙʔωϯτͰൃੜ͢ΔΠϕϯτΛ4VCKFDUͰఆٛ ίϯϙʔωϯτͷϝϯόมΛ0CTFSWBCMFͱͯ͠ఆٛ ΠϕϯτϋϯυϦϯάॲཧΛ࣮ 4VCTDSJQUJPOͷཧ 3Y+4Λ׆༻͠ɺϦΞΫςΟϒͳ࣮Λߦ͏ͨΊʹʜ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ίϯϙʔωϯτͰൃੜ͢ΔΠϕϯτΛ4VCKFDUͰఆٛ ը໘Ͱൃੜ͢ΔΠϕϯτ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ίϯϙʔωϯτͰൃੜ͢ΔΠϕϯτΛ4VCKFDUͰఆٛ *OQVUͷมߋ $PNQPOFOUͷϥΠϑαΠΫϧ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ίϯϙʔωϯτͰൃੜ͢ΔΠϕϯτΛ4VCKFDUͰఆٛ ը໘Ͱൃੜ͢ΔΠϕϯτɺ*OQVUͷมߋɺίϯϙʔωϯτͷϥΠϑαΠΫϧΛ 0CTFSWBCMFͱͯ͠ݕͰ͖ΔΑ͏ʹ4VCKFDUͱͯ͠ఆٛɻ step1.component.ts ࣮मਖ਼
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ίϯϙʔωϯτͰൃੜ͢ΔΠϕϯτΛ4VCKFDUͰఆٛ ը໘Ͱൃੜ͢ΔΠϕϯτɺ*OQVUͷมߋɺίϯϙʔωϯτͷϥΠϑαΠΫϧΛ 0CTFSWBCMFͱͯ͠ݕͰ͖ΔΑ͏ʹ4VCKFDUͱͯ͠ఆٛɻ step1.component.ts ࣮मਖ਼ Ͳ͏͍͏ͱ͖ʹ͕OFYU͞ΕΔ͔Λਪଌ໋໊͍͢͠ʹ͠ͳ͍ͱࠞཚͷݩʹͳΔ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ίϯϙʔωϯτͰൃੜ͢ΔΠϕϯτΛ4VCKFDUͰఆٛ ը໘ଆͷΠϕϯτൃੜΛݕͰ͖ΔΑ͏ʹɺ4VCKFDUͷOFYUΛ࣮ߦ͢Δ step1.component.html ࣮मਖ਼
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ίϯϙʔωϯτͰൃੜ͢ΔΠϕϯτΛ4VCKFDUͰఆٛ *OQVUͷมߋΛݕͰ͖ΔΑ͏ʹɺ4VCKFDUͷOFYUΛ࣮ߦ͢Δ $PNQPOFOUͷϥΠϑαΠΫϧΛݕͰ͖ΔΑ͏ʹɺ4VCKFDUͷOFYUΛ࣮ߦ͢Δ ࣮मਖ਼ step1.component.ts
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ίϯϙʔωϯτͰൃੜ͢ΔΠϕϯτΛ4VCKFDUͰఆٛ ίϯϙʔωϯτͰൃੜ͢ΔΠϕϯτΛ0CTFSWBCMFͱͯ͠ѻ͑ΔΑ͏ʹͳΓ·ͨ͠
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ίϯϙʔωϯτͰൃੜ͢ΔΠϕϯτΛ4VCKFDUͰఆٛ ίϯϙʔωϯτͷϝϯόมΛ0CTFSWBCMFͱͯ͠ఆٛ ΠϕϯτϋϯυϦϯάॲཧΛ࣮ 4VCTDSJQUJPOͷཧ 3Y+4Λ׆༻͠ɺϦΞΫςΟϒͳ࣮Λߦ͏ͨΊʹʜ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ मਖ਼લͷ$PNQPOFOU$MBTTͷϝϯόม *OQVU step0.component.ts ίϯϙʔωϯτͷϝϯόมΛ0CTFSWBCMFͱͯ͠ఆٛ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ $PNQPOFOUͷঢ়ଶΛཧ͢Δ4VCKFDUΛఆٛɻ ͜ͷͱ͖ɺ$PNQPOFOUͷঢ়ଶΛͻͱͭͷ0CKFDUͱͯ͠ѻ͑ΔΑ͏ʹ͢Δɻ ཧ༝ผ్આ໌ ࣮मਖ਼ step2.component.ts ίϯϙʔωϯτͷϝϯόมΛ0CTFSWBCMFͱͯ͠ఆٛ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ pMUFSFE*UFNTJUFNTͱpMUFS$POEJUJPO͔Βಋग़Ͱ͖ΔͨΊɺຖճϑΟϧλͷ࣮ߦΛߦ͏ඞཁ͕ͳ͘ͳͬͨ ίϯϙʔωϯτͷϝϯόมΛ0CTFSWBCMFͱͯ͠ఆٛ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ UBQͳͲͰ෭࡞༻Λ༩͑ΔॲཧΛՃ͑Δͷ/(ɻͲ͏͍͏ͱ͖ʹԿ͕ى͜Δͷ͔͕͍ʹ͘͘ͳΔɻ ίϯϙʔωϯτͷϝϯόมΛ0CTFSWBCMFͱͯ͠ఆٛ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ 0CTFSWBCMFʹஔ͖ΘͬͨϝϯόมΛɺ"TZOD1JQFΛͬͯϨϯμϦϯά ࣮मਖ਼ step2.component.html ίϯϙʔωϯτͷϝϯόมΛ0CTFSWBCMFͱͯ͠ఆٛ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ίϯϙʔωϯτͰൃੜ͢ΔΠϕϯτͱɺ ίϯϙʔωϯτͷঢ়ଶΛ0CTFSWBCMFͱͯ͠ѻ͑ΔΑ͏ʹͳΓ·ͨ͠ ίϯϙʔωϯτͷϝϯόมΛ0CTFSWBCMFͱͯ͠ఆٛ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ίϯϙʔωϯτͰൃੜ͢ΔΠϕϯτͱɺ ίϯϙʔωϯτͷঢ়ଶΛ0CTFSWBCMFͱͯ͠ѻ͑ΔΑ͏ʹͳΓ·ͨ͠ ίϯϙʔωϯτͷϝϯόมΛ0CTFSWBCMFͱͯ͠ఆٛ ʮ999ͨ͠ͱ͖ɺ:::Λߦ͏ʯͷ999ͨ͠ͱ͖ͱ͍͏ͷ͕දݱͰ͖ΔΑ͏ʹͳͬͨ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ίϯϙʔωϯτͰൃੜ͢ΔΠϕϯτΛ4VCKFDUͰఆٛ ίϯϙʔωϯτͷϝϯόมΛ0CTFSWBCMFͱͯ͠ఆٛ ΠϕϯτϋϯυϦϯάॲཧΛ࣮ 4VCTDSJQUJPOͷཧ 3Y+4Λ׆༻͠ɺϦΞΫςΟϒͳ࣮Λߦ͏ͨΊʹʜ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ίϯϙʔωϯτͰൃੜ͢ΔΠϕϯτΛ4VCKFDUͰఆٛ ίϯϙʔωϯτͷϝϯόมΛ0CTFSWBCMFͱͯ͠ఆٛ ΠϕϯτϋϯυϦϯάॲཧΛ࣮ 4VCTDSJQUJPOͷཧ 3Y+4Λ׆༻͠ɺϦΞΫςΟϒͳ࣮Λߦ͏ͨΊʹʜ ίϯϙʔωϯτͷঢ়ଶͱൃੜ͢ΔΠϕϯτ͕શͯ0CTFSWBCMFʹͳ͍ͬͯΔͷͰɺ ʮ999ͨ͠ͱ͖ʹɺ:::Λߦ͏ʯͱ͍͏ϢʔεέʔεΛએݴతʹ࣮͍͚ͯ͠Δɻ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ؆қతͳ50%0ΞϓϦέʔγϣϯ ɾ50%0ͷՃ͕Ͱ͖Δ ɾ50%0ͷআ͕Ͱ͖Δ ɾ50%0ҰཡΛϑΟϧλͰ͖Δ શͯɺະྃɺྃࡁ ΠϕϯτϋϯυϦϯάॲཧΛ࣮
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ BEEΠϕϯτ͕ൃՐͨ͠ͱ͖ɺTUBUFΦϒδΣΫτͷJUFNTʹ৽͍͠JUFNΛՃ ࣮मਖ਼ final.component.ts ΠϕϯτϋϯυϦϯάॲཧΛ࣮
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ SFNPWFΠϕϯτ͕ൃՐͨ͠ͱ͖ɺTUBUFΦϒδΣΫτͷJUFNT͔Βࢦఆ͞ΕͨJUFNΛআ ࣮मਖ਼ final.component.ts ΠϕϯτϋϯυϦϯάॲཧΛ࣮
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ϑΟϧλ͕݅ߋ৽Πϕϯτ͕ൃՐͨ͠ͱ͖ɺTUBUFΦϒδΣΫτͷϑΟϧλ݅Λߋ৽ ࣮मਖ਼ final.component.ts ΠϕϯτϋϯυϦϯάॲཧΛ࣮
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ *OQVUͷUJUMF͕มߋ͞Εͨͱ͖ɺTUBUFΦϒδΣΫτͷUJUMFΛߋ৽ ࣮मਖ਼ final.component.ts ΠϕϯτϋϯυϦϯάॲཧΛ࣮
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ Ͳ͏͍͏ͱ͖ʹԿ͕ى͖Δͷ͔͕એݴతʹ࣮͞Ε͍ͯΔͷͰɺॲཧΛѲ͘͢͠ͳͬͨ ࠓճྫʹ͋͛ͯΔίʔυ͙Β͍ͩͱ͋·ΓޮՌײ͡ʹ͍͕͘ʜ ΠϕϯτϋϯυϦϯάॲཧΛ࣮
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ Ͳ͏͍͏ͱ͖ʹԿ͕ى͖Δͷ͔͕એݴతʹ࣮͞Ε͍ͯΔͷͰɺॲཧΛѲ͘͢͠ͳͬͨ ࠓճྫʹ͋͛ͯΔίʔυ͙Β͍ͩͱ͋·ΓޮՌײ͡ʹ͍͕͘ʜ ॲཧ࣮ߦͷτϦΨͱͳΔΠϕϯτ͕ෳ͋ΔΑ͏ͳέʔεɺ ͻͱͭͷΠϕϯτ͔Βෳͷؔ৺͝ͱΛॲཧ͍ͨ͠έʔεͩͱɺΑΓޮՌΛൃش͢Δؾ͕͢Δ ΠϕϯτϋϯυϦϯάॲཧΛ࣮
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ίϯϙʔωϯτͰൃੜ͢ΔΠϕϯτΛ4VCKFDUͰఆٛ ίϯϙʔωϯτͷϝϯόมΛ0CTFSWBCMFͱͯ͠ఆٛ ΠϕϯτϋϯυϦϯάॲཧΛ࣮ 4VCTDSJQUJPOͷཧ 3Y+4Λ׆༻͠ɺϦΞΫςΟϒͳ࣮Λߦ͏ͨΊʹʜ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ·ͩΠϕϯτϋϯυϥΛTVCTDSJCF͍ͯ͠ͳ͍ͷͰɺॲཧ࣮ߦ͞Εͳ͍ɻ 4VCTDSJQUJPOͷཧ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ DPOTUSVDUPSͰ·ͱΊͯTVCTDSJCF͢Δ͜ͱͰɺཧ͢Δ4VCTDSJQUJPOΛͭʹ͢Δɻ ·ͨɺUBLF6OUJMͰPO%FTUSPZΛࢦఆ͢Δ͜ͱͰɺίϯϙʔωϯτഁغ࣌ʹDPNQMFUF͞ΕΔɻ ࣮मਖ਼ 4VCTDSJQUJPOͷཧ final.component.ts
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ίϯϙʔωϯτ͕ੜ͖ͯΔ͚ؒͩɺΠϕϯτϋϯυϦϯά͕ಈ࡞͢ΔΑ͏ʹͳͬͨ 4VCTDSJQUJPOͷཧ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ Ճཁ݅Λ࣮ͯ͠ΈΑ͏ ɾJUFNTʹมߋ͕͋ͬͨͱ͖ʹɺαʔόʹ࠷৽ͷJUFNTͷঢ়ଶΛૹ৴͢Δ ɾը໘ଆͷԿ͔͠ΒͷΠϕϯτ͕ൃՐͨ͠ͱ͖ɺϩάΛදࣔ͢Δ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ͜ΕͰ3Y+4Λ׆༻࣮ͯ͠Ͱ͖ΔΑ͏ʹͳΓ·ͨ͠
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ͜ΕͰ3Y+4Λ׆༻࣮ͯ͠Ͱ͖ΔΑ͏ʹͳΓ·ͨ͠ ͱ͍͑ɺ࣮࣌ʹؾʹ͢Δ͜ͱ࣮ྔ͕গ͠ଟ͍ʜ EJTUJODU6OUJM$IBOHFEͱ͔ɺTIBSF3FQMBZͱ͔ɺ4VCTDSJQUJPOͷཧͱ͔
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ͜ΕͰ3Y+4Λ׆༻࣮ͯ͠Ͱ͖ΔΑ͏ʹͳΓ·ͨ͠ ͱ͍͑ɺ࣮࣌ʹؾʹ͢Δ͜ͱ࣮ྔ͕গ͠ଟ͍ʜ EJTUJODU6OUJM$IBOHFEͱ͔ɺTIBSF3FQMBZͱ͔ɺ4VCTDSJQUJPOͷཧͱ͔ ͦ͜Ͱʜ
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ !SYBOHVMBS @rx-angular
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ !SYBOHVMBSΛ͏͜ͱͰɺΑΓ؆ܿʹɺ؆୯ʹϦΞΫςΟϒʹ࣮͢Δ͜ͱ͕Ͱ͖·͢ !SYBOHVMBS
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ !SYBOHVMBSͱԿ͔ !SYBOHVMBS
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ @rx-angular/state @rx-angular/template $PNQPOFOUΞϓϦέʔγϣϯͷঢ়ଶΛϦΞΫςΟϒʹѻ͍͘͢͢ΔͨΊͷϥΠϒϥϦ 0CTFSWBCMFͷΛUFNQMBUFଆͰѻ͏ͱ͖ʹ͑ΔσΟϨΫςΟϒͳͲΛఏڙ !SYBOHVMBS
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ઌ΄Ͳͷ50%0ΞϓϦέʔγϣϯΛ!SYBOHVMBSTUBUFΛ༻͍ͯॻ͖͑ͯΈΑ͏ !SYBOHVMBS
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ 3Y4UBUFͷΠϯελϯεΛ*OKFDU !SYBOHVMBS rxangular.component.ts
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ $PNQPOFOUͷϝϯόมΛఆٛ !SYBOHVMBS rxangular.component.ts
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ TUBUFGVMTFMFDUΛར༻͢Δ͜ͱͰɺEJTUJODU6OUJM$IBOHFETIBSF3FQMBZΛؾʹ͠ͳͯ͘ྑ͍ !SYBOHVMBS rxangular.component.ts stateful select
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ ΠϕϯτϋϯυϦϯάॲཧͱঢ়ଶͷॳظԽ !SYBOHVMBS rxangular.component.ts
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ 4VCTDSJQUJPOͷཧ3Y4UBUF͕ͬͯ͘ΕΔ !SYBOHVMBS rxangular.component.ts
RxJSΛ׆༻ͯ͠Angular ComponentΛ࣮͢Δ @rx-angular/state @rx-angular/template ͦͷଞͷػೳ !SYBOHVMBS
3Y+4ͷςετʹ͍ͭͯ
RxJSͷςετʹ͍ͭͯ
RxJSͷςετʹ͍ͭͯ $PNJOH4PPO
!SYBOHVMBSΛָͬͯ͘͠։ൃ͠Α͏ ࠓͷ·ͱΊ
ࢀߟ RxJS ެࣜ Hot vs Cold Observables rx-angular introduction Learn
RxJS Research on Reactive Ephemeral state in component oriented frameworks BehaviorSubject vs rx-state @rx-angular