Node.js察Ruby on Rails
ã»ãšãã©ã®éçºè
ãšã¯ç°ãªããç§ã¯Node.jsãçãããå§ãããã®åŸãRuby on Railsã«æ²¡é ãããã°ããã
Rails for Zombiesã³ãŒã¹ããããŠ
Michael Hartl Ruby on Railsãã¥ãŒããªã¢ã«ã«æ²¡é ããŸããã
以äžã«æžãããŠããã®ã¯ãNode.jsãšRuby on Railsã®éç§åŠçãªæ¯èŒã§ãã
ããå§ããŸãããïŒ
Node.js-ãã¬ãŒã ã¯ãŒã¯ã§ã¯ãããŸããïŒ
ãŸããNode.jsã¯ãéåææ§ãšé«éæ§ãç®çãšããŠJavascriptã§èšè¿°ããããäœã¬ãã«ã®ã«ãŒãã£ã³ã°ããã³ç®¡çæ©èœãåããWebãµãŒããŒã§ãã ãã®æ¯èŒã®æåãããNode.jsã«ã¯
Express.jsãš
Mongooseã®åœ¢åŒã®
ãå人ããå¿
èŠã§ãïŒãã¡ãããããŒã¿ããŒã¹ãšããŠMongoDBãéžæããŠããªãå ŽåïŒã äžæ¹ãRailsã¯Rubyã§æžãããæãåºæ¬çãªãã¬ãŒã ã¯ãŒã¯ã§ãã æè¡çã«ã¯ãæ£çŽãªæ¯èŒã®ããã«ãããã§ã¯ãRailsã§ã¯ãªãNode.jsãšThinãŸãã¯Unicornã«ã€ããŠèª¬æããå¿
èŠããããŸããããšã³ãžã³ã³ã³ããŒãã¡ã³ãã ãã§ãªããå®å
šãªããã¯ãšã³ããéçºããããšèããŠããŸãã
ã«ããŒã¯é»éã®å¿ãæã€äžæ©å«ãããªè人ã§ãã
æ
£ç¿ãåãé€ããã®ã§ãèšèªã«ã€ããŠè©±ããŸãããã Node.jsã¯ãã¹ãŠJavascriptã§èšè¿°ãããŠããŸãããRailsã¯Rubyã§èšè¿°ãããŠããŸãã 1çªç®ãš2çªç®ã®äž¡æ¹ã«é·æãšçæããããŸãã äžæ¹ãJavascriptã¯æ§æã®åŠç¿ã容æã«ãã å€ãã®äººã¯ããããããã³ããšã³ãã§ïŒåœŒèªèº«ã®Railsã«å¯ŸããŠïŒ
:VARIABLE => â--â def func arg = " " VARIABLE do |iterator| Module::Class class Subclass < Class @instance , Perl
ãã®ä»ã®ããªã«ïŒã
ãã ããRubyã¯ããç°¡æœã«ããããšãã§ãããã¹ãŠã®éæ³ãæ©èœããããã«æ¬åŒ§ã®ãã©ã¬ã¹ãïŒcoffescriptãªãŒããŒãç·åŒµããªãïŒãå¿
èŠãšããŸããã ããã«ãRubyïŒããã³RailsïŒã«ã¯ãæ¥ä»ããæååãé
åã«è³ããŸã§ãã¹ãŠãå²ããéåžžã«äŸ¿å©ãªçµã¿èŸŒã¿ã¡ãœãããè±å¯ã«ãããŸãã
10.minutes.ago âstringâ.sqeeze ['array','elements'].include?('array')
ã¯ããããã¯ãã¹ãŠJavascriptã§å®çŸã§ããŸãããç¥èãšã«ã¹ã¿ã ã¡ãœãããå¿
èŠã§ã...ãŸãã¯
_undercoreã®ãããªãã®ã
å¿
èŠã§ãã
100ïŒ
Javascriptã¯çŽ æŽãããã§ãããçãã»ã©é倧è©äŸ¡ãããŠããŸãã
èšèªãçè§£ããããWebã¢ããªã±ãŒã·ã§ã³ã®éçºã«æ³šæãæãããšãã§ããŸãã Node.jsã¯éåæã®ããã³ãããã³ããã¯Javascriptç°å¢ã«æ¹ãããŸãããRailsã§ã¯SQLãRubyãããã³JavascriptãåŠçããå¿
èŠããããŸãã 確ãã«å©ç¹ã®ããã«æããŸãããäž¡æ¹ãããçšåºŠæ€èšããåŸãã
é倧è©äŸ¡ãããå©ç¹ ãã®ã«ããŽãªã«ãããèšèªã®çµ±äžæ§ãæžãçããŸãã ã»ãã®ããã€ãã®äŸãšããã°èšäºãèªãã ãã§ãRubyã«æ
£ããããšã¯ããã»ã©é£ãããããŸããã ããã«ãRubyã䜿çšãããšããã³ããããã³ã°ã¢ãŒããã¯ãã£ã®ããã«Javascriptã«ä»éãããã³ãŒã«ããã¯ããŒãã«ããã»ãŒå®å
šã«å¿ããããšãã§ããŸãïŒåæäžŠè¡æ§ãéåžžã«åªããŠãããããééããªããã©ã¹ãšããŠèªèããŠããŸãïŒã ããã§ããç§ã¯ãããèšãããã¯ãããŸããããåå空éãã¯ã©ã¹ãããã³ã¢ãžã¥ãŒã«çšã«äºåå®çŸ©ãããæ§æããããšäŸ¿å©ãªå ŽåããããŸãã
Railsã¯å¿
èŠãªãã®ããã¹ãŠæäŸããŸãã
ããã§ãèšèªãšããã«ä»éãããã®ã¯ç¡èŠããŸãã
Node.js + Express.jsã¯ãã³ã³ãããŒã©ãŒããã¥ãŒããã«ããŒãšãšãã«ã«ãŒãã£ã³ã°ãæäŸããŸãã ãã ãããã®ããŒã«ããã¯ã¹ã¯Railsã«æ¯ã¹ãŠãŸã è²ãããŠããŸãã
顿šã®ããã«ãNode.js + Express.jsã®èæ¯ã®Railsã¯ãã¢ã¡ãªã«ã³ã¢ãã¬ã«
ïŒæãšããŒã ã¢ã¯ã»ãµãªãŒã販売ãã2ã€ã®å€§äŒæ¥-çŽç¿»èš³è
ïŒã®èæ¯ã®Mujiã«äŒŒãŠããŸãã ã©ã¡ããå®¶åºçšã®æãšã¢ã¯ã»ãµãªãŒãæäŸããŸãããã¢ã¡ãªã«ã³ã¢ãã¬ã«ã®æã¯ç¹ã«ä¿¡é Œã§ããããã«ã¯èŠãããåžžã«ããŒãºãæºãããŠãããšã¯éããããã³ãã§ãã£ãããèŠããããã«ããŠãã ããã äžæ¹ãç¡å°è¯åã¯ãäžçäžã®ãã¹ãŠãåãã¹ã¿ã€ã«ã§ãäžèŠãããšåãçå°ã§å·obsã«è£
食ããŠããŸãã
ããããããã°ã©ãã³ã°ã«æ»ããŸãã
Railsã«ã¯ãå®å
šãªMVCãšéèŠãªå
åè¶³ã«ãã£ãŠã®ã¿å°ç¡ãã«ãªã䟿å©ãªæ©èœã®ã»ãããçµã¿èŸŒãŸãããšã³ã·ã¹ãã ãçµã¿èŸŒãŸããŠããŸãã
url_forããã³
image_tagã®é¢æ°ã®äŸãããã€ã瀺ããŸãã
url_forã¯ãæå®ãããããŒã¿ãªããžã§ã¯ãïŒ
@productsãªã©ïŒã®URLãåžžã«è¿ãçµã¿èŸŒã¿é¢æ°ã§ããã
image_tagã¯åžžã«
ã¢ã»ãããã€ãã©ã€ã³ããç»åã®æ£ããURLã
ååŸããŸãã
ãã¡ãããããã¯ãã¹ãŠNode.jsã§ãå®è¡ã§ããŸãããããã«ã¯ã¢ãžã¥ãŒã«ãšãã«ããŒã䜿çšããããªãã®äœæ¥ãå¿
èŠã«ãªããŸãã ããã«ãRailsã§ã¯ãããŒã¿ã¢ãã«ã«ã€ããŠãŸã£ããå¿é
ããå¿
èŠã¯ãããŸããã ã¯ããNode.jsã®å ŽåãMongooseã圹ç«ã¡ãŸãããããã§ãããŒã¿ãå®å
šã«å¶åŸ¡ã§ãããšæããããšã¯å°é£ã§ã
Product.find(params[:id])
Railsã®ã¢ããªã±ãŒã·ã§ã³ãã¢ãžã¥ãŒã«ãã³ã³ãããŒã©ãŒããã¥ãŒã®ã©ãããã§ãå©çšã§ããŸãã
ãã ãããããã®ãããã«ã¯ãã¹ãŠãã€ãã¹é¢ãããããšã«æ³šæããŠãã ããã ç§ã¯ãããè¡ãããã®æ£ããæ¹æ³ãåã«ãæšæž¬ãããã»ãšãã©ã®å Žåæè¯ã®æ¹æ³ãéããŠããããšãããçè§£ããŠããŸãã ãŸããäœããæ
éããå Žåãç¹æ®ãªå€æ°åãé£ããããã«æ
éã®åå ãç¹å®ããã®ã¯éåžžã«å°é£ã§ãïŒããšãã°ãã¢ã¯ã·ã§ã³å+ã³ã³ãããŒã©å+ "_path"ãçµã³ä»ãããšãçŸåšã®ãã¹ãç®çã®ã¢ã¯ã·ã§ã³ã«æ»ãéæ³ã®ããã«new_product_path
ãã«ããŒãååŸã§ããŸãïŒ ã
Node.jsã§ã¯ãèªåãæžãããã®ã ãã衚瀺ãããŸã-æªã¿ã¯æå°éã§ãã
å€ãã®äººãRailsã®ã¢ãžã¥ãŒã«ãäœæããã³æ¹åããŠããŸãã
次ïŒãšã³ã·ã¹ãã ã Node.jsãNPMã§çŽ æŽãããã¹ã¿ãŒããåã£ããšããäºå®ã«ãããããããããŸããŸãªããŒãºã«å¯Ÿå¿ããæã人æ°ã®ããããã±ãŒãžã®ã»ãšãã©ã«ã»ããã¯åãŸã£ãŠããããç«¶åä»ç€Ÿã®æ°ã¯ãã§ã«èšé²ãç Žã£ãŠããŸãã æçµçã«ã¯ãå£ããè±ç¶ãæ¥çå€ã§æ¥çããããšããããšããããããŸãã
RailsåŽã§ã¯ãã©ã€ãã©ãªãšããŒã«ã®æã匷åãªç¡æãªããžããªã®1ã€ã§ãã
ããŒã«ã®çžå¯Ÿçãªäººæ°ã瀺ããæ©èœå¥ã«
åé¡ããRubyããŒã«ããã¯ã¹ã倧奜ãã§ãã ããã«ããã§ã«è¿°ã¹ãããã«ãRailsã§Nodeã«æåã§å
¥åããå¿
èŠã®ããå€ãã®ã¢ãžã¥ãŒã«ã¯ããã®ãŸãŸäœ¿çšã§ããŸãã ããŒã¿ããŒã¹æ¥ç¶ããããã¡ã€ãªã³ã°ããã£ãã·ã¥ãç§»è¡ãããŒã¿ã¢ãã«ããã€ãã©ã€ã³ãã«ãŒãã£ã³ã°ãã³ã³ãœãŒã«ã³ãã³ãããã¹ããªã©ã®ãããªãã®...ãã¡ãã³ã³ããããã§ã«é
眮ãããŠããŸãïŒ ãã¡ãããããã¯ãã¹ãŠç°¡åãªããšã§ããããã¹ãŠãå¿
èŠã§ãããæ£åãŸã§äœããã®çç±ã§äºãã«éä¿¡ããããšãæåŠããNode.jsã¢ãžã¥ãŒã«ã®ç«¶åã«é¢ãããããã®ã¡ãã»ãŒãžããã¹ãŠè¡šç€ºããªãã®ã¯ã¯ãŒã«ã§ãã
ãšããããNode.jsã«ãããã®ãããã¯ããã«å€ããRailsã®èšå€§ãªæ°ã®ãã¥ãŒããªã¢ã«ãšäŸã§ãã 300以äžã®åç»ãå«ã
Railscastã®ã¿ ã ããããRailsã¯æ¥éã«å€åããŠãããå€ãã®æç§æžã¯ãã§ã«é¢é£æ§ã倱ã£ãŠãããä»ã®ã¿ã¹ã¯ã¯ã¯ããŒã«ã§ããŸããŸãªèšäºãå
¬éããåŸã«è§£æ±ºçãåŸããšããããšãèŠããŠãã䟡å€ããããŸãã ãã®çµæãGoogle
< 1 year old
ã»ã¬ã¯ã¿ãŒã䜿çšããŠRailsã«é¢ãã質åãžã®åçãèŠã€ãã
Rails Guidesã§ãã®æ€çŽ¢ãéå§ããããšãè³¢æã«ãªããŸããã
Railsã«ã¯ãžã§ããããã¯ãå«ãŸããŠããŸãã ããã©ã«ãã§ã
æåŸã«ãåããã¬ãŒã ã¯ãŒã¯ãããŒã¿ããŒã¹ããããã¢ãžã¥ãŒã«ãæ§æããããã¹ãŠãæ£åžžã§ãããšä»®å®ããŸãã Node.jsã¯ããã¹ãŠãèšè¿°ããŠãã¹ãŠããŸãšããã ãã®æéãå¿
èŠãšããŸãïŒãããããµãŒãããŒãã£ã®ãã©ã°ã€ã³ã®äžæŽåãšå³æ Œãªæ§é ã®äžè¶³ã«ãããã®ã§ãïŒã Railsã§ãå®å
šãªRESTfulã€ã³ã¿ãŒãã§ãŒã¹ãæ§ç¯ããã«ã¯ããã£ã1ã€ã®ã³ãã³ã
rails generate scaffold Post name:string title:string content:text
å¿
èŠãªã³ã³ãããŒã©ãŒããã¥ãŒãã¢ãã«ã¯ããããã®å Žæã§åŸ
æ©ããŸãã
å€ãã®å Žåãããã«ã¯1æéãš1æéïŒããŒã¿ããŒã¹ãšã³ãã£ãã£ã®æ°ã®åæ°ïŒãããããŸãã ããã¯ããã»ã©é£ããä»äºã§ã¯ãªããã¿ã€ããã¹ã«å¯ŸããŠè匱ã§ãããèŠããŠããå¿
èŠãããæ
å ±ã倧éã«ãããŸãã ç§ã¯ãã€ãRailsã®è¶³å Žã䜿çšããŠããããã§ã¯ãããŸããããåçŽãªãããã¿ã€ãã®å Žåãããé«éãªä»£æ¿æ¡ãèŠã€ããã®ã¯å°é£ã§ãã
çµè«ãšããŠ...
Node.jsã¯ãåªããããŒã«ãããã§ããããã¬ã³ãã£ã§ãæ¥æé·ãã髿§èœïŒè°è«ã®äœå°ããããŸãïŒã§ãããç¿åŸã容æã§ãä»ã®ã»ãšãã©ã®Webéçºè
ããŒã«ãããåªããŠããŸãã ãããã圌ã¯ããŸã ã«Railsã®äººã®ãªãªã³ãã¹ã®ç¥ã«å¯Ÿããæèœã®ããã·ãã¢ã¹ã¿ãŒã®ãŸãŸã§ãã Node.jsã«éåã¯ãããŸãããã誰ãéžæããŸããïŒ Rubyã®åŠç¿ã«äŒŽãäžäŸ¿ããå
æã§ããã°ããã®éžæ
ã¯æããã§ãã èŠããŠãããŠãã ããïŒæè¯ã®ããŒã«ã¯ãä»äºãããè¯ããããéãè¡ããããŒã«ã§ãã
PS翻蚳è
ããïŒ
ãã¡ãããRailsãçŽç²ãªNodeã§ã¯ãªããããã«åºã¥ããMVCãã¬ãŒã ã¯ãŒã¯ãšæ¯èŒããæ¹ãæ£ç¢ºã§ãã ããšãã°ã Sails.js ã ãã ãããã®èšäºã«ã¯åå¿è
ã®Webéçºè
ïŒç§ã誰ã§ãããïŒã«ãšã£ãŠæçšãªæ
å ±ãå«ãŸããŠãããããæ¯metaçãªã³ã¡ã³ããèš±å¯ããŸãã
- Railsã«ã¯ãããªãã®è·å ŽããŠã§ãéçºã®äžçã§ä¿¡é Œã§ããå¿«é©ãªãã§ãããŒã«ããèšå€§ãªæ°ã®æ©èœãšã©ã€ãã©ãªãè£
åãããŠããŸãã
- Nodeã¯éæ¹ããªãã¹ãããã§éçºãããã¯ã©ãã·ã¥ã«ææã§ã¯ããããé¢çœããŠãã¡ãã·ã§ããã«ãªã¹ããŒããã€ã¯ãéçºè
ã«æäŸããŸãã
å人çãªçµéšã«åºã¥ããŠãNode.js + Sails.jsã䜿çšãããšãå°èŠæš¡ãããžã§ã¯ãçšã®Railsã«ä»£ããç°¡åãªææ®µãåŸãããŸããã ããããæ·±å»ãªWebã¢ããªã±ãŒã·ã§ã³ãéçºãããšããç¹ã§ã®RoRã®ä¿¡é Œæ§ãšåŒ·ãã¯ãããã¯ãšã³ãéçºè
ã®éãæãŸãããšããŠãã眮ãæããããšã¯ã§ããŸããã
ãããèªãã§ãããã¿ããªã«æè¬ããŸãïŒ