ãããããaptã䜿çšããŠRubyããã±ãŒãžã管çããã®ã¯è¯ãèãã§ã¯ãªãçç±ããã§ã«ããã€ããæã¡ã§ãããã ãã·ã¹ãã ããã±ãŒãžãããŒãžã£ãŒãšããã°ã©ãã³ã°èšèªã®ããã±ãŒãžãããŒãžã£ãŒã¯ããŸã£ããç°ãªããã®ã§ãã ãã¹ãŠã®ããã±ãŒãžã®äžå€®é åžã¯çŽ æŽãããã§ãããGitHubã«æçš¿ãããã»ãšãã©ã®ã©ã€ãã©ãªã«ã¯ãŸã£ããé©ããŠããŸããã éäžåããããã±ããé ä¿¡ãé ãããã ãã¹ãŠã®ããã°ã©ãã³ã°èšèªã¯ç°ãªã£ãŠããããã®ã³ãã¥ããã£ã¯äºãã«å¯Ÿè©±ããŸããã ãã®ãããªããã±ãŒãžãããŒãžã£ãŒã¯ããã±ãŒãžãã°ããŒãã«ã«ã€ã³ã¹ããŒã«ãã䜿çšããã©ã€ãã©ãªã®ããŒãžã§ã³ã管çããããšèããŠããŸããããããã®æ¬ ç¹ã¯ç¢ºãã«ãã®ãœãªã¥ãŒã·ã§ã³ã«ååšããŸãã ãããã圌ãã¯ããããã¹ãŠã®åé¡ã®æ¬è³ªãéããŠããŸãã
åºæ¬çãªåé¡ã¯ãããŸããŸãªããã°ã©ãã³ã°èšèªã®ããã±ãŒãžãããŒãžã£ãŒãåæ£åãããŠããããšã§ãã
ãã®åæ£åã¯ãããã±ãŒãžãããŒãžã£ãŒã®å®çŸ©ã«ãå«ãŸããŠããŸããããã¯ãã€ã³ã¹ããŒã«æã«ããŒã«ã«ã§å©çšã§ããªãã£ããªã¢ãŒããœãŒã¹ããããã°ã©ã ãšã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããããã°ã©ã ã§ãã çæ³çãªäžå åãããããã±ãŒãžãããŒãžã£ãŒãæ³åããŠãããã®ã©ã€ãã©ãªã®ã³ããŒã¯2ã€ãããŸãã1ã€ã¯ãµãŒããŒäžã®ã©ããã«ã2ã€ç®ã¯ãã®ã©ã€ãã©ãªã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãäœæããããã°ã©ããŒã«ããŒã«ã«ã«é 眮ãããŸãã ãã ããå®éã«ã¯ãã©ã€ãã©ãªãšã³ã·ã¹ãã ã¯æçåã®åœ±é¿ã倧ããåããŸããããŸããŸãªéçºè ãäœæããå€ãã®ã©ã€ãã©ãªãçµ±åãããŸãã ãã¡ããããã¹ãŠã®ã©ã€ãã©ãªã1ãæã§ããŒãããŠã€ã³ããã¯ã¹ãäœæã§ããŸãããããã¯ã©ã€ãã©ãªã®äœæè ãä»ã®ãŠãŒã¹ã±ãŒã¹ãç¥ã£ãŠããããšãæå³ãããã®ã§ã¯ãããŸããã ãããŠãPerlã®äžçã§DarkPANãšåŒã°ãããã®ãå ¥æããŸãïŒååšãããšæãããç¡æ°ã®ã³ãŒãã§ãããããã¯ãããã©ã€ãšã¿ãªã³ãŒãã®ã©ããã«é ç·ãããŠããããäŒæ¥ã®ã©ããã§åäœããããããµãŒããŒã åæ£åã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãŠã®ã³ãŒããå®å šã«å¶åŸ¡ããå Žåã«ã®ã¿ãã€ãã¹ã§ããŸãã ãããããã®å Žåãããã±ãŒãžãããŒãžã£ãŒã¯å¿ èŠãªãã§ãããã ïŒãšããã§ãç§ã®ååã¯ãããã¯Windowsãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãGoogle Chromeãã©ãŠã¶ãŒãªã©ã®å€§èŠæš¡ãããžã§ã¯ãã«ã¯å¿ é ã§ãããšèšã£ãŠããŸãããïŒ
åæ£ã·ã¹ãã ã¯è€éã§ãã çå£ã«ãéåžžã«è€éã§ãã ãã®ãããªã·ã¹ãã ã®ã¢ãŒããã¯ãã£ãæ éã«æ€èšããªããšãäŸåé¢ä¿ã®å°çãäºæ³ãããŸãã ãã®åé¡ã«å¯Ÿãããæ£ããã解決çã¯ãããŸãããç°ãªãäžä»£ã®ããã±ãŒãžãããŒãžã£ãŒã䜿çšãããã®åé¡ã解決ããããã«ãå°ãªããšã3ã€ã®ç°ãªãã¢ãããŒããæããããšãã§ããããããã«é·æãšçæããããŸãã
ãããã³ã°å¯èœãªããŒãžã§ã³ã ããããæã人æ°ãããã®ã¯ãéçºè ã䜿çšããããã±ãŒãžã®ããŒãžã§ã³ãå³å¯ã«ç€ºãå¿ èŠããããšããæèŠã§ãã ãã®ã¢ãããŒãã¯ãRubyã®BundlerãPHPã®ComposerãPythonã®virtualenvãšçµã¿åãããpipãããã³ãã®ä»ã®ã€ã³ã¹ãã€ã¢ãããRuby / node.jsã¢ãããŒãïŒããšãã°ãGradle for JavaãŸãã¯Cargo for RustïŒãªã©ã®ãããŒãžã£ãŒã«ãã£ãŠæšé²ãããŠããŸãã ãããã®ã¢ã»ã³ããªã®åäœæãããŒã«ãæ¯é ããŸã-ãããã®ããã±ãŒãžãããŒãžã£ãŒã¯ãããŒãžã§ã³ãä¿®æ£ãããšããã«ããã±ãŒãžã®ãšã³ã·ã¹ãã å šäœãååšããªããªããšåçŽã«ä»®å®ããŠãåæ£ã®åé¡ã解決ããŸãã ãã®ã¢ãããŒãã®äž»ãªå©ç¹ã¯ãã³ãŒãã§äœ¿çšããã©ã€ãã©ãªã®ããŒãžã§ã³ãæå®ã§ããããšã§ãã ãã¡ãããããããã€ãã¹ã§ãããããã®ã©ã€ãã©ãªã®ããŒãžã§ã³ãåžžã«ç®¡çããå¿ èŠããããŸãã éåžžãããŒãžã§ã³ã¯åã«ä¿®æ£ãããéèŠãªã»ãã¥ãªãã£æŽæ°ããã°ã©ã ãå ¬éãããŠãããããã¯å®å šã«å¿ããããŸãã ãã¹ãŠã®äŸåé¢ä¿ã®ããŒãžã§ã³ãæŽæ°ããã«ã¯éçºãµã€ã¯ã«ãå¿ èŠã§ããããã®æéã¯ã»ãšãã©ã®å Žåä»ã®ããšã«è²»ããããŸãïŒããšãã°ãæ°ããæ©èœã®éçºïŒã
å®å®ããããŒãžã§ã³ã ããã±ãŒãžç®¡çã®ããã«ãåã ã®ã¢ããªã±ãŒã·ã§ã³éçºè ããã¹ãŠã®äŸåé¢ä¿ãææ°ã®ç¶æ ã«ç¶æããããã«æéãšåŽåãè²»ãããã¢ããªã±ãŒã·ã§ã³ããã³çžäºã«æ£ããåäœãç¶ããããšã確èªããå¿ èŠãããå Žåããã®äœæ¥ãéäžåããæ¹æ³ã¯ãããŸããïŒ ããã«ãããå¥ã®ã¢ãããŒããå¯èœã«ãªããŸããæ¿èªæžã¿ã®ããã±ãŒãžãé£æºããŠåäœããéäžãªããžããªãäœæããäžäœäºææ§ãç¶æããªãããã°ä¿®æ£ãšã»ãã¥ãªãã£æŽæ°ãçºè¡ããŸãã ããŸããŸãªããã°ã©ãã³ã°èšèªã«ã€ããŠããã®ãããªããã±ãŒãžãããŒãžã£ãŒã®å®è£ ããããŸãã ç§ãç¥ã£ãŠããå°ãªããšã2ã€ã¯ãPythonçšã®AnacondaãšHaskellçšã®Stackageã§ãã ããããããèŠããšã ãŸã£ããåãã¢ãã«ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ããã±ãŒãžãããŒãžã£ãŒã§äœ¿çšãããŠããããšãããããŸãã ã·ã¹ãã 管çè ãšããŠããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãªããžããªã§é åžãããã©ã€ãã©ãªããŠãŒã¶ãŒã«åªå ãããããšããå§ãããŸãã OSã®æ°ãããªãªãŒã¹ããŒãžã§ã³ã«åãæ¿ãããŸã§ãäžäœäºææ§ã倱ãããããšã¯ãããŸãããåæã«ãåžžã«ææ°ã®ãã°ä¿®æ£ãšã»ãã¥ãªãã£ã¢ããããŒãã䜿çšããŸãã ïŒã¯ããæ°ããããŒãžã§ã³ã®æ©èœãå©çšããããšã¯ã§ããŸããããããèªäœã¯å®å®æ§ã®æŠå¿µã«åããŠããŸããïŒ
åæ£åãæ€èšããã ãããŸã§ã¯ãåæ£åã容èªã§ããã¢ãããŒããšã¯ã¿ãªããªãããã«ããŸããã 圌ãã¯ãäžå€®ãªããžããªã®å¿ èŠæ§ãšéçºè ã«ããæŽæ°ã®å¶åŸ¡ã«ã€ããŠè©±ããŸããã ããããç§ãã¡ã¯èµ€ã¡ããã«æ°Žããããªãã®ã§ããïŒ éäžåã¢ãããŒãã®äž»ãªæ¬ ç¹ã¯ããã¹ãŠã®ããã±ãŒãžã®å®å®ããåäœãä¿èšŒãããããã®ããã±ãŒãžãææ°ã®ç¶æ ã«ä¿ã€ããã«è¡ãå¿ èŠãããèšå€§ãªéã®äœæ¥ã§ãã ããã«ã絶察ã«ãã¹ãŠã®ããã±ãŒãžãçžäºã«äºææ§ããããšã¯èª°ãæåŸ ããŠããŸããããããã§ãç¹å®ã®ã«ããŽãªã®ããã±ãŒãžãä»ã®ããã±ãŒãžãšäœ¿çšããããšã劚ããŸããã çæ³çãªåæ£ã·ã¹ãã ã§ã¯ããã®ã·ã¹ãã ã«åå ãããã¹ãŠã®äººãã©ã®ããã±ãŒãžãé£æºãããããšãã§ãããã決å®ããã¿ã¹ã¯ãã·ããããŸããããã«ãããåºæ¬çãªçåãçããŸããåäœããåæ£ããã±ãŒãžãããŒãžã£ãŒã®ãšã³ã·ã¹ãã ãã©ã®ããã«äœæã§ããŸããïŒ
ããã«ç§ãã¡ãå©ããããšãã§ããããã€ãã®ååããããŸãïŒ
- äŸåé¢ä¿ã®å³å¯ãªã«ãã»ã«åã äŸåé¢ä¿ã®å°çããããªã«æœãã§ããåé¡ã«ããŠããçç±ã®1ã€ã¯ãããã±ãŒãžã®äŸåé¢ä¿ãã³ã¢APIã®äžå¯æ¬ ãªéšåã§ããããšãå€ãããšã§ãããããã£ãŠãäŸåé¢ä¿ã®éžæã¯ã¢ããªã±ãŒã·ã§ã³å šäœã«åœ±é¿ããã°ããŒãã«ãªéžæã®å€ãã§ãã ã©ã€ãã©ãªãå éšã§äŸåé¢ä¿ã䜿çšãããã®éžæããã®ã©ã€ãã©ãªã®å éšå®è£ ã®è©³çŽ°ã«ãã£ãŠã®ã¿å®å šã«æ±ºå®ãããå Žåãã°ããŒãã«ãªå¶éã«ã€ãªããã¹ãã§ã¯ãããŸãã ã NPM for NodeJSã¯ããã®ååãè«ççãªéçãŸã§åŒãäžããŸããããã©ã«ãã§ã¯ãäŸåé¢ä¿ã®éè€ãå¶éãããåã©ã€ãã©ãªãäŸåããã±ãŒãžã®ç¬èªã®ã€ã³ã¹ã¿ã³ã¹ãããŒãã§ããããã«ããŸãã ç§ã¯çµ¶å¯Ÿã«ãã¹ãŠã®ããã±ãŒãžãè€è£œãã䟡å€ããããšã¯æããŸãããïŒããã¯Javaã®Mavenãšã³ã·ã¹ãã ã§èŠã€ãããŸãïŒããã®ã¢ãããŒããäŸåé¢ä¿ã®æ§æå¯èœæ§ãé«ããããšã«åæããŸãã
- ã»ãã³ãã£ãã¯ããŒãžã§ãã³ã°ã®ä¿é²ã åæ£ã·ã¹ãã ã§ã¯ãã©ã€ãã©ãªéçºè ãã©ã€ãã©ãªã«é¢ããã§ããã ãæ£ç¢ºãªæ å ±ãæäŸããããã±ãŒãžãæäœãããŠãŒã¶ãŒãšãŠãŒãã£ãªãã£ãæ å ±ã«åºã¥ããææ決å®ãè¡ããããã«ããããšãç¹ã«éèŠã§ãã ç°ãªãããŒãžã§ã³åœ¢åŒãšããŒãžã§ã³ç¯å²ã¯ããã§ã«é£ããã¿ã¹ã¯ãè€éã«ããŠããã ãã§ãïŒä»¥åã®æçš¿ã§æžããããã«ïŒã ã»ãã³ãã£ãã¯ããŒãžã§ã³ã䜿çšããæ©äŒãããå ŽåããŸãã¯ã»ãã³ãã£ãã¯ããŒãžã§ã³ã®ä»£ããã«ãã€ã³ã¿ãŒãã§ãŒã¹ã§åã¬ãã«ã®äŸåé¢ä¿ã瀺ãããé©åãªã¢ãããŒãã䜿çšããå Žåã¯ããŠãŒãã£ãªãã£ã§ããé©åãªéžæãè¡ãããšãã§ããŸãã åæ£ã·ã¹ãã ã®æ å ±ã®ããŽãŒã«ãã¹ã¿ã³ããŒããã¯ãããã±ãŒãžAã¯ããã±ãŒãžBãšäºææ§ããããŸããã§ããããã®æ å ±ã¯åæãéåžžã«é£ããïŒãŸãã¯ãåçãªåä»ããè¡ãã·ã¹ãã ã§ã¯äžå¯èœïŒããšããããããŸãã
- ç¹å¥ãªæ©äŒã®ããã®éäžåã åæ£ã·ã¹ãã ã®ååã®1ã€ã¯ãååå è ãèªåã«æé©ãªç°å¢ãåéã§ããããšã§ãã ããã¯ãäžå€®ã®ãœãŒã¹ãéžæããããç¬èªã®ãœãŒã¹ãäœæããã³äœ¿çšããéã®ç¹å®ã®èªç±-ç¹å¥ãªå Žåã®äžå€®éæš©åãæå³ããŸãã ãŠãŒã¶ãŒããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§äœ¿çšãããã¹ã¿ã€ã«ã§ç¬èªã®ãªããžããªãäœæãããšæ³å®ããå Žåããããã®ãªããžããªãç°¡åã«äœæããŠäœ¿çšã§ããããŒã«ãæäŸããå¿ èŠããããŸãã
é·ãéããœãŒã¹ã³ãŒããšã³ã·ã¹ãã ã¯éäžã·ã¹ãã ãäžå¿ã«å®å šã«æ§ââç¯ãããŠããŸããã Gitãªã©ã®ããŒãžã§ã³ç®¡çã·ã¹ãã ã®æ®åã«ããç¶æ³ã¯æ ¹æ¬çã«å€ãããŸãããGitã¯ãæè¡ããç¿çãŸã§ã®äººã ã«ãšã£ãŠSubversionãããè€éã«èŠãããããããŸããããåæ£åã®å©ç¹ã¯ã¯ããã«åºãå€æ§ã§ãã ããããããã±ãŒãžç®¡ççšã«åãGitãäœæã§ãã人ã¯ãŸã ããŸããã ããã±ãŒãžç®¡çã®åé¡ã解決ããBundlerãåçºæããããšã誰ããä¿èšŒããå Žåã¯ãåæš©åã«ã€ããŠé©åã«èããŠãã ããã