ãã¯ã¿ãŒã»ã«ãµã³ããã ããšããšãã³ã¹ã¯åºèº«ã§ãGP Software.travelã§åããŠããŸãã
éå»5幎éãVictorã¯ïŒäž»ã«ïŒããã³ããšã³ãéçºã«æºãã£ãŠããŸããã ããŠãç§ãã¡ã®ã»ãšãã©ãããã§ããããã«ãjQueryããå§ããŸããã
次ã«ãããã¯ããŒã³ãè§åºŠv1ããããŸããã éå»6ãæéã圌ã¯Redux / React.jsã®ãããžã§ã¯ãã«åãçµãã§ããŸãïŒRxJSãšæ··åãããããšããããããŸãããããã¯å°ãç°ãªããŸãïŒã

è©Šè¬ã¯ãããžã§ã¯ãã§ç©æ¥µçã«äœ¿çšãããŠããŸãã ãããäœã§ãããã©ã®ããã«å§ãŸã£ãã®ã説æã§ããŸããïŒ RxBrainfuckãããã§ãªãããšãé€ããŠã誰ããRxJSãRxJavaãRxPythonãRxBasicãããèããŠããŸãã
å®éã以åã®ãããžã§ã¯ãã®1ã€ã¯ãRxJSã©ã€ãã©ãªã䜿çšããŠå®å šã«æµžéããŸããã ãã¹ãŠã®AJAXãªã¯ãšã¹ãã¯ãDOMã€ãã³ãã§åäœããéçããŒã¿ãåŠçããããšããããŸã-ãããã¯ãã¹ãŠRxJSãçµç±ããŸããã
ã¯ããã«ãããªã¢ã¯ãã£ãããã°ã©ãã³ã°ããªã©ã«ã€ããŠå°ã説æããŸãã ããšãã°ããåå¿æ§ãã®ããç掻ã®äžã§ãExcelã§åºãããããšããããŸãã

ã芧ã®ãšãããéé¡ãèªåçã«èšç®ããããã®æ°åŒãå«ãã»ã«ãäœæãããŸããã ãªã¢ã¯ãã£ãããã°ã©ãã³ã°èšèªã§ã¯ãããã¯2ã€ã®ããŒã¿ã¹ããªãŒã ïŒã°ãã¹ãšçšïŒãããã³3çªç®ã®ãããã¹ããªãŒã ãšããŠè¡šãããšãã§ããŸãã
éåžžã«äŸ¿å©ãªãªã³ã©ã€ã³ãšãã£ã¿ãŒã䜿çšããŠããã¹ãŠã®äŸã衚瀺ããŸãã ãã®ãšãã£ã¿ãŒã¯ããã©ãŠã¶ãŒã§ã¢ããªã±ãŒã·ã§ã³ã®çµæãçŽæ¥ã¬ã³ããªã³ã°ãããããåªããŠããŸãã ããŠãã©ãžãªãšãã£ã¿ãŒã®æãåªããæ©èœã¯ããã¹ãŠã®ã¹ãããããçŽæ¥ãªã³ã¯ããåŒãç¶ãå©çšã§ããããšã§ãã ç§ã®æåã®äŸã¯ãã¡ãã§ãã
var gross = Rx.Observable.just(5000) var taxes = Rx.Observable.just(13) var net = gross.combineLatest(taxes, (g, t) => g - t / 100 * g) net.subscribe(money => document.getElementById('out').value = money)
ã€ã³ã¿ãŒãããã§ã¯ãããªã¢ã¯ãã£ãããã°ã©ãã³ã°ãã®å®çŸ©ã«é¢ããå€ãã®ãªãã·ã§ã³ãèŠã€ããããšãã§ããŸããWikipediaã®Habreã«ãããŸãã ãããã¯ã¯æ·±å»ã§ã圌ã®ã¢ã€ãã¢ã«åæããã°çœ²åã§ããç¹å¥ãªãããã§ã¹ããããããŸããããªãã§ããïŒ å人çã«ã¯ãããããã¹ãŠã®å®çŸ©ãæ°ã«å ¥ããªãã®ã§ãèªåã§å®çŸ©ããŸããã
ãªã¢ã¯ãã£ãããã°ã©ãã³ã°ãšã¯ãã€ãã³ããåŠçããã®ã§ã¯ãªããã€ãã³ãã1ã€ãã€çµã¿åãããŠã¹ããªãŒã ã«ããããã ãã§äœæ¥ããå Žåã§ãã
ïŒæ¥ä»ã眲åãã·ãŒã«ïŒã

ãã®ãã¹ãŠãã©ã®ããã«çºçããã®ãã説æãããšãRxJSã®å€èŠ³ã®ã¹ããŒãªãŒã¯ãã®ããã«ãªããŸãã
2010幎ãã2011幎ã«ãããŠã.NETã§åããŠããMicrosoftã®é¢ä¿è ã¯ãJSçšã®ãªã¢ã¯ãã£ãã©ã€ãã©ãªãäœæããããšãè¯ããšå€æããŸããã å®éã.NET LINQã¯ããªãåãã人æ°ããããŸãã ããšãã°ãLINQã䜿çšããŠãæååå ã®ç¹å®ã®åèªã®åºçŸåæ°ãã«ãŠã³ãããæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
string searchTerm = "data"; //Convert the string into an array of words string[] source = text.Split(new char[] { '.', '?', '!', ' ', ';', ':', ',' }, StringSplitOptions.RemoveEmptyEntries); // Create the query. Use ToLowerInvariant to match "data" and "Data" var matchQuery = from word in source where word.ToLowerInvariant() == searchTerm.ToLowerInvariant() select word; // Count the matches, which executes the query. int wordCount = matchQuery.Count();
æåã®ããŒãžã§ã³ã®ã©ã€ãã©ãªã§äœæ¥ãéå§ã§ããã®ã¯å¹žéã§ããã ã³ãŒãã¯ãŸã GitHubã§ã¯ãªããMicrosoftç¬èªã®ãªããžããªã«ãããŸããã ããã«ãã©ã€ã»ã³ã¹ã®æ©èœã«ããããããžã§ã¯ãã«çž®å°ãããŠããªãããŒãžã§ã³ãå«ããããšã¯ã§ããŸããã§ããã ããã¥ã¡ã³ãã¯å€§ããªåé¡ã§ãããèšèªã®éãã«ããããããã.NETåãã«æžãããèšäºãèªã¿ãæŠå¿µã¬ãã«ã§ç解ããããšããå¿ èŠããããŸããã ãã®æãç§ã¯ã©ããªããã°ã©ãã³ã°èšèªã§ãæžãããšãã§ããããšã«æ°ã¥ããŸããã
RxJSã䜿çšãããšããã¢ã€ãã¢ãã©ã®ããã«ããŠæãã€ããã®ã§ããïŒ
åãããžã§ã¯ãã«ã¯ãç¹å®ã®ãã¯ãããžãŒã®éžæã«åœ±é¿ããç¬èªã®ç¹æ§ããããŸãã 解決çã¯ãã€ã³ã¿ãŒãã§ãŒã¹ã®è€éããäžè²«ããããŒããããã®æç¡ã«ãã£ãŠæ±ºå®ã§ããŸããããã¯ããããžã§ã¯ããå°ãªããšãæ°å¹Žéã¯çºå±ãè€éã«ãªãããšã瀺ããŠããŸãã 2012幎ã«ã¯ãRxJSã«äŒŒããã®ã¯ä»ã«èŠã€ãããŸããã§ããã è¯ãæè¡ãµããŒãã¯ç§ãã¡ã«ãšã£ãŠéèŠã§ããããã€ã¯ããœãããã©ã³ãã«è² ããŸããã
ãªããã®æç¹ã§RxJSãå¿ èŠãªã®ã§ããïŒ
å€ãã®ç¬ç«ããUIã³ã³ããŒãã³ããããã¢ããªã±ãŒã·ã§ã³ãæ³åããŠãã ããã
ããã§ãçŽ10件ã®APIãªã¯ãšã¹ããè¿œå ããŸãïŒèªèšŒãã補åã®äŸ¡æ Œç¢ºèªãŸã§ïŒã ããã«ãããŸãã
次ã«ããã¥ãŒå ã®ã³ã³ããŒãã³ããã°ã«ãŒãåããäžéšãç°ãªããã¥ãŒã§äœ¿çšãããäžéšã䜿çšãããªãããã«ããŸãã ããããããŸããã
次ã«ããªã¯ãšã¹ãéã§ç¶æ ãå€æŽããããã«ã³ã³ããŒãã³ãã«æããå¿ èŠããããŸãã 誀ã£ãèŠæ±ãè¿ããããšãã«ãã¹ãããŒã¬ã€ã€ãŒãã©ããã«è¡šç€ºããããŒã¿ãã©ããã«é衚瀺ã«ããŸãã ããã«ãã³ã³ããŒãã³ãã¯è€æ°ã®APIã«äŸåããå Žåããããããã«ãéèŠãªã®ã¯åäžã®ãªã¯ãšã¹ãã§ã¯ãªããäžé£ã®ãªã¯ãšã¹ããšãã®åçã§ããå ŽåããããŸãã ãããŠãç§ãã¡ã®ã±ãŒãã®æ¡-2012幎ã®è·¯äžã§ã¯ãAngularã¯ååšãããBackboneã¯é©åã§ã¯ãããŸãã-ããã¯ãjQueryã§ã®ã¿äœæ¥ããããšãæå³ããŸãã ãã¬ãŒã ã¯ãŒã¯ãªãã
RxJSã¯å®ç§ã«è¡ããŸããã åã ã®ã€ãã³ãããã£ããããã³ãŒã«ããã¯ã®å·šå€§ãªãã©ããããæ§ç¯ããããšãæ¢ããŸããã ã³ãŒã«ããã¯ããã®ãã©ãããã¯äœã説æããå¿ èŠããªãã®ã§ããããïŒ
代ããã«ãã³ã³ããŒãã³ãéã«ãç¹å®ã®ç¶æ³ã§å¿ èŠãªæ°ããã¹ããªãŒã ãäœæã§ããããŒã¿ãå«ãã¹ããªãŒã ããããŸããã ããšãã°ã補åãéžæã§ããã¹ããªãŒã ããããŸãã ãŠãŒã¶ãŒããã¹ã±ããã«äœããè¿œå ãããšãè¿œå ããã補åã®ã€ãã³ãããã®ã¹ã¬ããã«è¡šç€ºãããŸãã ãŠãŒã¶ãŒã補åãåé€ãããšã空ã®é åãæã€ã€ãã³ããã¹ããªãŒã ã«è¡šç€ºãããŸãã ãã¿ç®±ããäœããåãé€ããããã³ã«ãããŒãã«ãèµ€ãç¹æ» ãããããšããŸãïŒ
var cart = require('streams/cart') var removalsFromCart = cart .bufferWithCount(2,1) .where(history => history[1].length < history[0].length) removalsFromCart.subscribe(() => $('table').setClassFor1Sec('warning))
ã¹ãããããžã®ãªã³ã¯ã
.bufferWithCountïŒïŒã¯ãåã®ã€ãã³ããšçŸåšã®ã€ãã³ããåãåããããã«é åãæž¡ããŸãã .whereïŒïŒã§ã¯ãçŸåšã®ãã¹ã±ããïŒ.bufferWithCountã®åŸã®é åã®2çªç®ã®ãã¹ã±ããïŒã«å«ãŸããèŠçŽ ãåã®ãã®ããå°ãªãããšã確èªããŸãã æ¡ä»¶ãçã®å ŽåãããŒã¿ã¯.subscribeïŒïŒã¡ãœããã«æž¡ãããŸããããã¯ãã¹ããªãŒã å ã®åã€ãã³ãã®ç®æšã§ãã .whereïŒïŒã¡ãœããã䜿çšããªãå Žåããã¹ã±ãããå€æŽãããã³ã«ãŸã°ãããçºçããŸãã
ã ããããã®çç±ã¯ãŸãã«ãã®ãããªãã®ã§ããã ããªãã¯ã©ãæããŸããããããŠä»ã®ã©ã®ãããªçç±ã§ããããžã§ã¯ãã§äºåŸå¯Ÿå¿çãªã¢ãããŒãã䜿ãå§ããã®ãçã«ããªã£ãŠããŸããïŒ
æåã¯ããã¹ãŠã®ã€ãã³ããRx.Observableã«å€æŽããŸããã æéãçµã€ã«ã€ããŠããããåžžã«æ£åœåãããããã§ã¯ãªãããšã«æ°ä»ããŸããã ããšãã°ããã®ãã¿ã³ãã¯ãªãã¯ãããšããŒãžããªããŒããããããšã100ïŒ ç¢ºä¿¡ããŠããå ŽåãããŒãžã§è¿œå ã®å€æŽã¯å¿ èŠãããŸããã 次ã«ãRxJSã䜿çšããã«ããã®ãããªåçŽã§é¢ä¿ã®ãªãã€ãã³ããåŠçããŸãã
ããããå€ãã®ã€ãã³ãããã©ããŒããå¿ èŠããããšããã«ãRxJSã¯ããã§äžå¯æ¬ ã§ãã
ããšãã°ã倧éã®ããŒã¿ã¹ããªãŒã ãäœæããWebãœã±ããã«ããããšãã§ããŸãã
ãããã¯ã1ã€ã®èŠæ±ãåä¿¡ãããšãã«éå§ããæåŸã«æ¬¡ã®èŠæ±ãéå§ããå¿ èŠãããã¢ãã¡ãŒã·ã§ã³ã«ããããšãã§ããŸãã
ãããããããRxJSãç¹ã«æããçç±ã§ããããããã¹ãŠã®.whereïŒïŒã. bufferïŒïŒã. mapïŒïŒãªã©ã®ã¡ãœãããèšè¿°ããããã«ãããŒã¿ãœãŒã¹ãäœã§ãããã¯éèŠã§ã¯ãããŸããã é åãŸãã¯Webãœã±ããã§ã1ç§ããã100åã®ãªããžã§ã¯ããéä¿¡ãããã®åŸ1åéçªç¶åæ¢ããå¯èœæ§ããããŸãã ãããã®ã€ãã³ãã¯ãã¹ãŠç§ãã¡ã«ãšã£ãŠå¹³çã§ãããå¹³çã«æ±ãããŸãã
ãããŠããã¯ãéåæã®ãã®ãæŽçããŠãRxJSã䜿çšããŠå®å šã«åæããããŒã¿ã®åŠçãéå§ã§ããããšãæå³ããŸããããšãã°ããã¹ãŠã®å€éšãªã³ã¯ã倪åã§ããŒã¯ããŸãã
Rx.Observable.from(document.querySelectorAll('a')) .where(el => el.getAttribute('href').indexOf('http') === 0) .subscribe(el => el.style.fontWeight = 'bold')
ã¹ãããããžã®ãªã³ã¯ã
èŠçŽãããšãRxJSã¯ãå¿çãå¿ èŠãªå€§éã®ããŒã¿ãããŒãæã€ãããžã§ã¯ãïŒã²ãŒã ããã£ãããããŒãžã«äœããã®è€éãªæŽæ°ãããã·ã³ãã«ãªãµã€ãïŒã«æé©ã§ãã RxJSã¯Angular 2ã«å«ãŸããŠãããšæããŸãã
JSã«ã¯ä»ã«ã©ã®ãããªãœãªã¥ãŒã·ã§ã³ããããŸããïŒ
ããã«ããã€ãã®éžæè¢ãæãåºããŸãã ãŸããããã¯BaconJSã§ãã ã©ã€ãã©ãªã¯ãRxJSãšã»ãŒåæã«äœæãããŸããã èå³æ·±ãããšã«ãRxJSãšBaconã®ã©ã¡ãããéžæããããšãããããžã§ã¯ãã®1ã€ã§ãäž¡æ¹ã®ã©ã€ãã©ãªããªãªãŒã¹ãããã°ããã®çŽ4幎åã§ãã ããããBaconã¯æšæºã¡ãœããã®æ°ãšå šäœãšããŠããã·ã³ãã«ãªAPIã倱ã£ããããRxJSãéžæããŸããã ããŠãç§ãèšã£ãããã«ããã1ã€ã®éèŠãªèŠçŽ ã¯ãJuha Paananenã ããéçºãšãµããŒãã«æºãã£ãŠãããMicrosoftã¯RxJSã®åŸãã«ãããšããããšã§ãã åªããã³ãã¥ããã£ãæ¢ã«åœ¢æãããŠãããAPIãååã«ææžåãããŠãããå€ãã®åªãããµã³ãã«ãèŠã€ããããšãã§ãããããä»æ¥ãæããããšãªãBaconJSã䜿çšã§ããŸãã
次ã®éžæè¢ã¯KefirJSã§ãïŒJSã«ãã£ãŠè¿œå ãããŠããªãèšèªã®åèªããŸã ãããŸããïŒ:)ã åèã®Roman PominovããµããŒããããªã¢ã¯ãã£ãããã°ã©ãã³ã°ã®ããã®çŽ æŽãããã©ã€ãã©ãªã ãã®å°èª¬ã¯KefirJSãäœæãã BaconJSããAPIã®ã·ã³ãã«ããïŒRxJSãšæ¯èŒããŠïŒååŸããããã«ããã©ãŒãã³ã¹ãšã©ãŒãä¿®æ£ããããšããŸããã ãããŠãããªãã¯ç¥ã£ãŠããŸããããã¯ããŸããããŸããïŒ ããšãã°ããããžã§ã¯ãã®1ã€ã§æ¯æ¥kefirã䜿çšããŠããŸãã
ãã¹ãŠãæ¬åœã«ãã©è²ã§ããïŒ ãããã®ãã¬ãŒã ã¯ãŒã¯ããã®ãŸãŸäœ¿çšã§ããŸããïŒ
ãã¥ã¢ã³ã¹ããããŸãã
çŽ3幎åãäŒè°ã§RxJSã«ã€ããŠå ±åããåŸãããªã¢ã¯ãã£ãããã°ã©ãã³ã°ã䜿çšããã«ã¯èãæ¹ãå€ããå¿ èŠãããããšãæ£ããç解ããŸãããïŒããšå°ããããŸãããããã¯ãã¹ãŠã®å ±åã§æãæ£ãã質åã§ããã 芳客ã®ç®ã«ã¯éåžžã«é »ç¹ã«èªãŸããŸããããäžåºŠã ãå°ããããŸããã ããã«å¯ŸããçãïŒãã¯ãïŒã
察åŠçã¢ãããŒãã¯ãããã°ã©ã ã®äœæã«æ £ããŠããæ¹æ³ãšã¯å€§ããç°ãªããŸãã ããã§ãæåã«ã€ãã³ãã®ãã¹ãèšè¿°ããã³ãŒããäœæãããããã®ã€ãã³ããããã°ã©ã ã«å®è¡ããã ãã§ãå¿ èŠãªã¢ã¯ã·ã§ã³ãèªåçã«ããªã¬ãŒãããŸãã
ãããæåã®åé¡ã§ãã
2çªç®ã®åé¡ã¯ãç¹å®ã®å Žåã«ã©ã®æ¹æ³ãé©çšã§ããããç解ããããšãé£ããå Žåãããããšã§ãã ããšãã°ãäžéšã®ã¹ã«ã©ãŒããŒã¿ãã¯ãšãªã«å€æããŸããã ãµãŒããŒã¬ã¹ãã³ã¹ã«ã¢ã¯ã»ã¹ããæ¹æ³ RxJSã®ãã¹ãŠã®ã¡ãœããã®èª¬æãèªã¿ãããã«.switchïŒïŒãèšæ¶ããŠãããšããŸãããïŒã芳枬å¯èœãªã·ãŒã±ã³ã¹ã®èŠ³æž¬å¯èœãªã·ãŒã±ã³ã¹ããææ°ã®èŠ³æž¬å¯èœãªã·ãŒã±ã³ã¹ã®ã¿ããå€ãçæãã芳枬å¯èœãªã·ãŒã±ã³ã¹ã«å€æããŸãã...
ããã§ããã jsfiddleããªããã°ç解ã§ããŸããã
ããã«å¯ŸåŠããããšã¯å°é£ã§ããAPIã®ç¥èããã³ã¹ãããã³ãŒãã£ã³ã°ã«ååã§ã¯ãªãç¬éãçãæãå¿ èŠããããŸãã rxmarbles.comãããžã§ã¯ãã¯äŸ¿å©ã§ãããã®èè ïŒ AndréStaltz ïŒã¯ãããŒã¿ã®é åºãæçµã¹ããªãŒã ã«ã©ã®ããã«åœ±é¿ãããã远跡ããããã«äœ¿çšã§ããå€æ°ã®åçãªã¿ã€ã ãã£ãŒããäœæããŸããã ãã ããããã«ã¯.switchïŒïŒã¡ãœãããèŠã€ãããŸããã§ããã
幞ããªããšã«ãreactx.io/documentation/operators/switch.htmlããããŸããããã§ã¯ãäž»èŠãªã¡ãœãããšãã®ã¿ã€ãã³ã°å³ã®è©³çŽ°ã§äººéçãªèª¬æãèŠã€ããããšãã§ããswitchïŒïŒãå«ãïŒ

.switchïŒïŒã¡ãœããã¯ãã¹ããããã¹ããªãŒã ããããŒã¿ãè¿ãããšãããããŸãã ããã«éèŠãªããšã¯ããã¹ããããã¹ããªãŒã ããã®ããŒã¿ã¯ãæ°ãããã¹ããããã¹ããªãŒã ã衚瀺ããããŸã§åºåãããããã«ããŒã¿ãçæãããããšã§ããé»è²ã®äžè§åœ¢ã¯ãŸã 衚瀺ãããŠããŸããããé»è²ã®åã¯ééããŠããŸããã
ããã¯ãéåžžajaxã§äœæ¥ãããšãã«äœ¿çšããæ¹æ³ã§ããæ°ãããªã¯ãšã¹ããéä¿¡ããããšããã«ã以åã®ãªã¯ãšã¹ãããè¿ãããå¯èœæ§ã®ããããŒã¿ã«ã¯èå³ããªããªããŸãã ããã§ãå€ããµãŒããŒã®å¿çã¯è¡šç€ºãããªããªããŸãã
é©åãªã¹ãã«ãšæ¬²æ±ãããã°ãããã䜿çšããŠæ¬çªç°å¢ã§äœ¿çšããããšãéåžžã«å¯èœã§ãã ã©ãããå§ããŠãã©ã®ãªãœãŒã¹ãèªãããšãã§ããŸããïŒ
ä»æ¥ãå€ãã®ãªãœãŒã¹ããããŸãã ãã¹ãŠã®å¥œã¿ã«åãããŠããªãœãŒã¹ãžã®ãªã³ã¯ãå«ãå€æ°ã®ãªãœãŒã¹ããããŸãããããªã³ãŒã¹ã奜ããªäººãäŸä»ãã®ããã¥ã¡ã³ããèªãã®ã奜ããªäººã誰ãã«æ¬ãæž¡ã人ãªã©ã§ãã ç§ã¯ãã®ãªã¹ãããå§ããŸãïŒ
- egghead.io/series/introduction-to-reactive-programming-RxMarblesã®èè ã«ããåªããå ¥éã³ãŒã¹ã
- reactx.io/intro.html-RxJSã®èè ã«ããå€ãã®çè«ã
- www.reactivemanifesto.org-ãããã§ã¹ãïŒããããªãå ŽæïŒ;
- xgrommx.github.io/rx-book-RxJSãªããžããªããã®å€ãã®ããã¥ã¡ã³ãããããŸãããããšãã°ãRxJSã®BackpresureïŒããã³ãããã¯ãããã§ã¹ãã®äžéšã§ãïŒïŒã«é¢ããç¬èªã®åªããèšäºãå€æ°ãããŸãã
- www.introtorx.com-ååã®æ¬ã«å«ãŸããèšäºã®ã³ã¬ã¯ã·ã§ã³ïŒãµã€ãã«ã¯Kindleçšã®ç¡æã®mobiããŒãžã§ã³ããããŸãïŒã .NETã®ãã¹ãŠããã®æŠå¿µãç解ããããã®çŽ æŽãããèªã¿ç©ã§ããããšãæããªãã§ãã ããã .NETã¯TypeScriptãšéåžžã«ãã䌌ãŠããŸãã
- Habréã®FRPã¿ã°ã«é¢ããèšäºã
- ãããŠãrx.lite.jsãããžã§ã¯ãã«æ¥ç¶ããAjaxïŒãã§ããïŒãªã¯ãšã¹ããRx.Observableã«å€æããããšããå§ããããšããå§ãããŸãã
ã¡ãªã¿ã«ã holyjs.ruã®ã¬ããŒãã¯æºåãã§ããŠãããããã€ãã®ãã€ããŒãªæ¹åããããŸãã ã¬ããŒãã§ã¯ããããžã§ã¯ãã§ã®RxJSã®å®çšçãªäŸã«ã€ããŠèª¬æããŸãã 6æ5æ¥ã®äŒè°ã§ãµã³ã¯ãããã«ãã«ã¯ã§ãäŒãããŸãããïŒ