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
RxJSではじめるリアクティブプログラミング
Search
Satoshi Watanabe
February 10, 2018
Programming
100
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RxJSではじめるリアクティブプログラミング
Satoshi Watanabe
February 10, 2018
More Decks by Satoshi Watanabe
See All by Satoshi Watanabe
AIエージェントでのコーディングでわかった理解の重要性
sassy
0
40
StartupAngular2資料
sassy
0
78
最近作ったClovaスキルの紹介
sassy
0
360
作ったスキルの紹介
sassy
1
470
Other Decks in Programming
See All in Programming
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
140
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
190
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
1
320
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
2.9k
Are APIs Still Relevant in the AI Era?
soyuka
0
230
iOSDC2026登壇資料.pdf
riofujimon
0
160
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
100
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
4
680
A2UI for Android: Safely Rendering AI-Generated UI with Jetpack Compose - DroidKaigi 2026
itsmedreamwalker
0
140
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
110
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
160
JPUG勉強会 OSSデータベースの内部構造を理解しよう(第2回)
oga5
0
230
Featured
See All Featured
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
880
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
830
Un-Boring Meetings
codingconduct
0
420
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
540
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
350
How GitHub (no longer) Works
holman
316
150k
Prompt Engineering for Job Search
mfonobong
0
450
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
490
Transcript
RxJSではじめる リアクティブプログラミング Satoshi Watanabe(@sassy_watson) 2018/2/10 プログラミング生放送勉強会
このプレゼンの目的 • 今日はRxJSとその背景となるリアクティブプログラミングのについて 簡単に話します。
アジェンダ • 自己紹介 • リアクティブプログラミングとは • RxJSとは
自己紹介 • 渡辺 悟史(わたなべ さとし) • twitter: @sassy_watson • 株式会社カケハシ所属
• フロントエンド開発 • モバイルアプリ開発(Android)
株式会社カケハシ • Musubiという薬局での服薬指導ツールを開発 • フロントエンドはAngular • バックエンドは Python3 • カケハシでは一緒に働ける仲間を募集しています!
リアクティブプログラミングと RxJS
リアクティブプログラミングとは • 「何か」に反応するプログラミング • 通知されてくるデータを受け取るたびに反応して処理をするプログラ ミング • 処理の流れを定義してあげて、データがきたらその定義された順番 に処理していくイメージ
Excelの例 先に式を定義する セルに値を入れると計算される (セルに入力された値に反応する)
「何か」に反応=ストリーム • ストリームは通知されるデータの流れ • リアクティブプログラミングはこのストリームを処理していく
Observerパターン
Observerパターン • オブザーバーと呼ばれるオブジェクトをサブジェクトを監視するため に登録する • サブジェクトがイベントを発行するたびにオブザーバーがそのイベン トの処理を行う • リアクティブプログラミングは基本このパターン
RxJSとは • JavaScriptでリアクティブプログラミングを行うためのライブラリ • RxはReactiveExtensionsの略 Observable Observer data
例 import { Observable } from 'rxjs'; let value =
10; Observable.fromEvent(document, 'click') .subscribe( () => { //Success Callback value++; document.getElementById('ret').innerHTML = value.toString(); }, (error) => { // Error Callback console.error(error); }, () => { console.log('complete'); } ) ObserverがSubscribe(購読)することにより データを受け取る データを受け取るコールバックは next/error/completeの3種類
2種類のObservable • Cold Observable • Subscribeするまでデータを流さない • Hot Observable •
Subscribeに関係なくデータを流す
Cold Observable • Subscribeするまでデータを流さない
const ob$ = Observable.interval(1000) .take(5); setTimeout(() => { ob$.subscribe( (x)
=> { console.log(x); }, (err) => {console.log(err)}, () => {console.log('complete')} ) }, 3000); 0 1 2 3 4 complete 結果
Hot Observable • Subscribeに関係なくデータを流す
const ob2$ = Observable.interval(1000) .take(5) .publish(); //publishでHotなObservableを作る ob2$.connect(); //connectでデータを流し始める setTimeout(()
=> { ob2$.subscribe( (x) => { console.log(x); }, (err) => {console.log(err)}, () => {console.log('complete')} ) }, 3000); 2 3 4 complete 結果
オペレータ • Observableが通知したデータをObserverに届くまでにデータを操作す るメソッド • Observableを生成する(メソッドチェーンが使える)
例 Observable.from([1, 2, 3, 4, 5, 6]) .filter(x => x
% 2 == 0) // 2の倍数でfilter .map(x => x * 100) //100かける .subscribe( (x) => { console.log(x); }, (error) => { // Error Callback console.error(error); }, () => { console.log('complate'); } ); > 200 > 400 > 600 > complate 結果
例 二つの入力を入れるとbuttonがenableに なる
const i1 = document.getElementById('input1'); const i2 = document.getElementById('input2'); const input1$
= Observable.fromEvent(i1, "input") .map((x) => { const target = x.target; return target.value !== ''; }); const input2$ = Observable.fromEvent(i2, "input") .map((x) => { const target = x.target; return target.value !== ''; }); Observable.combineLatest(input1$,input2$) .map(([a, b]) => a && b) .distinctUntilChanged() .subscribe((x) => { const button = document.getElementById('button'); if (x) { button.removeAttribute('disabled'); } else { button.setAttribute(‘disabled’, ‘’); } })
Subject • Observableであり、Observerでもあるクラス • subscribeでnext/error/completeのイベントハンドラを登録できる • next()でイベントを起こす・error()でエラーを起こす
const sub$ = new Subject(); sub$.subscribe( (x) => { console.log(x);
}, (err) => { console.error(err); }, () => { console.log('Complete'); } ) sub$.next(10); //10が表示 sub$.next(20); //20が表示 sub$.complete(); //complete
各種オペレータ(一部のみ)
map • それぞれのデータに演算して加工する map (x => 10 * x) 1
2 3 10 20 30
filter • trueが返ってきたものだけ値を使う filter (X => x > 10) 2
1¥ 30 0 22 5 60 1 30 22 60
zip • 二つのストリームの値を結合する zip 1 2 3 4 5 A
B C D 1A 2B 3C 4D
distinctUntilChanged • 値が変化するまで通知しない distinctUntilChanged 1 2 3 4 4 1
2 3 4 1 2 2
まとめ • JavaScriptでプログラミングをするときはRxJSを使ってみましょう! • Enjoy Reactive Programming!