ç¬åŠã§ããã°ã©ãã³ã°åŠç¿ãããåã«
ã¿ãªããããã«ã¡ã¯ïŒ
Â
Â
çªç¶ã§ããã
Â
äœãç¥ããªãç¶æ ãã
Â
ããããããã°ã©ãã³ã°ããã£ãŠã¿ããã
Â
ãšæã£ãæã
Â
äœããæãã€ããŸããïŒ
Â
Â
Â
Â
Â
åã¯åœæ
Â
ãè²ã 調ã¹ããã©ãçµå±ããåããããã§ããã
Â
Â
Â
Â
Â
ãããããªçç±ãããä»ã®ç°å¢ããé£ã³åºããŠ
Â
ããããããã°ã©ãã³ã°ãåŠãŒããšãããšãã«
Â
ã»ããœã³ã³ã¯ïŒMacïŒWindowsïŒã©ã£ã¡ïŒ
ã»ãœããã¯ã©ããªãã®ã䜿ãã®ãã
ã»ãœããå ¥ãããã©äœãèŠã¥ããã
Â
ããã°ã©ãã³ã°ãå§ãã以åããæ©ãäºãå€ãã§ãããã
Â
èå³ã¯ãããã©ãããªæ©ã¿ã§äžæ©èžã¿åºããªããªãã
Â
ãããªå¿äœãªã話ã¯ãããŸããã
Â
Â
Â
ããåãæããããŠå°ã£ãŠãã人ãããã
Â
ãããªäººã®æå©ããå°ãã§ãã§ããã°ãšèãã
Â
ãã®èšäºãæ®ããŸãã
Â
ããã§å°ãã§ãããã°ã©ãã³ã°ãããåããèŸããŠããŸãã
Â
ãããªäººãæžã£ãŠãããã幞ãã§ãã
Â
Â
Â
Â
Â
Q.çµå±ããœã³ã³ã¯äœã䜿ãã¹ããªã®ã
Â
ãŸãå§ãã«ãããœã³ã³ã¯äœã䜿ãã®ãããšããäºã«ã€ããŠã話ãããŸãã
Â
çµè«ããèšããšã
Â
åã¯ãMacBook Proã16ã€ã³ããã䜿çšããŠãŸãã
Â
è³Œå ¥ããã®ã¯2019幎ç§ããã«åºãŠãããã®ã
Â
è³Œå ¥ææããã®ããããªã®ã§åœæã®ææ°ãéžã³ãŸããã
Â
ã©ããè²·ããªãä»åŸã®äºãèããŠè¯ããã®ã䜿ããã
Â
ããæã£ãããã§ãã
Â
Â
Â
ã¹ããã¯ã¯16ã€ã³ãã®äžã§ãæäžäœã®ãã®ã«ããŸããã
Â
çç±ã¯ã16ã€ã³ãã¢ãã«ã®æäžäœã§ãæ©èœã¯å ååãã£ãŠããããã§ãã
Â
ããã°ã©ãã³ã°ã ããèãããïŒã€äžã®ãµã€ãºã§ãè¯ãã£ãã®ã§ããã
Â
ãã£ããã®ããœã³ã³è³Œå ¥ã§ãããã
Â
å°æ¥çã«ãåç»ç·šéãã§ãããã¹ããã¯ãããã
Â
ããèããã®ã§ã
Â
ç»é¢ã®å€§ãã16ã€ã³ããéžã³ãŸããã
Â
Â
Â
ãŸãåãéã£ãããã°ã©ãã³ã°ã¹ã¯ãŒã«ã§ã¯
Â
ãã¡ã¢ãª8GBïŒãã©ãã·ã¥ã¹ãã¬ãŒãž256GBãæšå¥š
Â
ãšãªã£ãŠããŸãã
Â
ãããæºãããã°ãããã°ã©ãã³ã°åŠç¿ããã«ã¯å åãªã¹ããã¯ã ãšæããŸãã
Â
Â
Â
ãšããã§ããœã³ã³ã¯MacãšWindowsãšãããªãã§
Â
ããªãã§Macãªãã ããããšæããŸããã§ãããïŒ
Â
Â
Â
å®ã¯ããã«ã¯3ã€çç±ããããŸãã
Â
Â
Â
Â
Q.Macãéžã¶3ã€ã®çç±
Â
â ãšã³ãžãã¢ïŒããã°ã©ããŒïŒããã¶ã€ããŒã«å€ã䜿ãããŠãã
Â
ããã¯ãã®æ¥çã«èå³ãæã£ãæã
Â
ããããããäœãšãªãã€ã¡ãŒãžã«ãããããããŸãããã
Â
Â
Â
Â
Â
â¡ãUNIXã³ãã³ããã䜿ãã
Â
ããã°ã©ãã³ã°ã§ã€ããäžçš®ã®å¶äœç©ãšããŠ
Â
Webã¢ããªã±ãŒã·ã§ã³ïŒwebã¢ããªïŒã¯ã
Â
ãã®UNIXãšããã·ã¹ãã ã§åãããŠãããã®ãå€ãã§ãã
Â
Macã¯ãã®UNIXãããŒã¹ã«ãªãã¬ãŒã·ã§ã³ã·ã¹ãã ãæ§ç¯ãããŠããçºãäºææ§ã®é¢ã§äŸ¿å©ã
Â
ç°¡åã«èšãã°Macã䜿çšããæ¹ãäœæ¥ããããããšããèš³ã§ãã
Â
Â
Â
Â
Â
â¢Macã«Windowsãå ¥ããŠäœ¿ãäºãã§ããïŒ
Â
ãBoot CampïŒããŒããã£ã³ãïŒããšããä»®æ³ç°å¢ãäœæãããš
Â
Macã®ãªãã§Windowsã䜿ãäºãã§ããŸãã
Â
â»ããªãŒãºããŒããã£ã³ãã£ãŠãããŸããããïŒç¬ïŒ
Â
åã¯ããã°ã©ãã³ã°ä»¥å€ã®ä»äºãããæã
Â
å®éã«Boot Campã§Windowsã䜿çšããŠããŸãã
Â
å°ãæäœã«çããããŸããäœäºãæ £ãã§ãã
Â
ããããšããæãã«ã¯äœ¿çšããŠãè¯ãã®ããªãšæããŸãã
Â
Â
Â
Â
Â
以äžã®ç¹ããããã°ã©ãã³ã°åŠç¿ãå§ããã«ãããã
Â
ããœã³ã³è³Œå ¥ãèããŠããæ¹ãããŸãããã
Â
ãå§ãã®äžå°ã¯Macãããå§ãããŸãã
Â
Â
Â
Â
Â
Q.ããœã³ã³è²·ã£ããã©äœããããã®ãåãããªã
Â
ããœã³ã³ãè³Œå ¥ã§ãããããã°ã©ãã³ã°äººçã®ã¯ããŸãã
Â
ç¡äºäžæ©ãèžã¿åºãããšãã§ããèš³ã§ããã
Â
次ã«æ©ãã®ããäœããå§ããŠããã®ãåãããªãããšããäºã§ãã
Â
ããã§ããœããã¯ã©ããªãã®ã䜿ãã®ããã«ã€ããŠæžããŠãããŸãã
Â
ãŸããããã°ã©ãã³ã°ïŒã³ãŒããæžãããšããããšãã
Â
ããã°ã©ãã³ã°ããããã®éå ·
Â
ãããã¹ããšãã£ã¿ããšãããœãããçšæããŸãã
Â
ä»åã¯ç¡æã§äœ¿ããå€ãã®ãšã³ãžãã¢ã䜿ã£ãŠãã
Â
ãVS CodeïŒvisualãstudioãcodeïŒãã§ãã
 VSCodeããŠã³ããŒãããŒãž
Â
è±èªã®ããŒãžã«é£ã³ãŸããã
ãdownloadãforãMacããšãããã¿ã³ãããã®ã§ãã¡ããã¯ãªãã¯ããã°ããŠã³ããŒããå§ãŸããŸãã
Â
zipãã¡ã€ã«ã§ããŠã³ããŒããããã®ã§ããã¡ãã解åããããŠã³ããŒããã©ã«ãããã¢ããªã±ãŒã·ã§ã³ãã©ã«ãã«ç§»åãããŸãã
Â
ã¢ããªã±ãŒã·ã§ã³ãã©ã«ãã«ç§»åãããããšã¯ããããããã䜿ããŸãã®ã§dockã«ã眮ããŠãããŸãããã
Â
ãããŸã§ã§ããŸããã次ã«äžèº«ã®èšå®ã«ç§»ããŸãã
Â
ãŸãdockã«é 眮ãããVSCodeããèµ·åãããŸãã
Â
èµ·åãããããå¿ èŠãªãæ¡åŒµæ©èœããå ããŠãããŸãã
å·ŠåŽã«ã¡ãã¥ãŒã¢ã€ã³ã³ãïŒã€ãããŸããããã®ãã¡ã®äžçªããã®ã¢ã€ã³ã³ããæ¡åŒµæ©èœæ€çŽ¢ãã¢ã€ã³ã³ã§ãã
Â
ãã¡ããã¯ãªãã¯ããŸããããäžããé ã«å ¥ããŠãããŸãã
- Japanese Language Pack for Visual Studio Code
- æ¥æ¬èªåâã€ã³ã¹ããŒã«çµããããrestartãnowãã¯ãªãã¯ã§æ¥æ¬èªè¡šèšã§åèµ·åããŠãããŸãã
- HTML Snippets
- HTMLã¿ã°ãCSSã¿ã°ã®å ¥åè£å®æ©èœã
- Ruby
- Rubyæ§æãã§ãã¯ã
- zenkaku
- å šè§ã¹ããŒã¹ãæ··ãã蟌ãã éã«ç¥ãããŠãããŸã
â»zenkakuã«é¢ããŠã¯ãã€ã³ã¹ããŒã«ã ãã§ã¯äœ¿çšã§ããªãã®ã§ã
ãcommandïŒshiftïŒPãã§ã³ãã³ããã¬ãããšããèšå®ãã¡ã€ã«ã®æ€çŽ¢ç»é¢ã«ãŠãïŒEnableãzenkakuããæ€çŽ¢ããéžæã
ãã®åŸVSCodeãæ¶ããŠéãçŽãå¿ èŠãããããããcommandïŒQãã§ã¢ããªãçµäºãããããäžåºŠVSCodeãéããŸãã
Â
Â
以äžã§æ¡åŒµæ©èœè¿œå ã¯çµäºã§ãã
ãã®ããã«ç°¡åã«æ¡åŒµæ©èœãè¿œå ãåé€ãã§ããã®ã§ãä»åŸå¿ èŠã«å¿ããŠå¢ãããŠã¿ãŠãã ããã
Â
Â
ããã§ã¯æ¬¡ã«VSCodeã®èšå®ãã«ã¹ã¿ãã€ãºããŠãããŸãã
Â
1.tabããŒã§åè§ã¹ããŒã¹ïŒã€åå ¥åãã§ããããã«ããã
ããã¯ã³ãŒããæžããšãã«åè§ã¹ããŒã¹ïŒã€ãçšããŠããããã«ã³ãŒããæžãããã«é »ç¹ã«äœ¿ãã®ã§ããã®ããã®èšå®ã§ãã
Â
ã»ãµã€ãããŒã®ç®¡çã¢ã€ã³ã³ïŒäžçªäžã®æ¯è»ïŒâèšå®ãã¯ãªãã¯
ã»EditorïŒTabSizeããïŒãã«èšå®
ã»EditorïŒRender White spaceã§ãallããéžæã§å®äºã
Â
Â
Â
2.次ã«ãªãŒãã»ãŒãèšå®ãè¡ããŸãã
éåžžä¿åã¯ãã·ã§ãŒãã«ããã䜿çšããŠããcommandïŒSããšå ¥åãå¿ èŠãšãªããŸãããæ°ã ã®ãã¡ã€ã«ã觊ããªããè¡ã£ããæ¥ããããŸãã®ã§ããä¿åå¿ãããçãããããªã£ãŠããŸãã
ããã§ãã®ãä¿åå¿ãé²æ¢ãã«èšå®ãã²ãšã€ããŠãããŸãã
Â
1.ãšåæ§ã«ãµã€ãããŒèšå®ãããautoãsaveããæ¢ãã
ãã®èšå®ããoffããããonFocusChangeïŒå€æŽãä¿åããïŒãã«ããŸãã
Â
ããã§ä»ãšéããšãããžç§»åããéã«ã¯ãèªåã§ä¿åãããŠãããŸãã
Â
Â
ããã«ãŠã䜿çšããããœã³ã³ããšã䜿çšãããœããïŒã¢ããªïŒãã«ã€ããŠã¯çšæããäºãã§ããŸããã
Â
 次ã®èšäºãžç¶ããŸãã
ããã°ã©ãã³ã°ãããããšæ±ºããããŸãã¯ããïŒïœãHTMLãšCSSã«ã€ããŠã
ã¿ãªããããã«ã¡ã¯ïŒ
Â
Â
ä»æ¥ã¯
Â
ãããããããã°ã©ãã³ã°ããã£ãŠã¿ãããšããŠããæ¹ã
Â
ãããã°ã©ãã³ã°ã«èå³ããæã¡ã®æ¹ã
Â
ãããã°ã©ãã³ã°ã«å°æ¥æ§ãæããŠããæ¹ã
Â
ãããã°ã©ãã³ã°ãç¿åŸããŠ
ãããããAIãšãšãã«æŽ»èºãçãæ¹ã
Â
ããããç®çãšããŠããŠ
Â
ã ããããã
Â
ãã©ãããæãã€ããããããåãããªãã
Â
ãé£ããäºã¯çœ®ããšããŠãšããããã€ããããã
Â
ããšããããããã°ã©ãã³ã°ãããŠã¿ããã
Â
ãããããããã°ã©ãã³ã°ã£ãŠïŒïŒïŒã
Â
ãããªæ¹ãžåã
Â
ãåºç€ã»åºæ¬ã«ã€ããŠã
Â
ãããä»ã®äººã«ã¯ãªã
Â
ãåããããããåãªãã®è¡šçŸã§ãäŒãããã
Â
ãããªå 容ã§ãéãããŸãïŒ
Â
Â
Â
Â
Â
ã§ã¯æ©é
Â
âåºç€ãã®ïŒ
Â
ãHTMLãšCSSã«ã€ããŠãã話ããããšæããŸãã
Â
Â
Â
Â
Â
ãŸãå§ãã«
Â
ã HTMLããšã¯
Â
ã»ãŠã§ããµã€ãã«è¡šç€ºãããæ å ±ãèšèŒãããã®ã
Â
Â
Â
ããã¯ãã®ããã°ãªã©ãå§ãã
ã€ã³ã¿ãŒãããäžã§ç®ã«ããŠãããã®ã¯å šãŠã§ãã
Â
HTMLã¯ãŠã§ããµã€ãã®åºæ¬ãããŒã¹ã«ãªããŸãã
Â
Â
Â
Â
Â
ç¶ããŠãã
Â
ãCSSããšã¯
Â
ã»HTMLããªã·ã£ã¬ã«ãã¶ã€ã³ããããšãèšããŸãã
Â
Â
 HTMLãšããæ å ±ã ãã ãšã
Â
æåãç»åããªã³ã¯å ãªã©ããã ãã 䞊ã¹ãŠããã ãã
Â
ããã§ã¯èªã¿ã¥ãããŠåããã«ããã§ããã
Â
ããã§ãã®ãCSSããšãããªã·ã£ã¬ãªãã®ã䜿ãã
Â
ã»åŒ·èª¿ããããšããã«è²ã¥ã
ã»æåã®çš®é¡å€æŽ
ã»ç»åã®ãªãµã€ãºã䞊ã¹æ¿ã
ã»ãã®ä»ããããããã
Â
ãããªäºãããããšãã§ããïŒ
Â
ããããCSSãã§ãã
Â
Â
Â
Â
Â
ãããèžãŸããäžã§ã
HTMLã«ã€ããŠããå°ã詳ããæžããŠã¿ãŸãã
Â
Â
ãHTMLã
Â
ä»ç®ã«ããŠããããã°ã®äžèº«ãèšå·åãããã®ã
Â
ãã³ãŒãããšããã®ã§ããã
Â
決ããããã«ãŒã«ã«æ²¿ã£ãŠã€ããããŠããŸãã
Â
Â
Â
Â
Â
ããšãã°ä»£è¡šçãªãã®ãïŒã€ãããŸãã
Â
â ãç®ã«èŠããªãæ å ±ã
Â
<head></head>ã
Â
ããã¯headèŠçŽ ãšèšããŸãã
Â
Â
Â
å·ŠåŽããéå§ã¿ã°ããšåŒã³
Â
å³åŽããéãã¿ã°ããªã©ãšåŒã³ãŸãã
Â
Â
Â
ãã®ãµãã€ã®ã¿ã°ã®äžã«
é¢é£ããå 容ãäžèº«ãå ¥ããŠãããŸãã
Â
Â
Â
ãã®headèŠçŽ ã¯ã
Â
ãŠã§ããµã€ãã®æ å ±ããããéšåã§ãã
Â
ãã€ã³ãã¯ã
ãããã«å ¥ããæ å ±ã¯è¡šç€ºãããªãäºãã§ãã
Â
Â
ãªã®ã§
Â
ã³ãŒããèªã¿æžãããããã°ã©ããŒã¯èŠãŸãã
Â
ããã
Â
é²èŠ§ããæ¹ã¯èŠãäºã¯ãããŸããã
Â
Â
Â
Â
Â
ãã®ãäžã§çŽ¹ä»ãããããã§å²ãŸãããã®ã
Â
ãã¿ã°ã
Â
ãšèšããŸãã
Â
Â
ãã®ïŒã¿ã°ïŒãšãããã®ã䜿ãã
ãŠã§ããµã€ãã«è¡šç€ºããããæ å ±ãæžããŠãããŸãã
Â
Â
Â
Â
Â
â¡ãç®ã«èŠããæ å ±ã
Â
<body></body>ã
Â
ããã¯bodyèŠçŽ ãšèšããŸãã
Â
Â
Â
ç»é¢äžïŒä»ã¿ãŠããããŒãžïŒã«
èŠèŠçãªæ å ±ãå ¥ããããšãã§ããŸãã
Â
ãã®äžã«æ°ã ã®ææ³ãçšããŠã
Â
ã»åã
ã»è²ãã€ã
ã»ç»åãé£ã³åºã
ã»åç»ãæµãã
Â
ãšãã£ã倧ããªã²ãšã€ã®
ãŠã§ããµã€ããã§ãããã£ãŠããŸãã
Â
Â
Â
Â
Â
倧ããåãã
Â
â ãŠã§ããµã€ãã«é¢ãããç®ã«èŠããªãæ å ±ã
Â
ïŒheadïŒèŠçŽ
Â
Â
â¡ãŠã§ããµã€ãäžã«è¡šç€ºããããç®ã«èŠããæ å ±ã
Â
ïŒbodyïŒèŠçŽ
Â
Â
Â
ãã®ïŒã€ã§
HTMLã¯äœãããŠããŸãã
Â
Â
Â
Â
åºæ¬çãªã€ããæ¹ã¯ã
Â
ãã¿ã°ã®äžã«é¢ä¿ããå 容ãæžããŠããã ãïŒã
Â
Â
Â
Â
Â
<ã¿ã°>ãå 容ãæžããšããã</ã¿ã°>ã
Â
ãšããå ·åã«æžããŸãã
Â
Â
Â
ãããã€ã¡ãŒãžããããããã«ã¯ã
Â
ãã¿ã°ããïŒããç©ã¿æšã
Â
ãšããŠãã ããã
Â
åºæ¬ã¯ãã®ãã¿ã°ããšããåã®ãç©ã¿æšãã
Â
äžããé ã«éãªã£ãŠ
Â
ã²ãšã€ã®ãŠã§ããµã€ããã§ããŠããŸãã
Â
Â
Â
Â
Â
以äžãä»åã¯HTMLãšCSSã«ã€ããŠã§ããïŒ
Â
ããããšãããããŸããÂ
Â
Â
Â
ããã°ã©ãã³ã°åã®æºåïŒCatalinaïŒ
Â
ããã¯Macã®OSããCatalinaãã®æ¹ã察象ãšããå 容ã«ãªã£ãŠããŸãã
ãMojaveãã®æ¹ã¯ããã¡ããžÂ
Â
ã§ã¯é²ããŠãããŸãã
 ãŸãã¿ãŒããã«ã«ãŠä»¥äžã³ãã³ããäžãã1è¡ãã€å®è¡ã
3è¡ç®ã®ããã«çµæãåºãã°OKã§ãã
1 2 3 |
â»ãïŒãã®ãšããã¯ãCatalinaã®æ¹ã¯ãïŒ ãã«ãªã£ãŠããã®ã§æ³šæ
Â
ãã衚瀺ããããªãã£ããäžåºŠã¿ãŒããã«ãéããäžã§ããäžåºŠã¿ãŒããã«ãéããªãããŸãã
ã§ããããããäžåºŠãecho $SHELLããå®è¡ããŠã¿ãŠäžããã
Â
Â
1.Command Line Toolsãçšæ
ã¿ãŒããã«ã«ãŠä»¥äžãå ¥å
â»ã$ãã¯å ¥åäžèŠã§ããä»åŸãåæ§ã
1 |
$ xcode-select --install
|
ç»é¢ãåãæ¿ãã£ãããã€ã³ã¹ããŒã«ããåæãããã¯ãªãã¯ã
ããŠã³ããŒããå®äºããã°OKã§ãã
Â
2.Homebrewãçšæ
1 2 3 |
$ cd
$ pwd
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
|
äžããïŒè¡ãã€å®è¡ããŸãã
 â»åŠçã«æéãããããŸãã
Â
以äžã衚瀺ãããããšã³ã¿ãŒããŒãæŒããŠäžããã
ããPress RETURN to continue or any other key to aboutãã
Â
 次ã«
ãPasswordïŒã
ãšè¡šç€ºãããŸãã®ã§PCã®ãã¹ã¯ãŒããå ¥åãããšã³ã¿ãŒæŒãã
â»å ¥åã®æãæåã衚瀺ãããŸãããå®éã«ã¯å ¥åãããŠãŸãã®ã§å®å¿ããŠäžããã
Â
å ¥ååŸãåã³ãïŒïŒïŒ ïŒãã衚瀺ããåŸ æ©ç¶æ ã«ãªãã°OKã§ãã
Â
Â
 以äžã®ã³ãã³ãå®è¡ã
1 2 |
$ brew -v
Homebrew 2.1.13
|
 Homebrewã®ããŒãžã§ã³ã衚瀺ãããã°ã€ã³ã¹ããŒã«å®äºã§ãã
Â
次ã«Homebrewãã¢ããããŒãããŸãã
1 |
$ brew update
|
 æåŸã«Homebrewã®æš©éãå€æŽããŸãã
1 |
$ sudo chown -R `whoami`:admin /usr/local/bin
|
Â
Â
Â
3.æ°ããããŒãžã§ã³ã®Rubyãã€ã³ã¹ããŒã«
å ã Macã«ã¯Rubyãã€ã³ã¹ããŒã«ãããŠããŸãããWebã¢ããªã±ãŒã·ã§ã³éçºã®ããã«å°çšã§Rubyãã€ã³ã¹ããŒã«ããŸãã
ãŸãã¯ãrbenvãšruby-buildãã€ã³ã¹ããŒã«ããŸãã
1 |
 rbenvãPCã®ã©ã®å Žæã§ã䜿çšã§ããããã以äžã³ãã³ãå®è¡ã
1 |
$ echo 'eval "$(rbenv init -)"' >> ~/.zshrc
|
 zshrcãšã¯ãèšå®ãã¡ã€ã«ã®å称ã§ãã
CatalinaãMojave以åã®æ¹ã§ãèšå®ãã¡ã€ã«ã®å Žæãåã ã§ç°ãªãã®ã§æ³šæããŠäžããã
Â
readlineãã€ã³ã¹ããŒã«ãã
1 |
$ brew install readline
|
â»ã€ã³ã¹ããŒã«æžã¿ã®å ŽåããããŸãããã®éã¯ãã®ãŸãŸé²ããŠäžããã
Â
readlineãã©ãããã§ã䜿çšã§ããããã«ããã
1 |
$ brew link readline --force
|
Â
 rbenvãå©çšãRubyãã€ã³ã¹ããŒã«
1 2 |
 åŠçã«10åçšåºŠãããå¯èœæ§ããããŸãã
2è¡ç®ã¯ã€ã³ã¹ããŒã«ããRubyã®ããŒãžã§ã³ãæå®ããŠããŸãã
Â
rbenvãèªã¿èŸŒãã§å€æŽãåæ ãããŸãã
1 |
$ rbenv rehash
|
以äžã³ãã³ãå®è¡ã§Rubyã®ããŒãžã§ã³ã2.5.1ãšè¡šç€ºãããã°OKã§ãã
1 |
$ ruby -v
|
Â
4.MySQLãçšæãã
MySQLãšã¯ãWebã¢ããªã±ãŒã·ã§ã³ã«ãããããŒã¿ãèç©ããå Žæãã®äžçš®ã§ãããä»ã«ãçš®é¡ããããŸããä»åã¯ããã¥ã©ãŒãªãã¡ãã䜿çšããŸãã
Â
ãŸãã¯MySQLãã€ã³ã¹ããŒã«
1 |
â»åŠçã«æéãããããŸãã
Â
次ã«MySQLã®èªåèµ·åãèšå®ããã
1 2 3 |
äžããé ã«1è¡ãã€å®è¡ããã
Â
å®äºãããmysqlã³ãã³ããã©ãããã§ãå®è¡ã§ããããã«ããã
1 2 3 4 |
äžããé ã«å®è¡ãæåŸïŒè¡ç®ã®ããã«è¡šç€ºãããã°OKã§ãã
Â
mysqlèµ·åã確èªã
1 2 |
Â
Â
ãŸãã¯ãRubyã®æ¡åŒµæ©èœïŒgemïŒã管çããçº
bundlerïŒãã³ãã©ãŒïŒãã€ã³ã¹ããŒã«ããŸãã
1 |
$ gem install bundler
|
次ã«Railsãã€ã³ã¹ããŒã«
1 |
$ gem install rails --version='5.2.3'
|
â»åŠçã«æéãããããŸãã
Â
ããã§éçºã«å¿ èŠãªãã®ã¯äžéãã€ã³ã¹ããŒã«ã§ããŸããã
以äžãå®è¡ããrbenvãèªã¿èŸŒã¿ãå€æŽãåæ ãããŸãã
1 |
$ rbenv rehash
|
Â
 æåŸã«ä»¥äžã³ãã³ãå®è¡ã§Railsãå°å ¥ã§ããŠããã°å®äºã§ãã
1 |
$ rails -v
|
äžã®ã³ãã³ãã¯ã察象ã®çŸåšã®ããŒãžã§ã³ã確èªãããã®ã§
ããã¯ãRailsã®ããŒãžã§ã³ãã衚瀺ããŸãã
Rails 5.2.3ãšåºãã°OKã§ãã
Â
ããã§ããã°ã©ãã³ã°åŠç¿ãéå§ããäºãã§ããŸãã
ããã°ã©ãã³ã°åã®æºåïŒMojaveïŒ
Â
Â
次ã¯ããå®éã«ããã°ã©ã ãæžãäžã§ã®ç°å¢æ§ç¯ãã®æºåã§ãã
ç°å¢æ§ç¯ãšã¯ãç°¡åã«èšãã°ãããã°ã©ã çµãçºã®äœæ¥å°ãã§ãã
Â
Â
ã§ã¯æ©éé²ããŠãããŸãã
Â
Macã®OSç¶æ ïŒããŒãžã§ã³ã«ããïŒæ¹æ³ãç°ãªãã®ã§
ããããåããŠæžããŠãããŸãã
Â
OSçš®é¡ã¯ããMojaveãšCatalinaãã®ïŒã€ã§
ç°¡åã«èšããš
Mojaveã¯åããŒãžã§ã³
Catalinaã¯åŸããŒãžã§ã³ã§ãã
Â
ã§ã¯ãŸãå ±éã®ãšããããå§ããŸãã
Â
ã¹ãããã©ã€ãæ€çŽ¢ã䜿ãããã¿ãŒããã«ããèµ·åã
ãControlããŒïŒspaceããããã¯ãcommandããŒïŒspaceãã§
æ€çŽ¢ããŒåºããŸãã
Â
ãããŠãã¿ãŒããã«ããšå ¥åã
â
ãããªãã®ãåºãŠããŸãã
ãã®ãã¿ãŒããã«ãã¯ãCLIã§ãã
CLIãšã¯ãã³ãã³ãã©ã€ã³ã€ã³ã¿ãŒãã§ã€ã¹ãã®ç¥ã§
ã¿ãŒããã«ã«ã³ãã³ããæã¡èŸŒãããšã§ããœã³ã³ãæäœããäºãã§ããŸãã
â»ãã䜿ãã®ã§å¿ èŠã§ããã°dockã«çœ®ããŠãããŸãããã
Â
èµ·åããããšãè±èªã®æåããºã©ãºã©ãšåºãŠããŸãã
ããèŠããšããã-no-MacBook-ProïŒ~ãŠãŒã¶ãŒå$ããšæžããŠããŸãã
ããã¯ããããªãã®ããœã³ã³å ã®çŸåšå°ããè¡šããŠããŸãã
Â
ããã«æžããããïŒãããïŒ ããããã³ãããšåŒã³ããåœä»€åŸ ã¡ç¶æ ãã§ããããšãè¡šããŠããŸãã
Â
Â
Â
â»ããã§ã²ãšã€ããã®ã¿ãŒããã«æäœã§ã¯AppleIDã䜿çšããŸãã
ãŸã äœæãããŠããªãæ¹ã¯äœæãé¡ãããŸãã
ã§ã¯æ¬¡ã«Mojaveã®æ¹ããç¶ããŸãã
â»Catalinaã®æ¹ã¯æ¬¡ã®èšäºã«ãŠç¶ããŠãããŸãã®ã§ä»¥éã¯ãé£ã°ããŠäžãã
Â
Â
Â
1.commandãlineãtoolsãçšæãã
ã¿ãŒããã«ã«ãŠä»¥äžãå ¥åãããšã³ã¿ãŒã§å®è¡ã
$
ã¯å
¥åããå¿
èŠãããŸãããä»åŸãåæ§ã§ã
1 |
$ xcode-select --install
|
Â
 å ã«é²ãããããã€ã³ã¹ããŒã«ãããåæãããã¯ãªãã¯ã
âããŠã³ããŒããå§ãŸããå®äºãããOKã§ãã
Â
Â
 2.Homebrewãçšæãã
ãŸãHomebrewã€ã³ã¹ããŒã«ããå§ããŸãã
以äžã®ã³ãã³ããäžããé ã«1è¡ãã€å®è¡ã
1 2 3 |
$ cd
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
|
â»åŠçã«æéãããããŸãããã°ããåŸ ã¡ãŸãããã
Â
éäžã§
ãpressãreturnãtoãcontinueãorãanyãotherãkeyãtoãaboutããšåºãŠ
åŸ æ©äžã®ãïŒãããªãã£ããããšã³ã¿ãŒããŒïŒãªã¿ãŒã³ããŒïŒãæŒããŠäžããã
Â
Â
ãããšãŸãéäžã§
ãpasswordïŒããšåºãŠããŸãã
ããã¯PCã®ãã¹ã¯ãŒããå ¥åããŠäžããã
â»å ¥åããŠãç»é¢ã«å€åããªãæãŠãŠããã®ãäžå®ã«ãªããŸããã
æãŠãŠãŸãã®ã§ãããã¿ã«ãšã³ã¿ãŒãªã©æŒãããïŒæåãã€ç¢ºå®ã«å ¥åããŠãšã³ã¿ãŒãæŒããŸãããã
Â
ãããŸã§é²ããããåŠççµäºãåŸ ã¡
ãïŒãã®åŸ æ©ç¶æ ã確èªãããå®äºã§ãã
Â
Â
ãã®åŸã1è¡ç®ã®ã³ãã³ãå®è¡ããïŒè¡ç®ã®çµæãèŠãããæåã§ãã
1 2 |
$ brew -v
Homebrew 1.8.0
|
次ã«ææ°ããŒãžã§ã³ã«æŽæ°ããŸãã
1 |
$ brew update
|
æåŸã«Homebrewã®æš©éãå€æŽããŸãã
ã¿ãŒããã«ãæš©éã®å€æŽ
1 |
$ sudo chown -R `whoami`:admin /usr/local/bin
|
Â
3.ææ°Rubyã®ã€ã³ã¹ããŒã«
ãŸãåå°ã®rbenvãšruby-buildããHomebrewãçšããŠã€ã³ã¹ããŒã«ããŸãã
1 |
次ã«ã©ãã§ã䜿çšã§ããããã«èšå®ãå€æŽããŸãã
1 |
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
|
å€æŽããå 容ãåæ ãããŸãã
1 |
$ source ~/.bash_profile
|
 次ã¯ã¿ãŒããã«ã®irbäžã§æ¥æ¬èªå ¥åãããçºã®èšå®ãããŸãã
Homebrewã«ãŠãreadlineãã€ã³ã¹ããŒã«
1 |
$ brew install readline
|
â»ãã§ã«ã€ã³ã¹ããŒã«æžã¿ã®å Žåããã®ãŸãŸé²ããŠäžããã
Â
ãã¡ããã©ãããã§ã䜿çšãã§ããããã«ããŸãããã
1 |
$ brew link readline --force
|
Â
rbenvã䜿çšããŠRubyãã€ã³ã¹ããŒã«
äžãã1è¡ãã€å®è¡
1 2 |
 â»åŠçã«10åãããå¯èœæ§ããããŸãããã°ããåŸ ã¡ãŸãããã
ããã2.5.1ãããšèšãã®ã¯ããŒãžã§ã³ã§ãã
Â
Rubyã«ãŠäœ¿çšããããŒãžã§ã³ãæå®ããŸãã
1 |
$ rbenv global 2.5.1
|
ããã«ããããã©ã«ãã§å ¥ã£ãŠããRubyãããå ã»ã©ã€ã³ã¹ããŒã«ããããŒãžã§ã³ã®Rubyã«åãæ¿ãããŸããã
Â
â»ä»åŸãŸãããŒãžã§ã³ãå ¥ãçŽããŠãæå®ãå¿ èŠãªéã¯ããã®æäœã§ããŒãžã§ã³ãå€ããŠé²ããŸãã
Â
Rubyã®ããŒãžã§ã³å€æŽãããŸããã®ã§åæ ãããŸãã
1 |
$ rbenv rehash
|
 以äžã®ã³ãã³ãã§ããŒãžã§ã³ç¢ºèªãã§ããŸãã
1 |
$ ruby -v
|
ããã§æå®ããã2.5.1ããšè¡šç€ºãããã°å®äºã§ãã
Â
Â
Â
4.MySQLãçšæ
MySQLã¯ãããŒã¿ãèç©ããå Žæã®äžçš®ã§ããã¥ã©ãŒãªãã®ã§ãã
ã€ã³ã¹ããŒã«ããããã«ä»¥äžãå ¥åãå®è¡ã
1 |
次ã«MySQLãèªåçã«èµ·åãããçºã®èšå®ãè¡ããŸãã
1 2 3 |
äžããé ã«å®è¡ããŠãããŸãããã
Â
次ã«mysqlã³ãã³ããã©ãã§ã䜿çšã§ããããã«ä»¥äžãå®è¡ã
1 2 3 4 5 6 7 |
 æåŸ4è¡ç®ã®ããã«è¡šç€ºãããã°æåã§ãã
Â
 ãããŸã§ã§ããããmysqlã®èµ·å確èªã§ãã
1 2 3 4 5 |
 äžã®1è¡ãå®è¡ããŠ2è¡ç®ã®ããã«åºãã°æåã§ãã
Â
Â
Â
Â
ãŸãã¯ãRubyã®æ¡åŒµæ©èœïŒgemïŒã管çããçº
bundlerïŒãã³ãã©ãŒïŒãã€ã³ã¹ããŒã«ããŸãã
1 |
$ gem install bundler
|
次ã«Railsãã€ã³ã¹ããŒã«
1 |
$ gem install rails --version='5.2.3'
|
â»åŠçã«æéãããããŸãã
Â
ããã§éçºã«å¿ èŠãªãã®ã¯äžéãã€ã³ã¹ããŒã«ã§ããŸããã
以äžãå®è¡ããrbenvãèªã¿èŸŒã¿ãå€æŽãåæ ãããŸãã
1 |
$ rbenv rehash
|
Â
 æåŸã«ä»¥äžã³ãã³ãå®è¡ã§Railsãå°å ¥ã§ããŠããã°å®äºã§ãã
1 |
$ rails -v
|
äžã®ã³ãã³ãã¯ã察象ã®çŸåšã®ããŒãžã§ã³ã確èªãããã®ã§
ããã¯ãRailsã®ããŒãžã§ã³ãã衚瀺ããŸãã
Rails 5.2.3ãšåºãã°OKã§ãã
Â
ããã§ããã°ã©ãã³ã°åŠç¿ãéå§ããäºãã§ããŸãã
Railsãæçš¿ç»åãç·šéã»ãã¬ãã¥ãŒã»åé€ãã®ããæ¹ïŒjsãjQueryïŒ
Â
ããã«ã¡ã¯ïŒ
ä»åã¯ãååã®ç¶ã
 Railsãç»åè€æ°æçš¿ã®ããæ¹ïŒjsãjQueryã§ãã©ãŒã äœæïŒ
ããæçš¿ç»åã®ãç·šéã»ãã¬ãã¥ãŒã»åé€ãã«ã€ããŠæžããŠãããŸããÂ
Â
Â
1.è€æ°ç»åã®æçš¿æ©èœãå®è£ ãâãããŸã§ãååãããŸããã
2.ç·šéæ©èœã®å®è£ ãâ次ã¯ããã§ãã
3.ãã¬ãã¥ãŒæ©èœãå®è£ ã
4.åé€ã®å®è£ ã
Â
Â
ã§ã¯æ¹ããŠïŒã€ç®ãç·šéæ©èœãããã¹ã¿ãŒãã§ãã
Â
Â
1ã€ã®æçš¿ã«å¯Ÿãè€æ°ç»åãæ·»ä»ããæ©èœã«å¿ èŠãªãfields_forã
ãã®ãfields_forãã¡ãœããå©çšã®éã«ãæžããaccepts_nested_attributes_forã
ãã®ãaccepts_nested_attributes_forãã¡ãœããã¯ã
paramsã®ââs_attritbutes:ãšããããŒã®äžã§ç¹å®ã®å€ãéãããšã§ã芪ã¢ãã«ã«çŽã¥ããåã¢ãã«ã®åé€ãç·šéïŒæŽæ°ïŒãè¡ããŸãã
Â
ãã®ãã€ã³ãããµãŸããŠé²ããŸãã
Â
Â
Â
Â
Â
â ã³ã³ãããŒã©ã§åºæ¬çãªåããšã¹ããã³ã°ãã©ã¡ãŒã¿ãè¿œå ã
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
before_action :set_product, except: [:index, :new, :create]
def update
if @product.update(product_params)
redirect_to root_path
else
render :edit
end
end
private
def product_params
params.require(:product).permit(:name, :price, images_attributes: [:src, :_destroy, :id])
end
def set_product
@product = Product.find(params[:id])
end
|
Â
14è¡ç®ã«å ã»ã©èª¬æãããã€ã³ããããs_attributesïŒãã«ç¶ãã
[ïŒsrc, ïŒ_destroy, ïŒid]ãã®ïŒã€ãè¿œå ãããŸããã
Â
ããã§èŠªã¢ãã«ïŒproductïŒã«åºã¥ããåã¢ãã«ïŒimagesïŒãšçŽä»ã
欲ããå€ãsrcã_destroy ãidããåã£ãŠããèšè¿°ã«ãªããŸããã
Â
ããã§åºãŠãããdestroy ããåããŠã¿ãŸããã
ããã¯ã
fields_forããéãããŠããããã®ããŒãæã£ãæ å ±ãé Œãã«
railsãåã¢ãã«ã®åé€ãè¡ã£ãŠãããã
 ãšããèšè¿°æ¹æ³ã®ããã§ãã
Â
Â
Â
â¡ topããŒãžã«editãã¿ã³ãäœæãã
Â
1 2 3 |
// çç¥
<%= link_to 'ç·šé', edit_product_path(product) %>
|
â¢ãã¥ãŒã«ãç·šéæ©èœçšã®ãã©ãŒã ãè¿œå ããŸãã
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<%= form_for @product do |f| %>
ååå<%= f.text_field :name %><br>
äŸ¡æ Œ<%= f.number_field :price %><br>
<div id="image-box">
<%= f.fields_for :images do |image| %>
<div data-index="<%= image.index %>" class="js-file_group">
<%= image.file_field :src, class: 'js-file' %><br>
<span class="js-remove">åé€</span>
</div>
<% if @product.persisted? %>
<%= image.check_box :_destroy, data:{ index: image.index }, class: 'hidden-destroy' %>
<% end %>
<% end %>
<% if @product.persisted? %>
<div data-index="<%= @product.images.count %>" class="js-file_group">
<%= file_field_tag :src, name: "product[images_attributes][#{@product.images.count}][src]", class: 'js-file' %>
<div class="js-remove">åé€</div>
</div>
<% end %>
</div>
<%= f.submit %>
<% end %>
|
 远èšããã®ã¯ã2ã€ã®if @product.persisted?
ã®éšåã§ãã
Â
ãã®ãpersistedïŒãã¯ã@productã®ãããªã€ã³ã¹ã¿ã³ã¹ãå©çšã§ããã¡ãœããã§
ããããŒã¿ããŒã¹ã«ä¿åæžã¿ãªãtrueãããã§ãªããã°falseãè¿ããŸãã
Â
Â
次ã¯jsãã¡ã€ã«ã«è¿œèšããŠãããŸãã
Â
ããããã®ç»åã®äžã«ããåé€ãã¿ã³ãæŒãããã§ãã¯ããã¯ã¹ã«ãã§ãã¯ãå ¥ãããã«ããŠãããã以äžã®éšåãè¿œèšã
Â
ã»ããŒãžèªã¿èŸŒã¿æã«ãçšæããé
åããæ¢ã«äœ¿ãããŠããindexãåãé€ãåŠç
ã»åé€ãã¿ã³ãæŒããéã«ã該åœindexãæ¯ããããã§ãã¯ããã¯ã¹ãžãã§ãã¯ãå
¥ããåŠçÂ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
~~~~~~~~~~~~~~~~~~~~~~(çç¥)~~~~~~~~~~~~~~~~~~~~~~~~
let fileIndex = [1,2,3,4,5,6,7,8,9,10];
// æ¢ã«äœ¿ãããŠããindexãé€å€
lastIndex = $('.js-file_group:last').data('index');
fileIndex.splice(0, lastIndex);
$('.hidden-destroy').hide();
~~~~~~~~~~~~~~~~~~~~~~(çç¥)~~~~~~~~~~~~~~~~~~~~~~~~
$('#image-box').on('click', '.js-remove', function() {
const targetIndex = $(this).parent().data('index')
// 該åœindexãæ¯ãããŠãããã§ãã¯ããã¯ã¹ãååŸãã
const hiddenCheck = $(`input[data-index="${targetIndex}"].hidden-destroy`);
// ãããã§ãã¯ããã¯ã¹ãååšããã°ãã§ãã¯ãå
¥ãã
if (hiddenCheck) hiddenCheck.prop('checked', true);
(çç¥)
});
|
Â
Â
ããã§ãç·šéæ©èœããå®è£ ã§ããŸããã
Â
Â
Â
次ã¯ïŒã€ç®ããã¬ãã¥ãŒæ©èœãå®è£ ã§ãã
Â
1.è€æ°ç»åã®æçš¿æ©èœãå®è£ ã
2.ç·šéæ©èœã®å®è£ ã
3.ãã¬ãã¥ãŒæ©èœãå®è£ ãâ次ã¯ããã§ãã
4.åé€ã®å®è£ ã
Â
Â
Â
â ãŸããã¥ãŒã«ããã¬ãã¥ãŒè¡šç€ºçšã®èŠçŽ ããè¿œå ã
Â
ã»imgã¿ã°ã®srcãæžãæããããšã§ãã¬ãã¥ãŒãå®è£
ã
ã»åé€æindexãé Œãã«ãã¬ãã¥ãŒãåé€ããããã
ãã«ã¹ã¿ã ããŒã¿ãšããŠæãããã
Â
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<%= form_for @product do |f| %>
ååå<%= f.text_field :name %><br>
äŸ¡æ Œ<%= f.number_field :price %><br>
<div id="image-box">
<div id="previews">
<% if @product.persisted? %>
<% @product.images.each_with_index do |image, i| %>
<%= image_tag image.src.url, data: { index: i }, width: "100", height: '100' %>
<% end %>
<% end %>
</div>
<%= f.fields_for :images do |image| %>
<div data-index="<%= image.index %>" class="js-file_group">
<%= image.file_field :src, class: 'js-file' %><br>
<span class="js-remove">åé€</span>
</div>
<% if @product.persisted? %>
<%= image.check_box :_destroy, data:{ index: image.index }, class: 'hidden-destroy' %>
<% end %>
<% end %>
<% if @product.persisted? %>
<div data-index="<%= @product.images.count %>" class="js-file_group">
<%= file_field_tag :src, name: "product[images_attributes][#{@product.images.count}][src]", class: 'js-file' %>
<div class="js-remove">åé€</div>
</div>
<% end %>
</div>
<%= f.submit %>
<% end %>
|
Â
Â
â¡jsã§ç»åãã¡ã€ã«ãè¿œå /å€æŽ/åé€ããæã«ãimgã¿ã°ãè¿œå /srcå€æŽ/åé€ã§ããããã«å®è£ ã
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
~~~~~~~~~~~~~~~~~~~~~~(çç¥)~~~~~~~~~~~~~~~~~~~~~~~~
// ãã¬ãã¥ãŒçšã®imgã¿ã°ãçæããé¢æ°
const buildImg = (index, url)=> {
const html = `<img data-index="${index}" src="${url}" width="100px" height="100px">`;
return html;
}
~~~~~~~~~~~~~~~~~~~~~~(çç¥)~~~~~~~~~~~~~~~~~~~~~~~~
$('#image-box').on('change', '.js-file', function(e) {
const targetIndex = $(this).parent().data('index');
// ãã¡ã€ã«ã®ãã©ãŠã¶äžã§ã®URLãååŸãã
const file = e.target.files[0];
const blobUrl = window.URL.createObjectURL(file);
// 該åœindexãæã€imgã¿ã°ãããã°ååŸããŠå€æ°imgã«å
¥ãã(ç»åå€æŽã®åŠç)
if (img = $(`img[data-index="${targetIndex}"]`)[0]) {
img.setAttribute('src', blobUrl);
} else { // æ°èŠç»åè¿œå ã®åŠç
$('#previews').append(buildImg(targetIndex, blobUrl));
// fileIndexã®å
é ã®æ°åã䜿ã£ãŠinputãäœã
$('#image-box').append(buildFileField(fileIndex[0]));
fileIndex.shift();
// æ«å°Ÿã®æ°ã«1足ããæ°ãè¿œå ãã
fileIndex.push(fileIndex[fileIndex.length - 1] + 1)
}
});
~~~~~~~~~~~~~~~~~~~~~~(çç¥)~~~~~~~~~~~~~~~~~~~~~~~~
$('#image-box').on('click', '.js-remove', function() {
// (çç¥)
$(`img[data-index="${targetIndex}"]`).remove();
}
|
Â
Â
 å®æããjsã³ãŒãã¯ãã¡ã
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
$(document).on('turbolinks:load', ()=> {
const buildFileField = (num)=> {
const html = `<div data-index="${num}" class="js-file_group">
<input class="js-file" type="file"
name="product[images_attributes][${num}][src]"
id="product_images_attributes_${num}_src"><br>
<div class="js-remove">åé€</div>
</div>`;
return html;
}
const buildImg = (index, url)=> {
const html = `<img data-index="${index}" src="${url}" width="100px" height="100px">`;
return html;
}
let fileIndex = [1,2,3,4,5,6,7,8,9,10];
lastIndex = $('.js-file_group:last').data('index');
fileIndex.splice(0, lastIndex);
$('.hidden-destroy').hide();
$('#image-box').on('change', '.js-file', function(e) {
const targetIndex = $(this).parent().data('index');
const file = e.target.files[0];
const blobUrl = window.URL.createObjectURL(file);
if (img = $(`img[data-index="${targetIndex}"]`)[0]) {
img.setAttribute('src', blobUrl);
} else {
$('#previews').append(buildImg(targetIndex, blobUrl));
$('#image-box').append(buildFileField(fileIndex[0]));
fileIndex.shift();
fileIndex.push(fileIndex[fileIndex.length - 1] + 1);
}
});
$('#image-box').on('click', '.js-remove', function() {
const targetIndex = $(this).parent().data('index');
const hiddenCheck = $(`input[data-index="${targetIndex}"].hidden-destroy`);
if (hiddenCheck) hiddenCheck.prop('checked', true);
$(this).parent().remove();
$(`img[data-index="${targetIndex}"]`).remove();
if ($('.js-file').length == 0) $('#image-box').append(buildFileField(fileIndex[0]));
});
});
|
Â
 以äžã§ããã¬ãã¥ãŒæ©èœãå®è£ å®äºã§ãã
Â
Â
Â
ãããããã®ãç»åè€æ°ææçš¿ãã¢ããªã®ãŽãŒã«ãèŠããŸããïŒ
æåŸã¯ãåé€æ©èœãã§ãã
Â
Â
1.è€æ°ç»åã®æçš¿æ©èœãå®è£ ã
2.ç·šéæ©èœã®å®è£ ã
3.ãã¬ãã¥ãŒæ©èœãå®è£ ã
4.åé€ã®å®è£ ãâ次ã¯ããã§ãã
Â
Â
ãããŸã§å®è£ ãããŠããã°ãåé€æ©èœã«ã€ããŠã¯ç¹å¥ãªå®è£ ã¯äœããããŸããã
Â
â ã³ã³ãããŒã©ã«ã¬ã³ãŒãåé€ã®èšè¿°ãè¿œå ã
1 2 3 4 |
def destroy
@product.destroy
redirect_to root_path
end
|
â¡ãã¥ãŒã«åé€ãã¿ã³ãè¿œå ã
1 2 |
//çç¥
<%= link_to 'åé€', product_path(product), method: :delete %>
|
 â¢productã¢ãã«ã«ã芪ã¢ãã«åé€ãããåã¢ãã«ããŸãšããŠåé€ããšãããªãã·ã§ã³ãè¿œå ã
1 |
has_many :images, dependent: :destroy
|
Â
以äžã§ãåé€æ©èœããš
ãã®ïŒãïŒèšäºã«ããããè€æ°ç»åæçš¿ã¢ããªãã®èšäºãçµäºããŸããïŒ
Â
åã¯ãã®æ©èœå®è£ ããã£ãšã§ããã«ã€ãã¢ãããŠãŸããïŒ
jsã³ãŒãã®èšè¿°ã¯ãé£ãããšæããŸãã
Â
ã§ãã人ã«èšãããã°ãäœãåãããªãã®ãåãããªãã
ãªããŠèšãããŠããŸãããã§ãããã
Â
ãã©ãã©ããªäººã ã£ãŠå§ãã¯ãäœãåãããªãç¶æ ãããå§ããŠããŸãã
ã ããå®å¿ããŠè¯ãã®ã ãšæããŸãã
Â
ãã®èšäºããåãããªããŸãŸè«ŠããŠããŸãããã
ãããªäººã®åœ¹ã«ç«ãŠã°å¹žãã§ãã
Â
Â
æåŸãŸã§èªãã§ãã ããããããšãããããŸãã
次åããããããé¡ãããŸããÂ
Â
Railsãç»åè€æ°æçš¿ã®ããæ¹ïŒjsãjQueryã§ãã©ãŒã äœæïŒ
Â
ããã«ã¡ã¯ïŒ
Â
ä»åã¯ååèšäºã§ã話ããã
Â
Railsãç»åè€æ°æçš¿ã®ããæ¹ïŒcarrierwaveãšmini_magickïŒ
Â
ããå ã«é²ããç»åã®ãè€æ°ææçš¿æ©èœãå®è£ ã«ã€ããŠæžããŠãããŸãã
Â
Â
å®è£ å 容ã¯ã
â ç»åæçš¿çšã®inputãã¿ã³ã«ããã©ãŒã ã§ç»åãéžæããã¿ã€ãã³ã°ã§ã€ãã³ããã»ããããã
Â
â¡â ã®ã€ãã³ããçºçããããæ°ããç»åæçš¿ãã©ãŒã ãçæããããšããjsïŒJavaScriptïŒã®ã¡ãœãããåããã
Â
â¢çæããç»åæçš¿ãã©ãŒã ãç»é¢ã«è¿œå ããã
Â
Â
Â
ã§ãïŒ
Â
Â
Â
Â
Â
ãŸããã¿ã€ãã«ã«ãæžããŠããããã«jjQueryãå©çšããŸãã®ã§
ãã®ã®æºåããå§ããŸãã
Â
Gemfileã«Gemè¿œå ã
1 |
Â
bundle installãå¿ããã«ã
Â
ã§ããã次ã«
application.jsãå€æŽ
1 2 3 4 |
ããã§jquery ã䜿ãæºåãã§ããŸããïŒ
Â
Â
ããããïŒã€ã«åããŠé²ããŸãã
Â
1.è€æ°ç»åã®æçš¿æ©èœãå®è£ ãâä»åã¯ãããŸã§
2.ç·šéæ©èœã®å®è£ ã
3.ãã¬ãã¥ãŒæ©èœãå®è£ ã
4.åé€ã®å®è£ ã
Â
Â
Â
Â
ïŒã€ç®ã¯ãã¡ã€ã³ã®è€æ°ææçš¿ã§ããä»çµã¿äœãã§ãã
Â
ãŸãã
æçš¿ãããæ å ±ãèŒãããåºæ¬ãã©ãŒã ãå ã®èšè¿°ãä¿®æ£ã
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<%= form_for @product do |f| %>
ååå<%= f.text_field :name %><br>
äŸ¡æ Œ<%= f.number_field :price %><br>
<div id="image-box">
<%= f.fields_for :images do |image| %>
<div data-index="<%= image.index %>" class="js-file_group">
<%= image.file_field :src, class: 'js-file' %><br>
<span class="js-remove">åé€</span>
</div>
<% end %>
</div>
<%= f.submit %>
<% end %>
|
Jsã§å©çšããããã®classãidãã€ããŸãã
Jsã§äœ¿ããã®ãšãããããã«ã¯ã©ã¹ã¯ããjs-file_groupã,ãjs-removeã,ãjs-fileãÂ
IDã¯ãjsã§äœ¿ãã³ãŒãå šäœãå ããã®ãšããimage-boxããšããŸãã
Â
ãŸãfield_forã®äžã§image.indexãšãããšãã«ããããéã«indexãååŸããããšãã§ããŸãã
Â
ããããã«ã¹ã¿ã ããŒã¿ãšããŠæãããããšã§ä»åŸã®jsã®åŠçã§ç¹å®ããŠãããŸãã
Â
Â
Â
Â
次ã«jsãã¡ã€ã«ã«è§ŠããŠãããŸãã
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
$(document).on('turbolinks:load', ()=> {
const buildFileField = (index)=> {
const html = `<div data-index="${index}" class="js-file_group">
<input class="js-file" type="file"
name="product[images_attributes][${index}][src]"
id="product_images_attributes_${index}_src"><br>
<div class="js-remove">åé€</div>
</div>`;
return html;
}
|
 buildFileFieldé¢æ°ã«ã¯ãfield_forãçæããã³ãŒããšåãäžèº«ã«ãªãããèšè¿°ããŠãããŸãã
ãŸããã®é¢æ°ã«ã¯ãé åããŠããéã®ãå é ã®æ°åããæž¡ããšããèšè¿°ã14è¡ç®ã«æžããŠããŸãã
Â
 以äžã®èšè¿°ã§
ãè€æ°ç»åæçš¿ã®æ©èœãå®è£ ãã§ããŸããã
Â
â»ããã§å®è£ ããŠããŠåé¡ãçºçã
ãèŠæ¬éãã«æžããã®ã«jsãæ©èœããŠããªãã
Â
ãããã調ã¹ãŠã¿ããšãã
ä»åã¯ãjsã³ãŒãã®å§ãã®äžæã«åé¡ããã£ãããã§ãã
Â
åèè³æïŒRails5ã§jqueryãåããæ¹æ³
Â
Â
|
$(document).on('turbolinks:load', ()=> {
|
 äžèšã®ãã( )=>ããã®éšåãä¿®æ£ããŸãã
|
$(document).on('turbolinks:load', function() {
|
Â
ããã§åãã¯ãã§ãã
Â
Â
Â
Â
ä»åãæåŸãŸã§èªãã§ãã ããããããšãããããŸãïŒ
次åããããããé¡ãããŸãã
Â
Railsãç»åæçš¿ã®ããæ¹ïŒcarrierwaveãšmini_magickïŒ
ããã«ã¡ã¯ïŒ
Â
ä»åã¯ãããã°ã©ãã³ã°ã¹ãã«åŠç¿ã®ããã«
ç»åæçš¿ç·Žç¿çšã¢ããªãäœããŸããã
Â
å 容ã¯ã
ã»ååã¢ãã«ãšååã®ç»åã¢ãã«ãäœæããïŒã€ã®æçš¿ãã©ãŒã ã§èšäºãšããã«çŽã¥ãè€æ°ã®ç»åãæçš¿ã§ãããã§ãã
Â
ããŒãžã§ã³ã®ç¢ºèªã
äžã®ã³ãã³ããå ¥åãããšãäžã«ããŒãžã§ã³ãåºãŸãã
1 2 |
Â
1 2 |
Â
æ©éå§ããŠãããŸãã
1 2 3 |
â»bin/rails db:createã®äžã«ãããbinããšã¯ã
 binaryã®ç¥ã§binary圢åŒã§äœããšããã³ãã³ãã«ãªã£ãŠãŸãã
Â
ããŒã¿ããŒã¹ãäœæã§ãããã次ã¯ã³ã³ãããŒã©ãŒã§ãã
1 |
$ bin/rails g controller products
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
class ProductsController < ApplicationController
def index
@products = Product.includes(:images).order('created_at DESC')
end
def new
end
def create
end
def edit
end
def update
end
def destroy
end
end
|
 次ã«ã«ãŒãã®æžããŠãããŸãã
â å§ãã¯ããããããRailsãžãã£ãŠç»é¢ã«ãªãã®ã§
topã®ã«ãŒããä¿®æ£ã
Â
â¡ããã«ãä»åã®åºåæ©èœïŒproductïŒã¯ãtop衚瀺ãš
æçš¿ïŒnewãcreateïŒãç·šéïŒeditãupdateïŒãåé€ïŒdestroyïŒãããã€ãŸã詳现ïŒshowïŒä»¥å€ã䜿çšããã®ã§
以äžã®ããã«èšè¿°ããŸãã
Â
1 2 |
root 'products#index'
resources :products, except: :show
|
1è¡ç®ã¯ãtopã¯ãããã§ããããšããèšè¿°ã
2è¡ç®ã¯ã åºåïŒproductïŒã§ã¯ã詳现ïŒshowïŒä»¥å€ã䜿ãã
ãšããèšè¿°ã
â»ãã®ã以å€ããšè¡šãèšè¿°ããexceptãã§ãã
Â
次ã«productã§å¿ èŠãªviewãã¡ã€ã«ãäœæã
1 2 3 4 5 6 |
products
- index.html.erb
- new.html.erb
- edit.html.erb
- _form.html.erb
- _product.html.erb
|
 â»ãã®html.erbã¯ã
ãRubyãçµã¿èŸŒãŸããhtmlã®ãããªãã¡ã€ã«ããšããæå³ã
Railsã§viewãäœãæã¯ããã®ããã«Rubyã®èšè¿°ã§äœããŸãã
Â
ã§ã¯ãåviewãã¡ã€ã«ãæžããŠãããŸãã
ãŸãæäœéã®èŠãç®ãäœãããã以äžèšè¿°ã
1 2 3 4 |
<%= link_to 'åºå', new_product_path %><br>
<div class="contents">
<%= render @products %>
</div>
|
1 2 3 4 5 6 7 |
<div class="content">
<p><%= product.name %></p>
<p><%= product.price %>å</p>
<% product.images.each do |image| %>
<%= image_tag image.src.url %>
<% end %>
</div>
|
render = @products ã«ãã£ãŠãã_product.html.erbãã®äžèº«ãèªã¿èŸŒã¿ãïŒããŒãžãåºåããŠãŸããÂ
â»ã_ïŒã¢ã³ããŒã¹ã³ã¢ïŒããå§ãã«ã€ããäºã§å¯Ÿè±¡ã®viewãã¡ã€ã«ããã³ãã¬ãŒãã«ããããšãã§ããŸãã
ãŸããã³ãã¬ãŒãåãããããšã§èšè¿°ããã£ãããããã ãã§ãªããä¿®æ£ãªã©ç®¡çããããããªããŸãã
Â
Â
次ã«ä»¥äžïŒã€ã®ãã¡ã€ã«å ã«è¿œèšã
1 |
<%= render partial: 'form' %>
|
Â
Â
 ãããŸã§ã¯viewïŒèŠãç®ïŒãã§ããŸããã
次ã¯modelïŒäžèº«ã®ãããšãïŒã«ã€ããŠé²ããŠãããŸãã
1 2 |
â åºåæ å ±ïŒproductïŒã®ã¢ãã«äœæ
â¡ç»åæ å ±ïŒimageïŒã®ã¢ãã«äœæ
ããã§ïŒã€ã®ã¢ãã«ãã§ããŸããã
Â
ãŸãäžèº«ã®ä¿®æ£ãšã¢ãã«äœæããæã¯ãå¿ ã
migrateå®è¡ïŒããæ°ã¥ããã©ãããå¿ããïŒ
1 2 |
t.string :name
t.integer :price
|
1 2 |
t.string :src
t.references :product, foreign_key: true
|
 ã§ããã
rails db:migrateã³ãã³ããå®è¡ã
Â
ã¡ãããšã§ãããäžå®ãªæã
ã¿ãŒããã«ã«ã§ããããšã©ãŒãæžããŠãããïŒ
åã®ããã«è±èªåŸæãããªãããããã¯ã¿ãŒããã«ã«æžããŠããæç« ãåªæã®ããã«èŠããæ¹ã¯ã
Â
rails db:migrate:statusãšã³ãã³ããå ¥ãããš
察象ã®migrationãã¡ã€ã«ãUPïŒã§ããŠãïŒã
DOWNïŒã§ããŠãªãïŒãåãããŸãã
Â
ãŸãmigrateãããã©ãèšè¿°ééããïŒãšãããšãã«ã¯
rails db:rollbackã³ãã³ããå®è¡ã
Â
ãããšïŒã€åã®ç©ãDOWNã«æ»ããŸãã
Â
â»ãã®DOWNç¶æ ã®æã®ã¿ä¿®æ£ãã§ããã®ã§ãééããŠçŽãããæã¯ãã®æé ã§é²ããŸãã
Â
ä¿®æ£ãçµãã£ãããå床
rails db:migrateã³ãã³ããå®è¡ã
Â
â»ãã¡ã€ã«ãUPç¶æ ã§ãªããšãšã©ãŒåºãŸãã
Â
Â
Â
 次ã¯ãå¿ èŠãªgemïŒãžã§ã ïŒãå ¥ããŸãã
Â
gemãšã¯ã
rubyïŒã«ããŒïŒãšããèšèªã®äžã«ã€ã³ã¹ããŒã«ãããgemïŒå®ç³ïŒãšãã䟿å©ããŒã«ã®ããšã§ãã
Â
ä»åå ¥ããïŒçš®é¡ã®gemã ãã§ãªãããšãŠãããããã®äŸ¿å©ãªgemããããŸãã
ä»åŸãããã°æŽæ°ããªããgemã®çŽ¹ä»ãããŠãããŸãã®ã§ãã²èŠãŠã¿ãŠãã ããã
Â
ã§ã¯ãæé ã§ãã
ããæ¹ã¯ç°¡åïŒã察象ã®å Žæã«æžããŠãã€ã³ã¹ããŒã«ããã ãïŒ
以äžããã¡ã€ã«ã®æäžéšã«èšè¿°ã
Â
Gemfile
1 2 |
gem 'carrierwave'
gem 'mini_magick'
|
ã§ããŸããããããšã¯ã¿ãŒããã«ã§
bundle installãšã³ãã³ããæã€ã ãïŒïŒbundleã ãã§ãè¡ããïŒÂ
ããã§gemãã€ã³ã¹ããŒã«ã§ããŸããã
Â
 ç¶ããŠãä»åå ¥ããgemã䜿ãããã®èšå®ãããŠãããŸãã
Â
ãŸãã¯
$ rails g uploader image
 uploaderãäœæããŸãã
Â
ã§ãããã¡ã€ã«çãä¿®æ£ããŠãããŸãã
Â
1 2 3 |
include CarrierWave::MiniMagick // ãã®èšè¿°ãæ¢ããã³ã¡ã³ãã¢ãŠããå€ã
process resize_to_fit: [100, 100] // ãã®èšè¿°ã¯è¿œèš
|
ã¢ãã«ãã¡ã€ã«ããããããæ£ããçŽã¥ãããã«
è¿œèšããŠãããŸãã
Â
1 |
has_many :images
|
1 2 |
mount_uploader :src, ImageUploader
belongs_to :product
|
Â
â»has_manyã¯ãproductããimageãã¿ãæã
ãã²ãšã€åºåïŒproductïŒã«å¯ŸããŠãè€æ°ã®ç»åïŒimageïŒãããã®ã§ãã®èšè¿°ãããŸããã察象ãè€æ°ãªã®ã§è±èªã®è€æ°åœ¢ã§imagesãšèšè¿°ããŸãã
Â
â»å¯ŸããŠbelongs_toã¯ãimageããproductãã¿ãæã
ãããããã®ç»åãã²ãšã€ã®åºåã«çŽä»ããä»æ§ã«ããã®ã§ããã®å Žåã¯ãã®èšè¿°ã䜿ããŸãããçžæã¯åžžã«åæ°ãªã®ã§ããã§ã¯è€æ°åœ¢ã«ããããsãã¯ä»ããŸããã
Â
åãã¯ãã®äœ¿ãåããåãããªãã£ãã®ã§ã埩ç¿ã®ããæžããŸããã
Â
Â
Â
Â
Â
Â
Â
ããããç»åæçš¿æ©èœã®æ¬æ Œçãªãšãããå®è£ ããŠãããŸãã
â»ä»åã¯ã次åã«ç¶ãè€æ°æç»åãæçš¿ãããããã¬ãã¥ãŒãããæ©èœè¿œå äºå®ã®ãããéåžžãšéãèšè¿°ãããŠãããŸãã
Â
ããã ã泚æããªããã¿ãŠããã ããããšæããŸãã
Â
ã§ã¯æåã«ã䜿ããã«ããŒã¡ãœãã
fields_for
è€æ°ã®å¥ã®ãªãœãŒã¹ãåæã«ä¿åããéã«å©çšã
accepts_nested_attributes_for
fields_forãšã»ããã§äœ¿çšãã芪ã¢ãã«ã«æžãããšã§
ã¢ãã«ã®èŠªåé¢ä¿ãäœããŸãã
 allow_destroy: true
 accepts_nested_attributes_forã¡ãœããã®ãªãã·ã§ã³ãã芪ã®ã¬ã³ãŒããåé€ããããšãçŽã¥ããåã®ã¬ã³ãŒããåé€ããããšãã§ããŸãã
Â
Â
Â
äžèšãããšã«èšè¿°ããŠãããŸãã
1 |
accepts_nested_attributes_for :images, allow_destroy: true
|
1 2 3 4 |
def new
@product = Product.new
@product.images.new
end
|
newãšeditã§èªã¿èŸŒããã³ãã¬ãŒãã®äžèº«ãèšè¿°ã
1 2 3 4 5 6 7 8 |
<%= form_for @product do |f| %>
ååå<%= f.text_field :name %><br>
äŸ¡æ Œ<%= f.number_field :price %><br>
<%= f.fields_for :images do |i| %>
<%= i.file_field :src %><br>
<% end %>
<%= f.submit %>
<% end %>
|
 ããã§äœ¿ãfields_forã«ãã£ãŠèŠªïŒproductïŒã«çŽã¥ãåïŒimageïŒãæçš¿ã®æ°ã ãçæãããŠãã圢ãã§ããŸãã
Â
 æåŸã«æçš¿ãŸã§ã®åããã³ã³ãããŒã©ãŒã«è¿œèšããã°ãå®æã§ãã
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
def create
@product = Product.new(product_params)
if @product.save
redirect_to root_path
else
render :new
end
end
|
 fields_for
ãå©çšããŠäœæããããã©ãŒã ããæ¥ãå€ã¯ãââs_attributes: [:ÃÃ]
ãšãã圢ã§paramsã«å
¥ããŸããââ
ã¯é¢é£ä»ãåŽã®ã¢ãã«ã®ååãÃÃ
ã«ã¯ãã©ãŒã ã«å¯Ÿå¿ããã«ã©ã ã®ååãå
¥ããŸãã
Â
Â
æåŸãŸã§ãä»ãåãããã ãããããšãããããŸãïŒ
次åã¯ããããããŒã¹ã«è€æ°æç»åæçš¿æ©èœã®å®è£ ã«ã€ãªããŠãããŸãã®ã§æ¬¡åããããããé¡ãããŸãã
Â
Â
Â
Â
ã
Rubyã§ãããã±ããçºåžã·ã¹ãã ãããäœãããåç·šã
Â
ããã«ã¡ã¯ïŒ
Â
ä»åã¯çŸåšå匷äžã®Rubyåºç€ããåèãµã€ããå ã«
æ ç»ã®ãã±ããçºåžã·ã¹ãã ãäœããŸãããÂ
Â
Â
ããããé ãè¿œã£ãŠæžãé²ããŠãããããšæããŸãã
Â
Â
ãããªæãã®ãã®ã§ãã
Â
 1.èŠä»¶å®çŸ©
ãŸãã¯ã©ããªããã°ã©ã ãäœãã®ãæŽçã
æµãã¯ïŒã€ã
 ïŒ1ïŒå®è¡ãããšãéžæã§ããæ ç»ã®äžèŠ§ã衚瀺ããå ¥ååŸ ã¡ã«ãªã
 ïŒ2ïŒã©ããéžæãããšã©ã®ãã±ãããè²·ã£ãŠãããææéãæ®ã£ãã®ã衚瀺ããã
 2.ããã°ã©ã å ã®ç»å Žäººç©ãèããã
çºåžæ©ã¯èª°ããå©çšããã®ã§ããŸãã¯ãã客ããããšãçºåžæ©ãã
次ã«äžæ äžã®ãæ ç»ããšãçºåžããããã±ãããã
ä»åå¿ èŠãªç»å Žäººç©ã¯ãã®ïŒäººã§ãã
 3.ããããã®èŠçŽ ã«ã¯ã©ã¹ãçšæã
çžåœããã¯ã©ã¹ãšããŠ
ãã客ãããâãCustomerã
ãçºåžæ©ãâããTicketVendingMachineã
ãæ ç»ãâãããMovieã
ããã±ãããâãTicketã
ãããããçšæããŸãã
Â
次ã«ä»»æã®å Žæã«ãã©ã«ããäœæã
$mkdir ruby_ticket_system
ä»åã¯ãruby_ticket_systemããšããååã«ããŠãŸãã
Â
次ã«ã³ãŒããšãã£ã¿ã§å ã»ã©äœæãããã£ã¬ã¯ããª
ãruby_ticket_systemããéãã
Â
éãããããã®äžã«
ãcustomer.rbããticket_vending_machine.rbããmovie.rbããticket.rbããäœæããã
äžèº«ã¯ä»¥äžã®ããã«ããŸãã
class Customer
end
class TicketVendingMachine
end
class Movie
end
class Ticket
end
4.åã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãæã€ç¹åŸŽãèãã³ãŒãã«åæ
ãã±ããçºåžã·ã¹ãã ã®äžèº«ã§
ããããã®ã¯ã©ã¹ãã©ã®ãããªããŒã¿ãæã€ãèããŠ
å®éã«ã³ãŒããæžããŠãããŸãã
Â
â»åã¯ã©ã¹åããã®ã§ãå°ãé·ããªããŸãã
 â movieãæã€ã¹ãããŒã¿
Â
ããŒã¿ | ã³ãŒãäžã§ã®å称 |
---|---|
ã¿ã€ãã« | title |
éé¡ | fee |
äžæ éå§æ¥ | start_date |
äžæ çµäºæ¥ | end_date |
 äžèšã®å 容ãmovie.rbã«åæ ãããã
class Movie
def initialize(title, fee, start_date, end_date)
@title = title
@fee = fee
@start_date = start_date
@end_date = end_date
end
end
 â¡ticket_vending_machineãæã€ã¹ãããŒã¿
Â
ããŒã¿ | ã³ãŒãäžã§ã®å称 |
---|---|
çºåžã§ããæ ç»äžèŠ§ | movies |
äžèšå 容ãticket_vending_machineãžåæ ã
class TicketVendingMachine
def initialize
@movies = []
end
end
 â¢ticketãæã€ã¹ãããŒã¿
Â
ããŒã¿ | ã³ãŒãäžã§ã®å称 |
---|---|
ã¿ã€ãã« | title |
éé¡ | fee |
æé | limit |
Â
äžèšã®äžã§ãã¿ã€ãã«ããšãéé¡ãã®æ
å ±ã¯ãMovieã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã®ã€ã³ã¹ã¿ã³å€æ°@title
ã@fee
ã§ãããããã®æ
å ±ãTicketã¯ã©ã¹ã®å
éšããååŸãããã®ã§ãããTicketã¯ã©ã¹ã®initialize
ã¡ãœããã®äžã§ã¯ãMovieã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã®ã€ã³ã¹ã¿ã³ã¹å€æ°ãçŽæ¥åç
§ããããšã¯ã§ããŸããã
ããã§äžã«ããã²ãã¿ãŒãšããã¡ãœããã䜿ããŸãã
ã²ãã¿ãŒ
ã²ãã¿ãŒãšã¯ãããã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã®ã€ã³ã¹ã¿ã³ã¹å€æ°ã®å€ãè¿ãã ãã®ã¡ãœããã®ããšã§ãããããå®çŸ©ããããšã§ãã€ã³ã¹ã¿ã³ã¹ããèªèº«ã®æã€ã€ã³ã¹ã¿ã³ã¹å€æ°ã®å€ãååŸããããšãã§ããŸãã
Â
 äžèšãèžãŸãmovie.rbã«ã²ãã¿ãŒãåæ ãããã
class Movie
def initialize(title, fee, start_date, end_date)
@title = title
@fee = fee
@start_date = start_date
@end_date = end_date
end
def title
return @title
end
def fee
return @fee
end
end
ticket_vending_machineãåŸã«ã²ãã¿ãŒãå¿ èŠã«ãªãã®ã§å ã«èšè¿°ã
 ticket_vending_machine.rbå ã«ã²ãã¿ãŒè¿œèš
class TicketVendingMachine
def initialize
@movies = []
end
def movies
@movies
end
end
ãããŠticket.rbãç·šéã
 ticket.rbã以äžã®ããã«æžãæã
class Ticket
def initialize(movie)
@title = movie.title
@fee = movie.fee
end
end
ãã®ããã«èšè¿°ããäºã§ãã²ãã¿ãŒãå®çŸ©ããmovieã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹å€æ°title
ãšfee
ã®å€ãããã®ãŸãŸticketã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹å€æ°ã«æ ŒçŽããäºãã§ããŸãã
 â£customerãæã€ã¹ãããŒã¿
Â
ããŒã¿ | ã³ãŒãäžã§ã®å称 |
---|---|
åå | name |
ææé | money |
ãã±ãã | ticket |
Customerã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã¯ããã±ãããè³Œå ¥ããçµææçµçã«Ticketã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãèªãã®ã€ã³ã¹ã¿ã³ã¹å€æ°ticketã«æ ŒçŽããŸãã
 customer.rbãæžãæãã
class Customer
def initialize(name, money, ticket=nil)
@name, @money, @ticket = name, money, ticket
end
end
1è¡ã§è€æ°ã®å€æ°ã«å€ãã»ããããå€æ°ä»£å ¥ãããæã¯ãååã§ã¯ãªãèšè¿°ããé çªã«æ²¿ã£ãŠæ ŒçŽãããŠããã®ã§æ³šæãå¿ èŠã§ãã
ticket=nil
ãšããæžãæ¹ã¯ããã©ã«ãåŒæ°ãšããã該åœããåŒæ°ãç¡ãå Žåã«ä»£ããã«=ã®å³åŽã®å€ã代å
¥ããããšããèšè¿°ã«ãªããŸãã
 5.ããã°ã©ã èµ·åçšãã¡ã€ã«ãexec.rbããçšæã
ä»ãŸã§äœã£ãŠããããã°ã©ã ããã®äžã«ãŸãšããå®è¡ïŒexecuteïŒãåãããŸããæ°ãããexec.rbããšãããã¡ã€ã«ãäœæããå 容ãèšè¿°ããŠãããŸãã
Â
require './customer'
require './movie'
require './ticket'
require './ticket_vending_machine'
require './äœæãããã¡ã€ã«å'ãšããããèšè¿°ããäºã§ãexec.rbãå®è¡ããæã«å šãŠã®ãã¡ã€ã«ãèªã¿èŸŒãŸããããã«ãªããŸãã
 6. exec.rbãå®è¡ããæã«å¿ èŠãªæ å ±ãã»ãããããããã«ããã
exec.rbå ã§ããããŸã§äœã£ãŠããã¯ã©ã¹ããã€ã³ã¹ã¿ã³ã¹ãäœããŸãã
 exec.rbã«ä»¥äžè¿œèšã
require './customer'
require './movie'
require './ticket'
require './ticket_vending_machine'
#以äžè¿œèš
require 'date'
customer = Customer.new("kazuki", 5000)
ticket_vending_machine = TicketVendingMachine.new
titanic = Movie.new(
"Titanic",
2000,
Date.new(2017, 2, 20),
Date.new(2017, 4, 20)
)
tom_and_jerry = Movie.new(
"tom_and_jerry",
1500,
Date.new(2017, 3, 18),
Date.new(2017, 5, 10)
)
oceans_eleven = Movie.new(
"Ocean's Eleven",
1800,
Date.new(2017, 4, 18),
Date.new(2017, 6, 10)
)
ticket_vending_machine.movies = [titanic, tom_and_jerry, oceans_eleven]
newã¡ãœããã«æž¡ããŠããåŒæ°ã«ã€ããŠ
ãããã¯initializeïŒåæå€ïŒã¡ãœããã®åŒæ°ãšããŠæž¡ãããã®ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãå¿ ãæã£ãŠããªããã°ãªããªãå€ã®äºã§ãã
Dateã¯ã©ã¹ã«ã€ããŠ
以äžåç §
https://docs.ruby-lang.org/ja/latest/method/Date/s/new.html
 ticket_vending_machine.rbãä¿®æ£ã
class TicketVendingMachine
def initialize
@movies = []
end
def movies=(movies)
@movies = movies
end
end
moviesãšããæåãåºãŠæ¥éããŠæ··ä¹±ããšåèãµã€ãã«æžããŠãŸããã
ã»ããšã«æ··ä¹±ããŸããã
Â
ããã¯äžã«ããexec.rbã®ãã®éšåã®ã³ãŒããšé¢ä¿ããŠããŸãã
ticket_vending_machine.movies = [titanic, tom_and_jerry, oceans_eleven]
ãã®ããã«ããããšã§ticket_vending_machineã®ã€ã³ã¹ã¿ã³ã¹å€æ°@movies
ã®å€ã[titanic, tom_and_jerry, oceans_eleven]
ã«æŽæ°ãããŸãã
Â
åèãµã€ããèªãã§ããªããªããã£ããããç解ãåŸããããç¶ç¶èª²é¡ã«ãªãããã§ãã
Â
説æããã¡ããšã§ãããã
 ã»ãã¿ãŒ
ã€ã³ã¹ã¿ã³ã¹å€æ°ã®å€ãæŽæ°ããããã®ã€ã³ã¹ã¿ã³ã¹ã¡ãœããã®ããšããç¹å¥ã«ã»ãã¿ãŒãšåŒã³ãŸãã
Â
ãããçãããªã
Â
ããã§å®è¡ãããã¡ã€ã«ã®æºåãå®äºããŸããã
Â
ããããã®ç解ãæ·±ããããã«æ¬¡ã¯å®è¡ããŠãã
Â
ãã¡ã€ã«ãã©ã®ãããªåãããããèŠãŠãããŸãã
Â
Â
ã²ãšãŸãä»åã¯ã
å®è¡ãããŸã§ã®æºåãæžããŠã¿ãŸããã
Â
Â
æåŸãŸã§èªãã§ãã ããããããšãããããŸãã
ãŸã次åããããããé¡ãããŸãã
Â
Â
Â
Rubyã§ãããã±ããçºåžã·ã¹ãã ãããäœãããåŸç·šã
Â
Â
ããã«ã¡ã¯ïŒ
ä»åã¯ãRubyã§ããã±ããçºåžã·ã¹ãã ããäœãã®åŸåãæžããŠãããããšæããŸãã
Â
Rubyã®ã¯ã©ã¹ãšã€ã³ã¹ã¿ã³ã¹ã«ã€ããŠåŠã¶
Rubyã§ãããã±ããçºåžã·ã¹ãã ãããäœãããåç·šã
Â
åŸç·šã¯ãåèãµã€ããèªã¿é²ãããšçŸå®ã®è¡åãã¿ãŒã³ãèããŠãçŸå®ã®è¡åã«ããè¿ã¥ãããªãã¡ã¯ã¿ãªã³ã°ãããŠããããã§ããã
Â
Â
åç·šã§ã¯ããã±ããçºåžã·ã¹ãã ãäœãã«ãããç»å Žäººç©ïŒå¿ èŠãªããã°ã©ã ã®æ°ïŒãèããŠå®éã«å¿ èŠãªåæ°ã®ããã°ã©ã ãçšæããŸããã
Â
ã客ããïŒcustomerïŒãçºåžæ©ïŒticket_vending_macineïŒãäžæ æ ç»ïŒmovieïŒããã±ããïŒticketïŒãæåŸã«ãããã®ããã°ã©ã ãéçŽãå®è¡ããå®è¡å°çšããã°ã©ã ïŒexecïŒ
Â
ãã®ããã°ã©ã ã®äžèº«ãšããŠããããã«ã¯ã©ã¹ïŒcustomerãticket_vending_machineãmovieãticketïŒãããããã®äžèº«ãšããŠæ§ã ãªã€ã³ã¹ã¿ã³ã¹ããããŸããã
Â
äŸãããããš
ãã±ããã®äžã«ã¯ãåæå€ïŒinitializeïŒãšããŠãã¿ã€ãã«ïŒ@titleïŒãäŸ¡æ ŒïŒ@feeïŒãããããŸãã
ãâ»ãã®ããïŒ ããã¯ãå€ã®ããã°ã©ã ããããŒã¿ãååŸããããšãã«äœ¿çšããŸãã
Â
ticket.rb
class Ticket
def initialize(movie)
@title = movie.title
@fee = movie.fee
end
end
ãã®å Žåã
movie.rbãšããããã°ã©ã ã®äžã«ãããtitleãfeeãã«ïŒ ãã€ããããšã§ãååŸãããã®ãticket.rbãžéãã§ããŸãã
Â
ãã®ããã«åããã°ã©ã ã«å¯ŸããŠããããã圹å²ãšããåã®ã³ãŒããèšè¿°ããäºã§
ãã±ããçºåžã·ã¹ãã ãå®éã«åãããŠãããŸãã
Â
Â
æçµç¢ºèªãšããŠã¯ã
â åç»å Žäººç©ïŒããã°ã©ã ïŒã«å¯Ÿãã圹å²ïŒã³ãŒãïŒã瀺ãïŒèšè¿°ããïŒ
â¡å®è¡çšããã°ã©ã ïŒexec.rbïŒã«ãŠãåããã°ã©ã ãåŒã³åºãäžé£ã®åãããããã
ãšããæµããã§ããŸããã
Â
ããã§Rubyã§ã¯ã©ã¹ãšã€ã³ã¹ã¿ã³ã¹ã®åŠç¿
ããã±ããçºåžã·ã¹ãã ããäœãã¯ä»¥äžã§ãã
Â
Â
åŠç¿ã«ãããåèãããµã€ãã«ã«ãããšããã¯ã©ã¹ãšã€ã³ã¹ã¿ã³ã¹ãèŠããŠã°ãäžã®äžã®ç©ã¯ããã°ã©ã ã§è¡šçŸã§ããããšæžããŠããŸããã
Â
ããã«äœã§ãè¡šçŸã§ããèš³ã§ã¯ãããŸããã
ããããã£ããã«ããããªãã®ãããã°ã©ã ã§è¡šçŸã§ããã°ãšæããŸãã
Â
å°ãã§ãããã°ã©ãã³ã°åŠç¿ã®ã¡ãã£ãšããå©ãã«ãªãã°å¬ããã§ãã
Â
æ¬æ¥ãæåŸãŸã§èªãã§ãã ããããããšãããããŸãã
ãHerokuãç°¡åã»ç¡æã§ãããã€â¡
ããã«ã¡ã¯ïŒ
Â
ååãHerokuãç°¡åã»ç¡æã§ãããã€ããããŸãããã
å®éã«ãããã€ãŸã§ã¯èšäºãšããŠãããŠããªãã£ãããã
ä»åã¯ç¶ããæžããŠããããšæããŸãã
Â
Â
Â
䜿çšPCïŒMacBook ProÂ
Â
Â
Â
Â
 1.ã¿ãŒããã«ã䜿çšãããŒã«ã«ç°å¢ã§herokuã«ãã°ã€ã³ã
$ heroku login
â»ã¡ãŒã«ã¢ãã¬ã¹ãšãã¹ã¯ãŒããèãããã®ã§ãå ¥åããã
Â
 2.ããŒã«ã«ç°å¢ã§herokuäžã«ã¢ããªã±ãŒã·ã§ã³ãäœæã
â¡ããŒã«ã«ç°å¢ã§herokuäžã«ã¢ããªã±ãŒã·ã§ã³ãäœæã
$ heroku create ã¢ããªã±ãŒã·ã§ã³å
â»createã®åŸãã«ã¢ããªåãå ¥ããããšã§ãã¢ããªã«ä»»æã®ååãã€ããã
ããããããªããšã©ã³ãã ã§ã¢ããªåã決ããããŠããŸããŸãã
Â
 3.å ¬éããããã®ïŒindex.htmlïŒããããã£ã¬ã¯ããªã®çŽäžã«index.phpãäœæããäžèšã³ãŒããèšè¿°ããŠããã
<?php
header('Location: /index.html');
?>
 2.Herokuã§ãããã€ããã
ãå ¬éããããã«çšæãããã®ïŒãã£ã¬ã¯ããªïŒãšHerokuäžã§äœã£ãã¢ããªïŒããŒã«ã«ç°å¢ïŒãçŽä»ããããããã€ããŸãã
Â
â ãŸãã¯git
ã³ãã³ãã䜿ã£ãŠæåã®ã³ã³ãã³ããã³ãããã
git init
git add .
git commit -m "æåã®ã³ããã"
init
 ã¯ãã€ããã
 ãšèªã¿ãinitialization
 ãçç¥ãããã®ã§ãã
â»æå³ã¯ãåæåã
Â
git initãšã¯ã
ãŸã gitã§ç®¡çãããŠããªããã£ã¬ã¯ããªãgitã®ç®¡çåã«çœ®ãããã«åæåãããšããæå³ã®
gitã³ãã³ãã§ãã
Â
â¡herokuã«ãããã€ã
ãherokuãžã®ãããã€ã¯git push
ã§è¡ããŸãã
git push heroku master
æåããã°ãäžèšã®æ§ãªURLã§ã¢ã¯ã»ã¹ã§ããŸãã
https://ilsole.herokuapp.com/index.html
Â
 æåŸãŸã§èšäºãèªãã§ãã ãããããããšãããããŸãïŒ
ãŸã次åããããããé¡ãããŸãã
Â
Â
ä»ååèã«ãããµã€ãã¯ãã¡ã
QiitaèšäºãHerokuã䜿ãããªãã®ã«å¿ èŠãªè¡
Qiitaèšäºãherokuã³ãã³ããcreateããdestroyãŸã§
git push heroku masterã§ãšã©ãŒãã§ããïŒã°ãŒã°ã«æ€çŽ¢ããŒãžïŒ
Â
Â
Â
Â
ãçªå€ç·šãiPhoneã»iPadã§ç°¡åã«ååºã¥ãã
ããã«ã¡ã¯ïŒ
ä»åã¯æ¥ãã§ååºãå¿ èŠãªæã«
iPhoneã»iPadã§ãããã«ïŒç°¡åã«ïŒäœãããæ¹æ³ãæžããŠãããŸãã
Â
䜿ãã¢ããªã¯ãã¡ãã
â»iPhoneãããã¯iPadããã¢ã¯ã»ã¹ãããšãã®ãŸãŸAppã¹ãã¢ã«ç§»åã§ããŸãã
1. ã¡ãã£ãã³ãã€ã³ãfor iPad
   ã¡ãã£ãã³ãã€ã³ã
 2.BiziCard
Â
 ãŸãã¯å®æããïŒ
Â
Â
Â
Â
äœææ¹æ³ãšããŠã¯ã
â ã¡ãã£ãã³ãã€ã³ãã§ãã¶ã€ã³äœã£ãŠ
â¡BiziCardã§ãã¶ã€ã³ã®äžã«å¿ èŠãªæ å ±ãå ¥åããŠ
ãã³ã³ãããªã©ã§å°å·ã§ããããã«ããŒã¿åãã
ãšããæµãã«ãªããŸãã
Â
ã¡ãã£ãã³ãã€ã³ãã¯ã誰ã§ãç°¡åã«äœ¿ããŸãïŒ
Adobeã®ãœããã¯ææã§ããã«ã¯æãåºãªãã
ãªããŠæ¹ã«ãããããã®ç¡æãã·ãã§ãã
Â
ãã ãã¯ã¿ãŒããŒã¿ïŒæ¡å€§ãããšãã«ã«ã¯ã«ã¯ããªããã€ïŒã§ã¯ãªããã
ç»è³ªé¢ã§ã¯èã£ãœããªãã®ã§ããããŸã§ç°¡æçã»ç·æ¥æã«äœ¿ãæ¹ãè¯ãããã§ãã
Â
Â
ããšã¯ãååºäœæã¢ããªãBiziCardãã®åºçªã§ãã
ã¢ããªãéããããååºäœæãæŒãããã³ãã¬ãŒããéžæã
ããã§éžã¶ã®ã¯ããŽããããã£ãŒã«ç»åãæ·»ä»ã§ãããã³ãã¬ãéžæããŸãã
â»ãã®ç»åæ·»ä»ã䜿ããã¡ãã£ãã³ãã€ã³ãã§ã®ãã¶ã€ã³ã貌ãä»ãããã
Â
Â
ç»åã¯è²Œãä»ããããšãæ¡å€§çž®å°ã«ãŠèª¿æŽãã§ããŸãã
ãŸãååºäœæã«ããããããããå ¥åé ç®ããããŸãããäžèŠãªãã®ã¯
衚瀺é衚瀺ã®éžæã§é衚瀺ã«ããããšã§é ããŸãã
Â
åºæ¥äžãã£ããã ãã€ãã£ããããã«ä¿åãæŒããŠå®æã§ãã
Â
ãããããšäžã®ããã«ããªã³ãçªå·ãçºè¡ãããŸãã®ã§
察å¿ããŠããã³ã³ãããããã³ããŒæ©ãæäœããŠç°¡åå°å·ã§ããŸãã
ã¢ããªå ã«æäœæ¹æ³ãæžããŠããã®ã§å®å¿ã§ãã
Â
1æã®çŽã«ååº10æåãããªã³ããããŸãã
ããªã ããŒã¯ïŒãã³ãïŒãå°åãããŠããã®ã§ã«ããããããããªã£ãŠããŸãã
Â
以äžã§å³åžååºã®å®æã§ãã
Â
å®éã«äœ¿ã£ãŠã¿ãææ³ã§ããã
æ¬åœã«æ¥ãã§ããæãåºå ã§ååºãåãããæãªã©ã®ãã©ãã«ã«ã¯
éåžžã«åŒ·ãæ¹æ³ã ãšæããŸãã
ãã¶ã€ã³ãšè¿ãã«ã³ã³ããããããã°ããã®æ¥äžã«çšæã§ããŸãïŒ
Â
ãã ã¯ãªãªãã£ãšã³ã¹ãã®é¢ã§ã¯ãå³åžæãåºãŠããŸããŸãã
ã«ããã¯èªèº«ã§è¡ããããã©ãããŠã綺éºã«ãããªãããšããããŸãã
ãŸãã³ã¹ãé¢ã§ã¯ãä»å1æïŒååº10æåïŒ300åããããŸããã
ååºã®å°éåºã§ããã°ãäžçªæé ãªãã®ã§ååº100æäœããŸãã
Â
 ãªã®ã§æéçäœè£ãšãã¯ã¿ãŒããŒã¿ã§ãã¶ã€ã³ãçšæã§ãããªã
ãã¯ãå°éåºã«ãé¡ãããã®ããã¹ãã§ãç·æ¥æã®ã¿ãã®æ¹æ³ã
å©çšããã®ãè¯ãã®ããªãšæããŸããã
Â
ä»åãæåŸãŸã§èªãã§ãã ãããããããšãããããŸãïŒ
èªåã®ããŒããã©ãªãªãGitHubã§ç°¡åã«å ¬éããæ¹æ³
ããã«ã¡ã¯ïŒ
ä»åã¯ãGitHub Pagesã䜿ã£ãŠ
ããŒããã©ãªãªãµã€ããç°¡åã«å ¬éããæ¹æ³ãæžããŠãããŸãã
Â
ãã€ãã®ããã«ç°¡åãšæžããŠããã®ã«ãšã©ãŒã«ãªã£ããšããã
ããã®ã§èªåã®çµéšãããšã©ãŒæ³šæç¹ãå«ããŠæžããŠãããŸãã
Â
ä»ååèã«ãããµã€ãã¯ãã¡ã
GitHub Pagesã§éçãµã€ããç°¡åã«äœã
Â
ãã®äžã§ããŠãŒã¶ãŒãµã€ãã®äœãæ¹ãã®éšåãå®è¡ããŠãããŸãã
Â
â ãŸãGitHubã®èªèº«ã®ã¢ã«ãŠã³ãããŒãžãéããŸãã
ãåã®å Žåã¯ãããã§ããhttps://github.com/kakiwo
Â
â¡ããšã¯[ èªåã®åå.github.io ]ãšååãä»ããŠãªããžããªãäœãã ãïŒ
ãhttps://èªåã®åå.github.io/ã«ã¢ã¯ã»ã¹ããã°ããŒãžãå ¬éã§ããŸãã
ãããã§å ¬éããå Žæã®çšæãã§ããŸããã
Â
Â
â¢äœæãããªããžããªã«è¡šç€ºããããã³ãŒããæžããŠãããŸãã
ãåãçšæãããã®ã¯ã
ã1.index.html
ã2.css
ã3.js
ã4.images
ã以äžã§ãã
Â
â£å®æïŒãããã«ãŠç¡äºããŒããã©ãªãªãå ¬éã§ããŸããïŒ
ãæ©éåºæ¥äžããã確èªããŸãã
Â
ããã
ãåã®å Žåãããã§ãšã©ãŒãèµ·ããŸããã
ãããããã¡ãããâãâãâ
èšè¿°èªäœã«ééãã¯ãªããä»ã§è©Šããæã¯ã¡ãããšèŠããŠãã
ãªã®ã«github pagesã§ã¯èŠããªãã
Â
ããã¯ãã³ãŒããèšè¿°ããŠããå ¬éã«è³ããŸã§ã®ã¿ã€ã ã©ã°ãåå ã§ããã
Â
ç¹ã«æ ãŠãããšã¯ãããŸããã
ïŒæžããŠããæ¬äººã¯æãã£ããçŠã£ãŠãŸããâïŒ
Â
â€æ¹ããŠå®æïŒ
ãåãäœæããããŒããã©ãªãªãèŒããŸãã
ã https://kakiwo.github.io/
Â
Â
æåŸãŸã§èªãã§ãã ãããããããšãããããŸãã
2020幎ãèªåå°çšããã°ã¢ããªäœæéå§ïŒ
ããã«ã¡ã¯ïŒ
ã€ãã«2020幎ã«ãªããŸãããä»å¹Žãã什åïŒå¹Žã®ã¹ã¿ãŒãã§ãã
ã©ãããä»å¹Žããããããé¡ãããŸãã
Â
æ©éã§ãããHerokuã§ã®ãããã€ãéããŠã®ã¢ããªäœæäœæ¥ãå§ããã°ããã§ãã
ããããªãã®ã«æãåºããŠã©ããå®æã«ã¯è³ã£ãŠããŸãããã
æ¬æ¥ããè¡šé¡ã«ãããŸãããã«ããèªåå°çšããã°ã¢ããªããäœæããŠã¿ãããšæããŸãïŒ
Â
å§ãã®éçšãã ãã¶é£ã³ãŸããã以åäœæããããã°ã¢ããªã«æãå ããŠ
圢ã«ããŠããããšæããŸãïŒ
Â
ãããŸã§ã«äœæããã³ãŒãã¯ãã¡ããåç §ããŠãã ããã
ããâââ
kakikazuã®GitHubãawaburoã
Â
Â
ä»åŸäœã£ãŠããäžèº«ãšããŠã¯ã
â topããŒãžè¿œå ã
â¡ããã°æçš¿ããŒãžã®ä¿®æ£ã
â¢äžèŠ§ããŒãžã®ä¿®æ£ã
â£ç·šéããŒãžã®ä¿®æ£ã
â€ãåãåããããŒãžã®è¿œå ã
Â
ã³ã³ãã³ãæ°ã¯ãªãã¹ãå°ãªãããŠããæ¹åã§èããŠããŸãã
Â
ããã°ã®æçš¿ã«ã¯ãäžè¬çã«å©çšãããŠãããããªæ©èœãæäœéåãã£ãŠããããšã
ä»ã«ã蚪åè ã®æ°å€ãèŠèŠçã«ã¿ãŠãããããã«ãããã°æ¬æã«ã©ããããæåãæã¡èŸŒãŸããŠãããæåæ°ã®ã«ãŠã³ããä»ããŠããããšèšç»ããŠããŸãã
Â
ãã®èªåå°çšããã°ã¢ããªã«ã¯ã
ã°ãŒã°ã«ã¢ãã»ã³ã¹ã®ãããŒãèªç¶ã«é 眮ã§ããããã«ããŠ
å°æ¥çã«ãå šäœããã¬ã€ã«ãããŸããµã€ãã«ããŠãããŸãã
Â
ã°ãŒã°ã«ã¢ãã»ã³ã¹ã®èª¬æã¯ãã¡ããã
Â
ããšã¯ãã§ã«åºãŠããã¢ã¯ã»ã¹è§£æããŒã«ã掻çšãã
å®éã«ããã°ãµã€ããèªå·±åæããªããéçšããŠãããŸãã
Â
ä»åã¯ãäœæããã¢ããªã®æŠèŠã ãã«ãªããŸãããã
次å以éã¯å®éã«è¿œå ãä¿®æ£ãªã©äœæ¥ããŠããéçšããªãã¹ã詳ããã
æžããŠãããŸãã®ã§èå³ã®ããæ¹ã ãã§ãªãã
ããã°ã©ãã³ã°æªçµéšã®æ¹ãç¬åŠã§ããã°ã©ãã³ã°åŠç¿äžã®æ¹ã
ã¹ã¯ãŒã«ãªã©ã§åŠç¿äžã®æ¹ãããã°ã©ãã³ã°ã§æ«æãããã«ãªã£ãŠããæ¹ãªã©ã
ããããã®æ¹ã«èªãã§ããããããšæããŸãã
Â
Â
æåŸãŸã§èªãã§ãã ããããããšãããããŸãã
次åãã©ãããããããé¡ãããŸãã
Â
ãHerokuãç°¡åã»ç¡æã§ãããã€ã§ããïŒ
ããã«ã¡ã¯ïŒãkakikazuã§ãã
Â
ä»åã¯ãç¡æã§ç°¡åã«ãããã€ãã§ããHerokuãšãããã®ã«
ãã£ã¬ã³ãžããŠã¿ãŸãã
Â
Â
ç°¡åã§ïŒãç¡æïŒãšããã®ã§
ããªãèžãèžãããŠèŠãŠã¿ãã®ã§ãããã
çµè«ããã人ã®ç解床ã«ãããã§ããã
Â
åã«ãšã£ãŠã¯é ã«ïŒïŒãããããåºãŠããŸããã
Â
Â
ã§ã¯æ©éé ãè¿œã£ãŠã
Â
Â
1.ãŸãäžèšãµã€ãã«ã¢ã¯ã»ã¹ããŠæ°èŠç»é²
ãããã¯ãŸããããªã«èŠæŠããŸããã
Â
åèãµã€ã
http://vdeep.net/rubyonrails-heroku
Â
Â
2.次ã«ãHeroku Toolbeltããå°å ¥
Â
Â
Herokuã®æ°èŠã¢ããªäœæãããããã€ãã¢ããªã³ã®è¿œå ãªã©ãå©çšã§ãã
ãšæžããŠããã®ã§ããšããããå ¥ããŠã¿ãã
Â
ãšããã
äžèšãµã€ãèªã¿ãªãããã£ãŠã¿ãŠãããŸããããã
Â
ããã§
ããŒãã©ããã£ãŠïŒã£ãŠãªããŸããã
ããã§åèãµã€ããããèªãã§ã¿ããš
Â
åèãµã€ãã«ãŸãåèãµã€ããªããã®ãèŒã£ãŠããã®ã§ãã¡ããèŠãŠã¿ãŸãã
Â
Â
Macã§å©çšã§ããããã±ãŒãžç®¡çããŒã«Homebrewçµç±ã§å°å ¥ã
https://qiita.com/tetsu-sh/items/f6fcbb6b85df04e5cf3f
Â
Â
ã©ãããäžèšã³ãã³ããã¿ãŒããã«ã§æã¡èŸŒãã§ããããšã§
ã€ã³ã¹ããŒã«ããæçµãŽãŒã«ãããã€ãŸã§ã®èšå®ãé²ããããŠããããã§ãã
ãšããããšã§ã€ã³ã¹ããŒã«ã®ããã®ã³ãã³ãå ¥åã
Â
Â
â å°å ¥
ïŒbrew tap heroku/brew && brew install heroku
â ãã°ã€ã³
ïŒheroku login
ãã©ãŠã¶ãç«ã¡äžãããã°ã€ã³ãæ±ããããã
â»åºãŠãããŸã§ã«å°ãã¿ã€ã ã©ã°ãããŸãããçŠãããã°ããåŸ ã¡ãã
Â
ãã°ã€ã³ã§ãããšããã§
ããªãã»ã©æŽããŠãããªããšæãããã®ãŸãŸæ¬¡ã®ã³ãã³ãã«å ¥åã
Â
Â
èšå®ãšãããé²ããŠããããšãããš
æãããã«é²ãŸããããïŒïŒã£ãŠãªããŸããã
Â
Â
ãã å°å ¥ã¯ããŸãã§ããŠãããããªã®ã§
ã²ãšãŸãïŒã€ç®ã®åèãµã€ããè¯ãé²ããŠã¿ãŸãã
ãããšå°å ¥ããHerokuã®ããŒãžã§ã³ã確èªã§ããã³ãã³ãããããããªã®ã§
å ¥åããã
Â
å°å ¥ç¢ºèªã³ãã³ã
$ heroku --version
heroku-cli/6.13.5 (darwin-x64) node-v8.2.1
ãããã§ã¿ãŒããã«ããHerokuãæäœããããšãã§ããããã«ãªããŸãããã
ãšããããšã¿ããã§ãã
Â
Â
Railsã¢ããªã®æºå
ããããæ°èŠã«ã¢ããªãäœæã§ããããã§ãïŒ
Â
äžåºŠäœã£ãããšããã人ã«ã¯ããªãã¿ã®
Â
$ rails new ã¢ããªå -d postgresql --skip-bundle
$ cd ã¢ããªå
$ bundle install --path vendor/bundle
Â
Â
ãã ããã§ä»ãŸã§MySQLãã䜿ã£ãŠããªãã£ãåã«ã¯ïŒã€çåãã
Â
Herokuã§ã¯ããã©ã«ãã§PostgreSQLã察å¿ãããã
Â
PostgreSQLã£ãŠãªãã ããïŒ
Â
ã£ãŠããšã§åèãµã€ããŸãæ¢ããŸããã
Â
https://qiita.com/motsat/items/bb72af915c7bf12559f3
Â
Â
ç¹åŸŽïŒèšèšææ³ïŒ
ã»MySQL
é«éã«åäœããããšãè€éãªåŠçãå³æ ŒãªåŠçã¯ç©æ¥µçã«ãµããŒãããªãã
ã»PostgreSQL
é«æ©èœãå
ç¢æ§
Â
Â
ç°¡åã«ãããšããããããšã¿ããã§ãã
Â
ããããHerokuãéããŠã¢ããªå¶äœããã®ã«
ãã®PostgreSQLã䜿ã£ãŠãã£ãŠã¿ãããšæããŸãã
Â
Â
ç¶ãã¯ãŸã次åã¢ããããŠãããŸãã
Â
æåŸãŸã§èªãã§ããã ãããããšãããããŸãã
2019.11.28ãæ°èŠã¢ããªã±ãŒã·ã§ã³äœæéå§ïŒ
ããããæ°èŠã¢ããªã±ãŒã·ã§ã³äœæã®èšé²ãæžãæ®ããŠãããŸãã
Â
ãšããã©ããã§ééããç®æãèŠæŠããäºãäœæ¥ã®æµãã
䟿å©ãªã³ãã³ããæ©èœãªã©ãæ·»ããŠäœæã®æ§åãçºä¿¡ã§ããã°ãšèããŠãŸãã
Â
ãããããé¡ãããŸãã
Â
Â
æ©éãæ°èŠã¢ããªã±ãŒã·ã§ã³äœæã®å§ãã®ãšããã«ã€ããŠ
æé ãšçŽé¢ãããšã©ãŒã«ã€ããŠæžããŠãããããšæããŸãã
Â
䜿çšPCãMacBookPro
ä»æ¥äœ¿ã£ããã®
ã»ã¿ãŒããã«
Â
Â
ãŸãå§ãã«ä»¥äžãå®è¡ããŸããã
$ mkdir projectX
ã#mkdirïŒã¡ã€ã¯ãã£ã¬ã¯ããªïŒã«ãŠprojectXãšããåã®ãã£ã¬ã¯ããªãäœæ
$ cd ~/projectX
ã#cdã³ãã³ãã«ãŠå Žæ移åãã~/(ããŒã ãã£ã¬ã¯ããªãŸã§ã®çç¥)
$ rails _5.0.7.2_ new awaburo -d mysql
#railsããŒãžã§ã³5.0.7.2ã§ãawaburoããšããã¢ããªãæ°èŠäœæã
ããããŒã¿ããŒã¹ã®ç®¡çã¯MySQLã䜿çšã
Â
ããã§æ°ããäœæ¥çšãã£ã¬ã¯ããªïŒä»åã¯projectXãšããååïŒã
ããŒã ãã£ã¬ã¯ããªå ã«äœæããprojectXå ã§railsããŒãžã§ã³ïŒ.0.7.2ã®
æ°èŠã¢ããªã±ãŒã·ã§ã³ïŒä»åã¯awaburoïŒããŒã¿ããŒã¹ã®ç®¡çã¯MySQLã§è¡ã
ãšãããšãããŸã§æå®ããŠäœæ¥å Žãäœãäºãã§ããŸããã
Â
äœéšãšã©ãŒïŒïŒ
Installing mysql2 0.5.3 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
Â
An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'` succeeds before bundling.
Â
Â
MySQLãããŸãäœããŸããã§ããã
Â
ä»åå®è¡ãã察å¿ïŒ
Â
$ gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/' -- --with-cppflags=-I/usr/local/opt/openssl/include --with-ldflags=-L/usr/local/opt/openssl/lib $ cd awaburo $ bundle install
Â
gem mysql2ããŒãžã§ã³0.5.3ã«å€æŽããŸããã
Â
Â
ããã§ã¢ããªã±ãŒã·ã§ã³ã®åå°ãšãªãäœæ¥å Žãå®æããŸããã
Â
次åã¯ãããããtopããŒãžå®æãŸã§ã®éã®ããæžããŠãããŸãã