ã«ããŒåšèŸº-åãé°è¬ã調æ»
ããã«ããã®ãã¿ãã¬ã®äžã®ããã¹ããèšäºã®äž»èŠãªãç®çãã®éšåãšç°ãªãããšãäºçŽããŠãã ããã ãããç§ã®å人çãªæèŠãšå°è±¡ã§ãã
ããã°ã©ãã³ã°èšèªã¯ãæ§æã ãã§ãªããã¬ããŒãžã³ã¬ã¯ã¿ãŒã§ããã ãã§ãªããèšèªãã©ãã€ã ã§ããã ãã§ãªãããã®å²åŠã§ããããŸããã第äžã«ãããã¯ãã®ã³ãã¥ããã£ãäœæããã³ãã¥ããã£ãšã³ãŒãããŒã¹ã§ãã ç¹ã«ä»ããªãŒãã³ãœãŒã¹ã®æ代ã«ã ãããŠãããRubyã§ã¯ã«ã«ãã§åããŠã®èèªãã©ã¹ã æ©èœã®1ã€-è¡æ«ã§ã¡ãœãããšã»ãã³ãã³ãåŒã³åºããšãã«ãªãã·ã§ã³ã®æ¬åŒ§ã§å§ãŸãããªããã§è¡šçŸåè±ããªæ§æã§ç¶ãããããžã§ã¯ãã®äžè¬çãªé°å²æ°ã§çµãããå®çšçãªæ inessãå šäœã«ããã£ãŠèªã¿åãããŸã-ãããã®å€ãã¯ç®±ããåºãããŠæå°éã®åŽåã§äœæãããŸãããããæ§æããŸãã
å€ãã®äººãRubyãéžãã ã®ã¯ããããå¿«é©ã§æ¥œããããã§ãã ããã°ã©ãã³ã°ã®æ¥œãããšåã³ã¯ããŸããŸãªèšèªã§åŸãããŸã-Rubyã§ã¯ãè¯ãè»ãé転ããŠããããã«èŠããŸããè»ã®åŸãã«åº§ã£ãŠãéè·¯ã«ã€ããŠã¯ããŸãèãããããéèŠãªããšã«ã€ããŠ-å°ãªããšãæ è¡ã®ã«ãŒããšæçµç®çã«ã€ããŠèããŸãã
ãŸããã¬ãŽã®ã²ãŒã ãšæ¯èŒããããšãã§ããŸãïŒããã¯äž»ã«Gemsã«ãããã®ã§ãïŒã 溶æ¥éå ·ã奜ããªäººãããŸããã段ããŒã«ãšæ¥çå€ãå¿ èŠãªäººãããŸãã
RubyãšRailsã«ã€ããŠã¯ãæã èŠã€ããããããšãããã€ããããŸããããããæ確ã«ããããšæããŸãã
Rubyã¯é ãããšãç¥ãããŠããŸãã Rubyã¯ã€ã³ã¿ãŒããªã¿ãŒèšèªãªã®ã§ãè°è«ããã®ã¯å°é£ã§ãã ãããŠãããã¯å žåçãªãã®ã§ãããã»ãšãã©ã®å ŽåãPHPãïŒæä»çã«ïŒæžã人ããèããŠããŸããPHPã解éå¯èœã§ãããåæãã¹ãã®é床ã«é¢ããŠã¯ã»ãŒåãã¬ãã«ã§ãã ã»ãšãã©ã®å Žåããããã¯å€ãããŒãžã§ã³ã®æªåã®ãšã³ãŒã§ãã å®éãç§ã¯RailsãšSymfonyã®äž¡æ¹ã§äœæ¥ããå¿ èŠããããŸãããå®éã®Railsã¢ããªã±ãŒã·ã§ã³ã§ã¯ãåãã¬ãã«ã®æé©åã§ããé«éã§ãïŒãããŠäž¡æ¹ã®ãã£ãã·ã³ã°ãæåã®éµã§ãïŒã ã¡ã¢ãªã®é床ãšã³ã³ãã¯ãããå¿ èŠãªå Žåã¯ãNode.jsã䜿çšããŠã¢ã»ã³ãã©ã§èšè¿°ããŸãã ããããé説ã¯ãã«ãŒãã¹ãããã°ãã°ãããæžããŠãããšããããšã§ã-ãããæ¬åœã«æ£åœåããããšãã åé¡ã¯ããã§ããäœæ¥ã®é床ã ãã§ãªããã¢ããªã±ãŒã·ã§ã³ã®äœæé床ãéèŠã§ãã ãããŠãRubyãããã³ããããæ¹æ³ã§githubã«ãããã¹ãŠã®ãã®ã¯ãã¢ããªã±ãŒã·ã§ã³ã®æé©åã®å¯èœæ§ãå«ããããã°ã©ããŒã®éåžžã«é«ãçç£æ§ãéæããã®ã«åœ¹ç«ã¡ãŸãã ãŸããäž»ãªè² è·ãšããã«ããã¯ã¯å€ãã®å ŽåããŒã¿ããŒã¹ã§ãããWebã¢ããªã±ãŒã·ã§ã³ã¯åãªãããžãã¹ããžãã¯ã®ã¬ã€ã€ãŒã§ããããšãå¿ããªãã§ãã ããã ãããŠããã®ãããªã¬ã€ã€ãŒã¯ããŸãã¹ã±ãŒãªã³ã°ããŸãã
äžæ¹ã§ãRubyéçºè ã®é«ã絊æã«ã€ããŠã¯ç¬ç¹ã®ç¥è©±ããããäžæ¹ã§ã¯ãRubyã«ã¯ã»ãšãã©ä»äºããªããšããç¥è©±ããããŸãã éåžžãPHPã®åžå Žã®å¹³åãšãã®äœæ¥éã®çµŠäžãšæ¯èŒãããŸãã PHPã®å¹³å絊äžã¬ãã«ã¯ãå€å žçãªãç é¢ã®å¹³å絊äžæž©åºŠãã§ãã Yii / Symfony / ZendãšRailsã®ã¹ãã·ã£ãªã¹ãïŒPythonã§Djangoãè¿œå ããããšãã§ããŸãïŒãæ¯èŒãããšãç¶æ³ã¯ãŸã£ããç°ãªããŸããã€ãŸãã絊äžãšåžå ŽèŠæš¡ã¯ã»ãŒåãã§ãã 確ãã«ãåªç§ãªããã°ã©ããŒã«ã¯ååãªå ±é ¬ããããŸãã ããã«ããããžã§ã¯ãããŒãããå§ããå Žåãå€ãã®å Žåããã©ãããã©ãŒã ã®éžæã¯ã顧客/äžåžã§ã¯ãªããããªããšããªãã®ããŒã 次第ã§ãã
ãããã£ãŠãWebã¢ããªã±ãŒã·ã§ã³ãäœæããããã®å€ãã®åªããèšèªãšãã¬ãŒã ã¯ãŒã¯ããããRuby with Railsã¯ãçŒç·ãŠãµã®ã®ãã¹ãŠã®ãŠãµã®ãäžåºŠã«æ®ºãéã®åŒŸäžžã§ã¯ãããŸããã åçŽã«ãç§ã®æèŠã§ã¯ãéèŠãªåºæºã®ã»ãããæ¡çšãããããã®1ã€ãŸãã¯2ã€ãéžæããããšããªãå ŽåãRoRã¯æ¬åœã«å€ãã®ãã€ã³ããç²åŸããŸãã æç床ãå«ã-ããã¯ãã¯ãæœåšçãªãã®ã ãã§ã¯ãªããè人ã§ããªããããã¹ã¿ãŒãã©ãããã©ãŒã ã§ã¯ãããŸããïŒããããäž¡æ¹ã®äŸããããããããŸãïŒã è人ã¯é·ãã¯ãªããªããšæã RubyãšRailsã®äž¡æ¹ã«ãŸã æé·ãšéçºã®å¯èœæ§ããããŸãããããã¯å¥ã®èšäºã®ãããã¯ã§ãã
ãããŠãã¡ãããRailsã«é¢ããèšäºã®çŠç¹ãšããã®ç¹å®ã®ãã©ãããã©ãŒã ã®äººæ°ã«ãããããããRubyã¯Railsãšã¯ã»ã©é ããã®ã§ãã
ãããã«ãããç§ã¯ããã°ã©ããŒã圌ãä»æ¥æ¯æãããŠãããã®ã®åœŒã®å°ããªäžçã«åº§ãã¹ãã§ã¯ãªããšç¢ºä¿¡ããŠããŸãã ãã®æå³ã§ãRubyã¯å±¥æŽæžã«+1èšèªãæäŸããã ãã§ãªãããã®oopãã©ãŒã«ã¹ãšåºç¯ãªã¡ã¿ããã°ã©ãã³ã°æ©èœã«ãããç°ãªãèšèªãšãã©ãããã©ãŒã ã§åœ¹ç«ã€ãšã¯ã¹ããªãšã³ã¹ãæäŸããŸãã
RubyèšèªïŒéçºã®æŽå²ãšéçºã®èŠéã
ããã°ã©ãã³ã°èšèªã¯ãæ§æã ãã§ãªããã¬ããŒãžã³ã¬ã¯ã¿ãŒã§ããã ãã§ãªããèšèªãã©ãã€ã ã§ããã ãã§ãªãããã®å²åŠã§ããããŸããã第äžã«ãããã¯ãã®ã³ãã¥ããã£ãäœæããã³ãã¥ããã£ãšã³ãŒãããŒã¹ã§ãã ç¹ã«ä»ããªãŒãã³ãœãŒã¹ã®æ代ã«ã ãããŠãããRubyã§ã¯ã«ã«ãã§åããŠã®èèªãã©ã¹ã æ©èœã®1ã€-è¡æ«ã§ã¡ãœãããšã»ãã³ãã³ãåŒã³åºããšãã«ãªãã·ã§ã³ã®æ¬åŒ§ã§å§ãŸãããªããã§è¡šçŸåè±ããªæ§æã§ç¶ãããããžã§ã¯ãã®äžè¬çãªé°å²æ°ã§çµãããå®çšçãªæ inessãå šäœã«ããã£ãŠèªã¿åãããŸã-ãããã®å€ãã¯ç®±ããåºãããŠæå°éã®åŽåã§äœæãããŸãããããæ§æããŸãã
å€ãã®äººãRubyãéžãã ã®ã¯ããããå¿«é©ã§æ¥œããããã§ãã ããã°ã©ãã³ã°ã®æ¥œãããšåã³ã¯ããŸããŸãªèšèªã§åŸãããŸã-Rubyã§ã¯ãè¯ãè»ãé転ããŠããããã«èŠããŸããè»ã®åŸãã«åº§ã£ãŠãéè·¯ã«ã€ããŠã¯ããŸãèãããããéèŠãªããšã«ã€ããŠ-å°ãªããšãæ è¡ã®ã«ãŒããšæçµç®çã«ã€ããŠèããŸãã
ãŸããã¬ãŽã®ã²ãŒã ãšæ¯èŒããããšãã§ããŸãïŒããã¯äž»ã«Gemsã«ãããã®ã§ãïŒã 溶æ¥éå ·ã奜ããªäººãããŸããã段ããŒã«ãšæ¥çå€ãå¿ èŠãªäººãããŸãã
RubyãšRailsã«ã€ããŠã¯ãæã èŠã€ããããããšãããã€ããããŸããããããæ確ã«ããããšæããŸãã
Rubyã¯é ãããšãç¥ãããŠããŸãã Rubyã¯ã€ã³ã¿ãŒããªã¿ãŒèšèªãªã®ã§ãè°è«ããã®ã¯å°é£ã§ãã ãããŠãããã¯å žåçãªãã®ã§ãããã»ãšãã©ã®å ŽåãPHPãïŒæä»çã«ïŒæžã人ããèããŠããŸããPHPã解éå¯èœã§ãããåæãã¹ãã®é床ã«é¢ããŠã¯ã»ãŒåãã¬ãã«ã§ãã ã»ãšãã©ã®å Žåããããã¯å€ãããŒãžã§ã³ã®æªåã®ãšã³ãŒã§ãã å®éãç§ã¯RailsãšSymfonyã®äž¡æ¹ã§äœæ¥ããå¿ èŠããããŸãããå®éã®Railsã¢ããªã±ãŒã·ã§ã³ã§ã¯ãåãã¬ãã«ã®æé©åã§ããé«éã§ãïŒãããŠäž¡æ¹ã®ãã£ãã·ã³ã°ãæåã®éµã§ãïŒã ã¡ã¢ãªã®é床ãšã³ã³ãã¯ãããå¿ èŠãªå Žåã¯ãNode.jsã䜿çš
äžæ¹ã§ãRubyéçºè ã®é«ã絊æã«ã€ããŠã¯ç¬ç¹ã®ç¥è©±ããããäžæ¹ã§ã¯ãRubyã«ã¯ã»ãšãã©ä»äºããªããšããç¥è©±ããããŸãã éåžžãPHPã®åžå Žã®å¹³åãšãã®äœæ¥éã®çµŠäžãšæ¯èŒãããŸãã PHPã®å¹³å絊äžã¬ãã«ã¯ãå€å žçãªãç é¢ã®å¹³å絊äžæž©åºŠãã§ãã Yii / Symfony / ZendãšRailsã®ã¹ãã·ã£ãªã¹ãïŒPythonã§Djangoãè¿œå ããããšãã§ããŸãïŒãæ¯èŒãããšãç¶æ³ã¯ãŸã£ããç°ãªããŸããã€ãŸãã絊äžãšåžå ŽèŠæš¡ã¯ã»ãŒåãã§ãã 確ãã«ãåªç§ãªããã°ã©ããŒã«ã¯ååãªå ±é ¬ããããŸãã ããã«ããããžã§ã¯ãããŒãããå§ããå Žåãå€ãã®å Žåããã©ãããã©ãŒã ã®éžæã¯ã顧客/äžåžã§ã¯ãªããããªããšããªãã®ããŒã 次第ã§ãã
ãããã£ãŠãWebã¢ããªã±ãŒã·ã§ã³ãäœæããããã®å€ãã®åªããèšèªãšãã¬ãŒã ã¯ãŒã¯ããããRuby with Railsã¯ãçŒç·ãŠãµã®ã®ãã¹ãŠã®ãŠãµã®ãäžåºŠã«æ®ºãéã®åŒŸäžžã§ã¯ãããŸããã åçŽã«ãç§ã®æèŠã§ã¯ãéèŠãªåºæºã®ã»ãããæ¡çšãããããã®1ã€ãŸãã¯2ã€ãéžæããããšããªãå ŽåãRoRã¯æ¬åœã«å€ãã®ãã€ã³ããç²åŸããŸãã æç床ãå«ã-ããã¯ãã¯ãæœåšçãªãã®ã ãã§ã¯ãªããè人ã§ããªããããã¹ã¿ãŒãã©ãããã©ãŒã ã§ã¯ãããŸããïŒããããäž¡æ¹ã®äŸããããããããŸãïŒã è人ã¯é·ãã¯ãªããªããšæã RubyãšRailsã®äž¡æ¹ã«ãŸã æé·ãšéçºã®å¯èœæ§ããããŸãããããã¯å¥ã®èšäºã®ãããã¯ã§ãã
ãããŠãã¡ãããRailsã«é¢ããèšäºã®çŠç¹ãšããã®ç¹å®ã®ãã©ãããã©ãŒã ã®äººæ°ã«ãããããããRubyã¯Railsãšã¯ã»ã©é ããã®ã§ãã
ãããã«ãããç§ã¯ããã°ã©ããŒã圌ãä»æ¥æ¯æãããŠãããã®ã®åœŒã®å°ããªäžçã«åº§ãã¹ãã§ã¯ãªããšç¢ºä¿¡ããŠããŸãã ãã®æå³ã§ãRubyã¯å±¥æŽæžã«+1èšèªãæäŸããã ãã§ãªãããã®oopãã©ãŒã«ã¹ãšåºç¯ãªã¡ã¿ããã°ã©ãã³ã°æ©èœã«ãããç°ãªãèšèªãšãã©ãããã©ãŒã ã§åœ¹ç«ã€ãšã¯ã¹ããªãšã³ã¹ãæäŸããŸãã
RubyèšèªïŒéçºã®æŽå²ãšéçºã®èŠéã
ã«ããŒ
éå§ãã
ãªã³ã¯èªäœïŒ
ããã«ã RVMã®ãããªãã®ããããŸãã 1ã€ã®OSã«è€æ°ã®ããŒãžã§ã³ã®Rubyãã€ã³ã¹ããŒã«ããŠãããããåãæ¿ããããšãã§ããŸãã æåã¯å¿ èŠãããŸããããããŒã«ã«ãã·ã³ãŸãã¯ãµãŒããŒã«æ¢ã«ããã€ãã®ãããžã§ã¯ããããå Žåã«äŸ¿å©ã§ããäžåºŠã«æ°ããããŒãžã§ã³ã«æŽæ°ããã®ã¯ããŸãã¯ãŒã«ã§ã¯ãããŸããã ä»ã®ãšãã-ããã ãã§ããããšãèŠããŠãããŠãã ããã
ãªã¿ã¯èªã®RVMã«é¢ãã詳现
ããã«èšåãã䟡å€ãããã®ã¯ãéçºç°å¢ã§ãã ç§ã¯JetBrains補åã®ãã¡ã³ã§ããããã RubyMineããå§ãããŸãããåžè²©ã®è£œåã¯å¥œã¿ã«åããããç¡æã®Aptana Studioã§ãã 軜ãããã¹ããšãã£ã¿ã䜿çšããæ¹ãå¿«é©ã§ããã°ãå€ãã®äººãRubyæ§æããµããŒãããŠããŸãã
Rubyã€ã³ã¿ã©ã¯ãã£ãã¢ãŒãã®ãã©ãŠã¶ãŒã§çŽæ¥ã tryruby.orgãè©Šãããšãã§ããŸãã
ïŒ{os_name}ã«Rubyãã€ã³ã¹ããŒã«ããæ¹æ³ã¯ïŒ
ãªã³ã¯èªäœïŒ
- åã¡ãŸãã åããªã³ã¯ããã©ã£ãŠãDevKitãèŠã€ããŠãã ãããDevKitã¯ãããŒã¿ããŒã¹ã®æäœãNative Extensionsã®ã€ã³ã¹ããŒã«ã«åœ¹ç«ã¡ãŸã
- Railsã€ã³ã¹ããŒã©ãŒã¯ ãRuby + DevKitãGitãRailsãBundlerãSQLiteãWindowsãŸãã¯MacOSã«ããã«ã€ã³ã¹ããŒã«ããŸãã ãã ããRubyã¯1.9.3ã§ããã2.0ã®ã€ã³ã¹ããŒã©ãŒã¯ãŸã ã¢ã«ãã¡çã§ãã ïŒ Jabherã®å©èšã©ãã ïŒ
- * nix-ãªããžããªãŸãã¯ã¬ã¬ã·ãŒã§æ€çŽ¢
ããã«ã RVMã®ãããªãã®ããããŸãã 1ã€ã®OSã«è€æ°ã®ããŒãžã§ã³ã®Rubyãã€ã³ã¹ããŒã«ããŠãããããåãæ¿ããããšãã§ããŸãã æåã¯å¿ èŠãããŸããããããŒã«ã«ãã·ã³ãŸãã¯ãµãŒããŒã«æ¢ã«ããã€ãã®ãããžã§ã¯ããããå Žåã«äŸ¿å©ã§ããäžåºŠã«æ°ããããŒãžã§ã³ã«æŽæ°ããã®ã¯ããŸãã¯ãŒã«ã§ã¯ãããŸããã ä»ã®ãšãã-ããã ãã§ããããšãèŠããŠãããŠãã ããã
ãªã¿ã¯èªã®RVMã«é¢ãã詳现
ããã«èšåãã䟡å€ãããã®ã¯ãéçºç°å¢ã§ãã ç§ã¯JetBrains補åã®ãã¡ã³ã§ããããã RubyMineããå§ãããŸãããåžè²©ã®è£œåã¯å¥œã¿ã«åããããç¡æã®Aptana Studioã§ãã 軜ãããã¹ããšãã£ã¿ã䜿çšããæ¹ãå¿«é©ã§ããã°ãå€ãã®äººãRubyæ§æããµããŒãããŠããŸãã
Rubyã€ã³ã¿ã©ã¯ãã£ãã¢ãŒãã®ãã©ãŠã¶ãŒã§çŽæ¥ã tryruby.orgãè©Šãããšãã§ããŸãã
ãã¹ãŠããªããžã§ã¯ãã§ã
æ°åãæååãããã«ã¯nilãå«ãããã¹ãŠObjectã¯ã©ã¹ããç¶æ¿ããŸãã nilïŒãclassãmethodsãããã³respond_toïŒãªã©ã®ã¡ãœãããåŒã³åºãããšãã§ããŸãã
'Hello world'.class # String nil.class # NilClass String.class # Class String.ancestors # [String, Comparable, Object, Kernel, BasicObject]; nil.nil? # true Object.new.methods # Object; - nil.respond_to?('nil?') # true
åŸè
ã«é¢ããŠïŒããã¯ã¢ãã«ã®ã¿ã€ãã³ã°ã«ãšã£ãŠéèŠã§ãã
æ§æãšããŠããŒ
Rubyã¯ãæ§æç³ãã§éåžžã«çç¥ãããŠãããããå€ãã®å ŽåãããŸããŸãªãã©ã±ãããã»ãã³ãã³ãªã©ã§ããªããžãäœãå¿
èŠã¯ãããŸããã ãããŠãã®äžã«ã¯ã·ã³ãã«ã§è«ççã§ãããã¹ãŠããªããžã§ã¯ãããšãããã©ãã€ã ãä¿æããŠããŸãã
ã¡ãœããåŒã³åºãã§ããããŸããããªããã°æ¬åŒ§ãçç¥ã§ããå Žå
ãŸãã èšå·ããããŸãã æ¬è³ªçã«ãæåã¯äžå€ã®æååã§ãã ããšãã°ãããã·ã¥ã®ããŒãšããŠé »ç¹ã«äœ¿çšãããŸãã
ããå°ãããŠããŒãæ¥ç¶ãããŠããŸãïŒ
ãããŠãå°ããã§ãã䟿å©ãªæžãæ¹ã§ããã¹ãã£ã³ã°ã®ããŒããçµäºããŸãã
ã¡ãªã¿ã«ãRubyã«ã¯éåžžã«éŠŽæã¿ã®ããã»ãã³ãã³ããããŸãã1è¡ã«è€æ°ã®åŒãèšè¿°ãããšäŸ¿å©ã§ãã
a == b # , a.==(b) # .==() -
ã¡ãœããåŒã³åºãã§ããããŸããããªããã°æ¬åŒ§ãçç¥ã§ããå Žå
nil.respond_to?('nil?') # true nil.respond_to? 'nil?' # true # : if nil.respond_to? 'nil?' puts 'ok' end # if 10.between? 1, 5 puts 'ok' end # , if 10.between?(1, 50) && 20.between?(1, 50) puts 'ok' end
ãŸãã èšå·ããããŸãã æ¬è³ªçã«ãæåã¯äžå€ã®æååã§ãã ããšãã°ãããã·ã¥ã®ããŒãšããŠé »ç¹ã«äœ¿çšãããŸãã
a = :nil? # b = 'nil?' # nil.respond_to? a # true nil.respond_to? b # true # a == b # false a.to_s == b && a == b.to_sym # true;
ããå°ãããŠããŒãæ¥ç¶ãããŠããŸãïŒ
a = {:key1 => 'value1', :key2 => 'value2'} # ( ) a = {key1: 'value1', key2: 'value2'} # - , (Ruby >= 1.9.3)
ãããã¯ãç»å ŽããŠããïŒ
a = ['value1', 'value2'] # s = 'String' s = "Double-quoted #{s}" # "Double-quoted String" - , ,
ãããŠãå°ããã§ãã䟿å©ãªæžãæ¹ã§ããã¹ãã£ã³ã°ã®ããŒããçµäºããŸãã
%w[value1 value2] # ["value1", "value2"] - , %i[value1 value2] # [:value1, :value2] - , (Ruby >= 2.0) s = %q(String) s = %Q(Double-quoted #{s}) %x('ls') # `ls` # %r(.*) == /.*/ # true;
ã¡ãªã¿ã«ãRubyã«ã¯éåžžã«éŠŽæã¿ã®ããã»ãã³ãã³ããããŸãã1è¡ã«è€æ°ã®åŒãèšè¿°ãããšäŸ¿å©ã§ãã
a = 10; puts a # 10 if nil.respond_to? 'nil?'; puts 'ok'; end # -
ããããåäžè¡ã®ifsã¯ãã®ããã«æžãæ¹ãè¯ãã§ã
puts 'ok' if nil.respond_to? 'nil?'
å
¥éèšäºãšããã¯
ä»ã®èšèªã® Rubyã20åã§Rubyãèªã䟡å€ããããŸããã¡ã€ã³ã®å人ã§ã¢ã·ã¹ã¿ã³ãã®ruby-doc.orgã§ãã
åºæ¬ã¯ã©ã¹ã®ã¡ãœããïŒãã¹ãŠ-ããããeach_ããã³to_ïŒãããã«ç¢ºèªããããšããå§ãããŸãã
æåå ïŒãã-æåã«äžèŽãããã®ããµãïŒ
é å ïŒããããçµåãçµã¿èŸŒã¿ïŒïŒ
ããã·ã¥ ïŒhas_keyïŒãhas_valueïŒãããŒãžïŒ
Rubyãäžç·ã«åŸæããã«ååãªåçŽãªäŸã解æãããŸãïŒ æåã® ãããã2çªç®ã® ãããã3 çªç®ã® ãããã
宎äŒãç¶ãããå ŽåïŒ Rubyã§éæ³ãéžæã§ããèå³æ·±ã人ã ã
åºæ¬ã¯ã©ã¹ã®ã¡ãœããïŒãã¹ãŠ-ããããeach_ããã³to_ïŒãããã«ç¢ºèªããããšããå§ãããŸãã
æåå ïŒãã-æåã«äžèŽãããã®ããµãïŒ
é å ïŒããããçµåãçµã¿èŸŒã¿ïŒïŒ
ããã·ã¥ ïŒhas_keyïŒãhas_valueïŒãããŒãžïŒ
Rubyãäžç·ã«åŸæããã«ååãªåçŽãªäŸã解æãããŸãïŒ æåã® ãããã2çªç®ã® ãããã3 çªç®ã® ãããã
宎äŒãç¶ãããå ŽåïŒ Rubyã§éæ³ãéžæã§ããèå³æ·±ã人ã ã
ã¯ã©ã¹ãã¢ãžã¥ãŒã«ãã¡ã¿ããã°ã©ãã³ã°
Rubyã®ã¯ã©ã¹ã¯éåžžã«æçœã§ãããRubyã®åãšé
åã¯ãããããæäœããå¯èœæ§ã«ãããŸãã
ã¢ãžã¥ãŒã«-äžçŽç©ãšããŠãåå空éãšããŠãæ±ãããšãã§ããŸãã çªç¶ïŒ å®éãããã¯ã¯ã©ã¹ãã¡ãœãããããã³å®æ°ã®ã»ããã§ãããç¬èªã®å€æã§äœ¿çšã§ããŸãã
Rubyã§ã¯ãã¯ã©ã¹ã¯å¯å€ã§ãããäœæåŸã«ããããé©çšã§ããŸãã ãããŠãããã§æ³šæããŠãã ããïŒããã§ã¯ãã足ã§èªåèªèº«ãæã€ãããšãã§ããéåžžã«å¯èœæ§ãå§ãŸããŸã-ãããã£ãŠããã®ãããªããšããããšãã¯ãåžžã«æ³šæããå¿ èŠããããŸãïŒãªããäœãèµ·ããã®ãã誰ãäœããã¹ããããªãèªèº«ã
ãŸãã«ãã®ãããªã¢ãããŒããå®éã«äœ¿çšãããŠããŸã-å®éãããã¯ãã©ã¡ãŒã¿ã転éã§ããäžçŽç©ã®ãããªãã®ã«ãªããŸãã æ¹æ³ãããããªãå Žåã¯éæ³ã®ããã§ãã åºæ¬ã¯ã©ã¹ãç¹ã«ArrayãšStringã«ãããããé©çšã§ããŸãããããããèŠããå§ããåã«åžžã«3åèããå¿ èŠããããŸããããã¯.blankã®ãããªãã®ã§ããïŒ ïŒRailsã¯ãããè¿œå ããŸãïŒdef blankïŒ; nilïŒ|| emptyïŒendïŒããã1ã€ã¯ã¡ãœããã³ãŒãããããžã§ã¯ãã«åºæã®å Žåã§ããããžã§ã¯ãå ã®ããã€ãã®ã¯ã©ã¹ã«å±ããŠãããšä»®å®ããã®ãè«ççã§ãã
ããã¯ãããšãã°ã¢ã¯ã»ãµãŒã®ä»çµã¿ã§ãã Rubyã¯ã©ã¹ã«ãããªãã¯ãã©ã¡ãŒã¿ãŒãè¿œå ããã«ã¯ã©ãããŸããïŒ
12åãŸãã¯2åã®ãã©ã¡ãŒã¿ãŒãèšè¿°ããããšãæ³åã§ããŸããïŒ Rubyã«ã¯å€ãã®ã³ãŒãããããŸã-å€§çœªïŒ DRY ã ãã®ãããçãããããšãã§ããŸãã
次ã®æºåã¯ããã§ããïŒ æ¬¡ã«ïŒ
Rubyã¡ã¿ã¯ã©ã¹ã®çŽ¹ä»
ã¡ã¿ããã°ã©ãã³ã°ãã¿ãŒã³-ã¢ã³ããŒãããã³ã°ã«ã€ã㊠ãå°ããªåå©çš-ãã³ïŒ ã è©äŸ¡
ã€ã³ã¯ã«ãŒããšæ¡åŒµã«ã€ããŠæãäžããŸã
class Foo def bar 10 # - end def baz(a) bar + 20 end end puts Foo.new.baz(10) # 30
ã¢ãžã¥ãŒã«-äžçŽç©ãšããŠãåå空éãšããŠãæ±ãããšãã§ããŸãã çªç¶ïŒ å®éãããã¯ã¯ã©ã¹ãã¡ãœãããããã³å®æ°ã®ã»ããã§ãããç¬èªã®å€æã§äœ¿çšã§ããŸãã
module B # class Foo # def initialize(k) @k = k end # def bar; @k + 20 end end end puts B.Foo.new(3).bar # 23 puts B::Foo.new(3).bar # 23; , module C # def bar; @k + 25 end end class Foo include C; def initialize(k) @k = k end end puts Foo.new(3).bar # 28
Rubyã§ã¯ãã¯ã©ã¹ã¯å¯å€ã§ãããäœæåŸã«ããããé©çšã§ããŸãã ãããŠãããã§æ³šæããŠãã ããïŒããã§ã¯ãã足ã§èªåèªèº«ãæã€ãããšãã§ããéåžžã«å¯èœæ§ãå§ãŸããŸã-ãããã£ãŠããã®ãããªããšããããšãã¯ãåžžã«æ³šæããå¿ èŠããããŸãïŒãªããäœãèµ·ããã®ãã誰ãäœããã¹ããããªãèªèº«ã
class Foo def bar; 20 end end class Foo # def baz; bar + 2 end end puts Foo.new.baz # 22 # - : Foo.class_eval do def bazz; bar + 3 end end puts Foo.new.bazz # 23 # - class Boo < Foo def boo; bar + 2 end end puts Boo.new.boo # 22 # - , a = Foo.new a.instance_eval do # def booo; bar + 3 end end puts a.booo # 23 puts Foo.new.booo rescue puts 'error' # error; , puts a.respond_to? :booo # true puts Foo.new.respond_to? :booo # false # - def a.booboo bar + 4 end puts a.booboo # 24
ããããã¯ã©ã¹ã«å¯ŸããŠinstance_evalãå®è¡ãããšã©ããªããŸããïŒ ãã¡ãããéçã¡ãœãããè¿œå ãããŸãã
class Foo def self.bar; 10 end # end puts Foo.bar # 10 Foo.instance_eval do def baz; bar + 1 end end puts Foo.baz # 11
ããªãã¯ããã§éãã§ãäž»ãªãã®ãèŠããŠãã ãã-ããªãã®è¶³ã®äžè©±ãããŠãã ããã class Foo def self.add_bar # , self.class_eval do def bar; 'bar' end end end end puts Foo.new.respond_to? :bar # false class Boo < Foo # add_bar # end puts Boo.new.bar # bar # , Foo.instance_eval do def add_baz self.class_eval do def baz; 'baz' end end end end class Baz < Foo add_baz end puts Baz.new.baz # baz
ãŸãã«ãã®ãããªã¢ãããŒããå®éã«äœ¿çšãããŠããŸã-å®éãããã¯ãã©ã¡ãŒã¿ã転éã§ããäžçŽç©ã®ãããªãã®ã«ãªããŸãã æ¹æ³ãããããªãå Žåã¯éæ³ã®ããã§ãã åºæ¬ã¯ã©ã¹ãç¹ã«ArrayãšStringã«ãããããé©çšã§ããŸãããããããèŠããå§ããåã«åžžã«3åèããå¿ èŠããããŸããããã¯.blankã®ãããªãã®ã§ããïŒ ïŒRailsã¯ãããè¿œå ããŸãïŒdef blankïŒ; nilïŒ|| emptyïŒendïŒããã1ã€ã¯ã¡ãœããã³ãŒãããããžã§ã¯ãã«åºæã®å Žåã§ããããžã§ã¯ãå ã®ããã€ãã®ã¯ã©ã¹ã«å±ããŠãããšä»®å®ããã®ãè«ççã§ãã
ããã¯ãããšãã°ã¢ã¯ã»ãµãŒã®ä»çµã¿ã§ãã Rubyã¯ã©ã¹ã«ãããªãã¯ãã©ã¡ãŒã¿ãŒãè¿œå ããã«ã¯ã©ãããŸããïŒ
class Foo def bar # @bar # end def bar=(val) # @bar = val # end end
12åãŸãã¯2åã®ãã©ã¡ãŒã¿ãŒãèšè¿°ããããšãæ³åã§ããŸããïŒ Rubyã«ã¯å€ãã®ã³ãŒãããããŸã-å€§çœªïŒ DRY ã ãã®ãããçãããããšãã§ããŸãã
class Foo attr_accessor :bar, :baz # attr_reader :boo # attr_writer :booo # end
次ã®æºåã¯ããã§ããïŒ æ¬¡ã«ïŒ
Rubyã¡ã¿ã¯ã©ã¹ã®çŽ¹ä»
ã¡ã¿ããã°ã©ãã³ã°ãã¿ãŒã³-ã¢ã³ããŒãããã³ã°ã«ã€ã㊠ãå°ããªåå©çš-ãã³ïŒ ã è©äŸ¡
ã€ã³ã¯ã«ãŒããšæ¡åŒµã«ã€ããŠæãäžããŸã
ã¡ãœããåŒæ°
Ruby 2.0ã¯ååä»ãã¡ãœããåŒæ°ããµããŒãããŠããŸãã
以åã®ããŒãžã§ã³ã§ã¯ãå±æ§ã解æããããšã§åãåäœãå®çŸã§ããŸãã
Ruby 2.1以éãå¿ èŠãªååä»ãåŒæ°ãè¿œå ã§ããããã«ãªããŸããã
# bar # barr 0 # baz - true def foo(bar, barr = 0, baz: true) baz && bar + barr end p foo 1 # 1 p foo 1, 2 # 3 p foo 1, baz: false # false
以åã®ããŒãžã§ã³ã§ã¯ãå±æ§ã解æããããšã§åãåäœãå®çŸã§ããŸãã
def foo2(bar, *args) args end p foo2 1, 2, :baz => false # [2, {:baz=>false}] def foo3(bar, *args) options = args.extract_otions! # args p bar p args p options end foo3 1, 2, 3, :baz => false # 1 # [2, 3] # {:baz=>false}
Ruby 2.1以éãå¿ èŠãªååä»ãåŒæ°ãè¿œå ã§ããããã«ãªããŸããã
def foo4(bar, baz:); bar end foo4 1 # foo4 1, baz: 2 # 1
ã¯ããŒãžã£ãŒãšãããã¯
æåã¯ããããã¯ãã¯ããŒãžã£ãŒãããã³Procã¯ã©ã¹ãæ··ä¹±ãåŒãèµ·ãããŸãã èŠããã«-å®éã«ã¯ãProcãããããŸããã
詳现-以äžã®ãªã³ã¯ããããŠä»-ããªãã泚æãæãã¹ããã®ã
ãããã¯ãæåã«æ€èšããŸãã ãããã¯ã¯ãRubyæ§æã®äžéšã§ããããªããžã§ã¯ãã§ã¯ãªããåãªãå Žæã®äžéšã§ãã ãããã¯ã¯ãã¡ãœããã«ã³ãŒããæž¡ãããã«äœ¿çšãããŸãã ãããŠããã§ã«ã¡ãœããå ã§ãProcã¯ã©ã¹ã«ã©ãããããŠããããšãããããŸããã
ã¯ã©ã¹ãšã¡ãœããã®ã»ã¯ã·ã§ã³ã§ã¯ããããã¯ãã§ã«äœ¿çšãããŠããŸãã
ããããããåºæ¬çãªäŸãèŠãŠã¿ãŸãããããRubyã§foreachãäœæããæ¹æ³ãã§ããããŸãã
ãããã¯ãç¬èªã®ã¡ãœããã«è»¢éããå ŽåïŒ
ãããã¯ã¯åžžã«æåŸã®ãã©ã¡ãŒã¿ãŒã§ãããè€æ°ã®ãããã¯ãæž¡ãå¿ èŠãããå Žåã¯ãéåžžã®ãã©ã¡ãŒã¿ãŒãšããŠæž¡ãå¿ èŠããããŸããã€ãŸããProc.newãŸãã¯ã©ã ããäœæããå¿ èŠããããŸãã
Procã¯ã©ã¹ã®ãªããžã§ã¯ãã¯åžžã«ãããã¯ããååŸãããŸããããããã¯èªäœã¯æ§æã®äžéšã§ããProcã«ãªãã¡ãœããã«æž¡ãããšãã§ããŸããProcã³ã³ã¹ãã©ã¯ã¿ãŒã«æž¡ãããlambdaã䜿çšã§ããŸããããããã¯ãå€æ°ã«æžã蟌ãããšã¯ã§ããŸããã
ããŸããŸãªæ¹æ³ã§äœæãããProcã®åäœã«ã¯éãããããŸãã èšäºãèªã¿ãŸã ã
ããã§ãRubyã®ã¯ããŒãžã£ãŒãšãããã¯ã¯çžŠæ¹åã«è§£æãããéé£ãããŸã
Habréã®ããã㯠ã«ã€ããŠãã¯ããŒãžã£ãŒã«ã€ããŠ
詳现-以äžã®ãªã³ã¯ããããŠä»-ããªãã泚æãæãã¹ããã®ã
ãããã¯ãæåã«æ€èšããŸãã ãããã¯ã¯ãRubyæ§æã®äžéšã§ããããªããžã§ã¯ãã§ã¯ãªããåãªãå Žæã®äžéšã§ãã ãããã¯ã¯ãã¡ãœããã«ã³ãŒããæž¡ãããã«äœ¿çšãããŸãã ãããŠããã§ã«ã¡ãœããå ã§ãProcã¯ã©ã¹ã«ã©ãããããŠããããšãããããŸããã
ã¯ã©ã¹ãšã¡ãœããã®ã»ã¯ã·ã§ã³ã§ã¯ããããã¯ãã§ã«äœ¿çšãããŠããŸãã
Foo.instance_eval do # instance_eval def baz; bar + 1 end end
ããããããåºæ¬çãªäŸãèŠãŠã¿ãŸãããããRubyã§foreachãäœæããæ¹æ³ãã§ããããŸãã
[1,2,3].each do |val| p val # , p(val) - shortcut puts(val.inspect) end # 1 2 3 # , [1,2,3].each { |val| p val } # 1 2 3 [1,2,3].each_with_index { |val, i| puts val.to_s + ' ' + i.to_s } #
ãããã¯ãç¬èªã®ã¡ãœããã«è»¢éããå ŽåïŒ
def foo puts yield # puts yield + yield # , end foo { 2 } # 2 4 def bar(&block) # , puts yield block # end bar { 3 } # 3
ãããã¯ã¯åžžã«æåŸã®ãã©ã¡ãŒã¿ãŒã§ãããè€æ°ã®ãããã¯ãæž¡ãå¿ èŠãããå Žåã¯ãéåžžã®ãã©ã¡ãŒã¿ãŒãšããŠæž¡ãå¿ èŠããããŸããã€ãŸããProc.newãŸãã¯ã©ã ããäœæããå¿ èŠããããŸãã
Procã¯ã©ã¹ã®ãªããžã§ã¯ãã¯åžžã«ãããã¯ããååŸãããŸããããããã¯èªäœã¯æ§æã®äžéšã§ããProcã«ãªãã¡ãœããã«æž¡ãããšãã§ããŸããProcã³ã³ã¹ãã©ã¯ã¿ãŒã«æž¡ãããlambdaã䜿çšã§ããŸããããããã¯ãå€æ°ã«æžã蟌ãããšã¯ã§ããŸããã
proc = Proc.new { |a| a - 1 } # p proc.call(10) #9 p proc.class # Proc l = lambda { |a| a + 1 } # p l.call(10) #11 p l.class # Proc new_l = ->(a) { a + 2 } # (Ruby >= 2.0) p new_l.call(10) #12
ããŸããŸãªæ¹æ³ã§äœæãããProcã®åäœã«ã¯éãããããŸãã èšäºãèªã¿ãŸã ã
ããã§ãRubyã®ã¯ããŒãžã£ãŒãšãããã¯ã¯çžŠæ¹åã«è§£æãããéé£ãããŸã
Habréã®ããã㯠ã«ã€ããŠãã¯ããŒãžã£ãŒã«ã€ããŠ
ã¹ã¿ã€ã«
Rubyã§èšè¿°ããã®ãæ
£ç¿çã§ããæ¹æ³ã«ã€ããŠã¯ãGitHubã«å®å
šãªã¬ã€ãããããŸãã
èŠããã«ãé »ç¹ã«äœ¿çšãããïŒ
èŠããã«ãé »ç¹ã«äœ¿çšãããïŒ
- 2ã€ã®ã¹ããŒã¹ã§ã®ã€ã³ãã³ã
- ã¢ã³ããŒã¹ã³ã¢ä»ãã®å°æåã®ã¡ãœããåïŒdef method_name
- 倧æåã®ã¯ã©ã¹åãšã¢ãžã¥ãŒã«åïŒã¯ã©ã¹ClassName
- ã¡ãœãããtrue / falseãè¿ãå Žåãååã¯è³ªåã§çµããå¿ èŠããããŸãïŒåããnilïŒïŒ
- 2ã€ã®ã¡ãœããããããäžæ¹ããªããžã§ã¯ããå€æŽããããäžæ¹ãæ°ããã¡ãœãããè¿ãå Žåãæåã®ã¡ãœããã¯ãïŒãã§çµãããŸãã ïŒããšãã°ãè¡ã®downcaseã¡ãœãããšdowncaseïŒã¡ãœãã-æåã®ã¡ãœããã¯æ°ããã¡ãœãããè¿ãã2çªç®ã®ã¡ãœããã¯è¡èªäœãå€æŽããŸãïŒ
- ifïŒïŒValueïŒã®ä»£ããã«ãïŒvalueïŒä»¥å€ã®ãšã€ãªã¢ã¹ã䜿çšããããšããå§ãããŸã
- åäžè¡ã®ãããã¯ã¯æ¬åŒ§{...}ã§å²ãŸããè€æ°è¡ã®ãããã¯ã¯do ... endã§å²ãŸããŸã
RubyGems-ããã±ãŒãžãããŒãžã£ãŒ
RubyGemsã§ãªããã°ãRubyã®äžçã¯ããããå®å
šã«ç°ãªãã§ãããã
ãããã䜿çšãããšããããžã§ã¯ããã©ã€ãã©ãªã§è£å®ããããã»ã¹ã¯éåžžã«ç°¡åã«èŠããŸãã
䟿å®äžãäŸåé¢ä¿ç®¡çã«ã¯ãã³ãã©ãŒããããŸãïŒ
å®éã®ãããžã§ã¯ãã§ã¯ãäŸåé¢ä¿ã®ãªã¹ããè€æ°ã®ç»é¢ã«æ¡å€§ããå¯èœæ§ãããããããããžã§ã¯ãããµãŒããŒã«è»¢éããå Žåãå¿ èŠãªãã®ãæåã§ç¢ºèªããgem installãå®è¡ãããã³ã«ãã³ãã«ã€ã³ã¹ããŒã«ãå®è¡ããæ¹ãã¯ããã«äŸ¿å©ã§ãã ããŠãRailsã§ã¯Bundlerã¯ãã®ãŸãŸäœ¿çšãããŸãã
å®ç³èªäœã¯ãRailsã«é¢ããèšäºã§ç¢ºå®ã«åãäžããããŸãã
RubyGems-詳现
Bundlerã䜿çšããããŒãžã§ã³ã®ç®¡ç
ãžã§ã ã®çŽ¹ä»ã ããŒã1 ããŒã2
æåã®å®ç³ãæžã
RubyGemsçšã®gemãäœæãã
å®ç³ã®äœæ-ã¬ã€ã
ãããã䜿çšãããšããããžã§ã¯ããã©ã€ãã©ãªã§è£å®ããããã»ã¹ã¯éåžžã«ç°¡åã«èŠããŸãã
- rubygems.org ïŒãŸãã¯ruby-toolbox.comãäœ¿çš ïŒã§å¿ èŠãªãã®ãéžæããŸããããšãã°ãjson_pure-çŽç²ãªRubyã®JSONããŒãµãŒïŒCãªãïŒ
- gem install json_pure consoleãšå ¥åããŸã
- rbãã¡ã€ã«ã§ïŒ
require 'json/pure' # , github
䟿å®äžãäŸåé¢ä¿ç®¡çã«ã¯ãã³ãã©ãŒããããŸãïŒ
- gem install bundler
- ãã³ãã©ãŒã®åæå
- ç»å ŽããGemfileã«äŸåé¢ä¿ãå
¥åããŸãã
source 'https://rubygems.org' gem 'json_pure'
- ãã³ãã©ãŒã®ã€ã³ã¹ããŒã«
- ãããŠãããªãã®rbãã¡ã€ã«ã§
require 'rubygems' require 'bundler/setup'
å®éã®ãããžã§ã¯ãã§ã¯ãäŸåé¢ä¿ã®ãªã¹ããè€æ°ã®ç»é¢ã«æ¡å€§ããå¯èœæ§ãããããããããžã§ã¯ãããµãŒããŒã«è»¢éããå Žåãå¿ èŠãªãã®ãæåã§ç¢ºèªããgem installãå®è¡ãããã³ã«ãã³ãã«ã€ã³ã¹ããŒã«ãå®è¡ããæ¹ãã¯ããã«äŸ¿å©ã§ãã ããŠãRailsã§ã¯Bundlerã¯ãã®ãŸãŸäœ¿çšãããŸãã
å®ç³èªäœã¯ãRailsã«é¢ããèšäºã§ç¢ºå®ã«åãäžããããŸãã
RubyGems-詳现
Bundlerã䜿çšããããŒãžã§ã³ã®ç®¡ç
ãžã§ã ã®çŽ¹ä»ã ããŒã1 ããŒã2
æåã®å®ç³ãæžã
RubyGemsçšã®gemãäœæãã
å®ç³ã®äœæ-ã¬ã€ã
ã«ããŒãšC
æãéèŠãªRubyGemsæ©èœã¯ãã€ãã£ãæ¡åŒµæ©èœã§ã¯ãããŸããã ãã¹ãŠãåçŽã§ã-gemãšãšãã«ãæ·»ä»ãããCã³ãŒããã³ã³ãã€ã«ããgemèªäœã®ã³ãŒãããåŒã³åºãããšãã§ããŸãã ãã®ããããã®äžã«ã¯éåžžã«æ©æãªããŒãµãŒããããJavaScript V8ãå®ç³ã®åœ¢ã§ã€ã³ã¹ããŒã«ã§ããŸãã
ãããŠãããªãã¯ãããèŠããŠããå¿ èŠããããŸãïŒ ã€ã³ã©ã€ã³C ãããã¯åœ¹ã«ç«ã€ãããããŸããã èŠããã«ãRubyã³ãŒãã§ã¯ãCã³ãŒããå®è¡ã§ããŸããããã¯ãããšãã°æ°å€ã¢ã«ãŽãªãºã ãå®è£ ãããšãã«åœ¹ç«ã¡ãŸãã
C Rubyæ¡åŒµæ©èœã®çŽ¹ä»
ã«ããŒãšCãããŒã1 ã ããŒã2 ã ããŒã3 ã
ãããŠãããªãã¯ãããèŠããŠããå¿ èŠããããŸãïŒ ã€ã³ã©ã€ã³C ãããã¯åœ¹ã«ç«ã€ãããããŸããã èŠããã«ãRubyã³ãŒãã§ã¯ãCã³ãŒããå®è¡ã§ããŸããããã¯ãããšãã°æ°å€ã¢ã«ãŽãªãºã ãå®è£ ãããšãã«åœ¹ç«ã¡ãŸãã
C Rubyæ¡åŒµæ©èœã®çŽ¹ä»
ã«ããŒãšCãããŒã1 ã ããŒã2 ã ããŒã3 ã
ã¹ããªãŒã
ç°¡åãªã¹ããªãŒã ã®äŸïŒ
ã³ãŒãã¯ã³ã³ãœãŒã«ãthread started 100000ãã«åºåãããŸãã
äžäœã¬ãã«ã®ãã¡ã€ããŒã¯ãå®è¡ã·ãŒã±ã³ã¹ãå¶åŸ¡ã§ãããããã«ç°ãªãæ§æãæäŸããã¹ã¬ãããããã¡ã¢ãªãŒãšåæåã®ãªãŒããŒããããå°ãªããªããŸãã
ã³ãŒãã¯ããã¡ã€ããŒ1ã³ã³ããã¹ããã¡ã€ããŒ2ããåºåããŸãã
ããã«ã¯GILãå¿ èŠã§ãã
ã³ãŒãã¯MRIã§1,000,000ãåºåããjRubyãšRubiniusã§ãããç¥ã£ãŠããŸãïŒ100,000ã1,000,000ïŒã
Rubyã§ã¹ã¬ããã䜿çšãã
thread = Thread.new do # a = 0 1000000.times { a+= 1 } # puts a # end puts 'thread started' # thread.join #
ã³ãŒãã¯ã³ã³ãœãŒã«ãthread started 100000ãã«åºåãããŸãã
äžäœã¬ãã«ã®ãã¡ã€ããŒã¯ãå®è¡ã·ãŒã±ã³ã¹ãå¶åŸ¡ã§ãããããã«ç°ãªãæ§æãæäŸããã¹ã¬ãããããã¡ã¢ãªãŒãšåæåã®ãªãŒããŒããããå°ãªããªããŸãã
fiber = Fiber.new do # Fiber.yield "fiber 1" # 'fiber 2' # end puts fiber.resume # puts 'context' puts fiber.resume #
ã³ãŒãã¯ããã¡ã€ããŒ1ã³ã³ããã¹ããã¡ã€ããŒ2ããåºåããŸãã
GILãšçã®ãã«ãã¹ã¬ããã«ã€ããŠ
Rubyã¯ãã«ãã¹ã¬ããããµããŒãããŠãããã€ã³ã¿ãŒããªã¿ãŒã®ããŒãžã§ã³ã«ãã£ãŠå®è£
ãç°ãªããŸãã ã¡ã€ã³ãã©ã³ãã®GILã¯èšç®ã®äžŠååããŒãã«ããŸãããã¹ã¬ããã䜿çšããããšã¯éåæã®å®è£
ã«æå³ããããŸãã æãç°¡åãªäŸïŒãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ããªãã¹ã³ããªãããåæã«ããã€ãã®æäœãå®è¡ã§ããŸãã ãŸãã¯ãããŒã¿ããŒã¹ã«ãªã¯ãšã¹ããéä¿¡ããŠãããã¹ã¬ããã§å¿çãåŸ
æ©ããå¥ã®ã¹ã¬ããã§é»åã¡ãŒã«ãéä¿¡ããå®äºãåŸ
ããã«å¿çããŠãŒã¶ãŒã«éä¿¡ã§ããŸãã ãã ããåèšå®è¡æéã«åã€ããšã¯ãããŸããã å®éãåžžã«1ã€ã®ã³ã¢ã®ã¿ãããŒããããŸãã
ãã®å¶éãåé¿ããã«ã¯ãGILã®ãªãããŒãžã§ã³ïŒjRubyãŸãã¯RubiniusïŒã䜿çšã§ããŸãïŒãããã®ã¹ã¬ããã®å®å šæ§ã¯ã¯ããã«äœãããšã«æ³šæããŠãã ãã-GILãå¿ èŠã§ãïŒã å¥ã®ãªãã·ã§ã³ã¯ãããã°ã©ã ã®ããã€ãã®åå¥ã®ã³ããŒãå®è¡ãããã UNIXãã©ãŒã¯ã䜿çšããããšã§ãïŒåœç¶ããã®ãããªã¯ãŒã«ãŒã®ããŒã«ã§Rubyã¹ã¯ãªããã管çããããšã¯ããªãå¯èœã§ãïŒã
ããããã¹ãŠç¥ã£ãåŸãåå¿è ã®ããã«ãŒã¯æ··ä¹±ãããããããŸããïŒé çãããŸããªããã¡ã«åœŒã®48ã¹ã¬ãããµãŒããŒã®èœåããã«ã«æŽ»çšãããïŒã å®éã«ã¯ãå®éã®ãã«ãã¹ã¬ããã¯å¿ ãããå¿ èŠã§ã¯ãããŸããïŒå Žåã«ãã£ãŠã¯-å¿ èŠã«å¿ããŠãåŸã§ïŒã ããã«ãå€ãã®ã¿ã¹ã¯ã«ã¯ãæ¢è£œã®HTTPãµãŒããŒïŒgemã«é¢ããèšäºã§èª¬æããŸãïŒãéåæãã¬ãŒã ã¯ãŒã¯ãªã©ãããŸããŸãªã¢ãããŒããå®è£ ããã察å¿ããgemããããŸãã
ãã®å¶éãåé¿ããã«ã¯ãGILã®ãªãããŒãžã§ã³ïŒjRubyãŸãã¯RubiniusïŒã䜿çšã§ããŸãïŒãããã®ã¹ã¬ããã®å®å šæ§ã¯ã¯ããã«äœãããšã«æ³šæããŠãã ãã-GILãå¿ èŠã§ãïŒã å¥ã®ãªãã·ã§ã³ã¯ãããã°ã©ã ã®ããã€ãã®åå¥ã®ã³ããŒãå®è¡ãããã UNIXãã©ãŒã¯ã䜿çšããããšã§ãïŒåœç¶ããã®ãããªã¯ãŒã«ãŒã®ããŒã«ã§Rubyã¹ã¯ãªããã管çããããšã¯ããªãå¯èœã§ãïŒã
ããããã¹ãŠç¥ã£ãåŸãåå¿è ã®ããã«ãŒã¯æ··ä¹±ãããããããŸããïŒé çãããŸããªããã¡ã«åœŒã®48ã¹ã¬ãããµãŒããŒã®èœåããã«ã«æŽ»çšãããïŒã å®éã«ã¯ãå®éã®ãã«ãã¹ã¬ããã¯å¿ ãããå¿ èŠã§ã¯ãããŸããïŒå Žåã«ãã£ãŠã¯-å¿ èŠã«å¿ããŠãåŸã§ïŒã ããã«ãå€ãã®ã¿ã¹ã¯ã«ã¯ãæ¢è£œã®HTTPãµãŒããŒïŒgemã«é¢ããèšäºã§èª¬æããŸãïŒãéåæãã¬ãŒã ã¯ãŒã¯ãªã©ãããŸããŸãªã¢ãããŒããå®è£ ããã察å¿ããgemããããŸãã
ããã«ã¯GILãå¿ èŠã§ãã
a = 0 threads = [] 10.times do # 10 threads << Thread.new do # 100000.times { a+= 1 } # 100 000 end end threads.each(&:join) # puts a #
ã³ãŒãã¯MRIã§1,000,000ãåºåããjRubyãšRubiniusã§ãããç¥ã£ãŠããŸãïŒ100,000ã1,000,000ïŒã
Rubyã§ã¹ã¬ããã䜿çšãã
ZooããŒãžã§ã³
MRIïŒMatzã®Rubyã€ã³ã¿ãŒããªã¿ãŒïŒã¯ããã®äœæè
ã§ããæŸæ¬å¹žå®ããŸãã¯åã«Matzã®Rubyã®ã¡ã€ã³ãã©ã³ãã§ãã Cã§å®è£
ãããŠããŸããåã«ãRubyããšèšããšããéåžžã¯ãããæå³ããŸãã ãããžã§ã¯ãYARVïŒãŸã å¥ã®Ruby VMïŒãšããŒãžãããããŒãžã§ã³1.9ããã ãã®äž»ãªæ©èœã®1ã€ã¯ãããããGILïŒGlobal Interpreter LockïŒã§ãã圌ã㯠Habréã§ããã«ã€ããŠæžããŸããïŒ ç¶ã ïŒ çŸåšã®Ruby 2.0 UPDã®ããŒãžã§ã³ã¯ã Ruby 2.1ããªãªãŒã¹ãããŸãã ã Ruby 2.1ã«ã¯äœãæåŸ
ã§ããŸããïŒ
jRubyã¯ãJavaã§èšè¿°ãããJVMã§å®è¡ãããããã«å¿ããŠJavaã³ãŒããšçµ±åãããŸãã æ®å¿µãªãããèšèªããŒãžã§ã³ã¯MRIã«é ãããšã£ãŠããŸãïŒRuby 1.9.3ã¯çŸåšå®è£ ãããŠããŸãïŒããåãRailsã¯åå転ã§èµ·åããŸãã
Rubinius㯠ãMRIã«åºã¥ããŠããŸããããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã¹ã¬ããã䜿çšããRubyèªäœã§æ倧éã«èšè¿°ãããŠããŸãã ããŒãžã§ã³ã«ãããšãéåžžã¯ææ°ã®ç¶æ ã§ãã
çžäºã«é¢é£ãã3ã€ã®å®è£ ãã¹ãŠã®é床ã¯ã¿ã¹ã¯ããšã«ç°ãªããäžäœäžäœããã®ã¡ã¢ãªæ¶è²»ã®é¢ã§æã倧é£ããªã®ã¯jRubyã§ãã
MacRuby-LLVMã®Objective-Cãšé£åããŠã以åã®RubyCocoaãããžã§ã¯ãã眮ãæããŸãã iOSéçºã«ã¯ãMacRuby- RubyMotionã®ãã©ãŒã¯ããããŸãã
IronRubyã¯.NETå®è£ ã§ãã ãã®ç涯ãéããŠãããã¯æã æŸæ£ããããã®åŸéçºãåéãããŸãã
ãªããŒã«ã¯ãRubyããJavaScriptãžã®ãã©ã³ã¹ã¬ãŒã¿ãŒã§ãã ãããã圌ããç®ç«ã£ãäœããæåŸ ããªãã§ãã ãããããã¯Node.jsçšã®jRubyã§ã¯ãããŸãã-ããã¯åã«Rubyã§jQueryã³ãŒããæžãããšãå¯èœã«ããŸãã ãŸãã¯ãNode.jsã§ã³ãŒããè¡šçŸããŸãã äžè¬ã«ãCoffeeScriptã®ããŒãã®ããªãšãŒã·ã§ã³ã
Ruby Enterprise Edition ïŒREEïŒ-ã¹ããã€ãã®ã«ããŒã ãããžã§ã¯ãã¯ããã®ååšãçµäºããŸããã æ°ããããŒãžã§ã³ã§ãããè¬ç©ã䜿çšããªãå Žåã¯éåžžã«ããŸãæ©èœããŸãã
ç¹å®ã®ããŒãžã§ã³ã§ããMagLevã«èšåãããšãã¯ã©ãŠãã€ã³ãã©ã¹ãã©ã¯ãã£ã®å±éã«åœ¹ç«ã¡ãŸãã
ãŸããèå³æ·±ãã®ã¯mrubyãããžã§ã¯ãã§ãMatzãåå ããŠããŸãã ããã¯åã蟌ã¿Rubyã§ãã ãããžã§ã¯ãã¯ãŸã å®äºããŠããŸããããéåžžã«ææã«èŠããŸããã ãããç§ãã¡ã¯Arduinoã§ã«ããŒãåŸ
ã£ãŠããŸãã mruby-arduino ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãéçºããããã«èšèšãããMobiRubyã«åºã¥ããŠããŸãã
ãŸããã¹ããã¯ã KidsRuby ãå€ãããŽãé£æ³ãããããšãæå³ããŸãã
jRubyã¯ãJavaã§èšè¿°ãããJVMã§å®è¡ãããããã«å¿ããŠJavaã³ãŒããšçµ±åãããŸãã æ®å¿µãªãããèšèªããŒãžã§ã³ã¯MRIã«é ãããšã£ãŠããŸãïŒRuby 1.9.3ã¯çŸåšå®è£ ãããŠããŸãïŒããåãRailsã¯åå転ã§èµ·åããŸãã
Rubinius㯠ãMRIã«åºã¥ããŠããŸããããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã¹ã¬ããã䜿çšããRubyèªäœã§æ倧éã«èšè¿°ãããŠããŸãã ããŒãžã§ã³ã«ãããšãéåžžã¯ææ°ã®ç¶æ ã§ãã
çžäºã«é¢é£ãã3ã€ã®å®è£ ãã¹ãŠã®é床ã¯ã¿ã¹ã¯ããšã«ç°ãªããäžäœäžäœããã®ã¡ã¢ãªæ¶è²»ã®é¢ã§æã倧é£ããªã®ã¯jRubyã§ãã
MacRuby-LLVMã®Objective-Cãšé£åããŠã以åã®RubyCocoaãããžã§ã¯ãã眮ãæããŸãã iOSéçºã«ã¯ãMacRuby- RubyMotionã®ãã©ãŒã¯ããããŸãã
IronRubyã¯.NETå®è£ ã§ãã ãã®ç涯ãéããŠãããã¯æã æŸæ£ããããã®åŸéçºãåéãããŸãã
ãªããŒã«ã¯ãRubyããJavaScriptãžã®ãã©ã³ã¹ã¬ãŒã¿ãŒã§ãã ãããã圌ããç®ç«ã£ãäœããæåŸ ããªãã§ãã ãããããã¯Node.jsçšã®jRubyã§ã¯ãããŸãã-ããã¯åã«Rubyã§jQueryã³ãŒããæžãããšãå¯èœã«ããŸãã ãŸãã¯ãNode.jsã§ã³ãŒããè¡šçŸããŸãã äžè¬ã«ãCoffeeScriptã®ããŒãã®ããªãšãŒã·ã§ã³ã
Ruby Enterprise Edition ïŒREEïŒ-ã¹ããã€ãã®ã«ããŒã ãããžã§ã¯ãã¯ããã®ååšãçµäºããŸããã æ°ããããŒãžã§ã³ã§ãããè¬ç©ã䜿çšããªãå Žåã¯éåžžã«ããŸãæ©èœããŸãã
ç¹å®ã®ããŒãžã§ã³ã§ããMagLevã«èšåãããšãã¯ã©ãŠãã€ã³ãã©ã¹ãã©ã¯ãã£ã®å±éã«åœ¹ç«ã¡ãŸãã
ãŸããèå³æ·±ãã®ã¯mrubyãããžã§ã¯ãã§ãMatzãåå ããŠããŸãã ããã¯åã蟌ã¿Rubyã§ãã ãããžã§ã¯ãã¯ãŸã å®äºããŠããŸããããéåžžã«ææã«èŠããŸãã
ãŸããã¹ããã¯ã KidsRuby ãå€ãããŽãé£æ³ãããããšãæå³ããŸãã
updïŒ
learnxinyminutes.com/docs/rubyã¯Rubyã³ãŒãã®äŸã§ãã