ç§ã®ååã¯Vitaliy Kotovã§ãBadooã§åããŠããŸãã 以åã®èšäºã® 1ã€ã§ããã¹ã¿ãŒãšéçºè ã®äž¡æ¹ãèªåãã¹ããšå¯Ÿè©±ããã®ã«åœ¹ç«ã€ç¹å®ã®ã€ã³ã¿ãŒãã§ã€ã¹ããããšè¿°ã¹ãŸããã
圌ã«ã€ããŠãã£ãšè©±ãããã«é ŒãŸããŸããã
ã«ããã®äžã§ãç§ã¯ïŒæçµçã«ïŒïŒãã®ã€ã³ã¿ãŒãã§ãŒã¹ãã©ã®ããã«æžãããäœãã§ãããã«ã€ããŠã話ããŸãã æ ¹ä»ããæ©èœãšãäœããã®çç±ã§è«æ±ãããŠããªãããšãå€æããæ©èœã«ã€ããŠèª¬æããŸãã ãããããããã€ãã®ã¢ã€ãã¢ã¯ããªãã«ãšã£ãŠé¢çœããã ãšæãããŸããããã®ãããªããã«ããŒãã«ã€ããŠãèããã§ãããã
ããããã¹ãŠå§ãŸã£ãæ¹æ³
ãããã£ãŠããã¹ãŠã¯Seleniumãã¹ãããå§ãŸããŸããã ãããã£ãŠãã€ã³ã¿ãŒãã§ãŒã¹ã®åå-Selenium Managerã çŸåšã§ã¯ã Smokeãã¹ããå®è¡ããããšãã§ããŸãã
ããæç¹ã§ããã¹ãã§å€ãã®ããšãã§ããããšã«æ°ä»ããŸããã ãŸããèµ·åæã«æå®ã§ããè¿œå ã®ããŒã®æ°ã«ãã£ãŠæããã«ãªãããã¹ãã¯äœããã®æ¹æ³ã§å®è¡ãããŸããã ãããã®ã»ãã®äžéšã次ã«ç€ºããŸãã
- ãã©ãããã©ãŒã -ãã¹ããå®è¡ãããã©ãããã©ãŒã ïŒéçºè
ãã·ã§ããããŸãã¯ã¹ããŒãžã³ã°ïŒã決å®ããŸãã äŒç€Ÿã§ã®ãã¹ãã®ã©ã®æ®µéã«ã€ããŠã¯ããã®èšäºã§èªãããšãã§ããŸãã
- ã¢ã㪠-ãã¹ããå®è¡ããã¢ããªã±ãŒã·ã§ã³ã決å®ããŸãã ãã¹ãã«ã¯PageObjectãšã¯å¥ã®ããžãã¹ããžãã¯ããå«ãŸããŠããªãããããã®ããŒã¯éåžžã«äŸ¿å©ã§ãã
- ãã©ãŠã¶ -ãã¹ããå®è¡ãããã©ãŠã¶ãèšå®ããŸãã
- ããŒã«ã« -ãã®ããŒãæå®ãããšããã¹ãã¯Seleniumãã¡ãŒã ã§ã¯ãªããããŒã«ã«ã§çºçããSeleniumãµãŒããŒã«ç§»åããŸãã
- ãã«ã -ãã®ããŒãæå®ãããšããã¹ããå®è¡ãã代ããã«ããã¹ãŠã®ããŒã®æ瀺ã衚瀺ãããŸãã :)
ãªã©ãªã©ã åèšã§ã25åã®ããŒãã«ãŠã³ãããŸããã ãŸãããã®ãã¡11åã«ã€ããŠãå€ã«3ã€ä»¥äžã®ãªãã·ã§ã³ãæå®ã§ããŸãã ããã¯éåžžã«å€ããããããã¹ãŠã念é ã«çœ®ãããããã«ãã³ãã³ããééãªã䜿çšãããã¯ãããŸããã§ããã
æåã®ããŒãžã§ã³
ã€ã³ã¿ãŒãã§ã€ã¹ã®æåã®ããŒãžã§ã³ã¯2014幎ã«ç»å ŽããŸããã ç§ã®èãã«ãããšã圌ã¯èšå®ããââãã¹ãŠã®å¯èœãªããŒãšå€ã解æãããã©ãŠã¶ã«å¯Ÿå¿ããHTMLèŠçŽ ã®ã»ãããæç»ããã ãã§ããã ãŠãŒã¶ãŒãå¿ èŠãªãã©ã¡ãŒã¿ãŒã®ã»ãããèšå®ãããget start commandããã¿ã³ãã¯ãªãã¯ãããšãç»é¢ã«å¯Ÿå¿ããè¡ã衚瀺ããã端æ«ã«ã³ããŒã§ããŸãã
å€æ¹ããããã¿ã€ãããæããããšãç§ã¯ãããã¿ããªã«èŠãã«è¡ããŸããã ãã¡ããã誰ããããããããã®ã€ã³ã¿ãŒãã§ã€ã¹ããããã«ãã¹ããå®è¡ã§ãããããããŸãããïŒããšçããŸããã ãã¡ãããããªãæåŸ ãããŠããŸãã
ç§ã¯ãã®ããã«èãå§ããŸãã...
ã€ã³ã¿ãŒãã§ã€ã¹ãããã¹ããå®è¡ãã
ãã¹ãã¯PHPã§æžãããŠããŸãã ãã©ã³ãã£ãŒããšããŠãPHPUnitã䜿çšããŸãã ã³ã³ãœãŒã«ãããã¹ããå®è¡ãããšããã¢ã€ãã¢ã¯ã次ã®ãšããã§ããå¿ èŠãªãã©ã¡ãŒã¿ãŒã»ãããèšå®ãããã¹ããæå®ãããã¹ãã³ãŒããå®è¡ããããµãŒããŒã«AJAXãªã¯ãšã¹ãã§éä¿¡ããŸãã
ãµãŒããŒåŽã§ã¯ã execã³ãã³ãã䜿çšããŠèµ·åãããã³ãã³ãã©ã€ã³ãçæãããŸãã ã³ãã³ããã³ã³ãœãŒã«ããåãé¢ãããšãå¿ããªãã§ãã ãããããããªããšããã¹ãèªäœãå®è¡ãããŠããéããexecãå®è¡ãããŸãã ããã¯å¿ èŠãããŸãã-ããã»ã¹ã®PIDã®ã¿ãååŸããå¿ èŠããããŸãã
ãã®ãããªãã®ïŒ
function launchTest($cmd, $logfile) { $cmd = escapeshellcmd($cmd); exec($command = 'sh -c "' . $cmd . '" > ' . $logfile . ' & echo $!', $out); if (count($out) !== 1) { die("Wrong launch command: {$command}"]); } return $out[0]; }
ã³ã³ããã¹ããããããããã«ããŸããã¹ãäžã«ãã°ãæžã蟌ããã°ãã¡ã€ã«ãäœæããŸãã
PIDãåãåã£ããããããšãåçŽãªsetIntervalãå®è¡ããã¯ã©ã€ã¢ã³ããžã®ãã°ãã¡ã€ã«ãžã®ãã¹ãè¿ããŸã ã Nç§ã«1åãã¯ã©ã€ã¢ã³ãã¯ãµãŒããŒãããã¯ãããã°ãã¡ã€ã«ãšPIDã¹ããŒã¿ã¹ã®çŸåšã®å 容ãåãåããŸãã PIDããªãå Žåã clearIntervalãåŒã³åºãããŸãã ãšãŠãç°¡åïŒ
var interval_id; function startPidProcessing() { interval_id = setInterval(self.checkPid, 4500); } function stopPidProcessing() { clearInterval(interval_id); interval_id = null; }
ãããã£ãŠããã¹ãã«åæ Œããé²æã確èªã§ããŸãã ãããŠããã€çµäºããããç¥ã£ãŠããŸãã
è€æ°ã®ãã¹ãã䞊è¡ããŠå®è¡ãã
2013幎ã«ãPHPUnitã¯ãã¹ãã䞊è¡ããŠå®è¡ã§ããŸããã§ããã ãããŠãããã§ãæ·±å»ãªåé¡ã§ãããããã§ããç§ãã¡ã¯éåžžã«å€ãã®Seleniumãã¹ããæã£ãŠããŠã1æé以äž1ã€ã®ã¹ããªãŒã ã«å ¥ãããšãã§ããŸããã ããããç§ã®ååã®ã€ãªã€ã»ã¯ãã£ããã¯ããŠããããã¹ãã§ãã®åé¡ãã©ã®ããã«è§£æ±ºãå§ãããã«ã€ããŠèšäºãæžããŸããã
ããããæçµçãªãœãªã¥ãŒã·ã§ã³ã¯Seleniumãã¹ãã«ã¯ããŸãé©ããŠããŸããã§ããã
æé©ãªãœãªã¥ãŒã·ã§ã³ã¯Selenium Managerã§ããã çµå±ã1ã€ã®ãã¹ããããããèµ·åã§ããå Žåãæ°ããã¿ããéããŠ2çªç®ã®ãã¹ããéå§ããŠã¿ãŸãããïŒ åè«ã§ã...
ããã¯åãã¿ãããå®è¡ã§ããŸãã ãããè¡ãã«ã¯ãåãã¹ãã®PIDã®ãªã¹ããã¯ã©ã€ã¢ã³ãåŽã«ä¿åãããµãŒããŒãžã®èŠæ±ã«å¿ããŠããããã¹ãŠãããŒãªã³ã°ããããããã®ã¹ããŒã¿ã¹ãè¿ãã ãã§ååã§ãã ãã°ãã¡ã€ã«ãåæ§ã§ãã
åæã«èµ·åãããã¹ãã®æ°ãã€ã³ã¿ãŒãã§ã€ã¹ã«èšå®ããæ©èœãè¿œå ããŸããã å®éãããã¯ãã¹ããå®è¡ãããã¹ã¬ããã®æ°ã§ãã ãã¹ãã®ç·æ°ãããã¹ã¬ãããå°ãªãå Žåããã¹ãã¯ãã¥ãŒã«å ¥ããããå®è¡äžã®ã¹ã¬ããã®1ã€ãå®è¡ãããã®ãåŸ ã¡ãŸãã
ãã£ã«ã¿ãŒããã³ã°ã«ãŒããã¹ãã®å®è¡
ããã¯ååã§ã¯ãããŸããã§ããã ããã§ãã¿ãŒããã«ãéããããããå¿ èŠãªãã¹ãŠã®ãã¹ããã¡ã€ã«ã«ãã¹ãã³ããŒããå¿ èŠããããŸããã ããã«ããã¡ã€ã«ãããã¹ãŠã®ãã¹ããå®è¡ããã®ã§ã¯ãªããäžéšã®ã¿ãå®è¡ãããå ŽåããããŸãïŒãã®ããã ãã£ã«ã¿ãŒãã©ã¡ãŒã¿ãŒã¯PHPUnitã«ååšããŸãïŒã
ãã®åé¡ã解決ããããã«ãã¯ã©ã¹åã®ã¿ãèšè¿°ããã::ãã䜿çšããŠãã£ã«ã¿ãŒãæå®ã§ããåçŽãªtextarea HTMLèŠçŽ ãã¯ã©ã€ã¢ã³ãäžã§äœæããŸããã ããšãã°ã次ã®ããã«ïŒ
ããã«äœããæžããããTeamCityããèœã¡ããã¹ãã®ãªã¹ããã³ããŒããããšãã§ããŸãã ãããã¯ãã¹ãŠãµãŒããŒã«éä¿¡ããã解æãããŸããã ããçµã¿åããããã®ãããªãã¹ããããã¯ã©ã¹ã®ååã®ããã«èŠãããã©ãããå€æããæ¹æ³ã¯ïŒ ãããŠããã®ã¯ã©ã¹ã§ãã¡ã€ã«ãžã®ãã¹ã決å®ããŠãã¹ããå®è¡ããŸããïŒ
ç§ã®æ¹æ³ã¯æ¬¡ã®ããã«ãªããŸããïŒ
public static function parseTestNames($textarea) { $parts = preg_split('/[,\s\n]+/', $textarea); $tests = []; foreach ($parts as $part) { $part_splited = explode('::', $part); $filter = $part_splited[1] ?? false; $testname = $part_splited[0]; if (is_file($testname)) { $testname = $filter ? $testname . '::' . $filter : $testname; $tests[] = $testname; } else { $found_tests = self::findPathByClassName($testname, $filter, $hard); foreach ($found_tests as $test) { $test = $filter ? $test . '::' . $filter : $test; $tests[] = $test; } } } $result = array_values(array_unique($tests)); return $result;
ã³ã³ãã³ããã¹ããŒã¹ãŸãã¯ãã€ãã³ã§åºåããŸãã 次ã«ãåããŒããé çªã«åŠçããŸãã ãã®äžã§ããŸããã£ã«ã¿ã®å€ãååŸããããã«ã::ãã®çµã¿åãããæ¢ããŸãã
次ã«ãæåã®éšåïŒã::ãèšå·ãŸã§ïŒãèŠãŠãã ããã ãã¡ã€ã«ãžã®ãã¹ãšããŠæå®ãããŠããå Žåã¯ãå®è¡ããŸãã ããã§ãªãå ŽåïŒããšãã°ãã¯ã©ã¹ã®ã¿ãæå®ãããå ŽåïŒãfindPathByClassNameã¡ãœãããå®è¡ããŸãããã®ã¡ãœããã¯ããã¹ããã©ã«ããŒå ã®ã¯ã©ã¹ã®ååã§æ€çŽ¢ããå¿ èŠãªãã¹ãè¿ãããšãã§ããŸãã
PHPUnitã«ã¯ããã¹ãã®ã°ã«ãŒããå°ããæ©èœããããŸãïŒè©³çŽ°ã¯ãã¡ã ïŒã ãããŠãããã«å¿ããŠããããã®ã°ã«ãŒããæå®ããŠãã¹ããå®è¡ããŸãã ãããã®ã°ã«ãŒãã¯ããããã®ãã¹ããã«ããŒãããµã€ãã®æ©èœã«é¢é£ä»ããããŠããŸãã å€ãã®å ŽåïŒãã¹ãŠã§ã¯ãããŸãããïŒå€ãã®ãã¹ããå®è¡ããå Žåã¯ãããã€ãã®ã°ã«ãŒãã«å¯ŸããŠãã¹ããå®è¡ããå¿ èŠããããŸãã
åãæ€çŽ¢ã䜿çšããŠå¯Ÿè©±çã«ååŸãããã°ã«ãŒãã®ãªã¹ããè¿œå ããŸãããã°ã«ãŒãã®ããã€ããéžæãããã¹ãšã¯ã©ã¹åãæå®ããã«ãã¹ããå®è¡ã§ããŸãã
ã°ã«ãŒãã§ãã¹ããå®è¡ããããã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯æ¬¡ã®ããã«ãªããŸãã
ããã§ãã°ã«ãŒããŸãã¯ãããã®ãã¹ãã®ååã®ãªã¹ãã§ãã¹ããå®è¡ã§ããŸãã
å®è¡äžã®ãã¹ãèªäœã¯æ¬¡ã®ããã«ãªããŸãã
ãã¹ããæ¢ã«å®è¡ãããŠããå Žåã¯ãé»è²ã§ããŒã¯ãããŸãã ç·-æåããå Žåãèµ€-èœã¡ãå Žåã éè²ã¯æåãããã¹ãã瀺ããŸããããã®äžã«ã¯ã¹ãããããããã¹ãããããŸãã
ã»ã«å ã«ã¯éåžžã®ãã°ããããPHPUnitãä»ããŠãã¹ããéå§ãããšè¡šç€ºãããŸãã
ãã¹ããæåãããã©ããã®å€æã¯ãæ£èŠè¡šçŸã䜿çšããŠã¯ã©ã€ã¢ã³ãåŽã§éåžžã«ç°¡åã«å®è¡ã§ããŸãã
function checkTestReport(reg_exp) { let text = $(cell_id).html(); let text_arr = text.split("\n"); if (text_arr[0].search('PHPUnit') != -1) { return reg_exp.test(text_arr[2]); } else { return -1; } } this.isTestSuccessful = function(cell_id) { return checkTestReport(/^[\.]+\s/); }; this.isTestSkipped = function(cell_id) { return checkTestReport(/^[\.SI]+\s/); };
ããã¯ãæããã©ãŒã«ããã¬ã©ã³ããªãœãªã¥ãŒã·ã§ã³ã§ã¯ãããŸããã ããæ¥PHPUnitã®äœ¿çšãåæ¢ããå ŽåããŸãã¯åºåè¡ãå€§å¹ ã«å€æŽãããå Žåãã¡ãœããã¯åäœãåæ¢ããŸãïŒã-1ããšããåçãåãåãããšã§ããã®ããšã確èªã§ããŸãïŒã ããããã©ã¡ããè¿ãå°æ¥ã«çºçããå¯èœæ§ã¯ãããŸããã
ã¯ã©ãŠãã§ãã¹ããå®è¡ãã
ãã¹ããå®è¡ããããã®ã€ã³ã¿ãŒãã§ã€ã¹ãäœæããŠããéãã·ã§ããã®ãã¹ãã®å®è¡ãç©æ¥µçã«éå§ããŸããã TeamCityã§ã¯ãå¿ èŠãªã ããã¹ããå®è¡ããã®ã¯ç°¡åã§ã¯ãªãããšãããããŸããã ååãªãšãŒãžã§ã³ãã¯ãããŸããããé«äŸ¡ã§ãã
次ã«ããã¹ãã®éå§ããã¯ã©ãŠããã·ã¹ãã ã«ç§»è¡ããŸããã 圌女ã«ã€ããŠã¯ã次å詳现ãªèšäºãæžããããããŸããã ãããŸã§ã®éããã®ã·ã¹ãã ã¯ãã¯ã©ãŠããã§ããããããã°ãåéããã®ã¯åé¡ããããšããäºå®ã«çŠç¹ãåœãŠãŸãã
å®è¡ã®æåŸã«ãã¹ããçµæã®èšé²ãéå§ããåçŽãªMySQLã¿ãã¬ãããäœæããŸããããã¹ãã¯æåãŸãã¯å€±æãããšã©ãŒãç¶ç¶æéãªã©ãç¶ããŸãã
ãã®è¡šã«åºã¥ããŠãSelenium Managerã®å¥ã®ã¿ãã§ãã·ã§ããã®ååã§å®è¡ã®çµæãæç»ãå§ããŸããã èœã¡ããã¹ããã€ã³ã¿ãŒãã§ã€ã¹ããçŽæ¥åéããæ©èœïŒãã¹ããæ£åžžã«åæ Œãããšãèœã¡ããã¹ãã®ãªã¹ãããæ¶ããŸãïŒãŸãã¯ãã®ãã¹ããåããšã©ãŒã§ä»ã®ã·ã§ããã§ã¯ã©ãã·ã¥ãããã©ããã確èªããŸãïŒãšã©ãŒãã¬ãŒã¹ã«ãã£ãŠæ±ºå®ãããŸãïŒïŒ
ãšã©ãŒã®ã¿ã€ãïŒåããã¬ãŒã¹ïŒã§ãã¹ããã°ã«ãŒãåããããã¢ã«ãã¡ãããé ã«äžŠã¹ãããšãã§ããŸãã
調æ»ã·ã¹ãã
äžèšã®ããŒãžã«å ããŠãããå°ã詳ãã説æããããšæããŸãã ããã¯èª¿æ»ããŒãžã§ãã éèŠãªã¿ã¹ã¯ããã€ããŒãã°ã§ãã¹ãã«å ¥ãããšããããŸãã ãŠãŒã¶ãŒã«åœ±é¿ãäžããªãJSãšã©ãŒãèšããŸãã ãã®ãããªã¿ã¹ã¯ãããŒã«ããã¯ããããšã¯å®çšçã§ã¯ãããŸããã 次ã®ããã«é²ã¿ãŸãããã°ãã±ãããéçºè ã«çœ®ããã¿ã¹ã¯ãããã«ã¹ãããããŸãã
ããããã¹ããŒãžã³ã°ãšã·ã§ããã®äž¡æ¹ã«æ£çŽã«ãªããç掻ã劚害ãããã°ãè©°ãŸããããã¹ããã©ãããã°ããã§ããïŒ ç§ãã¡ã¯ããããªãèœã¡ãã®ããç¥ã£ãŠãããã¿ã¹ã¯ãå®äºãããŸã§ãããèœã¡ç¶ããããšãç¥ã£ãŠããŸãã ãããå®è¡ããŠæåŸ ãããçµæãåŸãã®ã«æéã®äŸ¡å€ã¯ãããŸããïŒ
ç§ã¯æ¬¡ã®æ¹æ³ã§åé¡ã解決ããããšãå¯èœã§ãããšæ±ºããŸããïŒåãMySQLã§ãã¹ãŠãã¿ãã¬ãããäœæãããã®ã¿ãã¬ããã«ã€ã³ã¿ãŒãã§ãŒã¹ãä»ããŠãã±ããã®ãã¹ããè¿œå ãããŸãã
éå§åã®ãã¹ãã¯ãã®ãªã¹ããåãåãããã®ååãšãªã¹ãã®ååãæ¯èŒããŸãã ãã¹ããèµ·åããå¿ èŠããªãå Žåããã°å ã®å¯Ÿå¿ããã¿ã¹ã¯ã§ã¹ãããæžã¿ãšããŠããŒã¯ãããŸãã
ãŸããçå ã®çå ã«è¡ããã¿ã¹ã¯ã®ãªã¹ããåãåãããããã®ã¹ããŒã¿ã¹ã«ã€ããŠJIRAïŒãã°è¿œè·¡ã·ã¹ãã ïŒã«è¡ãç°¡åãªã¹ã¯ãªãããæžããŸããã ã¿ã¹ã¯ãéãããããšã調æ»ããŒãã«ã®ãšã³ããªãåé€ããããã¹ããèªåçã«éå§ãããŸãã
Selenium Managerã§ä»ã«ã§ããããš
äžèšã«å ããŠãSelenium Managerã«ã¯ãèå³æ·±ãåçã«åœ¹ç«ã€ãã®ããããããããŸãã
ããšãã°ãçŸåšã®ãã«ãã®ãã¹ãŠã®ã·ã§ããã®ãªã¹ããååŸããããããã«å¯ŸããŠæå®ããããã¹ããå®è¡ããŸãã ããã¯ããã¹ããã¹ããŒãžã³ã°ã§èœã¡å§ãããšãã«éåžžã«åœ¹ç«ã¡ãæãšç®ã§æ眪ã®ãã±ããã決å®ããããšãã§ããŸããã§ããã
äžå®å®ãªãã¹ãã®ãªã¹ããšæãäžè¬çãªãšã©ãŒïŒç°ãªããã¹ãã®å ŽåïŒã衚瀺ãããè¡šã®ããããŒãžããããŸãã ãã¹ãã®é åºãä¿ã€ã®ã«åœ¹ç«ã€ãããèªååãšã³ãžãã¢ã«ãšã£ãŠäŸ¿å©ã§ãã Seleniumãã¹ãã¯ãä»ã®UIãã¹ããšåæ§ã«ãå®çŸ©äžäžå®å®ã§ããããããæ£åžžã§ããããšãå¿ããªãã§ãã ããã ããããããããå®å®ãããããã«æããæªãããã¹ãã®çµ±èšãååŸããããšã¯è¯ãããšã§ãã
åãã¹ãã®å察åŽã«ãããã®ãã¬ãŒãã«ã¯ãã¯ã³ã¯ãªãã¯ã§ãã¹ããå®å®ãããããã®ãã±ãããäœæããã³è»¢éã§ãããã¿ã³ããããŸãã ãã±ãããžã®ãªã³ã¯ã¯ããŒãã«ã«æ®ãããã誰ãããã§ã«ãã¹ããè¡ã£ãŠããå Žåã¯è¡šç€ºãããŸãã
次ã®ããã«ãªããŸãã
Seleniumãã¡ãŒã ããŒãã®ã°ã©ãã£ãã¯ãååšããããŒãžããããŸãã èªååãšã³ãžãã¢ã®Artyom Soldatkinã¯ãSeleniumã«ããããé©çšããæ¹æ³ã«ã€ããŠæ¢ã«èª¬æããŠãããããHTTPãªã¯ãšã¹ãã«ããããããã®ãã©ãŠã¶ãŒãšããŒãžã§ã³ã§ã°ã«ãŒãåãããç¡æã®ãã©ãŠã¶ãŒã®æ°ã«é¢ããããŒã¿ãååŸã§ããŸãã 詳现ã«ã€ããŠã¯ãã¡ããã芧ãã ãã ã
Seleniumãã¡ãŒã ã«ç§»åããMySQLã¿ãã¬ããã«æããããã§ãã®æ å ±ãåéããç°¡åãªã¹ã¯ãªãããäœæããŸããã ã¯ã©ã€ã¢ã³ãåŽã§ã¯ã plotly.jsã䜿çšããŠããã®ããŒã¿ã«åºã¥ããŠã°ã©ããæç»ããŸããã
次ã®ããã«ãªããŸãã
ãããã£ãŠããã¹ãŠã®ããŒãºã«ååãªèœåããããã©ããã確èªããæ©äŒããããŸãã :)
æ ¹ä»ããªãã£ãæ©èœ
ã»ãšãã©ã®å Žåãè©ŠããŠã¿ããŸã§æ©èœã圹ç«ã€ãã©ãããäºåã«èšãããšã¯ã§ããŸããã äžèŠæçšãªã¢ã€ãã¢ã䞻匵ãããªãå ŽåããããŸãã
ããšãã°ã誰ããç¹å®ã®ãã¹ããŸãã¯ãã¹ãã®ã°ã«ãŒãã«ãµãã¹ã¯ã©ã€ãã§ããããŒãžããããŸããã ãããã®ãã¹ããã¹ããŒãžã³ã°ã«è©²åœãå§ãããšããã¹ãŠã®çœ²åè ããã£ããã§éç¥ãåãåããŸããã
åœåãæåãã¹ã¿ãŒèªèº«ããã¹ãã®ã¹ããŒã¿ã¹ãç£èŠããå Žåãããã¯éçºãŸãã¯ã·ã§ããã§å®å šã«ãã¹ãã§ããªãã¿ã¹ã¯ã«åœ¹ç«ã€ãšèããããŠããŸããã 眲åããããšã§ã圌ã¯èª¬æã«é©åãããã¹ãã®ã°ã«ãŒããã¹ããŒãžã³ã°ã§å£ããã¿ã¹ã¯ã«ããã€ãã®åé¡ãããããšãç解ã§ããŸããã
å®éããã¹ãã®ã°ã«ãŒããäºæž¬ããããšã¯å°é£ã§ããããšãå€æããŸããã ã»ãšãã©ã®å Žåãå€ãã®äžå¿ èŠãªéç¥ãæ¥ãŸããããèœã¡ããã¹ãã¯ä»ã®ã°ã«ãŒãããã®ãã®ã ã£ããããå¿ èŠãªéç¥ãå±ããªãããšããããŸããã
ãã®çµæãåã®ã¹ããŒã ã«æ»ããèªååãšã³ãžãã¢èªèº«ããã¹ãéšéã®æ åœè ã«åé¡ãããããšãéç¥ããŸããã
ãŸãšã
ã€ã³ã¿ãŒãã§ã€ã¹ã¯ãã¹ãããã»ã¹ã«æ£åžžã«çµ±åãããŸããã ããã§ãä»»æã®ãã©ã¡ãŒã¿ãŒã䜿çšããŠãã¹ããç°¡åãç°¡åãè¿ éã«å®è¡ãããã®å®å®æ§ãšèªåãã¹ãã·ã¹ãã å šäœãç£èŠã§ããŸãã
äžè¬çã«ãã³ã³ãœãŒã«ããéããããšãã§ããããšãå¬ããæããŸãã äœãæªãããšãããããã§ã¯ãªããåã«ãã®å Žåã®ã€ã³ã¿ãŒãã§ãŒã¹ã䟿å©ã«è²»ããããšãã§ããå€ãã®æéãç¯çŽããããã§ãã
ããããã©ã®ãããªçµè«ãåŒãåºãããšãã§ããŸããïŒ ããŒã«ã䜿çšããŠäœæ¥ãæé©åããç°¡çŽ åããŸã-ãããŠãããªãã¯å¹žãã«ãªããŸãã
ãæž èŽããããšãããããŸããã