https://kaigionrails.org/2023/talks/kubo/

ã¯ããã« Railsã®ããªã¢ã¼ãã£ãã¯ï¼polymorphicãå¤æ æ§ï¼é¢é£ã«ã¤ãã¦ãå®è£ æ¹æ³ã説æãã¦ããè¨äºã¯è¦ãããã®ã§ãããå®éãããã©ããªãã®ã§ã©ããªæã«ä¾¿å©ãªã®ãã説æãã¦ããè¨äºããã¾ããªããããããããªãã§ä½¿ã£ã¦ãã人ããããããªã®ã§æ¬è¨äºãæ¸ãã¾ããã å®è£ æ¹æ³ãã®ãã®ã«ã¤ãã¦ã¯è©³ç´°ã«ã¯èª¬æãã¾ããã®ã§ãRailsã®ããªã¢ã¼ãã£ãã¯é¢é£ãã©ãæ¸ãã®ããç¥ããªãæ¹ã¯ã¾ãã¯å ¬å¼ããã¥ã¡ã³ããèªãã§ããã ããã¨ç解ãæ©ããã¨æãã¾ãã ããªã¥ã¼ã ã¯å°ãªãã®ã§ã2åãããããªããã¨æãã¾ãã Rails Guides: 2.9 ããªã¢ã¼ãã£ãã¯é¢é£ä»ã "ã©ããªãã®ã"ã«ã¤ãã¦ãå ã«çµè« ããªã¢ã¼ãã£ãã¯ã¨ã¯ããã¯ã¿ã¤ãã³ã°ã®ä¸ç¨®ã§ããã å¥ã®è¨ãæ¹ãããã¨GoFã®ãã¶ã¤ã³ãã¿ã¼ã³ã§è¨ãã¨ããã®ãããã°ã©ã ã¯å®è£ ã«å¯¾ãã¦ã§ã¯ãªããã¤ã³ã¿ã¼ãã§ã¼ã¹ã«å¯¾ãã¦è¡ãï¼Program to
ããã«ã¡ã¯ãã¾ã¡ããã®å·¥è¤ã§ãã ã¾ã¡ããã§ã¯éçºãã¬ã¼ã ã¯ã¼ã¯ã« Rails ãæ¡ç¨ãã¦ãã¾ãããæè¿ã®æ°è¦æ¡ä»¶ã§ã¯ Go è¨èªãæ¡ç¨ãã¦ã¿ã¦ãã¾ãããã®è¨äºã§ã¯ãGo ã§éçºãå§ããã«ããã£ã¦è¡ã£ãã©ã¤ãã©ãªé¸å®ã®ä¸èº«ãç´¹ä»ãããã¨æãã¾ãã é¸å®ã«ããã£ã¦ã¯ãawesome-go ã Qiita ãªã©ã®è¨äºãåèã«ãã¾ããã ModulesGo 1.11 ãã Go modules ãå°å ¥ãããã¨ã®ãã¨ã§ãç´ ç´ã« Go modules ãå©ç¨ãããã¨ã«ãã¾ãããç¹ã«ããããã¨ããªãå©ç¨ãã§ãã¦ãã¾ãã Web Application FrameworkgRPC + grpc-gateway or grpc-web ã»https://github.com/grpc/grpc-go ã»ðproto ã§ã¹ãã¼ãé§åéçºãå¯è½ ã»ð ââï¸REST API ãæä¾ããå ´å㯠grpc-ga
ã¯ããã« Rails ã§ä½ã£ãã¢ããªã±ã¼ã·ã§ã³ãæ¬çªç°å¢ã§åããã¨ãã«ã¯ Phusion Passenger ã Unicorn ã使ãã®ãä¸è¬çãªããã§ãã ãããã®ç¹å¾´ã¯ Apache ã Nginx ãªã©ã®Webãµã¼ãã¨ãã¾ãé£æºãã¦å¦çãè¡ãã¨ãããã®ã§ãã ã¼ãã®åãã¦ãããµã¼ãã§ã¯ãã°ãã Apache ãåãã¦ãã¾ããããRails ã®ã¢ããªã±ã¼ã·ã§ã³ãåããã®ãæ©ã« Nginx ã«ä¹ãæãã¾ããã Nginx ã¨é£æºã㦠Rails ã®ã¢ããªã±ã¼ã·ã§ã³ãåããã«ã¯ Unicorn ãè¯ãã¨ããã®ãèããã®ã§ Nginx + Unicorn ã§åãããã¨ãã¾ãããã¨ãããå®éã«ãã£ã¦ã¿ããããªãã¯ã¾ã£ãã®ã§ãä»ã®ãµã¤ãã§ç´¹ä»ããã¦ãããã¯ã¾ãééããã«æ³¨æããªãã説æãã¦ããããã¨æãã¾ãã ç°å¢ CentOS 7.1 Nginx 1.10.1 Unicorn 5.1.0 R
ã¯ããã«ï¼Arelã£ã¦ä½ï¼ ã¿ãªãããArelï¼ã¢ã¬ã«ï¼ã£ã¦ãåç¥ã§ããï¼ Arelã¯Active Recordã®å é¨ã§ä½¿ç¨ãããSQLçæã©ã¤ãã©ãªã§ãã Railsã®ã¯ã¨ãªã®æ¸ãæ¹ãã°ã°ãã¨ãã¨ãã©ãArelã使ã£ãå®è£ ä¾ãè¦ã¤ããã®ã§ãè¦ããã¨ãããããããã¯ä½åº¦ã使ã£ããã¨ããããã¨ãã人ãããã¨æãã¾ãã Arelãããç¥ããªã人ã®ããã«ãArelã®å©ç¨ä¾ãã¡ãã£ã¨è¦ã¦ã¿ã¾ãããã ãã¨ãã°ãã³ã¡ã³ãæä¸ã«ã"ruby"ãå«ã¾ããã¦ã¼ã¶ã¼ãããã£ã¼ã«ãæ¤ç´¢ããããã¨ããå ´åãRailsæ¨æºã®ã¯ã¨ãªã¤ã³ã¿ã¼ãã§ã¼ã¹ã使ãã¨æ¡ä»¶é¨åã®SQLãæååã§æ¸ãå¿ è¦ãããã¾ããï¼PostgreSQLç°å¢ãæ³å®ï¼ ã覧ã®ã¨ãããArelã使ãã¨æååã§SQLãæ¸ããã¨ãªããRubyã®ã³ã¼ãã¨ãã¦ã¯ã¨ãªãæ¸ããã¨ãã§ãã¾ãã ãªã®ã§ãArelã¯ãSQLãæ¸ããªãã¦æ¸ãï¼ãã¨ããRubyã®ã³ã¼ãã¨
tl;dr Railsã§ã¯ã³ãã¯ã·ã§ã³ãã¼ã«æ°ãè¨å®ãã¦ãã¦ãã1ã¹ã¬ãã辺ã1ã³ãã¯ã·ã§ã³ããæã¡ã¾ããã çºç«¯ ã¢ã«ããã§ã¯Rails + Unicorn + Nginx + MySQLã®æ§æãAWSã§éç¨ãã¦ãããc3.4xlargeã®ã¤ã³ã¹ã¿ã³ã¹ä¸ã§1å°è¾ºã64ã®Unicornã¯ã¼ã«ã¼ããã»ã¹ãå®è¡ãããè¨å®ã«ãªã£ã¦ãã¾ãã ã½ã¼ã·ã£ã«ã²ã¼ã ã§ã¯æã«ããããã®ã¢ããªã±ã¼ã·ã§ã³ãµã¼ãã並å稼åãããå¿ è¦ãã§ã¦ãã¾ããç¹ã«å¹´æ«å¹´å§ã®ææã¯å¹³æã®2-3åã®ãã©ãã£ãã¯ãäºæ³ãããã¢ããªã±ã¼ã·ã§ã³ãµã¼ããæ大100å°ã§ç¨¼åãããå¿ è¦ãããã¾ããã Railsã®database.ymlã®poolè¨å®ã¯5ã ã£ãã®ã§ãåç´ã«èããã¨æ大 100å° * 64ããã»ã¹ * 5æ¥ç¶ = 32,000åã®æ¥ç¶ã常æè²¼ãããã®ã§ã¯ï¼MySQLã®max_connectionsã®è¨å®ã¯å¤§ä¸å¤«ãï¼ã¨ããè°è«ãã
2017.03.13 æè¡è¨äº ãSakashoãã®Rubyã2.4ã«ãRailsã5ã«ã¢ããã°ã¬ã¼ããã¾ãã by kunpei.sakai #ruby ã¯ããã« JPRã²ã¼ã äºæ¥æ¬é¨éçºåºç¤é¨ã® @namusyaka ã§ãã æ¥åã§ã¯DeNAã®ã²ã¼ã ãã©ãããã©ã¼ã ã§ãã Sakasho ã®ããã¯ã¨ã³ããã¤ã³ãã©å¨ãã®éçºã»éç¨ããã¦ãã¾ãã ããã¦æè¿ã¢ã¤ã³ã³ã8~9å¹´ã¶ããããã«å¤ãã¾ããããããããé¡ããããã¾ãã ãã¦æ¬é¡ã§ãããSakashoã§ã¯ä»å¹´ã®2æã«ç®¡çã¢ããªã±ã¼ã·ã§ã³ã®Rubyã»Railsã®ãã¼ã¸ã§ã³ã®å¤§å¹ ãªã¢ããã°ã¬ã¼ããå®æ½ãã¾ããããã®è¨äºã§ã¯ãã®ã¢ããã°ã¬ã¼ã対å¿ã«ã¤ãã¦ãä¸ã¤ã®äºä¾ã¨ãã¦ç´¹ä»ããã¦ããã ããã°ã¨æãã¾ãã æ¦ç¥ åé ã§ã触ãã¾ããããã¢ããã°ã¬ã¼ãããã®ã¯DeNAã®ã¢ãã¤ã«ã²ã¼ã ãã©ãããã©ã¼ã ã§ããSakashoã®æ©è½ãå¶å¾¡ããããã®ç®¡ç
ãªãã¸ã§ã¯ããDBã«ä¿åãããåã«ããã®ãã¼ã¿ãæ£ãããã©ãããæ¤è¨¼ããä»çµã¿ãããªãã¼ã·ã§ã³ã¨ããã¾ããã Railsã§ActiveRecordã使ã£ã¦ãããå®ç¾ããã«ããã£ã¦ãã使ããããªã®ãã¾ã¨ãã¾ãã 以ä¸ã®ã¡ã½ããã«ããã¦ã¯ããªãã¼ã·ã§ã³ãããªã¬ããã¾ãã create create! save save! update update! 以ä¸ã®ã¡ã½ããã«ããã¦ã¯ããªãã¼ã·ã§ã³ã¯ã¹ãããããã¾ãã decrement! decrement_counter increment! increment_counter toggle! touch update_all update_attribute update_column update_columns update_counters Railsã§ã®ããªãã¼ã·ã§ã³ããªã¬ Railsã§ã¯valid?ã¡ã½ãããå®è¡ããã¨ããªãã¼ã·ã§ã³ãå®
Rails 3.2.1ããç¥ã£ã¦ãã¨ä¾¿å©ãªã¡ã½ãã first_or_create ãå®è£ ããã¦ãããããã ã©ããªåä½ãããã¡ã½ãããã¨ããã¨ãã³ã¼ããè¦ãã°ä¸ç®çç¶ã # activerecord/lib/active_record/relation.rb def first_or_create(attributes = nil, options = {}, &block) first || create(attributes, options, &block) end
åæ稿ã®@sunflatã§ãã好ããªããã°ã©ãã³ã°è¨èªã¯ MSX-BASIC ã§ãã Rails 4.1ã§ActiveRecordã«è¿½å ããã enum ã«ã¤ãã¦ãã¡ãã£ã¨èª¿ã¹ã¦ã¿ã¾ããã æ¬å½ã¯ãMisocaã®éçºã§enumã使ã£ã¦ãã®å®ä¾ãç´¹ä»ããäºå®ã ã£ãã®ã§ãããå¾è¿°ããçç±ã«ããä»åã¯é©ãã¦ããªãã£ãã®ã§ä½¿ãã¾ããã§ããã ããã§ä»åã¯ã(æ ª)Misocaã®è¿ãã«ãããã ã¬ã«ãã¬ã¹ãã¨ããã¤ã³ãã«ã¬ã¼å±ããã®ãã©ã³ãã»ããã®ã¡ãã¥ã¼ãä¾ã«ãenumã使ãæã«æ°ãã¤ããããã¤ã³ããããã¤ãç´¹ä»ãã¾ãã enum ã®ä½¿ãæ¹ ActiveRecordã® enum ã使ãã¨ãããã°ã©ã ããã¯æååï¼ååï¼ã§ã¢ã¯ã»ã¹ã§ããDBã«ã¯æ´æ°å¤ã§ä¿åãããå±æ§ãä½æã§ãã¾ãã ãã£ããã©ã³ãã»ããã®ã¢ãã«ãä½æãã¾ããããã«ã¬ã¼ã®ç¨®é¡ã¨ãã¦ãããã³ããã¼ã¯ãéèãè± ãé¸æã§ããã¨ãã¾ããenum
Railsã§ã¯ãActiveRecordã®has_manyã¨belogns_toã使ããã¨ã§ãDBã®ã1対å¤ãã®ãã¼ãã«éã®ãªã¬ã¼ã·ã§ã³ãã¢ãã«ã«ç°¡åã«å®è£ ãããã¨ãã§ãã¾ãã åä½ç¢ºèª Rails 4.1 ActiveRecord 4.1 ç®æ¬¡ 1対å¤é¢é£ã¨ã¯ åç §å ã®å¤é¨ãã¼ã追å ãã ã¢ãã«ã«has_manyã¨belongs_toã追å ãã 使ããããã«ãªãã¡ã½ãã 1. 1対å¤é¢é£ã¨ã¯èª¬æã®ããã«æ¬¡ã®ERå³ãå®è£ ãã¦ã¿ã¾ãã 顧客1人ãè¤æ°å注æãããã®ã§ãã顧客ãããè¦ãã¨ã注æãã¯"å¤"ã§ãã ã¾ããï¼æ³¨æã¯å¿ ãä¸äººã®é¡§å®¢ãã注æãããªãã®ã§ãã注æãããè¦ãã¨ã顧客ãã¯"1"ã§ãã ãã®ãããªé¢ä¿ãã1対å¤é¢ä¿ãã¨ããã¾ãã 2. åç §å ã®å¤é¨ãã¼ã追å ããã¾ããå¤å´ã®ãã¼ãã«ï¼ä»åã¯ordersãã¼ãã«ï¼ã«xxx_idã¨ããåã§å¤é¨ãã¼ã追å ãã¾ãã xxxã®ç®æã¯åç §å ã®
ããã«ã¡ã¯ãããã¯ã¨ã³ãã¨ã³ã¸ãã¢ã®joeã§ãã主ã«APIãæ å½ãã¦ãã¾ãã VASILYã®APIã§ã¯ãé度åä¸ã®ããã«Modelãªãã¸ã§ã¯ãããã£ãã·ã¥ãã¦ãã¾ãã æè¿ãModelãã£ãã·ã¥ã®ä»çµã¿ãå®è£ ããã®ã§ããã®å®è£ æ¹æ³ãç´¹ä»ãã¾ããã¾ããæ¢åã©ã¤ãã©ãªã¨ã®æ¯è¼ã«ã¤ãã¦ãæ¸ãããã¨æãã¾ãã Modelãã£ãã·ã¥ã¨ã¯ Modelãã£ãã·ã¥ãç°¡åã«è¨ãã¨ãä¸è¨ã®çµæããã£ãã·ã¥ãããã¨ã§ãã > Item.find(1) => #<Item:0x007fdfe398a678> ãã®ããã«ã1ã¬ã³ã¼ãåä½ã®ActiveRecordããã£ãã·ã¥ãããã¨ãæ¬è¨äºã§ã¯Modelãã£ãã·ã¥ã¨å¼ã³ã¾ããActiveRecordããã£ãã·ã¥ãããã¨ã§ããã¼ã¿ãã¼ã¹ã¸ã®èªã¿è¾¼ã¿åæ°ãæ¸ãããã¬ã¹ãã³ã¹é度ãåä¸ããããã¨ãã§ãã¾ãã æ¢åã©ã¤ãã©ãªã®ç´¹ä»ã¨åé¡ç¹ Modelãã£ãã·ã¥ãå®ç¾ã§ããG
Ruby 㧠DB ãæ±ãã¡ãã£ã¨ããã¹ã¯ãªãããæ¸ãã¨ããActiveRecord ã§çSQLã使ãã¨è²ã æããã¨ãå¤ãã ãã®ããã®ã¡ã½ãããã¾ã¨ãã¦ã¿ãã äºåæºåï¼ establish_connection ä½æã»æ´æ°ç³»ï¼ execute æ¤ç´¢ç³»ï¼ select_all, select_one, select_rows, select_values, select_value ãã¬ã¼ã¹ãã«ãï¼ sanitize_sql_array äºåæºå establish_connection DBã¨ã®ã³ãã¯ã·ã§ã³ã確ç«ããã'mysql2', 'postgresql', 'redshift' ãªã©æ§ã ãªã¢ããã¿ã使ããã 以ä¸ã¯æ¥ç¶è¨å®ã®ä¸ä¾ã [MySQL] (è¦ mysql2 gem) require 'active_record' config = { adapter: 'mysql2
ãã®ã¨ã³ããªã§ã¯ãYegor Bugayenkoã«ããè¨äºãORM Is an Offensive Anti-Patternãç´¹ä»ããã (Yegorããå訳ã¨è»¢è¼ã®è¨±å¯ã¯å¾ãã) 以ä¸ã¯ãã®å ¨æã®å訳ã ããæè¨³è¶ è¨³ãæ··ãã£ã¦ããã®ã§ããã¨ã®ãã¥ã¢ã³ã¹ãç¥ããããã°å è¨äºãèªãã§ãããããèªã¾ãªãã¦ãããã çµè«ããè¨ãã°ãORMã¯ãªãã¸ã§ã¯ãæåããã°ã©ãã³ã°ã®ååã®å ¨ã¦ã«éåããã²ã©ãã¢ã³ããã¿ã¼ã³ã ããªãã¸ã§ã¯ãããã©ãã©ã«å¼ãè£ãããã®è¨ãã¬å身ãªãã¼ã¿å ¥ãã«å¤ãã¦ãã¾ãã å°ããWebã¢ããªã±ã¼ã·ã§ã³ãããæ°åã®ãã¼ãã«ãCRUDæä½ããã¨ã³ã¿ã¼ãã©ã¤ãºã·ã¹ãã ã¾ã§ãã©ããªã¢ããªã±ã¼ã·ã§ã³ã«ãORMãåå¨ãããã¨ã¯ããããªãã 代ããã«ãªããã®ã¯? SQLã話ããªãã¸ã§ã¯ãã ã ORMã®ä»çµã¿ ãªãã¸ã§ã¯ãé¢ä¿ãããã³ã° (Object-relatinal mappingãORM
ã¢ãã«ã«ã¤ã㦠説æ ã¢ãã«ã¨ã¯ã¢ããªã±ã¼ã·ã§ã³ãæ±ããã¼ã¿ãå¦çã表ç¾ããä»çµã¿ã®ã㨠ã¢ãã«åã¨ãã¼ãã«åã®è¦ç´ è±å¤§æåããå§ã¾ã è±æ°åã®ã¿ åèªã®åºåãã§ã¯ãå é æåã大æå åæ°å½¢ã®åè© Entry UserComment ãã¡ã¤ã«ã¯app/modelsãã£ã¬ã¯ããªã«æ ¼ç´ ãã¡ã¤ã«åã¯ãã¢ãã«åã®åèªåºåããã_ãã«ãããã¹ã¦å°æåã«ãããã® app/models/entry.rb app/models/user_comment.rb å½åè¦å ç¨®é¡ èª¬æ ä¾
Rubyã¨ã¯ 説æ æ軽ãªãªãã¸ã§ã¯ãæåããã°ã©ãã³ã°ãå®ç¾ããããã®ç¨®ã ã®æ©è½ãæã¤ãªãã¸ã§ã¯ãæåã¹ã¯ãªããè¨èª Rubyã®ç¹å¾´ ã·ã³ãã«ãªææ³ æ®éã®ãªãã¸ã§ã¯ãæåæ©è½(ã¯ã©ã¹ãã¡ã½ããã³ã¼ã«ãªã©) ç¹æ®ãªãªãã¸ã§ã¯ãæåæ©è½(Mixinãç¹ç°ã¡ã½ãããªã©) æ¼ç®åãªã¼ãã¼ãã¼ã ä¾å¤å¦çæ©è½ ã¤ãã¬ã¼ã¿ã¨ã¯ãã¼ã¸ã£ ã¬ã¼ãã¼ã¸ã³ã¬ã¯ã¿ ãã¤ãããã¯ãã¼ãã£ã³ã°(ã¢ã¼ããã¯ãã£ã«ãã) å¤ãã®UNIXä¸ã§åãã ãã§ãªããDOSãWindowsãMacãBeOSãªã©ã®ä¸ã§ãåã å¤æ° ç¹å¾´ JavaScriptã¨ç°ãªããvarã¯ä¸è¦ ã»ãã³ãã³(;)ãä¸è¦ äºç´èªã¯ãèªåçã«ããã«ã¯ã©ã¼ãã§å²ã¾ãã ä¾ æ°å¤ã¨æåå ç¹å¾´ æ°å¤ãæååã¯ãã¹ã¦ãªãã¸ã§ã¯ãã¨ãã¦æ±ããã å¤æ°ã®åã¯èªåçã«å¤æãããã®ã§æèããå¿ è¦ã¯ãªã æ°å¤ 足ãç®ãããç®ã®çµæãFixnumã®å¤ãè¶ ããå ´åã¯ã
ãä¹ ãã¶ãã§ããå·éã§ãã ã¡ããã©ä¸ã¶æã¶ãã«ãªã£ã¦ãã¾ãã¾ããããå æ°ã«ä»äºãã£ã¦ããã¾ãã æè¿ã¯ä»äºã®ä»ã«ãè¦ããã¨ã©ãã©ã¤ããã¹ã¯ãã§ã¹ã¨WHITE ALBUM2ããã£ã¦ããã®ã§ã¨ã£ã¦ãå¿ããã§ãã æè¡åãä¸ãã£ããèªåã§ã²ã¼ã ã¨ããä½ã£ã¦ã¿ããã§ããã ããã§ã¯ãä»åã®è¬åº§ã«å ¥ã£ã¦ããã¾ãããã åå ãFactoryGirlã£ã¦ã©ããªå¥³ã®åï¼ âï¼ãÏã»ï¼vキャï¾ï¾ããã¯ãâããã¡ã ââââââââââââââââââââ (´ã»Ïã»ï½)ããååã¯FactoryGirlã«ã¤ãã¦æ¸ãããã ( ´âï½)ãããã ããmodelã«åããããã¹ããã¼ã¿ãèªåã§ä½ã£ã¦ããã便å©ãªãã¼ã«ã ãã (´ã»Ïã»ï½)ããä»åº¦ã¯ã©ããªãã¨ãããã®ï¼ã ( ´âï½)ããããããã£ãããã¹ããã¼ã¿ãã§ãããã¨ã ããmodelå´ã®ãã¹ãããã£ã¡ãããã (´ã»Ïã»ï½)ããã¯ã¼ãã ( ´âï½)ãã
ã©ã³ãã³ã°
é害
ã©ã³ãã³ã°
ãªãªã¼ã¹ãé害æ å ±ãªã©ã®ãµã¼ãã¹ã®ãç¥ãã
ææ°ã®äººæ°ã¨ã³ããªã¼ã®é ä¿¡
å¦çãå®è¡ä¸ã§ã
j次ã®ããã¯ãã¼ã¯
kåã®ããã¯ãã¼ã¯
lãã¨ã§èªã
eã³ã¡ã³ãä¸è¦§ãéã
oãã¼ã¸ãéã
{{#tags}}- {{label}}
{{/tags}}