ãã€ãã©ã€ã³æäœãçšããJavaScriptã®ã¹ããªãŒã åŠçèœåãæ¢æ±ãããªã¢ã«ã¿ã€ã ããŒã¿ãå¹ççã«ç®¡çã»å€æããŸããå ç¢ã§ã¹ã±ãŒã©ãã«ãªããŒã¿åŠçã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯æ¹æ³ãåŠã³ãŸãããã
JavaScriptã¹ããªãŒã åŠçïŒãªã¢ã«ã¿ã€ã ããŒã¿ã®ããã®ãã€ãã©ã€ã³æäœ
仿¥ã®ããŒã¿é§ååã®äžçã§ã¯ãããŒã¿ããªã¢ã«ã¿ã€ã ã§åŠçããã³å€æããèœåãäžå¯æ¬ ã§ããJavaScriptã¯ããã®å€çšéãªãšã³ã·ã¹ãã ã«ãããã¹ããªãŒã åŠçã®ããã®åŒ·åãªããŒã«ãæäŸããŠããŸãããã®èšäºã§ã¯ãJavaScriptã«ããããã€ãã©ã€ã³æäœã䜿çšããã¹ããªãŒã åŠçã®æŠå¿µãæãäžããå¹ççã§ã¹ã±ãŒã©ãã«ãªããŒã¿åŠçã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããæ¹æ³ã解説ããŸãã
ã¹ããªãŒã åŠçãšã¯ïŒ
ã¹ããªãŒã åŠçãšã¯ãããŒã¿ãåå¥ã®ããããšããŠã§ã¯ãªããé£ç¶çãªãããŒãšããŠæ±ãããšã§ãããã®ã¢ãããŒãã¯ã以äžã®ãããªãªã¢ã«ã¿ã€ã ããŒã¿ãæ±ãã¢ããªã±ãŒã·ã§ã³ã«ç¹ã«æçšã§ãã
- éèååŒãã©ãããã©ãŒã ïŒãªã¢ã«ã¿ã€ã ã®ååŒå€æã®ããã«åžå ŽããŒã¿ãåæããã
- IoTïŒã¢ãã®ã€ã³ã¿ãŒãããïŒããã€ã¹ïŒæ¥ç¶ãããããã€ã¹ããã®ã»ã³ãµãŒããŒã¿ãåŠçããã
- ãœãŒã·ã£ã«ã¡ãã£ã¢ã¢ãã¿ãªã³ã°ïŒãã¬ã³ãã®ãããã¯ããŠãŒã¶ãŒã®ææ ããªã¢ã«ã¿ã€ã ã§è¿œè·¡ããã
- Eã³ããŒã¹ã®ããŒãœãã©ã€ãŒãŒã·ã§ã³ïŒãŠãŒã¶ãŒã®è¡åã«åºã¥ããŠãããŒãœãã©ã€ãºãããååæšå¥šãæäŸããã
- ãã°åæïŒã·ã¹ãã ã®ãã°ãç£èŠããç°åžžãã»ãã¥ãªãã£ã®è åšãæ€åºããã
åŸæ¥ã®ãããåŠçæ¹æ³ã¯ããããã®ããŒã¿ã¹ããªãŒã ã®é床ãšéã«å¯ŸåŠããã«ã¯äžååã§ããã¹ããªãŒã åŠçã¯å³æã®æŽå¯ãšã¢ã¯ã·ã§ã³ãå¯èœã«ããçŸä»£ã®ããŒã¿ã¢ãŒããã¯ãã£ã®äž»èŠãªæ§æèŠçŽ ãšãªã£ãŠããŸãã
ãã€ãã©ã€ã³ã®æŠå¿µ
ããŒã¿ãã€ãã©ã€ã³ã¯ãããŒã¿ã®ã¹ããªãŒã ã倿ããäžé£ã®æäœã§ãããã€ãã©ã€ã³ã®åæäœã¯ãããŒã¿ãå ¥åãšããŠåãåããç¹å®ã®å€æãå®è¡ããçµæãæ¬¡ã®æäœã«æž¡ããŸãããã®ã¢ãžã¥ãŒã«åŒã®ã¢ãããŒãã«ã¯ãããã€ãã®å©ç¹ããããŸãã
- ã¢ãžã¥ãŒã«æ§ïŒãã€ãã©ã€ã³ã®å段éã¯ç¹å®ã®ã¿ã¹ã¯ãå®è¡ãããããã³ãŒãã®çè§£ãšä¿å®ã容æã«ãªããŸãã
- åå©çšæ§ïŒãã€ãã©ã€ã³ã®å段éã¯ãç°ãªããã€ãã©ã€ã³ãã¢ããªã±ãŒã·ã§ã³ã§åå©çšã§ããŸãã
- ãã¹ãå®¹ææ§ïŒåã ã®ãã€ãã©ã€ã³æ®µéã¯ãç¬ç«ããŠç°¡åã«ãã¹ãã§ããŸãã
- ã¹ã±ãŒã©ããªãã£ïŒãã€ãã©ã€ã³ã¯ãã¹ã«ãŒããããåäžãããããã«è€æ°ã®ããã»ããµããã·ã³ã«åæ£ã§ããŸãã
ç³æ²¹ã茞éããç©ççãªãã€ãã©ã€ã³ãèããŠã¿ãŠãã ãããåã»ã¯ã·ã§ã³ã¯ããã³ãã³ã°ããã£ã«ã¿ãªã³ã°ã粟補ãšãã£ãç¹å®ã®æ©èœãæãããŸããåæ§ã«ãããŒã¿ãã€ãã©ã€ã³ãæç¢ºãªæ®µéãçµãŠããŒã¿ãåŠçããŸãã
ã¹ããªãŒã åŠçã®ããã®JavaScriptã©ã€ãã©ãª
ããã€ãã®JavaScriptã©ã€ãã©ãªã¯ãããŒã¿ãã€ãã©ã€ã³ãæ§ç¯ããããã®åŒ·åãªããŒã«ãæäŸããŠããŸããããã§ã¯ã人æ°ã®ããéžæè¢ãããã€ã玹ä»ããŸãã
- RxJS (Reactive Extensions for JavaScript)ïŒãªãã¶ãŒããã«ã·ãŒã±ã³ã¹ã䜿çšããŠéåæããã³ã€ãã³ãããŒã¹ã®ããã°ã©ã ãæ§æããããã®ã©ã€ãã©ãªã§ããRxJSã¯ãããŒã¿ã¹ããªãŒã ãå€æã»æäœããããã®è±å¯ãªãªãã¬ãŒã¿ã»ãããæäŸããŸãã
- Highland.jsïŒããŒã¿ãã€ãã©ã€ã³ãæ§ç¯ããããã®ã·ã³ãã«ã§ãšã¬ã¬ã³ããªAPIãæäŸããã軜éãªã¹ããªãŒã åŠçã©ã€ãã©ãªã§ãã
- Node.js StreamsïŒNode.jsã«çµã¿èŸŒãŸããŠããã¹ããªãŒãã³ã°APIã§ãããŒã¿ããã£ã³ã¯ã§åŠçã§ããããã倧ããªãã¡ã€ã«ããããã¯ãŒã¯ã¹ããªãŒã ã®åŠçã«é©ããŠããŸãã
RxJSã«ããããŒã¿ãã€ãã©ã€ã³ã®æ§ç¯
RxJSã¯ãã¹ããªãŒã åŠçãã€ãã©ã€ã³ãå«ããªã¢ã¯ãã£ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®åŒ·åãªã©ã€ãã©ãªã§ããããã¯ãæéãšãšãã«æµããããŒã¿ã®ã¹ããªãŒã ã衚ããªãã¶ãŒããã«ïŒObservableïŒã®æŠå¿µã䜿çšããŸããRxJSã«ãããäžè¬çãªãã€ãã©ã€ã³æäœãããã€ãèŠãŠãããŸãããã
1. ãªãã¶ãŒããã«ã®äœæ
ããŒã¿ãã€ãã©ã€ã³æ§ç¯ã®æåã®ã¹ãããã¯ãããŒã¿ãœãŒã¹ãããªãã¶ãŒããã«ãäœæããããšã§ããããã«ã¯ã次ã®ãããªæ§ã ãªã¡ãœããã䜿çšã§ããŸãã
- `fromEvent`ïŒDOMã€ãã³ããããªãã¶ãŒããã«ãäœæããŸãã
- `from`ïŒé åãPromiseããŸãã¯ã€ãã©ãã«ãããªãã¶ãŒããã«ãäœæããŸãã
- `interval`ïŒæå®ãããééã§äžé£ã®æ°å€ãæŸåºãããªãã¶ãŒããã«ãäœæããŸãã
- `ajax`ïŒHTTPãªã¯ãšã¹ããããªãã¶ãŒããã«ãäœæããŸãã
äŸïŒé åãããªãã¶ãŒããã«ãäœæãã
import { from } from 'rxjs';
const data = [1, 2, 3, 4, 5];
const observable = from(data);
observable.subscribe(
(value) => console.log('Received:', value),
(error) => console.error('Error:', error),
() => console.log('Completed')
);
ãã®ã³ãŒãã¯`data`é åãããªãã¶ãŒããã«ãäœæããããã賌èªïŒsubscribeïŒããŸãã`subscribe`ã¡ãœããã¯3ã€ã®åŒæ°ãåããŸãããªãã¶ãŒããã«ãæŸåºããåå€ãåŠçããã³ãŒã«ããã¯é¢æ°ããšã©ãŒãåŠçããã³ãŒã«ããã¯é¢æ°ããããŠãªãã¶ãŒããã«ã®å®äºãåŠçããã³ãŒã«ããã¯é¢æ°ã§ãã
2. ããŒã¿ã®å€æ
ãªãã¶ãŒããã«ãäœæããããæ§ã ãªãªãã¬ãŒã¿ã䜿çšããŠããªãã¶ãŒããã«ãæŸåºããããŒã¿ã倿ã§ããŸããäžè¬çãªå€æãªãã¬ãŒã¿ã«ã¯æ¬¡ã®ãããªãã®ããããŸãã
- `map`ïŒãªãã¶ãŒããã«ãæŸåºããåå€ã«ç¹å®ã®é¢æ°ãé©çšãããã®çµæãæŸåºããŸãã
- `filter`ïŒæå®ãããæ¡ä»¶ãæºããå€ã®ã¿ãæŸåºããŸãã
- `scan`ïŒãªãã¶ãŒããã«ãæŸåºããåå€ã«ã¢ãã¥ã ã¬ãŒã¿é¢æ°ãé©çšããèç©ãããçµæãæŸåºããŸãã
- `pluck`ïŒãªãã¶ãŒããã«ãæŸåºããåãªããžã§ã¯ãããç¹å®ã®ããããã£ãæœåºããŸãã
äŸïŒ`map`ãš`filter`ã䜿çšããŠããŒã¿ã倿ãã
import { from } from 'rxjs';
import { map, filter } from 'rxjs/operators';
const data = [1, 2, 3, 4, 5];
const observable = from(data).pipe(
map(value => value * 2),
filter(value => value > 4)
);
observable.subscribe(
(value) => console.log('Received:', value),
(error) => console.error('Error:', error),
() => console.log('Completed')
);
ãã®ã³ãŒãã¯ãŸã`map`ãªãã¬ãŒã¿ã䜿çšããŠ`data`é åã®åå€ã2åã«ããŸããæ¬¡ã«ã`filter`ãªãã¬ãŒã¿ã䜿çšããŠãçµæã4ãã倧ããå€ã®ã¿ã«ãã£ã«ã¿ãªã³ã°ããŸããåºåã¯æ¬¡ã®ããã«ãªããŸãã
Received: 6
Received: 8
Received: 10
Completed
3. ããŒã¿ã¹ããªãŒã ã®çµå
RxJSã¯ãè€æ°ã®ãªãã¶ãŒããã«ãåäžã®ãªãã¶ãŒããã«ã«çµåããããã®ãªãã¬ãŒã¿ãæäŸããŠããŸããäžè¬çãªçµåãªãã¬ãŒã¿ã«ã¯æ¬¡ã®ãããªãã®ããããŸãã
- `merge`ïŒè€æ°ã®ãªãã¶ãŒããã«ãåäžã®ãªãã¶ãŒããã«ã«ããŒãžããåãªãã¶ãŒããã«ããå€ãå°çãããã³ã«æŸåºããŸãã
- `concat`ïŒè€æ°ã®ãªãã¶ãŒããã«ãåäžã®ãªãã¶ãŒããã«ã«é£çµããåãªãã¶ãŒããã«ã®å€ãé çªã«æŸåºããŸãã
- `zip`ïŒè€æ°ã®ãªãã¶ãŒããã«ããã®ææ°ã®å€ãåäžã®ãªãã¶ãŒããã«ã«çµåããçµåãããå€ãé åãšããŠæŸåºããŸãã
- `combineLatest`ïŒè€æ°ã®ãªãã¶ãŒããã«ããã®ææ°ã®å€ãåäžã®ãªãã¶ãŒããã«ã«çµåããããããã®ãªãã¶ãŒããã«ãæ°ããå€ãæŸåºãããã³ã«ãçµåãããå€ãé åãšããŠæŸåºããŸãã
äŸïŒ`merge`ã䜿çšããŠããŒã¿ã¹ããªãŒã ãçµåãã
import { interval, merge } from 'rxjs';
import { map } from 'rxjs/operators';
const observable1 = interval(1000).pipe(map(value => `Stream 1: ${value}`));
const observable2 = interval(1500).pipe(map(value => `Stream 2: ${value}`));
const mergedObservable = merge(observable1, observable2);
mergedObservable.subscribe(
(value) => console.log('Received:', value),
(error) => console.error('Error:', error),
() => console.log('Completed')
);
ãã®ã³ãŒãã¯ãç°ãªãééã§å€ãæŸåºãã2ã€ã®ãªãã¶ãŒããã«ãäœæããŸãã`merge`ãªãã¬ãŒã¿ã¯ãããã®ãªãã¶ãŒããã«ãåäžã®ãªãã¶ãŒããã«ã«çµåããäž¡æ¹ã®ã¹ããªãŒã ããå€ãå°çãããã³ã«æŸåºããŸããåºåã¯ãäž¡æ¹ã®ã¹ããªãŒã ããã®å€ã亀äºã«äžŠãã ã·ãŒã±ã³ã¹ã«ãªããŸãã
4. ãšã©ãŒåŠç
ãšã©ãŒåŠçã¯ãå ç¢ãªããŒã¿ãã€ãã©ã€ã³ãæ§ç¯ããäžã§äžå¯æ¬ ãªéšåã§ããRxJSã¯ããªãã¶ãŒããã«ã®ãšã©ãŒããã£ããããŠåŠçããããã®ãªãã¬ãŒã¿ãæäŸããŠããŸãã
- `catchError`ïŒãªãã¶ãŒããã«ãæŸåºãããšã©ãŒããã£ãããããšã©ãŒã眮ãæããããã®æ°ãããªãã¶ãŒããã«ãè¿ããŸãã
- `retry`ïŒãšã©ãŒãçºçããå Žåã«ããªãã¶ãŒããã«ãæå®ãããåæ°ã ãå詊è¡ããŸãã
- `retryWhen`ïŒã«ã¹ã¿ã æ¡ä»¶ã«åºã¥ããŠãªãã¶ãŒããã«ãå詊è¡ããŸãã
äŸïŒ`catchError`ã䜿çšããŠãšã©ãŒãåŠçãã
import { of, throwError } from 'rxjs';
import { catchError } from 'rxjs/operators';
const observable = throwError('An error occurred').pipe(
catchError(error => of(`Recovered from error: ${error}`))
);
observable.subscribe(
(value) => console.log('Received:', value),
(error) => console.error('Error:', error),
() => console.log('Completed')
);
ãã®ã³ãŒãã¯ãå³åº§ã«ãšã©ãŒãã¹ããŒãããªãã¶ãŒããã«ãäœæããŸãã`catchError`ãªãã¬ãŒã¿ããšã©ãŒããã£ãããããšã©ãŒããå埩ããããšã瀺ãã¡ãã»ãŒãžãæŸåºããæ°ãããªãã¶ãŒããã«ãè¿ããŸããåºåã¯æ¬¡ã®ããã«ãªããŸãã
Received: Recovered from error: An error occurred
Completed
Highland.jsã«ããããŒã¿ãã€ãã©ã€ã³ã®æ§ç¯
Highland.jsã¯ãJavaScriptã«ãããã¹ããªãŒã åŠçã®ããã®ããäžã€ã®äººæ°ã©ã€ãã©ãªã§ããRxJSã«æ¯ã¹ãŠã·ã³ãã«ãªAPIãæäŸããŠãããåºæ¬çãªã¹ããªãŒã åŠçã¿ã¹ã¯ã«ã¯åŠã³ããã䜿ããããã§ããHighland.jsã§ããŒã¿ãã€ãã©ã€ã³ãæ§ç¯ããæ¹æ³ã®æŠèŠã以äžã«ç€ºããŸãã
1. ã¹ããªãŒã ã®äœæ
Highland.jsã¯ãRxJSã®ãªãã¶ãŒããã«ã«äŒŒãã¹ããªãŒã ïŒStreamïŒã®æŠå¿µã䜿çšããŸããæ¬¡ã®ãããªã¡ãœããã䜿çšããŠãæ§ã ãªããŒã¿ãœãŒã¹ããã¹ããªãŒã ãäœæã§ããŸãã
- `hl(array)`ïŒé åããã¹ããªãŒã ãäœæããŸãã
- `hl.wrapCallback(callback)`ïŒã³ãŒã«ããã¯é¢æ°ããã¹ããªãŒã ãäœæããŸãã
- `hl.pipeline(...streams)`ïŒè€æ°ã®ã¹ããªãŒã ãããã€ãã©ã€ã³ãäœæããŸãã
äŸïŒé åããã¹ããªãŒã ãäœæãã
const hl = require('highland');
const data = [1, 2, 3, 4, 5];
const stream = hl(data);
stream.each(value => console.log('Received:', value));
2. ããŒã¿ã®å€æ
Highland.jsã¯ãã¹ããªãŒã å ã®ããŒã¿ã倿ããããã®ããã€ãã®é¢æ°ãæäŸããŠããŸãã
- `map(fn)`ïŒã¹ããªãŒã å ã®åå€ã«é¢æ°ãé©çšããŸãã
- `filter(fn)`ïŒæ¡ä»¶ã«åºã¥ããŠã¹ããªãŒã å ã®å€ããã£ã«ã¿ãªã³ã°ããŸãã
- `reduce(seed, fn)`ïŒã¢ãã¥ã ã¬ãŒã¿é¢æ°ã䜿çšããŠã¹ããªãŒã ãåäžã®å€ã«éçŽããŸãã
- `pluck(property)`ïŒã¹ããªãŒã å ã®åãªããžã§ã¯ãããç¹å®ã®ããããã£ãæœåºããŸãã
äŸïŒ`map`ãš`filter`ã䜿çšããŠããŒã¿ã倿ãã
const hl = require('highland');
const data = [1, 2, 3, 4, 5];
const stream = hl(data)
.map(value => value * 2)
.filter(value => value > 4);
stream.each(value => console.log('Received:', value));
3. ã¹ããªãŒã ã®çµå
Highland.jsã¯ãè€æ°ã®ã¹ããªãŒã ãçµåããããã®é¢æ°ãæäŸããŠããŸãã
- `merge(stream1, stream2, ...)`ïŒè€æ°ã®ã¹ããªãŒã ãåäžã®ã¹ããªãŒã ã«ããŒãžããŸãã
- `zip(stream1, stream2, ...)`ïŒè€æ°ã®ã¹ããªãŒã ããŸãšããŠãåã¹ããªãŒã ããã®å€ã®é åãæŸåºããŸãã
- `concat(stream1, stream2, ...)`ïŒè€æ°ã®ã¹ããªãŒã ãåäžã®ã¹ããªãŒã ã«é£çµããŸãã
å®äžçã®äŸ
JavaScriptã®ã¹ããªãŒã åŠçãã©ã®ããã«äœ¿çšãããããå®äžçã®äŸãããã€ã玹ä»ããŸãã
- ãªã¢ã«ã¿ã€ã ããã·ã¥ããŒãã®æ§ç¯ïŒRxJSãHighland.jsã䜿çšããŠãããŒã¿ããŒã¹ãAPIãã¡ãã»ãŒãžãã¥ãŒãªã©ã®è€æ°ã®ãœãŒã¹ããã®ããŒã¿ãåŠçãããªã¢ã«ã¿ã€ã ããã·ã¥ããŒãã«è¡šç€ºããŸããäŸãã°ãç°ãªãåœã®æ§ã ãªEã³ããŒã¹ãã©ãããã©ãŒã ããã®ã©ã€ã売äžããŒã¿ã衚瀺ããããã·ã¥ããŒããæ³åããŠã¿ãŠãã ãããã¹ããªãŒã åŠçãã€ãã©ã€ã³ã¯ãShopifyãAmazonããã®ä»ã®ãœãŒã¹ããã®ããŒã¿ãéçŽã»å€æããé貚ãæç®ããŠãã°ããŒãã«ãªå£²äžãã¬ã³ãã®çµ±äžããããã¥ãŒãæç€ºããŸãã
- IoTããã€ã¹ããã®ã»ã³ãµãŒããŒã¿ã®åŠçïŒNode.js Streamsã䜿çšããŠã枩床ã»ã³ãµãŒãªã©ã®IoTããã€ã¹ããã®ããŒã¿ãåŠçããäºåã«å®çŸ©ããããããå€ã«åºã¥ããŠã¢ã©ãŒããããªã¬ãŒããŸããç°ãªãæ°å垯ã®å»ºç©ã«ããã¹ããŒããµãŒã¢ã¹ã¿ããã®ãããã¯ãŒã¯ãèããŠã¿ãŠãã ãããã¹ããªãŒã åŠçã¯æž©åºŠããŒã¿ãåæããç°åžžïŒäŸïŒææ¿ã·ã¹ãã ã®æ éãç€ºãæ¥æ¿ãªæž©åºŠäœäžïŒãç¹å®ãã建ç©ã®å Žæãšã¹ã±ãžã¥ãŒãªã³ã°ã®ããã®çŸå°æéãèæ ®ããŠãèªåçã«ã¡ã³ããã³ã¹ãªã¯ãšã¹ãããã£ã¹ãããã§ããŸãã
- ãœãŒã·ã£ã«ã¡ãã£ã¢ããŒã¿ã®åæïŒRxJSãHighland.jsã䜿çšããŠããœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã äžã®ãã¬ã³ããããã¯ããŠãŒã¶ãŒã®ææ ã远跡ããŸããäŸãã°ãã°ããŒãã«ãªããŒã±ãã£ã³ã°äŒç€Ÿãã¹ããªãŒã åŠçã䜿çšããŠãç°ãªãèšèªã§ã®èªç€Ÿãã©ã³ãã補åã«é¢ããèšåãTwitterãã£ãŒãã§ç£èŠã§ããŸãããã€ãã©ã€ã³ã¯ãã€ãŒãã翻蚳ããææ ãåæããæ§ã ãªå°åã§ã®ãã©ã³ãèªç¥åºŠã«é¢ããã¬ããŒããçæã§ããŸãã
ã¹ããªãŒã åŠçã®ãã¹ããã©ã¯ãã£ã¹
JavaScriptã§ã¹ããªãŒã åŠçãã€ãã©ã€ã³ãæ§ç¯ããéã«å¿ã«çããŠããã¹ããã¹ããã©ã¯ãã£ã¹ãããã€ã玹ä»ããŸãã
- é©åãªã©ã€ãã©ãªãéžæããïŒããŒã¿åŠçèŠä»¶ã®è€éããèæ ®ããããŒãºã«æãé©ããã©ã€ãã©ãªãéžæããŸããRxJSã¯è€éãªã·ããªãªåãã®åŒ·åãªã©ã€ãã©ãªã§ãããHighland.jsã¯ããåçŽãªã¿ã¹ã¯ã«é©ããŠããŸãã
- ããã©ãŒãã³ã¹ãæé©åããïŒã¹ããªãŒã åŠçã¯ãªãœãŒã¹ã倧éã«æ¶è²»ããå¯èœæ§ããããŸããã¡ã¢ãªäœ¿çšéãšCPUæ¶è²»ãæå°éã«æããããã«ã³ãŒããæé©åããŸãããããåŠçããŠã£ã³ããŠã€ã³ã°ãªã©ã®ææ³ã䜿çšããŠãå®è¡ãããæäœã®æ°ãæžãããŸãã
- ãšã©ãŒãé©åã«åŠçããïŒãã€ãã©ã€ã³ãã¯ã©ãã·ã¥ããªãããã«ãå ç¢ãªãšã©ãŒãã³ããªã³ã°ãå®è£ ããŸãã`catchError`ã`retry`ã®ãããªãªãã¬ãŒã¿ã䜿çšããŠããšã©ãŒãé©åã«åŠçããŸãã
- ãã€ãã©ã€ã³ãç£èŠããïŒãã€ãã©ã€ã³ãæåŸ éãã«åäœããŠããããšã確èªããããã«ç£èŠããŸãããã®ã³ã°ãšã¡ããªã¯ã¹ã䜿çšããŠããã€ãã©ã€ã³ã®ã¹ã«ãŒããããã¬ã€ãã³ã·ããšã©ãŒã¬ãŒãã远跡ããŸãã
- ããŒã¿ã®ã·ãªã¢ã©ã€ãºãšãã·ãªã¢ã©ã€ãºãèæ ®ããïŒå€éšãœãŒã¹ããããŒã¿ãåŠçããéã¯ãããŒã¿ã·ãªã¢ã©ã€ãºåœ¢åŒïŒäŸïŒJSONãAvroãProtocol BuffersïŒã«æ³šæãæãããªãŒããŒããããæå°éã«æããããã«å¹ççãªã·ãªã¢ã©ã€ãºãšãã·ãªã¢ã©ã€ãºã確ä¿ããŸããäŸãã°ãKafkaãããã¯ããããŒã¿ãåŠçããŠããå Žåãããã©ãŒãã³ã¹ãšããŒã¿å§çž®ã®ãã©ã³ã¹ãåããã·ãªã¢ã©ã€ãºåœ¢åŒãéžæããŸãã
- ããã¯ãã¬ãã·ã£ãŒåŠçãå®è£ ããïŒããã¯ãã¬ãã·ã£ãŒã¯ãããŒã¿ãœãŒã¹ããã€ãã©ã€ã³ã®åŠçèœåãããéãããŒã¿ãçæãããšãã«çºçããŸãããã€ãã©ã€ã³ãå§åãããã®ãé²ãããã«ãããã¯ãã¬ãã·ã£ãŒåŠçã¡ã«ããºã ãå®è£ ããŸããRxJSã¯`throttle`ã`debounce`ã®ãããªãªãã¬ãŒã¿ãæäŸããŠããŸããHighland.jsã¯ãæ¬è³ªçã«ããã¯ãã¬ãã·ã£ãŒãåŠçãããã«ããŒã¹ã®ã¢ãã«ã䜿çšããŠããŸãã
- ããŒã¿æŽåæ§ã確ä¿ããïŒãã€ãã©ã€ã³å šäœã§ããŒã¿ã®æŽåæ§ã確ä¿ããããã«ãããŒã¿æ€èšŒãšã¯ã¬ã³ãžã³ã°ã®ã¹ããããå®è£ ããŸããæ€èšŒã©ã€ãã©ãªã䜿çšããŠãããŒã¿åãç¯å²ããã©ãŒãããããã§ãã¯ããŸãã
çµè«
ãã€ãã©ã€ã³æäœãçšããJavaScriptã®ã¹ããªãŒã åŠçã¯ããªã¢ã«ã¿ã€ã ããŒã¿ã管çã»å€æããããã®åŒ·åãªæ¹æ³ãæäŸããŸããRxJSãHighland.jsã®ãããªã©ã€ãã©ãªã掻çšããããšã§ã仿¥ã®ããŒã¿é§ååã®äžçã®èŠæ±ã«å¯Ÿå¿ã§ãããå¹ççã§ã¹ã±ãŒã©ãã«ããã€å ç¢ãªããŒã¿åŠçã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãããªã¢ã«ã¿ã€ã ããã·ã¥ããŒãã®æ§ç¯ãã»ã³ãµãŒããŒã¿ã®åŠçããœãŒã·ã£ã«ã¡ãã£ã¢ããŒã¿ã®åæãªã©ãã©ã®ãããªçšéã§ãããã¹ããªãŒã åŠçã¯äŸ¡å€ããæŽå¯ãåŸãŠãæ å ±ã«åºã¥ããæææ±ºå®ãè¡ãã®ã«åœ¹ç«ã¡ãŸãã
ãããã®æè¡ãšãã¹ããã©ã¯ãã£ã¹ãåãå ¥ããããšã§ãäžçäžã®éçºè ã¯ããªã¢ã«ã¿ã€ã ã®ããŒã¿åæãšå€æã®åãæŽ»çšãã驿°çãªãœãªã¥ãŒã·ã§ã³ãçã¿åºãããšãã§ããŸãã