
ãªãå㯠React (Next.js) ãš Tailwind CSS ãéžã³ç¶ããã®ãïŒ ãçŸåœ¹ããªãŒã©ã³ã¹éçºè ãèªããã¢ãã³ããã³ããšã³ãæè¡ã¹ã¿ãã¯ã®é åãšå®è·µçæŽ»çšæ³ã
ããã®æè¡ãæ¬åœã«èªåã«åã£ãŠãïŒãââçµ¶ãéãªãèªåèªçã®æ«ã«èŠã€ãããåã®æåŒ·ã®çžæ£ãã¡
Web éçºã®äžçã£ãŠãæ¬åœã«æ¥é²ææ©ã§ãããã
æ°ãããã¬ãŒã ã¯ãŒã¯ããæ°ããã©ã€ãã©ãªãæ°ããèšèšææ³âŠâŠããŸãã§ã次ããæ¬¡ãžãšæ°ããæãçãŸããŠã¯æ¶ããŠããå®å®ã®ããã§ãã
ãããªäžã§ããã©ã®æè¡ãéžã¹ã°ãããã ããïŒãããã®éžæã¯æ¬åœã«æ£ããã®ã ãããïŒããšãçµ¶ããèªåèªçãç¹°ãè¿ããŠããéçºè ã®æ¹ãå°ãªããªãã®ã§ã¯ãªãã§ããããã
åããããªãŒã©ã³ã¹ãšããŠæŽ»åããäžã§ãäœåºŠããããªæè¡éžå®ã®å£ã«ã¶ã€ãã£ãŠããŸãããã¯ã©ã€ã¢ã³ãã®èŠæãããããžã§ã¯ãã®èŠæš¡ãå°æ¥ã®ã¡ã³ããã³ã¹æ§ããããŠäœããããéçºããŠããŠæ¥œããããââãæ§ã ãªèŠçŽ ã倩秀ã«ãããªããã詊è¡é¯èª€ãç¹°ãè¿ãæ¥ã ã§ããã
ãã®èšäºã§ã¯ããããªåãæ°ããæè¡ã®äžããããªãç¹ã«ãReact (Next.js)ããšãTailwind CSSããšããçµã¿åãããéžã³ããããŠä»ããªãæçšãç¶ããŠããã®ãã
ãã®çç±ãšããããã®æè¡ãåã®ããªãŒã©ã³ã¹ãšããŠã®éçºã¯ãŒã¯ãããŒã«ã©ã®ãããªé©åœããããããŠãããã®ãããå ·äœçãªçµéšãå®è·µçãªæŽ»çšæ³ã亀ããªãããäœããšãããªãã話ãããããšæããŸãã
ãã®èšäºããããªãã®æè¡éžå®ã®æ è·¯ã«ãããŠãäœãããã®ãã³ããå ±æããããã¯æ°ããªçºèŠã®ãã£ãããšãªãã°ãããã»ã©å¬ããããšã¯ãããŸããã


åãšã¢ãã³ããã³ããšã³ãæè¡ãšã®åºäŒã
æãã°ãåãããã³ããšã³ãéçºã®äžçã«è¶³ãèžã¿å ¥ããé ã¯ããŸã jQuery ãå šçæã§ãããDOM æäœãã¢ãã¡ãŒã·ã§ã³ãé§äœ¿ããŠããŠã§ãããŒãžã«åããã€ããããšã«å€¢äžã«ãªã£ããã®ã§ãã
ãããããããžã§ã¯ãã®èŠæš¡ã倧ãããªãã«ã€ããŠãæç¶ãç㪠TypeScriptïŒåœæã¯ JavaScript ãäž»æµã§ããããçŸä»£ã®éçºã§ã¯ TypeScript ã®åã·ã¹ãã ã«ããæ©æµã倧ãããšæããŠããŸãïŒã®ã³ãŒãã¯è€éã«çµ¡ã¿åããç¶æ 管çã¯æ··æ²ãšããCSS ã¯ãã©ããçŽãã°ã©ãã«åœ±é¿ãåºãã®ãåãããªãããšãããã©ãã¯ããã¯ã¹ã«ãªããã¡ã§ããããŸãã§ãæŽçæŽé ãããŠããªãéšå±ã§ãç®åœãŠã®ãã®ãæ¢ããããªåŸåŽæââã
ãããªæãåœæã®ããã«çŸããã®ã React ã§ãããåããŠè§Šãããšãã®è¡æã¯ä»ã§ãå¿ããããŸããã
ãUI ãã³ã³ããŒãã³ããšããç¬ç«ããéšåãšããŠçµã¿ç«ãŠãïŒããç¶æ ãå€ããã°ãUIãèªåçã«åæç»ãããïŒãââããã¯ãåãé·å¹Žæ±ããŠããããã³ããšã³ãéçºã®æ©ã¿ããæ ¹æ¬ãã解決ããŠããããããªããŸãã«ãã©ãã€ã ã·ããã ã£ãã®ã§ãã

ãã㊠Next.jsãReact ã®åŒ·åãªãšã³ã·ã¹ãã ãããŒã¹ã«ããµãŒããŒãµã€ãã¬ã³ããªã³ã°ãéçãµã€ãçæãšãã£ããçŸä»£ç㪠Web ã¢ããªã±ãŒã·ã§ã³ã«äžå¯æ¬ ãªæ©èœããé©ãã»ã©ç°¡åã«å®çŸãããŠãããŸããã
ãããã§ SEO ãæããªãããåæè¡šç€ºãçéã«ãªããïŒããšãéçºè ãšããŠã®å¯èœæ§ã倧ããåºãã£ãç¬éã§ããã

ããã« Tailwind CSSãæåã¯ãHTML ã«çŽæ¥ã¹ã¿ã€ã«ãæžããªããŠãæã®ããæ¹ã«æ»ãã¿ããã§æµæããããªâŠããšæ£çŽæã£ãŠããŸãããããããäžåºŠãã®ãŠãŒãã£ãªãã£ãã¡ãŒã¹ãã®å²åŠã«è§ŠããŠã¿ããšãCSS èšèšã®åªçžããè§£ãæŸããããããªãå§åçãªèªç±ãšã¹ããŒãæã«é äºãããŸãããããããã¯ã©ã¹åãèããã®ã«æéãæº¶ãããªããŠãããã ïŒããšã

ãããã®æè¡ãšã®åºäŒãã¯ãåã®éçºã¹ã¿ã€ã«ãæ ¹åºããå€ããããªãŒã©ã³ã¹ãšããŠã®æŠåšãæ Œæ®µã«åŒ·åãªãã®ã«ããŠãããŸããã
ãã® note ã§ã¯ãåã«ãããã®æè¡ã®æ©èœã玹ä»ããã®ã§ã¯ãªããåããªãããããéžã³ãã©ã®ããã«æŽ»çšãããããŠãªããéžã³ç¶ãããã®ãããã®èæ¯ã«ããææ³ãçµéšãå ±æã§ããã°ãšæã£ãŠããŸãã

ãªã React (Next.js) ãªã®ãïŒ ã宣èšç UI ãšãµãŒããŒãµã€ãã¬ã³ããªã³ã°ã®æ©æµã
React ã®é å: ã³ã³ããŒãã³ãããŒã¹éçºãšå®£èšç UI ã®å¿å°ãã
React ã®æå€§ã®é åã¯ãäœãšèšã£ãŠããã³ã³ããŒãã³ãããŒã¹ããšããèãæ¹ãšãã宣èšç UIããšããèšè¿°ã¹ã¿ã€ã«ã«ãããšåã¯æããŠããŸãã
ãã€ãŠã®åã¯ãããäžéšåã®è¡šç€ºãå€ãããã ãã§ããã©ã® TypeScript (JavaScript) ãã¡ã€ã«ãã©ã® HTML èŠçŽ ãæäœããŠããã®ãã远ããããDOM ãæç¶ãçã«æäœããã³ãŒããå»¶ã ãšæžããªããã°ãªããŸããã§ããã
ç¹ã«å€§èŠæš¡ã«ãªã£ãŠãããšãåããªãããšã«ããæå³ããªãæåããªãã¡ã¯ã¿ãªã³ã°ã®å°é£ãã«çŽé¢ããããšãå°ãªããããŸããã§ãããTypeScript ã®éçåä»ãã¯ãããããåé¡ãéçºæ®µéã§æ€ç¥ããã³ãŒãã®å質ãšä¿å®æ§ãæ Œæ®µã«åäžãããŠãããããŸãã«æäžäž»ã®ãããªååšã§ãã
ããã React ã§ã¯ãUI ããããããŒããèšäºã«ãŒããããã¿ã³ããšãã£ãç¬ç«ãããã³ã³ããŒãã³ãããšããŠèšèšããŸããåã³ã³ããŒãã³ãã¯èªèº«ã®ç¶æ ïŒ`state`ïŒãšèŠãç®ïŒ`TSX`ïŒãæã¡ãããããçµã¿åãããŠå€§ã㪠UI ãæ§ç¯ããŠãããŸãã
TypeScript ã䜿ãããšã§ããããã®ã³ã³ããŒãã³ããã©ã®ãããªããŒã¿ïŒPropsïŒãåãåããã©ã®ãããªæ¯ãèããããã®ããåã§æç¢ºã«å®çŸ©ã§ãããããããå ç¢ã§çè§£ããããã³ãŒããæžãããšãã§ããŸãã
// äŸ: ã·ã³ãã«ãªãã¿ã³ã³ã³ããŒãã³ã (TypeScript)
import React from 'react';
type MyButtonProps = {
onClick: () => void;
children: React.ReactNode;
};
function MyButton({ onClick, children }: MyButtonProps) {
return (
<button onClick={onClick} className="bg-blue-500 text-white p-2 rounded">
{children}
</button>
);
}ãããŠã宣èšç UIããããã¯ããããšããç¶æ ãªããUI ã¯ããããã¹ãããšèšè¿°ããã ãã§ãReact ããã®ç¶æ 倿Žãæ€ç¥ããŠãæé©ãªåœ¢ã§ DOM ãæŽæ°ããŠããããšãããã®ã§ãã
åãã¡ã¯ãã©ããã£ãŠ DOM ãæŽæ°ãããããšããé¢åãªæé ãèããå¿ èŠããªããªãããUI ãã©ãããã¹ããããšããæ¬è³ªçãªéšåã«éäžã§ããã®ã§ãã
TypeScript ãšçµã¿åãããããšã§ããã®ãç¶æ ãã®åãå®çŸ©ã§ããäºæãã¬ç¶æ 倿Žã«ãããã°ãæªç¶ã«é²ãå©ããšãªããŸãã
ããã¯ãéçºã®å¿ççãªè² æ ãåçã«è»œæžããŠãããŸãããåå©çšæ§ãé«ããäžåºŠäœã£ãã³ã³ããŒãã³ãã¯ä»ã®å Žæã§ã䜿ãåãããããéçºå¹çãæ Œæ®µã«åäžããŸãã

Next.js ãéžã¶çç±: SSRãSSGãISR ãããããéçºäœéšãšããã©ãŒãã³ã¹
React ã ãã§ãçŽ æŽãããã®ã§ãããNext.js ãšçµã¿åãããããšã§ããã®åã¯ããã«å¢å€§ããŸãã
åã Next.js ãæçšããæå€§ã®çç±ã¯ããã¯ããã®åŒ·åãªã¬ã³ããªã³ã°æŠç¥ãšãéçºäœéšã®åäžã«ãããŸãã
SPAïŒã·ã³ã°ã«ããŒãžã¢ããªã±ãŒã·ã§ã³ïŒã¯ãŠãŒã¶ãŒäœéšãè¯ãåé¢ãåæè¡šç€ºãé ãã£ãããSEO ã«èª²é¡ããã£ããããŸãããNext.js ã¯ãããã®åé¡ããSSRïŒãµãŒããŒãµã€ãã¬ã³ããªã³ã°ïŒãSSGïŒã¹ã¿ãã£ãã¯ãµã€ããžã§ãã¬ãŒã·ã§ã³ïŒãISRïŒã€ã³ã¯ãªã¡ã³ã¿ã«ã¹ã¿ãã£ãã¯ãªãžã§ãã¬ãŒã·ã§ã³ïŒãšãã£ã倿§ãªã¬ã³ããªã³ã°æŠç¥ãæäŸããããšã§è§£æ±ºããŠãããŸãã
SSR:
ãªã¯ãšã¹ãããšã«ãµãŒããŒã§ HTML ãçæãããããåžžã«ææ°ã®æ å ±ã衚瀺ã§ããSEO ã«ã匷ããåçãªã³ã³ãã³ããå€ãããŒãžã«é©ããŠããŸããSSG:
ãã«ãæã« HTML ãçæããŠããããã衚瀺ãéåžžã«é«éãããã°èšäºãããã¥ã¡ã³ããªã©ãæŽæ°é »åºŠã®äœãã³ã³ãã³ãã«æé©ã§ããISR:
SSG ã®é«éæ§ãš SSR ã®é®®åºŠãäž¡ç«ãããããªä»çµã¿ãäžå®ééã§ããã¯ã°ã©ãŠã³ãã§ããŒãžãåçæãããããã»ãŒãªã¢ã«ã¿ã€ã ãªæ å ±ãæäŸãã€ã€ããµãŒããŒè² è·ãæããããŸãã
ãããã®æŠç¥ãããŒãžåäœã§äœ¿ãåããããæè»æ§ããNext.js ã®å€§ããªåŒ·ã¿ã§ãã
äŸãã°ãåã®ããŒããã©ãªãªãµã€ãã§ã¯ãããã°èšäºã¯ SSG ã§é«é衚瀺ãã€ã€ããåãåãããã©ãŒã ã®ãããªåçãªéšå㯠SSR ãã¯ã©ã€ã¢ã³ããµã€ãã¬ã³ããªã³ã°ã掻çšããŠããŸãã
ããã«ããã¡ã€ã«ã·ã¹ãã ããŒã¹ã®ã«ãŒãã£ã³ã°ïŒ`pages` ãã£ã¬ã¯ããªã«ãã¡ã€ã«ãäœæããã ãã§ã«ãŒãã£ã³ã°ãèšå®ãããïŒããAPI ã«ãŒãïŒãµãŒããŒã¬ã¹é¢æ°ãç°¡åã«äœæã§ããïŒãçµã¿èŸŒã¿ã®ç»åæé©åã³ã³ããŒãã³ãïŒ`<Image />`ïŒãªã©ãéçºãã¹ã ãŒãºã«é²ããããã®æ©èœãæºèŒã§ãã
ããããããæ¬²ããã£ããã ããªããšããããããšããã«æãå±ãæ©èœçŸ€ã®ãããã§ã以åã¯ç°å¢æ§ç¯ã现ããªèšå®ã«è²»ãããŠããæéãããããã¯ãã®æ¬è³ªçãªéçºã«å ãŠãããããã«ãªããŸããã

åãæãã React (Next.js) éçºã® ãããã奜ãïŒã
æè¡çãªã¡ãªãã以å€ã«ããåã React (Next.js) ã奜ãã§ãç¶ããçç±ã¯ããã€ããããŸãã