ã¦ã¼ã¶ã¼ã¨ã³ã²ã¼ã¸ã¡ã³ãé¨ã®è«¸æ© id:moro ã§ãã
ãããã¯ãã£ã¨ãã¦ã¼ã¶ã¼ç»é²ããã°ã¤ã³å¨ãã¨ããããµã¼ãã¹çã«ã¯åºç¤çãªã¨ãããæè¡ã¹ã¿ãã¯çã«ã¯ã¢ããªã±ã¼ã·ã§ã³å¯ãã®ã¨ããã«åãçµãã§ãã¾ãããé¢é£ãã話ãä½åº¦ããã®éçºè ããã°ã«ãæ¸ãã¦ãã¾ãã
- ã¦ã¼ã¶ã¼åºç¤ãä½ãç´ããªããRailsã§ã®ãµã¼ãã¹å±¤ã«åãåã
- 巨大ãªWEBã¢ããªã±ã¼ã·ã§ã³ã«å·¨å¤§ãªå¤æ´ãåãå
¥ããããã«ãã£ããã¨
- ãã®è¨äºã§è§¦ãã¦ãããé»è©±çªå·ã«ããç»é²ãã«ã¤ãã¦ããã¼ã ã¡ã³ãã¼ãå¥ã®å´é¢ãç´¹ä»ãã¦ããã¦ãã¾ãã
ä»æ¥ã¯ãã®ãããã®éçºãéãã¦èãããRailsã¢ããªã±ã¼ã·ã§ã³ã§ã®ãã©ã¼ã ãªãã¸ã§ã¯ãããµã¼ãã¹å±¤ã¨ãã£ããã®ãä½ã§ããããã¨ããåãã«å¯¾ãããç¾å¨ã®èªåã®ã¹ã¿ã³ã¹ãç´¹ä»ãã¾ãã
ãµã¼ãã¹å±¤ããµã¼ãã¹ãªãã¸ã§ã¯ãããã©ã¼ã ãªãã¸ã§ã¯ã
ãã¨ã㨠Rails㯠Web ç»é¢ãã DB æ§é ã¾ã§ãããã¦å¯ã«çµåããããã¨ã§ãç°¡åãªãµã¼ãã¹ãé«éã«éçºãããã¬ã¼ã ã¯ã¼ã¯ã¨ãã¦ããã¥ã¼ãã¾ãããã¨åæã«ã Web ã¢ããªã±ã¼ã·ã§ã³ãã¬ã¼ã ã¯ã¼ã¯ã¨ãã¦ã®ä½¿ãåæã®è¯ããææµãæä¼ã£ã¦ãããåç´ã§ãªããµã¼ãã¹ãä½ãã®ã«ã使ãããããã«ãªãã¾ããã
ããããèæ¯ãè¸ã¾ãã¦ããã®æ°å¹´ã¯ Rails ã®è¨è¨ã«é¢ããèå³ãé«ã¾ã£ã¦ãã¦ãããMVC ã ãã§ãªãã¬ã¤ã¤ã®å°å ¥ã DDD ã®è«¸ã¢ã¤ãã£ã¢ã®é©ç¨ã¸ã®èå³ãé«ã¾ã£ã¦ããããã«æãã¾ãã ä¸ã§ãããåç §ãããèãæ¹ã¯ãCode Climate åµæ¥è ã® @brynary ããã«ãã 7 Patterns to Refactor Fat ActiveRecord Models *1 ã§ãããã
ãã®è¨äºã§ã¯ãã¢ãã«ã«ã¾ã¨ãã¦æ¸ãããã¡ãªå¦çããForm Object ã Service Object ã«åãã¦ãããã¨ãææ¡ããã¦ãã¾ãã
ãããã¯ãTrailbrazer ã Hanami ã¨ãã£ã after Rails ä¸ä»£ã®ãã¬ã¼ã ã¯ã¼ã¯ã«ããã¦ããOperation ã Interactor ã¨å¼ã°ããã¬ã¤ã¤ãã³ã³ãã¼ãã³ãã«ãã£ã¦ãRails ã®ç´ æ´ãª MVC ã«ããã¾ããããªãå¦çãè¨è¿°ããå ´ãç¨æããã¦ãã¾ãã
çè ãããã¦ã¼ã¶ã¼åºç¤ã®åãåºããã¨ãã¦æ°ãã« Rails ã¢ããªã±ã¼ã·ã§ã³ãä½ãã«ãããããã®ãããã®ã¢ã¤ãã£ã¢ããããã«åèã«ãã¾ããããã®ä¸ã§ããããã¯ã¤ã¾ã
ãActiveRecord::Base ãç¶æ¿ããæ°¸ç¶åãä¸å¿ã«ãããªãã¼ã·ã§ã³ãã³ã¼ã«ããã¯ãã¢ã¯ã»ãµã¨ãã£ã責åãè©°ã¾ã£ãã¢ãã«ãããHTTP ãªã¯ã¨ã¹ããåããããå¦ççµæã®ã¬ã¹ãã³ã¹ãçµã¿ç«ã¦ã責åããã£ãã³ã³ããã¼ã©ãã¨ãã£ãã³ã³ãã¼ãã³ããããããã®è²¬åã«éä¸ããããããã®ããã§å¿ ããããã®ããã«åé¡ã§ããªãã¢ããªã±ã¼ã·ã§ã³ã®ãã¡ã¤ã³ç¬èªã®ãã¸ãã¯ãæ¸ãå ´æãã»ãããã¨ãããã¨ã§ãªããã¨èãã¾ããã
ãã®ãããã§èãã¦ãããã¨ã¯ãååè¨äºã§ã触ãã¦ãã¾ãã ããã§ãåå²ãã責åãé ç½®ãã層ã便å®ä¸ããã©ã¼ã ãªãã¸ã§ã¯ããã¨å¼ã³ãå ¨ä½ã¨ãã¦åã¾ããè¯ãã³ã¼ãã«ãªãããã«è²ã¦ã¦ãããã¨ã«ãã¾ããã *2
ã¾ããã®éãæ°ããªãã¬ã¼ã ã¯ã¼ã¯ãå°å
¥ããã®ã§ã¯ãªããåæç¥ã£ãã Rails ã®ä¸ã« app/forms
ã¨ããã¬ã¤ã¤ãä½ãã§ããã ããã¬ã¼ã³ãª Rails (ã¨ã¯?) ã®æ§æã§ã¯ããã¾ããã
ãã®ã¬ã¤ã¤ã®ãªãã¸ã§ã¯ãã«æ±ãããã®
ãã©ã¼ã ãªãã¸ã§ã¯ãããµã¼ãã¹å±¤ãããã㯠Interactor ã Operation ãªã©ãããããªå¼ã³æ¹ãããã«ä¼´ãè¦ç¹ã®éãã¯ããã¾ãããå ±éãã¦ããã®ã¯ä»¥ä¸ã®ç¹ã§ãã
- å¤é¨å
¥å(Railsã§å
¸åçãªã®ã¯Webãªã¯ã¨ã¹ããããå
·ä½çã«è¨ãã¨
ActionController::Base#request
ã å#params
)ã¨ãã¡ã¤ã³ãã¸ãã¯ãåé¢ããã- ãã¡ã¤ã³ãã¸ãã¯ã¸ã®å ¥åãåç´ãªãªãã¸ã§ã¯ãã«ãªããå ¥åºåã¨ãã¸ãã¯é¨åã®å¢çãã¯ã£ããããã
- ActiveJob ã¨ãã¦èµ·åãããéåæã¸ã§ãã«ããããªã£ãå ´åããå ¥åºåå¢çãã¯ã£ãããã¦ãããããç°¡åã«ç§»è¡ã§ããã
- ã¦ããããã¹ããæ¸ãããããªãã
- ããé«ã¬ãã«ãªãã¹ãã«ããããã¼ã¿ã»ããã¢ããã«ã¦æ¬ç©ã®ãã¸ãã¯ãå¼ã³åºããããã¹ãã§ããæ¬ç©ã®ããã¼ã¿ã°ã©ãã使ããã¨ãã§ããã
- Rails ã®ç´ æ´ãªã¢ã¯ãã£ãã¬ã³ã¼ããã¿ã¼ã³ã ãã§ã¯åã¾ããªãå¦çãæ
ãã
- è¤æ°ã®ARã¢ãã«ãä¸åº¦ã«æ°¸ç¶åããã¨ãã«ããã¼ã¿ãçµã¿ç«ã¦ãå ´ãããã
- ä¸è¨ã®ã·ã¼ã³ã§é »åºãããã®ã®æ±ãã®é£ãã
accept_nested_attributes_for
ãé¿ããããã - ActiveRecord ã¢ãã«ã¯ã©ã¹ (以ä¸ARã¢ãã«) ã§ã¯ãªãã³ã³ããã¹ãã«ä¾åã«ãããããªãã¼ã·ã§ã³ã»ã³ã¼ã«ããã¯ãæ±ãã
- å ¥åããªã¯ã¨ã¹ããã©ã¡ã¼ã¿ãHTTPãããã§ã¯ãªãããã ã®æååãæ°å¤ã«ãªãããã
éã«ããã¨ãå¦çãè¡ãã¯ã©ã¹ã app/models/*
ã«é
ç½®ãã¤ã¤ä¸è¨ã®ãããªã¢ããªã±ã¼ã·ã§ã³å
ã§ã®å¢çã«çæããã®ã§ããã°ãç¡çã«æ°ããã¬ã¤ã¤ãå°å
¥ããå¿
ç¶æ§ã¯ä½ãã§ãããã
ãã®ãããã¯ããã¼ã ã®ä¸ã§åæå½¢æããã®ãããã¨æãã¾ãã
以éãå®éã®ã¢ããªã±ã¼ã·ã§ã³ã¸ã®ãã£ã¼ãã£è¿½å ãéãã¦ããã®ãã©ã¼ã ãªãã¸ã§ã¯ãã®æãæ§ãæ½åºããã©ãã·ã¥ã¢ãããã¦ãã£ãéç¨ã並ã³ã«ããããèãããã¨ãç´¹ä»ãã¾ãã
ãµã¼ãã¹ã®å½¢ããªãã¸ã§ã¯ãã«ãã
以åã«ç´¹ä»ããããã«æè¿ãé»è©±çªå·ã§ãã¯ãã¯ãããã¸ã®ã¦ã¼ã¶ã¼ç»é²ã§ãããã¨ãã大ããªãã£ã¼ãã£ããªãªã¼ã¹ãã¾ããã ããã¯ãå¾æ¥ã¡ã¼ã«ã¢ãã¬ã¹ã®ç»é²ãåæã¨ãã¦ããã¯ãã¯ãããã¸ã®ã¦ã¼ã¶ã¼ç»é²ããSMSã§ææ確èªãããæºå¸¯é»è©±çªå·ã§ãç»é²ã§ããããã«ãããã¨ãããã®ã§ãã
ã²ã¨ãã¡ã«é»è©±çªå·ã§ã®ã¦ã¼ã¶ã¼ç»é²ã¨ãã£ã¦ãããã®ãã£ã¼ãã£ãå®ç¾ããã«ã¯æåéãã®ãç»é²ãã ãã§ã¯è¶³ãã¾ãããå®éã¯ä»¥ä¸ã®ãããªæ©è½ããã¹ã¦å¿ è¦ã«ãªãã¾ãã
- æªç»é²ã®ãµã¼ãã¹å©ç¨è
ããé»è©±çªå·ã§æ°è¦ã«ã¦ã¼ã¶ã¼ç»é²ã§ããæ©è½
- å®å ¨ã«æ°è¦ã®å ´åã¨ãé»è©±çªå·ç»é²åã«ãã§ã«ææãµã¼ãã¹ãå©ç¨éå§ãã¦ãã(ã·ã¹ãã çã«ã¯ã¦ã¼ã¶ã¼ãã¼ã¿ãåå¨ãã)å ´åãããã
- ã¡ã¼ã«ã¢ãã¬ã¹ã¨ãã¹ã¯ã¼ãã§ç»é²ããã¦ã¼ã¶ã¼ããé»è©±çªå·ã追å ç»é²ã§ããæ©è½
- é»è©±çªå·ãç»é²ããã¦ã¼ã¶ã¼ãããã®é»è©±çªå·ãå¤æ´ã§ããæ©è½
- ãã¹ã¯ã¼ããå¿ããã¦ã¼ã¶ã¼ããé»è©±çªå·ã®ææ確èªããã¦ãã¹ã¯ã¼ããªã»ããã§ããæ©è½
ã§ããã ãç´ ç´ã«ãã©ã¼ã ãªãã¸ã§ã¯ãã«ãããã¨ãã¦ããããããé»è©±çªå·ã§ã®æ°è¦ã¦ã¼ã¶ã¼ç»é²ãã®æç¹ã¯ç¡çã«å ±éåãããã¨ãããå®å ¨æ°è¦ã®å ´åã¨ãã§ã«ææãµã¼ãã¹ãå©ç¨ãã¦ããã±ã¼ã¹ã§ããããä¸æãåå¥ã®ãã©ã¼ã ãªãã¸ã§ã¯ããä½ãã¾ããã
æåã®2ä¾ç¨åº¦ã¯è¯ãã£ãã®ã§ããããããã«åé·ã«æãã¦ãããããé»è©±çªå·ã®è¿½å ç»é²ãã®å®è£ ã«å ¥ãã¿ã¤ãã³ã°ã§ããä¸åº¦ããèãã¦ã¿ã¾ããã
ããã¨ããããã®æ©è½ç¾¤ã¯ãã¹ã¦ãã¦ã¼ã¶ã¼ãå ¥åããé»è©±çªå·ã«å¯¾ãèªè¨¼ã³ã¼ããå«ãSMSãéä¿¡ãããã®èªè¨¼ã³ã¼ããä¸è´ãã¦ãããé»è©±çªå·ãææãã¦ããæ¬äººã§ããã¨ã¿ãªãã(以ä¸ãèªè¨¼ã³ã¼ãçªåã)ã¨ããæ¯ãèããå«ãã§ãããã¨ã«æ°ã¥ãããã®æ¹åã§ã³ã¼ããæ´çãã¦ããã®ãããã¨èãã¾ããã
ã¨ã¯ãããã³ã¼ãã®åé¢ãç¾æç¹ã§ã®åããä¼¼ã¦ããããã¨ããçç±ã ãã§ã³ã¼ããå®æã«å ±éåãã¹ãã§ã¯ããã¾ããããã¾ãã¾ç¾å¨ã®æåãåãã§ããã®ããããã¨ã対象ãã¡ã¤ã³ã§åä¸ã§ã¿ãªãã¦è¯ããã®ã§ããã®ããããèããå ±éåããç¯å²ãæ¹æ³ãèããã¹ãã§ããããã§ã³ã¼ãã®äºæ ããã¯ãã£ããé¢ãããã¡ã¤ã³ã¨ãã¹ãã¼ãã¨ä¸ç·ã«å ±éåã®æ¹åæ§ãæ¢ããã¨ã«ãã¾ããã
çµæã¨ãã¦ããèªè¨¼ã³ã¼ãã®çªåãã¨"ä½ã"ããããã¨ããç¶æ¿ + ãã³ãã¬ã¼ãã¡ã½ãããã¿ã¼ã³ã®ä½ãã§ã¯ãªãããä½ãããéç¨ã«ããã¦å ±éã®ãèªè¨¼ã³ã¼ãçªåããããç¶ããè¡ããã¨ããã³ã³ãã¸ã·ã§ã³çãªæ§é ã¨ãªãããã«å ±éåããããã«ãã¾ããããã¡ã¤ã³ã¨ãã¹ãã¼ãã¨ã¨ãã«ã¦ã¼ã¶ã¼ããè¦ããæ¯ãèããèãã¦ããããé»è©±çªå·ã§ã®ç»é²ãis aãé»è©±çªå·ã確èªãã¦ãªã«ããããã§ãããããé»è©±çªå·ã®è¿½å ãis aãé»è©±çªå·ã確èªãã¦ãªã«ããããã§ãããã¨ããã®ã¯ãã³ã¨ãããã³ã³ãã¸ã·ã§ã³ã«ãªã£ã¦ããã»ããéåæããªãã¨ã®ãã¨ã§ããã
ããã§ã¯ãªã
ãã
è¦åºããå½¢ã«åãã¦ãªãã¡ã¯ã¿ãªã³ã°ãã
æè¡çã«ããµã¼ãã¹ã®æ¦å¿µçã«ããã®ãèªè¨¼ã³ã¼ãã®çªåããæ½åºã§ãããã¨ãããã¨ãåãã£ã¦ããã®ã§ããã®æ¹åã«ãªãã¡ã¯ã¿ãªã³ã°ãã¦ããã¾ããã¾ããé»è©±çªå·ã®è¿½å ç»é²ãã®æ§é ã¯ä»¥ä¸ã®3種é¡ã®ç»é¢ã«åå²ãããã¨ãã§ãããã§ãã
- æåã«ã¦ã¼ã¶ã¼ãé»è©±çªå·ãå
¥åãããã©ã¼ã (
PhoneNumberAdditionForm
) ã®ããç»é¢ - èªè¨¼ã³ã¼ãSMSãéä¿¡ããèªè¨¼ã³ã¼ãã®çªåãããããã©ã¼ã (
PhoneNumberAddition::VerificationForm
) ã®ããç»é¢ - çªåã«æåãããã¨ã«ãé»è©±çªå·ãã¼ã¿ãæ°¸ç¶åãããã®ãã¨ã§æ£å¸¸ã«è¿½å ã§ããæ¨ã表示ããç»é¢
ãã®ãã¡ 2.ã®ãèªè¨¼ã³ã¼ãã®çªåããè¡ããã©ã¼ã ã«å¿ è¦ãªæ¯ãèãã詳細ã«è¦ã¦ããã¨ã次ã®ããã«ãªãã¾ãã
- è¦å®åæ°ã»æéå ã«ãæ£ããèªè¨¼ã³ã¼ããå ¥åããã¨ãã次ã®ã¹ãããã«é²ã
- ä¸å®ã®æå¹æéãéãã¦ããç §åãããå ´åãæåããå ¥åãä¿ã
- ééã£ãèªè¨¼ã³ã¼ããå ¥åãããå ´åãè¦å®åæ°ä»¥ä¸ã§ããã°åå ¥åãä¿ã
- è¦å®åæ°ãè¶ ãã¦ééã£ãèªè¨¼ã³ã¼ããå ¥åãããå ´åãæåããå ¥åãä¿ã
ãã®ããããè¸ã¾ãã¦ããã®ãããªæ§é ã«ãã¾ããã
- ã³ã¼ãç
§åããã®çµæåå¾ã失æåæ°ãªã©ã«ããåå
¥åå¯å¦ã®å¤å®ã
::PhoneNumberVerificationForm
ã¨ãã¦æ½åºããã - ã次ã®ã¹ãããããå°åºããããã«å¿
è¦ãªæ¯ãèãã
PhoneNumberAddition::VerificationForm
ã«æ®ããã - ã³ã³ããã¼ã©ããã¯
PhoneNumberAddition::VerificationForm
ãåç §ããã- ç
§åçµæåå¾ã¡ã½ãããªã©ã
::PhoneNumberVerificationForm
ã«å§è²ããã - å§è²ã®å®£è¨ãå«ããæçµçã«çµåãããé¨åã®ã¿ãå°ã㪠module ã«ã㦠mixin ããã
- ç
§åçµæåå¾ã¡ã½ãããªã©ã
- ã³ã³ããã¼ã©ã¯ã
#èªè¨¼ã«æåãã?
ãçã®å ´åã#次ã®é·ç§»å ã表ããªã½ã¼ã¹ãåå¾
ãã¦ãªãã¤ã¬ã¯ãããã
ãã®ããã«ãããã¨ã§ãåå¥ã®ãã©ã¼ã ã¯ã©ã¹ã®è²¬åãã¯ã£ããããã³ã¼ããæ´çã§ãã¾ããã
ãã®å¾å¼ãç¶ããé»è©±çªå·ã®å¤æ´ãããé»è©±çªå·ã§ã®ãã¹ã¯ã¼ããªã»ããããå®è£
ãã¦ããã¾ããããç®è«è¦éã PhoneNumberVerificationForm
ã®ä¿®æ£ã¯ã»ã¨ãã©ä¸è¦ã§ãããããã¾ãæ¯ãèãã®è¦³ç¹ããè¨ãæããã¨ããã§ã«ä½ã£ã¦å
±éåãããé»è©±çªå·ã®æç±ç¢ºèªã®ä»çµã¿ã使ããé»è©±çªå·å¤æ´æ©è½ã«å¿
è¦ãªã¶ãã®ã¿å®è£
ãããã¨ã§ãæ©è½è¿½å ã§ãããã¨ã«ãªãã¾ãã
横å±éã®ã¤ã¡ã¼ã¸
ããã©ã¼ã ãã¨ã¯ãªã«ã
ãã®ããã«ãã¢ããªã±ã¼ã·ã§ã³ã®ãã¡ã¤ã³ãè¦ãªããã³ã¼ãããªãã¡ã¯ã¿ãªã³ã°ãã¦ãã£ãçµæããããã©ã¼ã ãªãã¸ã§ã¯ã PhoneNumberAddition::VerificationForm
ã®ä¸ããå¥ã®ãã©ã¼ã ãªãã¸ã§ã¯ã PhoneNumberVerificationForm
ãå¼ã³åºãæ§é ã¨ãªãã¾ãããã¢ããªã±ã¼ã·ã§ã³ã¸ã®ããã¾ãå
·åã¯ããã£ããã®ã®ãããã¯ããã©ã¼ã ãªãã¸ã§ã¯ããã¨ããååããæ³åãããç»é¢ã®å
¥åé
ç®ã表ãããã©ã¼ã ãã®å½¢ããã¯å¤§ããç°ãªãã¾ãã
ããã§ãããããã¦ããã©ã¼ã ãã®ãã¨ãã¨ã®ãã¥ã¢ã³ã¹ã¯éã£ããããªãããªãã¨æã調ã¹ãã Twitter ã§ãèãã¦ã¿ãããã¾ãããããã¯ãå ¥åãã©ã¼ã ãããã¦ããããã§ããã*3 ãã®ããç¬èªç 究ã®åèªé£æ³ã²ã¼ã ã«ã¯ãªã£ã¦ãã¾ãã®ã§ããããã®ããã©ã¼ã ããã¢ããªã±ã¼ã·ã§ã³ã«ããããã¡ã¤ã³ã®ãå½¢ããåãåã£ããã®ã¨è§£éã§ããªããã¨æã£ã¦ãã¾ãã
é¡æã¨ãã¦ãããã£ã¼ãã£ã«ã¯ãé»è©±çªå·ã®ç»é²ãå¤æ´ã¨ãããå½¢ããããããããã¯ä¸é£ã®æ©è½ã®ã¨ã³ããªãã¤ã³ãã§ããããç®ã«ä»ããããã§ãããã£ã½ããã®ä¸é¨åã¨èªèãããã¡ãªãèªè¨¼ã³ã¼ãçªåãããã¼ããããèªä½ãå¤ãã®æ©è½ãæã£ã大äºãªãå½¢ãã¨ãã¦æ±ããæ½åºãã¦ç¬ç«ããã¾ããã
ããã«ãã£ã¼ãã£å ¨ä½ã§ã¯ãé»è©±çªå·ã®å¤æ´ããé»è©±çªå·ã«ãããã¹ã¯ã¼ããªã»ããã¨ãã£ãæ©è½ãå¿ è¦ã¨ãªãã¾ããããã®å ´åã§ãå ±éãããèªè¨¼ã³ã¼ãçªåãããã®ã¾ã¾ä½¿ãã¤ã¤ãã¨ã³ããªãã¤ã³ãã¨ãã¦åæ©è½ãå®è£ ãã¾ãããçµæãã³ã¼ãã®è¿½å éçã«ããå¿ è¦ãªå·¥æ°çã«ãç´å¾ã§ããç¨åº¦ã§ã¤ãããã¨ãã§ãã¾ããããã£ã¼ãã£ã«å¯¾ãã¦ããã¢ãã«ãä½ããã®ã§ã¯ãªããã¨æãã¾ãã
åé ã§ã触ããããã«ããã®ãããªRailsã³ã³ããã¼ã©å±¤ã¨ã¢ãã«å±¤ã®éã«ããä¸å±¤è¨ãããã¡ã¤ã³ã®è¤éãªå¦çãããã«é ç½®ããã¨ããè¨è¨ææ³ã¯ãä¸è¬çã«ãªã£ã¦ãã¾ããããããããã©ã¼ã ãªãã¸ã§ã¯ããã¨å¼ã¶ãããããã¯ããµã¼ãã¹å±¤ãã¨å¼ã¶ãã«é¢ãã¦ã¯ãçè ã¯å®ã¯ããã¾ã§ã®ãã ããã¯ããã¾ããã
ä¸æ¹ã大äºã ã¨æãã®ã¯ãããã«ãã¡ã¤ã³ã®å½¢ãç¾ãã¦ããããã«ä½ãããããã¯ç¾ããããã«ç¶ç¶çã«æãå ¥ãã¦ãããã¨ã§ããä»åã®ä¾ã§ã¯ãã®ããã«ãèªè¨¼ã³ã¼ãçªåããæ½åºãã¾ããããä»å¾ã¾ãæ°ããªè¦æ±ãå®ç¾ãã¹ãçºããå ´åãå¥ã®å½¢(ãã©ã¼ã )ãæµ®ãã³ä¸ãã£ã¦ããããããã¾ããããããè¦éããã«ãæè»ã«è²ã¦ã¦ãããããã§ããããã¨æã£ã¦ãã¾ãã
ã¾ã¨ã
ãã¡ã¤ã³ã®ããããã«æ³¨æãæããªããããã©ã¼ã ãªãã¸ã§ã¯ããè²ã¦ã¦ãã£ã話ããã¾ããã
- ãã¡ã¤ã³ã«é¢ããå¦çã Web ã®å ¥åºåã¨åããããã«ãã©ã¼ã ãªãã¸ã§ã¯ããå°å ¥ããã
- ç¶ç¶çã«ãªãã¡ã¯ã¿ãªã³ã°ãã³ã¼ããè²ã¦ã¦ãããã¡ã«ããã©ã¼ã ãªãã¸ã§ã¯ãã®æ§é ã¨ãã¡ã¤ã³ã®æ§é ãä¸è´ããã
- ãã®çµé¨ãããããã©ã¼ã ãã¨ããèªã«ã¤ãã¦èå¯ãã¦ã¿ããå
¥åãã©ã¼ã ã¨ãã¦ã ãã§ãªãããã¡ã¤ã³ã®å½¢(ãã©ã¼ã )ã§ãããã¨ãæèããã¨ãã¨ã³ã¸ãã¢ã ãã§ãªããã¼ã ã¿ããªã§åãè¦ç¹ããã½ããã¦ã§ã¢ãè¦ãããã
- ã¹ãããªããã£ãã¨ãã¯ãã¨ã¦ããã®ããã£ã!
ãããããµãã«ã¢ããªã±ã¼ã·ã§ã³ã®å½¢ã彫ãåºãã¦ã¿ãã¨ãã³ã¼ããã¹ãããªãããããã¹ãããããããããã¡ã¤ã³ã¨ãã¹ãã¼ãã¯ãããã¼ã ã®è²ããªäººã¨èªèãä¸è´ãã¦ãã¨ã¦ã楽ããä½é¨ã ã£ããã¨ããä¸ã¤ã®å°ããªã¹ãã¼ãªã¼ãç´¹ä»ãã¾ããããé¡ã¨ãªã£ããã£ã¼ãã£èªä½ã¯ã¨ã¦ãããããã¨æãã¾ããããªãããã¿ãªããã®ãå½¹ã«ç«ã¤ã¨ããããã§ãã
ææ¥ 5/31 ãã RubyKaigi 2018 ã§ãããã¯ãã¯ãããã§ãã社å¡ãçºè¡¨ããããå種ãã¼ãã£ã¼ãªã©ãä¼ç»ãã¦ãã¾ãããã¼ã¹ãªã©ãããã¾ãã®ã§ããã²ãç«ã¡å¯ãä¸ããããã¡ãããçè ãåå äºå®ã§ãã
ãã®ãã RubyKaigi ã¨ããã®å¾ãç¶ãããã½ããã¦ã§ã¢éçºã!