æšå¹Žãç§ã¯ããRailsã䜿çšããªãããšã決å®ããgemsã§RailsããµããŒãããŸããã ããã«ãä»äºã§åã³Railsã«åºäŒãããšããªãããã«æåãå°œãããŸãã
ç§ã¯å€ãã®Rubyãããžã§ã¯ãã«é¢äžããŠãããããRailsã奜ãã§ã¯ãªãçç±ããRailsã«ã©ããªåé¡ãããã®ãââãªã©ãããèãããŸãã ããã§ããã¹ãŠããŸãšããŠèª¬æããããã«ããã®é·ãæçš¿ãæžãããšã«ããŸããã
ãã®èšäºã¯éšåçã«æè¡çã§ãããéšåçã«å人çã§ãããæ®å¿µãªããéšåçã«æã£ãŠããŸãã ããã¯ã泚ç®ãéãããã蚪åè ãç²åŸãããããªãããã«æžããŠããŸããããã«ã¯èå³ããããŸããã Railsã«ã€ããŠã®è°è«ãçµäºãããã®ã§ãåã質åãèããã³ã«ãªã³ã¯ãæäŸããå Žæãããã®ã§ããããæžããŸãã
ãŸãããåå¿è ã®Railséçºè ãã¯ããããèããããšããªããããããªãããã€ãã®ã¹ããŒãªãŒããäŒãããå°ãªããšããããã«ã€ããŠèããã®ã«ååéèŠãªããã€ãã®åé¡ã匷調ããããšæããŸãã
è¯ãéšå
Railsã®ãã¹ãŠãæªããééã£ãŠããããããŠãã¬ãŒã ã¯ãŒã¯ãæªã®å ·çŸåã§ãããšãããµãã¯ããŸããã ããã¯äžå ¬å¹³ã§ããã æããªããšã§ãããã Railsã«ã€ããŠå€ãã®ããšãèšãããšãã§ããŸãã ãããŠããã©ã³ã¹ãç¶æããããã®ããã€ãã®ïŒæçœãªïŒïŒäºæã«èšåããŸãã
ãã®ãããRailsã¯Rubyã®äººæ°ãé«ããŸããã ããã¯äºå®ã§ãã ç§ã¯Rubyéçºè ã«ãªããŸããããããç§ã®ãã£ãªã¢ãå€ããRailsã®ãããã§å€ãã®çŽ æŽãããæ©äŒãäžããŠãããŸããã åœæã®å€ãã®ã«ãã¹ãã¯åãããã«è¡ããŸããã Railsã®ãããã§ããã«ããŸãã å€ãã®å ŽåãRailsã¯å®éã«äººã ã«å€§ããªåœ±é¿ãäžããæåéã圌ãã®ç掻ãæ¹åããŸããã 人ã ã¯ããè¯ââãä»äºãããè¯ãæ©äŒããããŠè¯ããéãåŸãŸããã ããã¯ç§ãã¡ã®å€ãã«ãšã£ãŠãã²ãŒã ããšããçšèªã®æ ¹æ¬çãªå€åã§ããã
é·å¹Žã«ããããRailsïŒDHHã¯ãä»ã®ã³ãã¥ããã£ã®äººã ãå«ãå€ãã®äººã ã«ã圌ããããŠããããšãåèããããä¿ããŸããã ããšãã°ãRailsã¯PHPã³ãã¥ããã£ã®æ¹åã«è²¢ç®ãããšç¢ºä¿¡ããŠããŸãïŒç§ãééã£ãŠããããšã蚌æããããšã¯ã§ããŸãããSymfonyãRailsããå€ãã®ã€ã³ã¹ãã¬ãŒã·ã§ã³ãåŸãæ¹æ³ã«ã€ããŠã¯ããªãé®®æãªæãåºããããŸãïŒã Javaã§ãåãããšãèµ·ãããŸãããPlayãã¬ãŒã ã¯ãŒã¯ã¯äžäŸã§ãã
ä»ã«ãçŽ æŽãããé¢ããããŸãã Railsã¯åžžã«äœ¿ãããããšWebã¢ããªã±ãŒã·ã§ã³ã®è¿ éãªæ§ç¯ãç®æããŠãããRails Girlsãªã©ã®ã€ãã·ã¢ããã®æåã«ã€ãªãã£ãŠããŸãã Railsã¯ãããã°ã©ãã³ã°çµéšããªããŠãæ¯èŒççæéã§ç¬èªã«äœããäœæã§ããããšã人ã ã«èšŒæããŠããŸãã ããã¯ãããã§ãªããã°ããã°ã©ããŒã«ãªãããšããèããªã人ã ã«ãšã£ãŠãããã°ã©ãã³ã°ã®äžçãžã®å ¥ãå£ã«ãªãããããããé©ãã¹ãããšã§ãã
ç§ã®æ
ç§ã®çµæŽãšRailsã«æ¥ãçµç·¯ã«ã€ããŠå°ãã話ããŸãããã
ç§ã®è«æã¯Railsã«ã€ããŠã ã£ãã®ã§ã2006幎ã®çµããã«Rubyã䜿ãå§ããŸããã ç§ã¯åæ¥èšŒæžãæžããªããèšèªãå匷ããŸããã 楜ããã£ãããé¢çœãã£ãããç§ã«ãšã£ãŠã¯æ°ãããã®ã§ããã ãã®åŸãç§ã¯ãŸã PHPéçºè ãšããŠåããŠããŸããã ãããŠã2005幎ãã2005幎ã®å žåçãªPHPããã°ã©ããšããŠãç§ã¯ããããã¹ãŠã®å žåçãªããšãããŸããïŒãã¬ãŒã³ããŒã·ã§ã³ãã³ãã¬ãŒãã§SQLã¯ãšãªãæžããæç¶ãåã¹ã¿ã€ã«ã§æžããããããç§èªèº«ã®ãã¬ãŒã ã¯ãŒã¯ãšç§èªèº«ã®ORMãéçºãã倱æããŠçãå°œããŸããã CãC ++ãJavaãããã³Pythonã«é¢ããããçšåºŠã®ç¥èã«ãããããããRailsã®ããã«Rubyã«åãæ¿ããããšã«ããŸããã ç§ã¯åæ¥èšŒæžã®ããã«ããããéžãã ã®ã§ãããå¶ç¶å°å ã®Railsã¹ãã¢ããã®ä»äºã®ãªãã¡ãŒãèŠã€ããŸããã ç§ã¯çãã圌ãã¯ç§ãéã£ãã ããã¯2007幎3æã§ããã
ãã®ããã2007幎3æã«ãããšããŠRubyã䜿ãå§ãã2009幎ã®ã©ããã§Rubyã®OpenSourceãããžã§ã¯ãã«è²¢ç®ãå§ããŸããã ãã以æ¥ãäž»ã«å€§èŠæš¡ã§è€éãªãããžã§ã¯ãã§ãã³ã³ãµã«ãã£ã³ã°äŒç€Ÿã§3.5幎éåããŠããŸãã ãã®åŸã圌ã¯æ°å¹ŽéããªãŒã©ã³ãµãŒãšããŠåããå€ãã®ã¯ã©ã€ã¢ã³ããšä»äºããã圌èªèº«ã®äŒç€Ÿãéãããã®åŸãã«ã¿ã€ã ã§ããããŠåã³ããªãŒã©ã³ã¹ã§åããŸããããããŠä»ãç§ã¯åã³ãã«ã¿ã€ã ã®åŸæ¥å¡ã§ãã Railsã¢ããªã±ãŒã·ã§ã³ããŒãããäœæããæ¯èŒç倧èŠæš¡ãªRailsã¢ããªã±ãŒã·ã§ã³ã®éçºã«åå ããŸããã
話ãèãããŠãã ããã æ¢åã®ãããžã§ã¯ãã«åå ãããã ãªã³ã©ã€ã³ã·ã§ããã³ã°ã³ãã¥ããã£ã®Webãµã€ããéå¶ããçŽ æŽãããã¢ããªã§ããã æŽç·Žããã販売ã¢ãã«ãè€éãªããã¢ãŒã·ã§ã³ãååã®è€éãªæ§æãã¯ãŒãã³ããŠãŒã¶ãŒã°ã«ãŒããã¡ãã»ãŒãžãªã©ããã¹ãŠæã£ãŠããŸããã ããã€ãã®æ°ããæ©èœãè¿œå ããããã«åå ããŸããã ç§ã®æåã®ã¿ã¹ã¯ã®1ã€ã¯ã...ããŒãžäžã®äœããžã®ãªã³ã¯ãè¿œå ããããšã§ããã ãã®æããªãªã³ã¯ãè¿œå ããã®ã«æ°æ¥ããããŸããã ãªãã§ïŒ ãã®ã¢ããªã±ãŒã·ã§ã³ã¯ãè€éãªãã¡ã€ã³ããžãã¯ã®å€§ããªçã§ãããããã€ãã®ã¬ã€ã€ãŒã«å±éããããªã³ã¯ãè¿œå ããç®çã®ãã³ãã¬ãŒããèŠã€ããããšãã容æã§ã¯ãªãã»ã©è€éãªãã¥ãŒãåããŠããŸããã ãã®ãªã³ã¯ãäœæããããã«æ³šæããã®ããŒã¿ãå¿ èŠã ã£ãã®ã§ãã©ã®ããã«ååŸãããã¯æããã§ã¯ãããŸããã§ããã å éšã¢ããªã±ãŒã·ã§ã³APIããªããActiveRecordã®ã¿ã«äŸåããŠããããããã®ã¿ã¹ã¯ã¯éåžžã«å°é£ã§ããã ç§ã¯åè«ã§ã¯ãããŸããã
Railsã«å¯Ÿããç§ã®æåã®äžæºã¯ããªãæ©ãææããå§ãŸããŸããã ActiveRecordã䜿çšããŠããçŽ6ãæåŸã«äžæºãæããŸããã ãŸããRailsãJavaScriptãšAJAXã«ã©ã®ããã«ã¢ãããŒããããã«ã€ããŠãæ°ã«å
¥ã£ãŠããŸããã RailsãUJSã¢ãããŒããæ¡çšããåã®ããŒãžã§ã³ãèŠããŠããªãããèŠã€ããããªãã£ãå ŽåïŒ2007-2008幎ã®è°è«ã®ãããïŒãRailsã¯ãã³ãã¬ãŒãã§ã€ã³ã©ã€ã³JavaScriptã䜿çšããå€ãã®åä»ãªãã«ããŒã«ãã£ãŠçæãããŸããã Railsã®ãã¹ãŠã®æ©èœãšåæ§ã«ããæåã¯ç°¡åã§æ¥œããããã®ã§ãããããµããŒããããŠããªãããããã«ãªããŸããã æçµçã«ãRailsã¯ããŒãžã§ã³3.0ã§UJSãæ¡çšããã³ãã¥ããã£ã¯ãããæè¯ã®ã¢ãããŒãã§ããããšã«åæããŠããããã§ãã ãã®ãšããMerb㯠殺ããã Railsã«æ³šãããŸããã ãããããªãã¯Merbãäœã§ãããåãããŸãããïŒ OKãããã«ã€ããŠè©±ããŸãããã
MerbïŒDataMapperã«æºè¶³ããçç±
Merbã¯ãEzra Zygmuntowiczã«ãã£ãŠäœæããããããžã§ã¯ãã§ãã ãã¡ã€ã«ã®ããŠã³ããŒããé«éåããã¹ã¬ããã»ãŒãã«ããããã®ããã¯ãšããŠå§ãŸããŸããã ãããŠã圌ã¯ãã®ããã¯ãããWebã¢ããªã±ãŒã·ã§ã³ãéçºããããã®ã¢ãžã¥ãŒã«åŒã®ã¹ã¬ããã»ãŒãã§é«éãªãã«ã¹ã¿ãã¯ãã¬ãŒã ã¯ãŒã¯ãžãšãèå³æ·±ãæ¹æ³ã§åãçµã¿ãŸããã 2008幎ã«äººã ãMerbã«ã€ããŠè©±ãå§ãããšãã®ããšãèŠããŠããŸãããæ°ããããšãèµ·ãã£ãŠããŠãããã¯çŽ æŽãããããšã ãšããé©ãã¹ãæèŠã§ããïŒ
APIã¢ãŒããRailsã«ç»å Žãããšããããªãã¯åãã§ããã§ããããïŒ ããŒããMerbã«ã¯3ã€ã®ã¢ãŒãããããŸããããã«ã¹ã¿ãã¯ã¢ãŒããAPIã¢ãŒãããã€ã¯ãã¢ãŒãã§ãæå°éã«ã«ãããããŠããŸããããããã¯Rubyã®äžçã§æãéããã®ã ã£ãããšãä»ã§ãèŠããŠããŸãã ããã¯7幎以äžåã§ãã èããŠã¿ãŠãã ããã
åæã«ãå¥ã®ãããžã§ã¯ãDataMapperãã³ãã¥ããã£ã®æ³šç®ãéããŸããã 圌ã¯Merbã¹ã¿ãã¯ã®äžéšãšãªããORMã®éžæè¢ã«ãªããŸããã ActiveRecordã«ãã£ãå€ãã®åé¡ã圌ãã©ã®ããã«è§£æ±ºããããç§ã¯ãšãŠãè奮ããŠããŸããã ãã§ã«2008ã9ã«ããDataMapperã«ã¯ãã¢ãã«ãã«ã¹ã¿ã ã¿ã€ããé 延ã¯ãšãªããã匷åãªDSLã¯ãšãªãªã©ã®å±æ§å®çŸ©ããããŸãã 2008幎ãYehuda Katzã¯ãããžã§ã¯ãã®äžå¿çãªéçºè ã®1人ã§ããã圌ã¯ç©æ¥µçã«ãããžã§ã¯ããæšé²ã ãããã«ã¯å€§ããªè奮ããããŸããã DataMapperã¯ãæçµçã«2008ã9幎ã®ActiveRecordãããåªããORMã§ããã Sequelãã»ãŒåæã«ç»å Žããåªãããœãªã¥ãŒã·ã§ã³ã§ããã«ããããããActiveRecordãããã¯ããã«äœ¿çšãããŠããªãããšã¯èšããŸã§ããããŸããã
MerbãšDataMapperã¯ãRailsã«å¯ŸããŠããè¯ãããšãè¡ããå¥å šãªç«¶äºãçã¿åºãããšãã§ãããšããåžæããããããã®ã§ãç§ã¯åãã§ããŸããã ã©ã¡ãã®ãããžã§ã¯ããã¢ãžã¥ãŒã«åŒã¢ãããŒããšã¹ã¬ããã»ãŒãã奚å±ããŠããã ãã§ãªããã³ãŒããèšè¿°ããããã®ããåªããæšæºã§ãããšããããšã¯èšããŸã§ããªããç§ã¯è奮ããŠããŸããã
MerbãRailsã«ã泚ããã ãããŒãžã§ã³3.0ã®å€§èŠæš¡ãªRailsãªãã¡ã¯ã¿ãªã³ã°ãè¡ããããããäž¡æ¹ã®ãããžã§ã¯ããæçµçã«Railsã«æ®ºãããŸããã DataMapperã¯ã³ãã¥ããã£ã®æ³šç®ã倱ããããŸããµããŒãããªããã°ãããžã§ã¯ããéçºã§ããŸããã§ãããããã¯ãMerbãRailsã«ã泚ããããªãã£ãå Žåãšåæ§ã§ããã
ãã®ãœãªã¥ãŒã·ã§ã³ã«ãããRubyãšã³ã·ã¹ãã ã¯å€æ°ã®éèŠãªãããžã§ã¯ãã倱ããRailsã®ã¿ãæ©æµãåããŸããã Merbã殺ããšãã決å®ãè¯ããã©ããã¯å人çãªæèŠã®åé¡ã§ããã決å®ããªãããªãã£ãå Žåã«äœãèµ·ããåŸãããæšæž¬ããããšãã§ããŸãã ãããã競äºã«ã€ããŠã¯ç°¡åãªçå®ããããŸã-ããã¯çŽ æŽãããããšã§ãã 競äºã®æ¬ åŠã¯ç¬å ãæå³ããç¬å ã«ã€ããŠã®åçŽãªçå®ããããŸã-ããã¯çŽ æŽãããããšã§ã¯ãããŸããã 競äºã¯é²æ©ãšé©æ°ãä¿é²ãã競äºã¯å¥å šãªçæ ç³»ãçã¿åºãã人ã ãããå€ãã®å ±åäœæ¥ãè¡ã£ãŠå ±éç¹ãå ±æããããè¯ãåºç€ãäœæã§ããããã«ããŸãã ããã¯Rubyã³ãã¥ããã£ã§èµ·ããããšã§ã¯ãããŸããã
MerbïŒDataMapperãïŒé·æçã«ïŒã»ãŒç Žå£ãããåŸãRubyãšã³ã·ã¹ãã ã§äœãæ°ãããã®ãäœæããããšã¯éåžžã«å°é£ã§ããã 人ã ã¯Railsã«çŠç¹ãåãããŠãããããæ°ãããããžã§ã¯ãã¯å€§ããªåœ±é¿ãåããŸããã æ§ããã«èšã£ãŠããæ°ããã¢ã€ãã¢ãæã¡ç Žãã®ã¯å°é£ã§ãããäœãã衚瀺ãããã³ã«ã人ã ã¯åã«Railsã®ããã«ãªããRailsãšããŸãããããããã§ãã Railsã§åäœãããããžã§ã¯ããäœæããããšã¯å°é£ã§ãããåŸã§ãã®è³ªåã«æ»ããŸãã
ãããã®å¹ŽæãçµãŠãæçµçã«ã¯ãšã³ã·ã¹ãã å šäœãæ¯é ãã1ã€ã®ãã¬ãŒã ã¯ãŒã¯ã«å°éããäœå人ãã®éçºè ã«åœ±é¿ãäžããéåžžã«ç©è°ãéžãæšæºãäœæããŸããã 2008幎ã«æé·ãå§ããRailsã«ãã£ãŠæå¶ãããçæ ç³»ã®å€æ§æ§ã倱ããŸããã
ãããç§ã¯ãããé°è¬çè«ã®ããã«èãããæ¹æ³ãç¥ã£ãŠããŸããããã®ããã«ãšãããªãã§ãã ããã ããã§ç§ãèšã£ãããšã¯ãç§ã®å人çãªææ ãšæ··ãã£ãäºå®ã§ãã 2009幎æ«ã«DataMapperã«åå ãå§ããŸããããDataMapperã厩å£ããã®ãèŠãã®ã¯éåžžã«æ²ããã£ãã§ãã
é£ããïŒ
è€éãã¯ç§ãã¡ã®æ倧ã®æµã§ãã Railsã«å¯Ÿãã人ã ã®ç±æã¯èãå§ããŸãããè€éãã®å¢å€§ã«å¯ŸåŠããããã«ãå€ãã®çåã解決ãããªãããšãããã«å€æããããã§ãã DHHïŒcoããæäŸãããã®ã å€ãã®åé¡ã解決ããã®ã«ååã§ã¯ãªãã£ããããæ°å人ã®éçºè ã2007ã2008幎ã«èŠåŽãå§ããŸããã Merb / DataMapperãæ¹åãããããããšãæåŸ ãã人ãããŸããããäœãèµ·ãã£ãã®ããããã£ãã®ã§ãRails 3.0ããªãªãŒã¹ããã2010幎ã«å šå¡ãRailsã«æ»ããŸããã
æ°æ¥åã誰ããããµãŒãã¹ãªããžã§ã¯ããã䜿çšããŠã³ãŒããæŽçããããšã«é¢ããèšäºãžã®ãªã³ã¯ã/ r / rubyââã«æçš¿ããŸããã ããã¯ããã®ãããªå€ãã®èšäºã®1ã€ã§ãã ãããæè¿ã®ãã¬ã³ãã ãšæãå Žåã¯ã2010幎3æã®James Golickã®èšäºãCrazyãHereticalãand AwesomeïŒThe Way I Write Rails Appsããã芧ãã ããã
ç§ãã¡ã¯ãçŽ6幎éã§Railsã¢ããªã±ãŒã·ã§ã³ã®ã¢ãŒããã¯ãã£ãæ¹åããæ¹æ³ã«ã€ããŠè©±ãåã£ãŠããŸããã ç§ã¯ã§ããéããã®è°è«ã«è²¢ç®ããããšããŸãã-èšäºãäŒè°ã§ã®ã¹ããŒããæ§ã ãªè€éãªåé¡ã解決ããããšããå€ãã®ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã«åãçµã¿ãŸãã
ãã ãããã®ãããªè°è«ãã¢ã€ãã¢ã¯ãRails Core Teamã®ã¡ã³ããŒãç¹ã«DHHã«ãã£ãŠåžžã«ç¬ãããŸãã ããã¯ç§ãè ãããèœèãããŸããããããŠããããç§ãRailsã«è²¢ç®ããããšããããšããªãçç±ã§ãã ç§ã®ææ¡ãå¹ãé£ã°ãããããšã«ãªããšç¢ºä¿¡ããŠããŸãã ç¿ãããïŒ ãããåé¡ãããŸããã10幎åã倧奜ãã§ãã æ°ããæœè±¡åïŒ èª°ããããå¿ èŠãšããŠããããRailsã¯ç°¡åã§ãïŒ TDDïŒ åé¡ãããŸããã 圌女ã¯æ»ãã§ããŸããå¿é ããªãã§ãã ããïŒ ActiveRecordã¯è¥å€§åããŠããŸã-ããã§ãããã¯ãšãŠã䟿å©ã§ãã ããã«æ©èœãè¿œå ããŸãããïŒ
Railsã®ãšã³ã·ã¹ãã ãç¹ã«ãã®ã³ã¢ããŒã ã¯ãç§ã«è¯ãå°è±¡ãäžããããšã¯ãããŸãããå€æŽãææ¡ããããšãæããŠããããšãèªããããšã¯åé¡ã§ã¯ãããŸããã ç§ãææ¡ããæåã®ããšã¯ãActiveSupportãåé€ããŠãã ãããã§ãããããããã¯ç¹ã«åœãŠã¯ãŸããŸãïŒç¬...ãããæ³åããŠãã ããïŒïŒã
ããŠãæè¡çãªè©³çŽ°ã«åãæãããŸãããã
å©äŸ¿æ§æåã®ãã¶ã€ã³ã¬ãŒã«
å ã»ã©èšã£ãããã«ãRailsã¯äœ¿ãããããéèŠããŠæ§ç¯ãããŸããã ãããåçŽããšæ··åããªãã§ãã ããã ã¡ããã©æšæ¥ãç§ã¯ããããã¹ãŠèšã£ãŠãããã®ãã€ãŒãã«åºäŒããŸããïŒ
Railsã®ä»çµã¿ã次ã«ç€ºããŸããå žåçãªäŸã§ãã
User.create(params[:user])
, ( , User ActiveRecord), . , . / , ?
, , , " " , :
- params -
- params
- params , ,
- , ( I18n)
- params ,
, . (coupling) .
Rails . Rails SRP ( SOLID ) ", , ". , , , Rails YAGNI. , , , Rails, tenderlove, âuse ActiveSupport::Concernsâ.
Rails- , , - ActiveRecord, , .
â , . Rails, , , , , . , . ActiveRecord , Rails , Rails .
, ActiveRecord , Attributes API ( , ). , ActiveRecord 200 concerns, ORM, .
Rails? . , - , Rails . â ActiveRecord.suppress
, DHH. , Ruby , : ", , CreateCommentWithNotificationsFactory". -!
ActiveCoupling
Rails ? , , - . , , Rails . Rails, . , , DHH :
, ? ", ". , ? !
Rails , , , , .
:
- ActiveRecord . . , . Rails , ActiveRecord, SRP, LoD, . Rails.
- "" Rails ActiveModel, Active Record ORM ( Sequel, )
- Rails-,
- Rails-,
- Rails, gems, Rails, ( mixins, ). Rails gems , , , â .
, , Rails â . , , . Rails , , "" Java . Rails - .
. .
, Rails â ActiveSupport. , , . .
, , - ActiveSupport Rails Ruby. Rails . , , , , API, - . !
Rails , . - Rails, , ActiveSupport, , , , , Rails , .
, Rails, , . , , Rails ( , , Rails), . , , Rails? , , ActiveRecord, , â ActiveModel, ActiveRecord Rails 3.0.
, Rails .
, . Rails , . , , Spring. , , Rails. , , . , Ruby , . , , Rails. Rails, , , , , . - , . , , , , , , F5. .
, , , ! Rails . , .
ActiveSupport, ActiveRecord , ORM, , , - Rails.
Rails
Rails OpenSource Ruby, . , Rails. , . , , - Rails. ! ! Rails , , - , , -. -, Rails ! .
. , dry-rb, hanami and trailblazer rom-rb. , , , , Merb DataMapper.
, , , . , , .
Ruby
, Rails â â Ruby . . , Ruby. Elixir . Clojure, " ". , . , Haskell, . Scala. , , , TypeError . â , , - .
, Rails, . Monkey-patching, , ORM â .
, " Ruby - , , , , ". . , Ruby - (, ..). -, , , Ruby-. , , â .
, Ruby. . , . rom-rb, dry-rb, hanami trailblazer. , , .
, , .
. Rails .
, . , , . , , . , , "" -, , , , , . Rails, , .
, , , Rails ,
. , GitHub, 2435 OSS . . , Rails - , . , , . , OpenSource , GitHub.
OSS, Rails
. , , . Rails . Rails, , ActiveSupport ActiveRecord .. - , (. Hanami).