| title | Create React App ã®éæšå¥šå |
|---|---|
| author | Matt Carroll and Ricky Hanlon |
| date | 2025/02/14 |
| description | æ¬æ¥ãæ°èŠã¢ããªã«å¯Ÿã㊠Create React App ãéæšå¥šãšããæ¢åã®ã¢ããªã«ã¯ãã¬ãŒã ã¯ãŒã¯ãžã®ç§»è¡ããŸã㯠ViteãParcelãRSBuild ãªã©ã®ãã«ãããŒã«ãžã®ç§»è¡ãæšå¥šããŸãããŸãããã¬ãŒã ã¯ãŒã¯ããããžã§ã¯ãã«é©ããŠããªãå Žåãç¬èªã®ãã¬ãŒã ã¯ãŒã¯ãæ§ç¯ãããå Žåãããã㯠React ãã©ã®ããã«åäœããããåŠã¶ããã«ãŒããã React ã¢ããªãæ§ç¯ãããå Žåã®ããã®ããã¥ã¡ã³ããæäŸããŸãã |
February 14, 2025 by Matt Carroll and Ricky Hanlon
æ¬æ¥ãæ°ããã¢ããªã«å¯Ÿã㊠Create React App ãéæšå¥šãšããŸããæ¢åã®ã¢ããªã«å¯ŸããŠã¯ããã¬ãŒã ã¯ãŒã¯ãžã®ç§»è¡ããŸã㯠ViteãParcelãRSBuild ãªã©ã®ãã«ãããŒã«ãžã®ç§»è¡ãæšå¥šããŸãã
ãŸãããã¬ãŒã ã¯ãŒã¯ããããžã§ã¯ãã«é©ããŠããªãå Žåããç¬èªã®ãã¬ãŒã ã¯ãŒã¯ãæ§ç¯ãããå Žåããããã¯ãŒããã React ã¢ããªãæ§ç¯ããããšã§ React ãã©ã®ããã«åäœããããåŠã³ããå Žåã®ããã®ããã¥ã¡ã³ããæäŸããŸãã
2016 幎㫠Create React App ããªãªãŒã¹ããåœæã¯ãæ°ãã React ã¢ããªãæ§ç¯ããããã®æç¢ºãªæ¹æ³ãååšããŸããã§ããã
React ã¢ããªãäœæããã«ã¯ãå€ãã®ããŒã«ãã€ã³ã¹ããŒã«ããŠããããèªåã§çµã¿åãããJSXããªã³ã¿ãããããªããŒããªã©ã®åºæ¬æ©èœããµããŒãããŠããå¿ èŠããããŸããããããæ£ããè¡ãã®ã¯éåžžã«é£ããã£ããããã³ãã¥ããã£ã¯ ã»ããã¢ããã å ±éåããããã« æ§ã ãªãã€ã©ãŒãã¬ãŒãã äœæããŸããããããããã€ã©ãŒãã¬ãŒãã¯æŽæ°ãé£ãããåæåãé²ãã«ã€ã React ãæ°æ©èœããªãªãŒã¹ããã®ã¯å°é£ãšãªã£ãŠãããŸããã
Create React App ã¯ãããã€ãã®ããŒã«ãåäžã®æšå¥šã»ããã¢ããã«ãŸãšããããšã§ãããã®åé¡ã解決ããŸãããããã«ãããã¢ããªãæ°ããããŒã«ã®æ©èœã䜿ãããã®ã¢ããã°ã¬ãŒããç°¡åã«ãªããReact ããŒã ã¯å€§ããã®ããŒã«ã®å€æŽïŒFast Refresh ã®ãµããŒããããã¯ã®ãªã³ãã«ãŒã«ãªã©ïŒãæå€§éåºç¯ãªãŠãŒã¶ã«å±éã§ããããã«ãªããŸããã
ãã®ã¢ãã«ã¯éåžžã«äººæ°ãããããã仿¥ã§ã¯ãã®ããã«åäœããããŒã«çŸ€ãäžå€§å¢åãšããŠååšããŠããŸãã
Create React App ã¯ç°¡åã«å§ãããããã®ã®ãããã€ãã®å¶éããããæ¬çªç°å¢çšã®é«æ§èœãªã¢ããªãæ§ç¯ããããšãå°é£ãšãªã£ãŠããŸããåççã«ã¯ããããã®åé¡ã¯ Create React App ããã¬ãŒã ã¯ãŒã¯ãžãšçºå±ãããããšã§è§£æ±ºå¯èœã§ãããã
ããããçŸåš Create React App ã«ã¯ã¢ã¯ãã£ããªã¡ã³ãããããªãäžæ¹ã§ããããã®åé¡ããã§ã«è§£æ±ºããŠããå€ãã®æ¢åã®ãã¬ãŒã ã¯ãŒã¯ãååšããŸãããã®ãããCreate React App ãéæšå¥šãšããããšã«æ±ºå®ããŸããã
æ¬æ¥ãããæ°ããã¢ããªãã€ã³ã¹ããŒã«ãããšãéæšå¥šã®èŠåã衚瀺ãããŸãã
create-react-app is deprecated. {'\n\n'} You can find a list of up-to-date React frameworks on react.dev For more info see: react.dev/link/cra {'\n\n'} This error message will only be shown once per install.
ãŸããCreate React App ã®ãŠã§ããµã€ããš GitHub ãªããžããªã«ãéæšå¥šã®éç¥ã远å ããŸãããCreate React App ã¯ã¡ã³ããã³ã¹ã¢ãŒãã§åäœãç¶ããŸããReact 19 ã§åäœããæ°ããããŒãžã§ã³ã® Create React App ãå ¬éããŸããã
ãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠæ°ãã React ã¢ããªãäœæããããšããå§ãããŸããç§ãã¡ãæšå¥šãããã¹ãŠã®ãã¬ãŒã ã¯ãŒã¯ã¯ãã¯ã©ã€ã¢ã³ããµã€ãã¬ã³ã㌠(CSR) ãšã·ã³ã°ã«ããŒãžã¢ã㪠(SPA) ããµããŒãããŠããããµãŒããªãã§ CDN ãéçãã¹ãã£ã³ã°ãµãŒãã¹ã«ãããã€å¯èœã§ãã
æ¢åã®ã¢ããªãã¯ã©ã€ã¢ã³ãå°çšã® SPA ã«ç§»è¡ãããå Žåã¯ä»¥äžã®ã¬ã€ãã圹ç«ã¡ãŸãã
- Next.js ã® Create React App ç§»è¡ã¬ã€ã
- React Router ã®ãã¬ãŒã ã¯ãŒã¯æ¡çšã¬ã€ã
- Expo webpack ãã Expo Router ãžã®ç§»è¡ã¬ã€ã
ã¢ããªã«ç¹ç°ãªå¶çŽãããå Žåããç¬èªã®ãã¬ãŒã ã¯ãŒã¯ãæ§ç¯ããããšã§ãããã®åé¡ã解決ãããå ŽåããŸãã¯ãŒããã React ãã©ã®ããã«åäœããããåŠã³ããå Žåã¯ãViteãParcelãRsbuild ã䜿çšã㊠React ãçšããã«ã¹ã¿ã ã»ããã¢ãããäœæã§ããŸãã
æ¢åã®ã¢ããªããã®ãããªãã«ãããŒã«ã«ç§»è¡ãããå Žåã¯ä»¥äžã®ã¬ã€ãã圹ç«ã¡ãŸãã
- Vite ã® Create React App ç§»è¡ã¬ã€ã
- Parcel ã® Create React App ç§»è¡ã¬ã€ã
- Rsbuild ã® Create React App ç§»è¡ã¬ã€ã
ViteãParcelãRsbuild ã䜿çšããŠå§ããããã«ããŒããã React ã¢ããªãæ§ç¯ããããã®æ°ããããã¥ã¡ã³ãã远å ããŸããã
ã»ãšãã©ã®ã¢ããªã¯ãã¬ãŒã ã¯ãŒã¯ã®æ©æµãåããŸããããŒããã React ã¢ããªãæ§ç¯ããæ£åœãªã±ãŒã¹ããããŸããç®å®ãšããŠãã¢ããªã«ã«ãŒãã£ã³ã°ãå¿ èŠãªãããããããã¬ãŒã ã¯ãŒã¯ã®æ©æµãåããå¯èœæ§ãé«ãã§ãããã
Svelte ã«ã¯ SveltekitãVue ã«ã¯ NuxtãSolid ã«ã¯ SolidStart ãããããã«ãReact ã¯ãã«ãŒãã£ã³ã°ãããŒã¿ãã§ãããã³ãŒãåå²ãªã©ã®æ©èœã«å®å šã«çµ±åãããã¬ãŒã ã¯ãŒã¯ã䜿çšããããšãæšå¥šããŠããŸããããã«ãããè€éãªèšå®ãèªåã§æžããŠå®è³ªçã«èªåçšã®ãã¬ãŒã ã¯ãŒã¯ãæ§ç¯ããŠããŸããããªå¿ èŠããªããªããŸãã
ããã ViteãParcelãRsbuild ãªã©ã®ãã«ãããŒã«ã䜿çšããŠãŒããã React ã¢ããªãæ§ç¯ããããšãå¯èœã§ãã
以äžã§ããã«ãããŒã«ã®å¶çŽãšãã¬ãŒã ã¯ãŒã¯ãæšå¥šããçç±ã«ã€ããŠããã«è¿°ã¹ãŠãããŸãã
Create React App ãããã«é¡ãããã«ãããŒã«ã䜿ãã°ãReact ã¢ããªã®æ§ç¯ãç°¡åã«å§ããããŸããnpx create-react-app my-app ãå®è¡ãããšãéçºçšãµãŒãããªã³ã¿ãæ¬çªçšãã«ãæ©èœãå®å
šã«èšå®ããã React ã¢ããªãæã«å
¥ããŸãã
ããšãã°ãå éšåãã®ç®¡çããŒã«ãæ§ç¯ããŠããå Žåããã£ãã以äžã®ãããªã©ã³ãã£ã³ã°ããŒãžããå§ããããšãã§ããã§ãããã
export default function App() {
return (
<div>
<h1>Welcome to the Admin Tool!</h1>
</div>
)
}ããã«ãããJSXãããã©ã«ãã®ãªã³ãã«ãŒã«ãéçºç°å¢ãšæ¬çªç°å¢ã®äž¡æ¹ã§å®è¡ããããã®ãã³ãã©ãšãã£ãæ©èœãããç¶æ ã§ãããã« React ã§ã³ãŒãã£ã³ã°ãå§ããããšãã§ããŸãããããããã®ã»ããã¢ããã«ã¯ãå®éã®æ¬çªçšã¢ããªãæ§ç¯ããããã«å¿ èŠãªããŒã«ãæ¬ ããŠããŸãã
ã»ãšãã©ã®æ¬çªçšã¢ããªã§ã¯ãã«ãŒãã£ã³ã°ãããŒã¿ãã§ãããã³ãŒãåå²ãªã©ã®åé¡ã«å¯Ÿãã解決çãå¿ èŠãªã®ã§ãã
Create React App ã«ã¯ãç¹å®ã®ã«ãŒãã£ã³ã°ãœãªã¥ãŒã·ã§ã³ã¯å«ãŸããŠããŸãããå§ããã°ããã®å ŽåãããŒãžãåãæ¿ããããã« useState ã䜿çšããããšããã®ãã²ãšã€ã®éžæè¢ã§ãããããããããããšã¢ããªå
ãªã³ã¯ã®å
±æãäžå¯èœïŒãã¹ãŠã®ãªã³ã¯ãåãããŒãžã«ç§»åããŠããŸãïŒã«ãªããŸãããæéãçµã€ã«ã€ããŠã¢ããªãçµã¿ç«ãŠãã®ãé£ãããªããŸãã
import {useState} from 'react';
import Home from './Home';
import Dashboard from './Dashboard';
export default function App() {
// â Routing in state does not create URLs
const [route, setRoute] = useState('home');
return (
<div>
{route === 'home' && <Home />}
{route === 'dashboard' && <Dashboard />}
</div>
)
}ãã®ãããCreate React App ã䜿çšããã»ãšãã©ã®ã¢ããªã¯ãReact Router ã Tanstack Router ãªã©ã®ã«ãŒãã£ã³ã°ã©ã€ãã©ãªã䜿çšããŠã«ãŒãã£ã³ã°ã远å ããŸããã«ãŒãã£ã³ã°ã©ã€ãã©ãªã䜿çšããããšã§ãã¢ããªã«è¿œå ã®ã«ãŒã (route) ã远å ã§ããã¢ããªã®çµã¿ç«ãŠæ¹ã«å¯ŸããæéãçãŸããåããŒãžãžã®ãªã³ã¯ãå ±æã§ããããã«ãªããŸããããšãã°ãReact Router ã§ã¯ä»¥äžã®ããã«ã«ãŒããå®çŸ©ã§ããŸãã
import {RouterProvider, createBrowserRouter} from 'react-router';
import Home from './Home';
import Dashboard from './Dashboard';
// â
Each route has it's own URL
const router = createBrowserRouter([
{path: '/', element: <Home />},
{path: '/dashboard', element: <Dashboard />}
]);
export default function App() {
return (
<RouterProvider value={router} />
)
}ããã«ããã/dashboard ãšãããªã³ã¯ãå
±æããã°ãã¢ããªã¯ããã·ã¥ããŒãããŒãžã«ç§»åããããã«ãªããŸããã«ãŒãã£ã³ã°ã©ã€ãã©ãªã«ã¯ãã«ãŒãã®ãã¹ããã«ãŒãã¬ãŒããã«ãŒãéç»é¢é·ç§»å¹æ (route transition) ãªã©ã®è¿œå æ©èœãããããããã¯ã«ãŒãã£ã³ã°ã©ã€ãã©ãªãªãã«ã¯å®è£
å°é£ã§ãã
ã«ãŒãã£ã³ã°ã©ã€ãã©ãªã䜿ããšã¢ããªã¯è€éã«ãªããŸããããã®ä»£ããã«ããããªãã§ã¯äœããªããããªæ©èœã䜿ããããã«ãªãããšãããã¬ãŒããªããããã®ã§ãã
Create React App ã§ã®ããã²ãšã€ã®äžè¬çãªåé¡ã¯ããŒã¿ãã§ããã§ããCreate React App ã«ã¯ãç¹å®ã®ããŒã¿ãã§ãããœãªã¥ãŒã·ã§ã³ã¯å«ãŸããŠããŸããããå
¥éããã°ããã®æ¹ã¯ãããŒã¿ãããŒãããããã«ãšãã§ã¯ãå
ã§ fetch ãäœ¿ãæ¹æ³ãéžã³ãã¡ã§ãã
ãããããããè¡ããšãããŒã¿ãã³ã³ããŒãã³ãã®ã¬ã³ããŒåŸã«ãã§ãããããããããããã¯ãŒã¯ãŠã©ãŒã¿ãŒãã©ãŒã«ãçºçããŸãããããã¯ãŒã¯ãŠã©ãŒã¿ãŒãã©ãŒã«ã¯ãã³ãŒããšããŒã¿ã䞊è¡ã§ããŠã³ããŒãããã®ã§ã¯ãªããã¢ããªã®ã¬ã³ããŒåŸã«ããŒã¿ããã§ããããããšã§çºçããŸãã
export default function Dashboard() {
const [data, setData] = useState(null);
// â Fetching data in a component causes network waterfalls
useEffect(() => {
fetch('/api/data')
.then(response => response.json())
.then(data => setData(data));
}, []);
return (
<div>
{data.map(item => <div key={item.id}>{item.name}</div>)}
</div>
)
}ãšãã§ã¯ãå ã§ãã§ãããããšããããšã¯ããŠãŒã¶ãã³ã³ãã³ããèŠããŸã§ã®åŸ ã¡æéãé·ããªããšããããšã§ããããŒã¿ã¯ãã£ãšæ©ãååŸã§ããŠãããããããªãã®ã§ããããã解決ããããã«ãTanStack QueryãSWRãApolloãRelay ãªã©ã®ããŒã¿ãã§ããã©ã€ãã©ãªã䜿çšãããšãã³ã³ããŒãã³ãã®ã¬ã³ããŒããåã«ããŒã¿ãããªãã§ããã§ãããªãã·ã§ã³ã䜿çšå¯èœã§ãã
ãããã®ã©ã€ãã©ãªã¯ãã«ãŒãã®ã¬ãã«ã§äŸåããŒã¿ãæå®ããããã®ããã«ãŒãã£ã³ã°ããŒãããã¿ãŒã³ãšçµ±åããããšã§æé©ã«æ©èœããŸããããã«ããã«ãŒã¿ãããŒã¿ãã§ãããæé©åå¯èœã§ãã
export async function loader() {
const response = await fetch(`/api/data`);
const data = await response.json();
return data;
}
// â
Fetching data in parallel while the code is downloading
export default function Dashboard({loaderData}) {
return (
<div>
{loaderData.map(item => <div key={item.id}>{item.name}</div>)}
</div>
)
}ååããŒãæã«ãã«ãŒã¿ã¯ã«ãŒããã¬ã³ããŒãããçŽåã«ããŒã¿ããã§ããã§ããŸãããŠãŒã¶ãã¢ããªå ãç§»åããéãã«ãŒã¿ã¯ããŒã¿ãšã«ãŒãã®ãã§ããã䞊ååããŠåæã«è¡ããŸããããã«ãããç»é¢äžã®ã³ã³ãã³ããèŠããŸã§ã®æéãççž®ããããŠãŒã¶ãšã¯ã¹ããªãšã³ã¹ãåäžããŸãã
ãã ãããã®ããã«ã¯ã¢ããªå ã®ããŒããæ£ããèšå®ããå¿ èŠããããããã©ãŒãã³ã¹ã®ããã«è€éããåãå ¥ããŠããããšã«ãªã£ãŠããŸããŸãã
Create React App ã«ãããæ¬¡ã®äžè¬çãªåé¡ã¯ã³ãŒãåå²ã§ããCreate React App ã«ã¯ãç¹å®ã®ã³ãŒãåå²ãœãªã¥ãŒã·ã§ã³ã¯å«ãŸããŠããŸãããå§ããã°ããã®å Žåãã³ãŒãåå²ã«ã€ããŠèããããšã¯å šããªããããããŸããã
ãã®å Žåãã¢ããªã¯åäžã®ãã³ãã«ãšããŠãã¹ããããŸãã
- bundle.js 75kbããããçæ³çãªããã©ãŒãã³ã¹ã®ããã«ã¯ãã³ãŒããå¥ã ã®ãã³ãã«ã«ãåå²ããããŠãŒã¶ãå¿ èŠãšãããã®ã ããããŠã³ããŒãããããã«ããå¿ èŠããããŸããããã«ããããŠãŒã¶ã¯çŸåšããããŒãžã衚瀺ããããã«å¿ èŠãªã³ãŒãã ããããŠã³ããŒãããããã«ãªããã¢ããªãããŒããããŸã§ã®åŸ ã¡æéãççž®ãããŸãã
- core.js 25kb
- home.js 25kb
- dashboard.js 25kbã³ãŒãåå²ãè¡ãæ¹æ³ã®ã²ãšã€ã¯ãReact.lazy ã䜿çšããããšã§ãããããããã®æ¹æ³ã§ã¯ã¬ã³ããŒãããæ®µéã«ãªã£ãŠåããŠã³ãŒããååŸãããããããããã¯ãŒã¯ãŠã©ãŒã¿ãŒãã©ãŒã«ãçºçããå¯èœæ§ããããŸããããè¯ã解決çã¯ãã«ãŒã¿ã«ãããã³ãŒãã®ããŠã³ããŒãäžã«é¢é£ã³ãŒã矀ã䞊è¡çã«ãã§ããããããã®æ©èœã䜿çšããããšã§ããäŸãã°ãReact Router 㯠lazy ãªãã·ã§ã³ãæäŸããŠãããããã䜿ã£ãŠã«ãŒããã³ãŒãåå²å¯Ÿè±¡ãšããŠæå®ããèªã¿èŸŒã¿ã¿ã€ãã³ã°ãæé©åã§ããŸãã
import Home from './Home';
import Dashboard from './Dashboard';
// â
Routes are downloaded before rendering
const router = createBrowserRouter([
{path: '/', lazy: () => import('./Home')},
{path: '/dashboard', lazy: () => import('Dashboard')}
]);ã³ãŒãåå²ãæ£ããè¡ãããšã¯é£ããããŠãŒã¶ãå¿ èŠä»¥äžã®ã³ãŒããããŠã³ããŒãããŠããŸããšãããã¹ãããçºçããŸããã³ãŒãåå²ãæå€§é掻èºããã®ã¯ãã«ãŒã¿ãããŒã¿ããŒãåŠçãšçµåããããšã§ããã£ãã·ã¥ãæå€§é掻çšãããã§ããã䞊è¡ããŠè¡ãã"import on interaction" ãã¿ãŒã³ããµããŒãããå Žåã§ãã
以äžã¯ãCreate React App ã«ãããå¶çŽã®ã»ãã®äžéšã«éããŸããã
ã«ãŒãã£ã³ã°ãããŒã¿ãã§ãããã³ãŒãåå²ãçµã¿èŸŒãã åŸããä»åºŠã¯éä¿¡äžç¶æ ãããã²ãŒã·ã§ã³ã®äžæããŠãŒã¶ãžã®ãšã©ãŒã¡ãã»ãŒãžãããŒã¿ã®åæ€èšŒãèæ ®ããå¿ èŠããããŸããéçºè ã解決ããªããã°ãªããªãåé¡é åã¯å€§éã«ååšããã®ã§ãã
- ã¢ã¯ã»ã·ããªãã£
- ã¢ã»ããã®ããŒã
- èªèšŒ
- ãã£ãã·ã³ã°
- ãšã©ãŒåŠç
- ããŒã¿ã®æžãæã
- ããã²ãŒã·ã§ã³
- æ¥œèŠ³çæŽæ°
- ããã°ã¬ãã·ããšã³ãã³ã¹ã¡ã³ã
- ãµãŒããµã€ãã¬ã³ããŒ
- éçãµã€ãçæ
- ã¹ããªãŒãã³ã°
ããããã¹ãŠãæé©ãªããŒãã·ãŒã±ã³ã¹ãäœæããããã«é£æºããŸãã
Create React App ã§ãããã®åé¡ãåå¥ã«è§£æ±ºããããšã¯å°é£ã§ããååé¡ã¯ä»ã®åé¡ãšçžäºã«é¢é£ããŠãããéçºè ãæ £ããŠããªãåé¡é åã§ã®æ·±ãå°éç¥èãå¿ èŠãšããããšããããŸãããããã®åé¡ã解決ããããšãããšãéçºè 㯠Create React App ã®äžã«ç¬èªã®ç¹æ³šãœãªã¥ãŒã·ã§ã³ãæ§ç¯ããŠãã矜ç®ã«ãªããŸãããæ¬æ¥ Create React App ã¯ããããããšãããªãã§æžãããã®ãã®ã®ã¯ãã§ããã
Create React AppãViteãParcel ãªã©ã®ãã«ãããŒã«ã§ãããã®èŠçŽ ããã¹ãŠèªåã§è§£æ±ºããããšãå¯èœã§ãããããŸãããããšã¯å°é£ã§ããCreate React App èªäœãããã€ãã®ãã«ãããŒã«ãçµ±åãããšãã®ããã«ããããã®æ©èœããã¹ãŠçµ±åããŠãŠãŒã¶ã«æé«ã®ãšã¯ã¹ããªãšã³ã¹ãæäŸããããã®ããŒã«ãå¿ èŠã§ãã
ãã«ãããŒã«ãã¬ã³ããŒãã«ãŒãã£ã³ã°ãããŒã¿ãã§ãããã³ãŒãåå²ã®ãã¹ãŠãçµ±åããããšããããŒã«ã®ã«ããŽãªã¯ããã¬ãŒã ã¯ãŒã¯ããšããŠç¥ãããŠããŸããReact èªäœããã¬ãŒã ã¯ãŒã¯ãšåŒã¶ããšã奜ãå Žåã¯ããã¡ã¿ãã¬ãŒã ã¯ãŒã¯ããšåŒã¶ããšãã§ããã§ãããã
ãã«ãããŒã«ã«ãå€å°ã®äœ¿ãæ¹ã«é¢ããèŠçŽãããã®ãšåæ§ããã¬ãŒã ã¯ãŒã¯ã«ãããè¯ããŠãŒã¶äœéšãæäŸããããã«ã©ã®ããã«ã¢ããªãæ§é åããã®ãã«ã€ããŠãèŠçŽãååšããŸããããããæã ã Next.jsãReact RouterãExpo ãªã©ã®ãã¬ãŒã ã¯ãŒã¯ãæ°ãããããžã§ã¯ãã«æšå¥šãå§ããçç±ã§ãã
ãã¬ãŒã ã¯ãŒã¯ã¯ Create React App ãšåæ§ã®å§ãããããæäŸãã€ã€ãå®éã®ãããã¯ã·ã§ã³ã¢ããªã§éçºè ããããã«ãã解決ããå¿ èŠã®ããåé¡ã«å¯Ÿãããœãªã¥ãŒã·ã§ã³ãæäŸããã®ã§ãã
ç§ãã¡ãæšå¥šãããã¬ãŒã ã¯ãŒã¯ã¯ãã¹ãŠãã¯ã©ã€ã¢ã³ããµã€ãã¬ã³ã㌠(CSR) ã«ããã¢ããªãäœæããããã®ãªãã·ã§ã³ãæäŸããŠããŸãã
ããããŒãžã«ãšã£ãŠ CSR ãæ£ããéžæãšãªãããšã¯ãããŸãããå€ãã®å Žåã¯ããã§ã¯ãããŸãããã¢ããªã®ã»ãšãã©ãã¯ã©ã€ã¢ã³ããµã€ããšããå Žåã§ããéçãµã€ãçæ (SSG) ã ãµãŒããµã€ãã¬ã³ããªã³ã° (SSR) ãªã©ã®ãµãŒãã¬ã³ããŒæ©èœã®æ©æµãåããããšãã§ããåå¥ããŒãžã¯ãã°ãã°ååšããŸããããšãã°å©çšèŠçŽããŒãžãããã¥ã¡ã³ããªã©ã§ãã
ãµãŒãã¬ã³ããŒã¯ã¯ã©ã€ã¢ã³ãã«éä¿¡ããã JavaScript ãå šäœçã«åæžããå®å šãª HTML ããã¥ã¡ã³ããéä¿¡ããããšã§ãFirst Contentful Paint (FCP) ãé«éåããTotal Blocking Time (TBD) ãåæžãããŸãããã«ãã Interaction to Next Paint (INP) ãäœäžãããããšãã§ããŸããChrome ããŒã ãéçºè ã«åããŠãããã©ãŒãã³ã¹æå€§åã®ããã«ãå®å šã«ã¯ã©ã€ã¢ã³ããµã€ãã«å¯ããæŠç¥ã§ã¯ãªãéçãªãããµãŒããµã€ãã¬ã³ããªã³ã°ãæ€èšããããä¿ããŠããã®ã«ã¯ããã®ãããªçç±ãããã®ã§ãã
ãµãŒãã䜿çšããããšã«ã¯ãã¬ãŒããªããããããã¹ãŠã®ããŒãžã«ãšã£ãŠåžžã«æè¯ã®éžæè¢ãšããããã§ã¯ãããŸããããµãŒãã§ããŒãžãçæããããšã«ãã远å ã®ã³ã¹ããšçææéãããããããTime to First Byte (TTFB) ãå¢å ãããå¯èœæ§ããããŸããæé«ã®ããã©ãŒãã³ã¹ã®ã¢ããªã§ã¯ãããããã®æŠç¥ã®ãã¬ãŒããªãã«åºã¥ããŠãããŒãžããšã«é©åãªã¬ã³ããŒæŠç¥ãéžæã§ããŸãã
ãã¬ãŒã ã¯ãŒã¯ã¯ãå¿ èŠã«å¿ããŠå¥œããªããŒãžã§ãµãŒãã䜿çšãããªãã·ã§ã³ãæäŸããŸããããµãŒãã®äœ¿çšã匷å¶ããããã§ã¯ãããŸãããããã«ãããã¢ããªå ã®åããŒãžããšã«ãé©ããã¬ã³ããŒæŠç¥ãéžæã§ããããã«ãªã£ãŠããŸãã
ç§ãã¡ãæšå¥šãããã¬ãŒã ã¯ãŒã¯ã¯ãReact Server Components ã®ãµããŒããå«ãã§ããŸãã
ãµãŒãã³ã³ããŒãã³ãã§ã¯ãã«ãŒãã£ã³ã°ãšããŒã¿ãã§ããããµãŒãåŽã«ç§»åããã¯ã©ã€ã¢ã³ãã³ã³ããŒãã³ãã®ã³ãŒãåå²ãïŒã¬ã³ããŒããããŒãžåäœã®ã¿ãªããïŒã¬ã³ããŒããããŒã¿ã®çš®é¡ã«åºã¥ããŠè¡ãããšã§ããããã®åé¡ã解決ããŸããéä¿¡ããã JavaScript ã®éãæžããããšã§ãæé©ãªããŒãã£ã³ã°ã·ãŒã±ã³ã¹ãå®çŸããŸãã
ãµãŒãã³ã³ããŒãã³ãã¯ãµãŒããå¿ èŠãšããŸããããã«ãæã« CI ãµãŒãã§å®è¡ããŠéçãµã€ãçæ (SSG) ã¢ããªãäœæããããã«ã䜿ããŸãããã©ã³ã¿ã€ã æã«ãŠã§ããµãŒãã§å®è¡ããŠãµãŒããµã€ãã¬ã³ã㌠(SSR) ã¢ããªãäœæããããã«ã䜿ããŸãã
詳现ã«ã€ããŠã¯ããã³ãã«ãµã€ãºãŒãã® React ãµãŒãã³ã³ããŒãã³ãã®çŽ¹ä» ãš ããã¥ã¡ã³ã ãåç §ããŠãã ããã
ãµãŒãã¬ã³ããŒã¯ SEO ã®ããã ãã«ããããšããã®ã¯ãããã誀解ã§ãã
ãµãŒãã¬ã³ããŒã¯ SEO ãæ¹åããŸããããŠãŒã¶ãç»é¢äžã®ã³ã³ãã³ããèŠãããããã«ãªããŸã§ã«ããŠã³ããŒãã»ããŒã¹ããå¿ èŠã®ãã JavaScript ã®éãæžããããšã§ãããã©ãŒãã³ã¹ãåäžããããã®ã§ãã
Chrome ããŒã ãéçºè ã«åããŠãããã©ãŒãã³ã¹æå€§åã®ããã«ãå®å šãªã¯ã©ã€ã¢ã³ããµã€ãã«å¯ããæŠç¥ã§ã¯ãªããéçãªãããµãŒããµã€ãã¬ã³ããªã³ã°ãæ€èšããããä¿ããŠããã®ã«ã¯ããã®ãããªçç±ãããã®ã§ãã
Create React App ãäœæãã Dan Abramovãããã³ Create React App ãé·å¹Žã«ãããã¡ã³ããã³ã¹ããŠãã Joe HaddadãIan SchmitzãBrody McKeeããããŠä»ã®å€ãã®æ¹ã ã«æè¬ããŸãããã®æçš¿ãã¬ãã¥ãŒãããã£ãŒãããã¯ãæäŸããŠããã ãã Brooks LybrandãDan AbramovãDevon GovettãEli WhiteãJack HerringtonãJoe SavonaãLauren TanãLee RobinsonãMark EriksonãRyan FlorenceãSophie AlpertãTanner Linsleyãããã³ Theo Browne ã«æè¬ããŸãã