Reactã¢ããªã±ãŒã·ã§ã³ãé«éåããŸãããïŒãã®ã¬ã€ãã§ã¯ãã°ããŒãã«ãªãŠãŒã¶ãŒã察象ãšãã髿§èœã§ã¹ã±ãŒã©ãã«ãªWebã¢ããªãæ§ç¯ããããã®ãããã¡ã€ãªã³ã°ãæé©åããã¹ããã©ã¯ãã£ã¹ãæ¢æ±ããŸããããã©ãŒãã³ã¹ã®ããã«ããã¯ã广çã«ç¹å®ãä¿®æ£ããæ¹æ³ãåŠã³ãŸãããã
Reactã®ããã©ãŒãã³ã¹ïŒãããã¡ã€ãªã³ã°ãšæé©åãã¯ããã¯
仿¥ã®ããŒã¹ã®éãããžã¿ã«äžçã§ã¯ãã·ãŒã ã¬ã¹ã§å¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããããšãæãéèŠã§ããããã©ãŒãã³ã¹ã¯ãã¯ãåãªãæè¡çãªèæ ®äºé ã§ã¯ãªãããŠãŒã¶ãŒãšã³ã²ãŒãžã¡ã³ããã³ã³ããŒãžã§ã³çããããŠããžãã¹å šäœã®æåã«ãããéèŠãªèŠçŽ ã§ããReactã¯ããã®ã³ã³ããŒãã³ãããŒã¹ã®ã¢ãŒããã¯ãã£ã«ãããè€éãªãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãæ§ç¯ããããã®åŒ·åãªãã¬ãŒã ã¯ãŒã¯ãæäŸããŸããããããããã©ãŒãã³ã¹æé©åã«æ³šæãæããªããã°ãReactã¢ããªã±ãŒã·ã§ã³ã¯ã¬ã³ããªã³ã°ã®é å»¶ãã¢ãã¡ãŒã·ã§ã³ã®ã©ã°ããããŠå šäœçã«éãæè§Šã«æ©ãŸãããå¯èœæ§ããããŸãããã®å æ¬çãªã¬ã€ãã§ã¯ãReactã®ããã©ãŒãã³ã¹ã®éèŠãªåŽé¢ãæãäžããäžçäžã®éçºè ã髿§èœã§ã¹ã±ãŒã©ãã«ãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããããã«ããŸãã
Reactããã©ãŒãã³ã¹ã®éèŠæ§ãçè§£ãã
å ·äœçãªãã¯ããã¯ã«é£ã³èŸŒãåã«ããªãReactã®ããã©ãŒãã³ã¹ãéèŠãªã®ããçè§£ããããšãäžå¯æ¬ ã§ããé ãã¢ããªã±ãŒã·ã§ã³ã¯æ¬¡ã®ãããªäºæ ã«ã€ãªããå¯èœæ§ããããŸãïŒ
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®äœäžïŒ ãŠãŒã¶ãŒã¯èªã¿èŸŒã¿æéãé ããå¿çããªãã€ã³ã¿ãŒãã§ãŒã¹ã«äžæºãæããŸããããã¯ãŠãŒã¶ãŒæºè¶³åºŠãšãã€ã€ã«ãã£ã«æªåœ±é¿ãåãŒããŸãã
- ã³ã³ããŒãžã§ã³çã®äœäžïŒ é ããŠã§ããµã€ãã¯çŽåž°çã®äžæãšã³ã³ããŒãžã§ã³ã®æžå°ã«ã€ãªãããæçµçã«åçã«åœ±é¿ãäžããŸãã
- SEOãžã®æªåœ±é¿ïŒ Googleãªã©ã®æ€çŽ¢ãšã³ãžã³ã¯ãèªã¿èŸŒã¿æéã®éããŠã§ããµã€ããåªå ããŸããããã©ãŒãã³ã¹ãäœããšæ€çŽ¢é äœãäžããå¯èœæ§ããããŸãã
- éçºã³ã¹ãã®å¢å ïŒ éçºãµã€ã¯ã«ã®åŸåã§ããã©ãŒãã³ã¹ã®åé¡ã«å¯ŸåŠããããšã¯ãæåãããã¹ããã©ã¯ãã£ã¹ãå®è£ ãããããå€§å¹ ã«ã³ã¹ãããããå¯èœæ§ããããŸãã
- ã¹ã±ãŒã©ããªãã£ã®èª²é¡ïŒ æé©åãäžååãªã¢ããªã±ãŒã·ã§ã³ã¯ãå¢å ãããã©ãã£ãã¯ãåŠçããã®ã«èŠåŽãããµãŒããŒã®éè² è·ãããŠã³ã¿ã€ã ã«ã€ãªããå¯èœæ§ããããŸãã
Reactã®å®£èšçãªæ§è³ªã«ãããéçºè ã¯æãŸãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãèšè¿°ã§ããReactã¯ããã«åãããŠDOMïŒããã¥ã¡ã³ããªããžã§ã¯ãã¢ãã«ïŒãå¹ççã«æŽæ°ããŸãããããã倿°ã®ã³ã³ããŒãã³ããšé »ç¹ãªæŽæ°ã䌎ãè€éãªã¢ããªã±ãŒã·ã§ã³ã¯ãããã©ãŒãã³ã¹ã®ããã«ããã¯ãçã¿åºãå¯èœæ§ããããŸããReactã¢ããªã±ãŒã·ã§ã³ã®æé©åã«ã¯ãéçºã©ã€ããµã€ã¯ã«ã®æ©ã段éã§ããã©ãŒãã³ã¹ã®åé¡ãç¹å®ãã察åŠããããšã«çŠç¹ãåœãŠãç©æ¥µçãªã¢ãããŒããå¿ èŠã§ãã
Reactã¢ããªã±ãŒã·ã§ã³ã®ãããã¡ã€ãªã³ã°
Reactã®ããã©ãŒãã³ã¹ãæé©åããããã®æåã®ã¹ãããã¯ãããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããããšã§ãããããã¡ã€ãªã³ã°ãšã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåæããæãå€ãã®ãªãœãŒã¹ãæ¶è²»ããŠããé åãç¹å®ããããšã§ããReactã¯ãReact Developer Toolsã`React.Profiler` APIãªã©ããããã¡ã€ãªã³ã°ã®ããã®ããã€ãã®ããŒã«ãæäŸããŠããŸãããããã®ããŒã«ã¯ãã³ã³ããŒãã³ãã®ã¬ã³ããªã³ã°æéãåã¬ã³ããªã³ã°ãããã³ã¢ããªã±ãŒã·ã§ã³å šäœã®ããã©ãŒãã³ã¹ã«é¢ãã貎éãªæŽå¯ãæäŸããŸãã
React Developer Toolsã䜿çšãããããã¡ã€ãªã³ã°
React Developer Toolsã¯ãChromeãFirefoxããã®ä»ã®äž»èŠãªãã©ãŠã¶ã§å©çšå¯èœãªãã©ãŠã¶æ¡åŒµæ©èœã§ããããã©ãŒãã³ã¹ããŒã¿ãèšé²ã»åæã§ããå°çšã®'Profiler'ã¿ããæäŸããŸããäœ¿çšæ¹æ³ã¯æ¬¡ã®ãšããã§ãïŒ
- React Developer Toolsãã€ã³ã¹ããŒã«ããïŒ åã¢ããªã¹ãã¢ããã䜿ãã®ãã©ãŠã¶çšã®æ¡åŒµæ©èœãã€ã³ã¹ããŒã«ããŸãã
- éçºè ããŒã«ãéãïŒ Reactã¢ããªã±ãŒã·ã§ã³ã§å³ã¯ãªãã¯ãããæ€èšŒããéžæããããF12ããŒãæŒããŸãã
- 'Profiler'ã¿ãã«ç§»åããïŒ éçºè ããŒã«ã®'Profiler'ã¿ããã¯ãªãã¯ããŸãã
- èšé²ãéå§ããïŒ ããããã¡ã€ãªã³ã°ãéå§ããã¿ã³ãã¯ãªãã¯ããŠèšé²ãéå§ããŸãããŠãŒã¶ãŒã®è¡åãã·ãã¥ã¬ãŒãããããã«ã¢ããªã±ãŒã·ã§ã³ãæäœããŸãã
- çµæãåæããïŒ Profilerã«ã¯ãã¬ãŒã ãã£ãŒãã衚瀺ãããåã³ã³ããŒãã³ãã®ã¬ã³ããªã³ã°æéãèŠèŠçã«è¡šããŸãããŸãããinteractionsãã¿ããåæããŠãäœãåã¬ã³ããªã³ã°ãéå§ãããã確èªããããšãã§ããŸããã¬ã³ããªã³ã°ã«æãæéãããã£ãŠããã³ã³ããŒãã³ãã調æ»ããæœåšçãªæé©åã®æ©äŒãç¹å®ããŸãã
ãã¬ãŒã ãã£ãŒãã¯ãããŸããŸãªã³ã³ããŒãã³ãã§è²»ããããæéãç¹å®ããã®ã«åœ¹ç«ã¡ãŸããå¹ ã®åºãããŒã¯ãã¬ã³ããªã³ã°ãé ãããšã瀺ããŸããProfilerã¯ãŸããã³ã³ããŒãã³ãã®åã¬ã³ããªã³ã°ã®çç±ã«é¢ããæ å ±ãæäŸããããã©ãŒãã³ã¹åé¡ã®åå ãçè§£ããã®ã«åœ¹ç«ã¡ãŸããæ±äº¬ããã³ãã³ããµã³ããŠããªã©ãå Žæã«é¢ä¿ãªããäžçäžã®éçºè ã¯ãã®ããŒã«ã掻çšããŠãReactã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã«é¢ããæžå¿µã蚺æãã解決ããããšãã§ããŸãã
`React.Profiler` APIã®æŽ»çš
`React.Profiler` APIã¯ãReactã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã枬å®ã§ããçµã¿èŸŒã¿ã®Reactã³ã³ããŒãã³ãã§ããç¹å®ã®ã³ã³ããŒãã³ãã`Profiler`ã§ã©ããããŠããã©ãŒãã³ã¹ããŒã¿ãåéããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã®å€åã«å¯Ÿå¿ããããšãã§ããŸããããã¯ãçµæçãªããã©ãŒãã³ã¹ã®ç£èŠããããã©ãŒãã³ã¹ãäœäžãããšãã«ã¢ã©ãŒããèšå®ããã®ã«ç¹ã«åœ¹ç«ã¡ãŸãããã©ãŠã¶ããŒã¹ã®React Developer Toolsã䜿çšããããããããããã°ã©ã çãªã¢ãããŒãã§ãã
以äžã«åºæ¬çãªäŸã瀺ããŸãïŒ
```javascript import React, { Profiler } from 'react'; function onRenderCallback(id, phase, actualDuration, baseDuration, startTime, commitTime, interactions) { // ããã©ãŒãã³ã¹ããŒã¿ãã³ã³ãœãŒã«ã«èšé²ããããç£èŠãµãŒãã¹ã«éä¿¡ãããããŸãã console.log(`Component ${id} rendered in ${actualDuration}ms in ${phase}`); } function MyComponent() { return (ãã®äŸã§ã¯ã`onRenderCallback`颿°ã¯`Profiler`ã§ã©ãããããã³ã³ããŒãã³ãã®åã¬ã³ããªã³ã°åŸã«å®è¡ãããŸãããã®é¢æ°ã¯ãã³ã³ããŒãã³ãã®IDãã¬ã³ããŒãã§ãŒãºïŒããŠã³ããæŽæ°ããŸãã¯ã¢ã³ããŠã³ãïŒãå®éã®ã¬ã³ããªã³ã°æéãªã©ãããŸããŸãªããã©ãŒãã³ã¹ã¡ããªã¯ã¹ãåãåããŸããããã«ãããã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®éšåã®ããã©ãŒãã³ã¹ãç£èŠããã³åæããããã©ãŒãã³ã¹ã®åé¡ã«ç©æ¥µçã«å¯ŸåŠã§ããŸãã
Reactã¢ããªã±ãŒã·ã§ã³ã®æé©åãã¯ããã¯
ããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããããããŸããŸãªæé©åãã¯ããã¯ãé©çšããŠReactã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
1. `React.memo`ãš`useMemo`ã«ããã¡ã¢å
ã¡ã¢åã¯ãäžèŠãªåã¬ã³ããªã³ã°ãé²ãããã®åŒ·åãªãã¯ããã¯ã§ããé«ã³ã¹ããªèšç®ã®çµæããã£ãã·ã¥ããåãå ¥åãæäŸããããšãã«ãã®çµæãåå©çšããããšãå«ã¿ãŸããReactã§ã¯ã`React.memo`ãš`useMemo`ãã¡ã¢åæ©èœãæäŸããŸãã
- `React.memo`: ããã¯é¢æ°ã³ã³ããŒãã³ããã¡ã¢åããé«éã³ã³ããŒãã³ãïŒHOCïŒã§ãã`React.memo`ã§ã©ãããããã³ã³ããŒãã³ãã«æž¡ãããpropsãååã®ã¬ã³ããªã³ã°ãšåãã§ããå Žåãã³ã³ããŒãã³ãã¯ã¬ã³ããªã³ã°ãã¹ããããããã£ãã·ã¥ãããçµæãåå©çšããŸããããã¯ãéçãŸãã¯é »ç¹ã«å€æŽãããªãpropsãåãåãã³ã³ããŒãã³ãã«ç¹ã«å¹æçã§ãããã®äŸãèããŠã¿ãŸããããããã¯`React.memo`ã§æé©åã§ããŸãïŒ
```javascript
function MyComponent(props) {
// ããã§é«ã³ã¹ããªèšç®
return {props.data.name}; } ``` ãããæé©åããã«ã¯ã次ã®ããã«äœ¿çšããŸãïŒ ```javascript import React from 'react'; const MyComponent = React.memo((props) => { // ããã§é«ã³ã¹ããªèšç® return{props.data.name}; }); ```
- `useMemo`: ãã®ããã¯ã¯èšç®çµæãã¡ã¢åããŸããè€éãªèšç®ããªããžã§ã¯ããã¡ã¢åããã®ã«åœ¹ç«ã¡ãŸãã颿°ãšäŸåé
åãåŒæ°ãšããŠåããŸãã颿°ã¯ãé
åå
ã®äŸåé¢ä¿ã®ããããã倿Žãããå Žåã«ã®ã¿å®è¡ãããŸããããã¯é«ã³ã¹ããªèšç®ãã¡ã¢åããã®ã«éåžžã«åœ¹ç«ã¡ãŸããäŸãã°ãèšç®å€ãã¡ã¢åããå ŽåïŒ
```javascript
import React, { useMemo } from 'react';
function MyComponent({ items }) {
const total = useMemo(() => {
return items.reduce((acc, item) => acc + item.price, 0);
}, [items]); // 'items'ã倿Žãããå Žåã«ã®ã¿'total'ãåèšç®ããŸãã
return Total: {total}; } ```
`React.memo`ãš`useMemo`ã广çã«æ¡çšããããšã§ãäžèŠãªåã¬ã³ããªã³ã°ã®æ°ãå€§å¹ ã«åæžããã¢ããªã±ãŒã·ã§ã³å šäœã®ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãããããã®ãã¯ããã¯ã¯ã°ããŒãã«ã«é©çšå¯èœã§ããããŠãŒã¶ãŒã®å Žæãããã€ã¹ã«é¢ä¿ãªãããã©ãŒãã³ã¹ãåäžãããŸãã
2. äžèŠãªåã¬ã³ããªã³ã°ã®é²æ¢
Reactã¯ãpropsãŸãã¯stateã倿Žããããšã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ããŸããããã¯UIãæŽæ°ããããã®äžå¿çãªã¡ã«ããºã ã§ãããäžèŠãªåã¬ã³ããªã³ã°ã¯ããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ãäžããå¯èœæ§ããããŸããããããé²ãã®ã«åœ¹ç«ã€ããã€ãã®æŠç¥ããããŸãïŒ
- `useCallback`: ãã®ããã¯ã¯ã³ãŒã«ããã¯é¢æ°ãã¡ã¢åããŸããåã³ã³ããŒãã³ãã«ã³ãŒã«ããã¯ãpropsãšããŠæž¡ãéã«ãã³ãŒã«ããã¯é¢æ°èªäœã倿Žãããªãéãããããã®åã³ã³ããŒãã³ãã®åã¬ã³ããªã³ã°ãé²ãã®ã«ç¹ã«åœ¹ç«ã¡ãŸããããã¯`useMemo`ã«äŒŒãŠããŸããã颿°å°çšã§ãã
```javascript
import React, { useCallback } from 'react';
function ParentComponent() {
const handleClick = useCallback(() => {
console.log('Button clicked');
}, []); // äŸåé¢ä¿ã倿Žãããå Žåã«ã®ã¿é¢æ°ã倿ŽãããŸãïŒãã®å Žåã¯ãªãïŒã
return
; } ``` - ã€ãã¥ãŒã¿ãã«ãªããŒã¿æ§é : stateå ã®ãªããžã§ã¯ããé åãæ±ãéãããããçŽæ¥å€æŽããªãã§ãã ããã代ããã«ãæŽæ°ãããå€ãæã€æ°ãããªããžã§ã¯ããé åãäœæããŸããããã«ãããReactã¯å€æŽãå¹ççã«æ€åºããå¿ èŠãªå Žåã«ã®ã¿ã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ã§ããŸããã¹ãã¬ããæŒç®åïŒ`...`ïŒãä»ã®ã¡ãœããã䜿çšããŠã€ãã¥ãŒã¿ãã«ãªæŽæ°ãäœæããŸããäŸãã°ãé åãçŽæ¥å€æŽãã代ããã«ãæ°ããé åã䜿çšããŸãïŒ ```javascript // æªãäŸ - å ã®é åãå€æŽ const items = [1, 2, 3]; items.push(4); // ããã¯å ã®'items'é åã倿ŽããŸãã // è¯ãäŸ - æ°ããé åãäœæ const items = [1, 2, 3]; const newItems = [...items, 4]; // å ã®é åã倿Žããã«æ°ããé åãäœæããŸãã ```
- ã€ãã³ããã³ãã©ã®æé©å: ã¬ã³ããªã³ã°ã¡ãœããå ã§æ°ãã颿°ã€ã³ã¹ã¿ã³ã¹ãäœæããããšã¯é¿ããŠãã ãããããã¯æ¯ååã¬ã³ããªã³ã°ãåŒãèµ·ãããŸãã`useCallback`ã䜿çšããããã³ã³ããŒãã³ãã®å€éšã§ã€ãã³ããã³ãã©ãå®çŸ©ããŸãã ```javascript // æªãäŸ - ã¬ã³ããªã³ã°ããšã«æ°ãã颿°ã€ã³ã¹ã¿ã³ã¹ãäœæããã // è¯ãäŸ - useCallbackãäœ¿çš const handleClick = useCallback(() => { console.log('Clicked') }, []); ```
- ã³ã³ããŒãã³ãã®åæãšPropsã®ãã±ããªã¬ãŒïŒ 芪ã³ã³ããŒãã³ãããå®éã«ã¯ãã®propsãå¿ èŠãšããªãå€ãã®åã³ã³ããŒãã³ãã¬ãã«ã«propsãæž¡ããéå°ãªpropsã®ãã±ããªã¬ãŒãé¿ããŠãã ãããããã¯ã倿Žãã³ã³ããŒãã³ãããªãŒãäŒæããéã«äžèŠãªåã¬ã³ããªã³ã°ãåŒãèµ·ããå¯èœæ§ããããŸããå ±æç¶æ ã管çããããã«ã¯ãContextãReduxã®äœ¿çšãæ€èšããŠãã ããã
ãããã®æŠç¥ã¯ãå°èŠæš¡ãªå人ãããžã§ã¯ããããã°ããŒãã«ããŒã ãå©çšããå€§èŠæš¡ãªãšã³ã¿ãŒãã©ã€ãºã¢ããªã±ãŒã·ã§ã³ãŸã§ãããããèŠæš¡ã®ã¢ããªã±ãŒã·ã§ã³ãæé©åããããã«äžå¯æ¬ ã§ãã
3. ã³ãŒãåå²
ã³ãŒãåå²ã¯ãã¢ããªã±ãŒã·ã§ã³ã®JavaScriptãã³ãã«ãããªã³ããã³ãã§èªã¿èŸŒãããšãã§ããããå°ããªãã£ã³ã¯ã«åå²ããããšã§ããããã«ãããåæèªã¿èŸŒã¿æéãççž®ãããã¢ããªã±ãŒã·ã§ã³ã®äœæããã©ãŒãã³ã¹ãåäžããŸããReactã¯ãåçãª`import()`ã¹ããŒãã¡ã³ããš`React.lazy`ããã³`React.Suspense` APIã䜿çšããŠãæšæºã§ã³ãŒãåå²ããµããŒãããŠããŸããããã«ãããç¹ã«äžçäžã®ããŸããŸãªå°åã§èŠãããäœéãªã€ã³ã¿ãŒãããæ¥ç¶ã®ãŠãŒã¶ãŒã«ãšã£ãŠéèŠãªãåæèªã¿èŸŒã¿æéãççž®ã§ããŸãã
以äžã«äŸã瀺ããŸãïŒ
```javascript import React, { lazy, Suspense } from 'react'; const MyComponent = lazy(() => import('./MyComponent')); function App() { return (ãã®äŸã§ã¯ã`MyComponent`ã¯ããŠãŒã¶ãŒãããã䜿çšããã¢ããªã±ãŒã·ã§ã³ã®ã»ã¯ã·ã§ã³ã«ç§»åãããšãã«ã®ã¿åçã«èªã¿èŸŒãŸããŸãã`Suspense`ã³ã³ããŒãã³ãã¯ãã³ã³ããŒãã³ãã®èªã¿èŸŒã¿äžã«ãã©ãŒã«ããã¯UIïŒäŸïŒããŒãã£ã³ã°ã¹ãããŒïŒãæäŸããŸãããã®ãã¯ããã¯ã«ãããå¿ èŠãªJavaScriptãã¡ã€ã«ããã§ãããããŠããéããŠãŒã¶ãŒã空çœã®ç»é¢ãçµéšããããšããªããªããŸãããã®ã¢ãããŒãã¯ãæåã«ããŠã³ããŒããããããŒã¿éãæå°éã«æããããã垯åå¹ ãéãããŠããå°åã®ãŠãŒã¶ãŒã«å€§ããªã¡ãªããããããŸãã
4. ä»®æ³åïŒããŒãã£ã©ã€ãŒãŒã·ã§ã³ïŒ
ä»®æ³åã¯ã倧ããªãªã¹ããããŒãã«ã®è¡šç€ºå¯èœãªéšåã®ã¿ãã¬ã³ããªã³ã°ãããã¯ããã¯ã§ãããªã¹ãå ã®ãã¹ãŠã®é ç®ãäžåºŠã«ã¬ã³ããªã³ã°ãã代ããã«ãä»®æ³åã¯çŸåšãã¥ãŒããŒãå ã«ããé ç®ã®ã¿ãã¬ã³ããªã³ã°ããŸããããã«ãããDOMèŠçŽ ã®æ°ãåçã«æžå°ããç¹ã«å€§èŠæš¡ãªããŒã¿ã»ãããæ±ãå Žåã«ããã©ãŒãã³ã¹ãåäžããŸãã`react-window`ã`react-virtualized`ã®ãããªã©ã€ãã©ãªã¯ãReactã§ä»®æ³åãå®è£ ããããã®å¹ççãªãœãªã¥ãŒã·ã§ã³ãæäŸããŸãã
10,000é ç®ã®ãªã¹ããèããŠã¿ãŸããããä»®æ³åããªããã°ã10,000é ç®ãã¹ãŠãã¬ã³ããªã³ã°ãããããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ãäžããŸããä»®æ³åã䜿çšãããšããã¥ãŒããŒãã«è¡šç€ºãããŠããé ç®ïŒäŸïŒ20é ç®ïŒã®ã¿ãæåã«ã¬ã³ããªã³ã°ãããŸãããŠãŒã¶ãŒãã¹ã¯ããŒã«ãããšãä»®æ³åã©ã€ãã©ãªã¯è¡šç€ºãããŠããé ç®ãåçã«ã¬ã³ããªã³ã°ãã衚瀺ãããªããªã£ãé ç®ãã¢ã³ããŠã³ãããŸãã
ããã¯ãããªãã®ãµã€ãºã®ãªã¹ããã°ãªãããæ±ãéã®éèŠãªæé©åæŠç¥ã§ããä»®æ³åã¯ãåºã«ãªãããŒã¿ãåºç¯å²ã§ãã£ãŠããããã¹ã ãŒãºãªã¹ã¯ããŒã«ãšå šäœçãªããã©ãŒãã³ã¹ã®åäžãä¿èšŒããŸããããã¯ã°ããŒãã«åžå Žå šäœã§é©çšå¯èœã§ãããeã³ããŒã¹ãã©ãããã©ãŒã ãããŒã¿ããã·ã¥ããŒãããœãŒã·ã£ã«ã¡ãã£ã¢ãã£ãŒããªã©ã倧éã®ããŒã¿ã衚瀺ããã¢ããªã±ãŒã·ã§ã³ã«ç¹ã«æçã§ãã
5. ç»åã®æé©å
ç»åã¯ãWebããŒãžã«ãã£ãŠããŠã³ããŒããããããŒã¿ã®å€§éšåãå ããããšããããããŸããç»åã®æé©åã¯ãèªã¿èŸŒã¿æéãšå šäœçãªããã©ãŒãã³ã¹ãåäžãããããã«äžå¯æ¬ ã§ããããã€ãã®æŠç¥ãæ¡çšã§ããŸãïŒ
- ç»åã®å§çž®ïŒ TinyPNGãImageOptimã®ãããªããŒã«ã䜿çšããŠç»åãå§çž®ããç»è³ªãå€§å¹ ã«æãªãããšãªããã¡ã€ã«ãµã€ãºãåæžããŸãã
- ã¬ã¹ãã³ã·ãç»åïŒ `
`ã¿ã°ã®`srcset`屿§ã`
`èŠçŽ ã䜿çšããŠãç°ãªãç»é¢ãµã€ãºçšã«ç°ãªãç»åãµã€ãºãæäŸããŸããããã«ããããã©ãŠã¶ã¯ãŠãŒã¶ãŒã®ããã€ã¹ãšç»é¢è§£å床ã«åºã¥ããŠæé©ãªç»åãµã€ãºãéžæã§ããŸããããã¯ãç»é¢ãµã€ãºãè§£å床ãããŸããŸãªå€çš®å€æ§ãªããã€ã¹ã䜿çšããå¯èœæ§ãããã°ããŒãã«ãŠãŒã¶ãŒã«ãšã£ãŠç¹ã«éèŠã§ãã - é
å»¶èªã¿èŸŒã¿ïŒLazy LoadingïŒïŒ ãã¡ãŒã¹ããã¥ãŒã®äžã«ããïŒããã«ã¯è¡šç€ºãããªãïŒç»åã®èªã¿èŸŒã¿ããå¿
èŠã«ãªããŸã§é
å»¶ãããŸããããã«ãããåæèªã¿èŸŒã¿æéãåäžããŸãã`
`ã¿ã°ã®`loading="lazy"`屿§ããã®ç®çã§äœ¿çšã§ããŸãããã®ãã¯ããã¯ã¯ã»ãšãã©ã®ã¢ãã³ãã©ãŠã¶ã§ãµããŒããããŠããŸããããã¯ãã€ã³ã¿ãŒãããæ¥ç¶ãé ãå°åã®ãŠãŒã¶ãŒã«åœ¹ç«ã¡ãŸãã
- WebPãã©ãŒãããã®äœ¿çšïŒ WebPã¯ãJPEGãPNGãšæ¯èŒããŠåªããå§çž®ãšç»è³ªãæäŸããçŸä»£çãªç»åãã©ãŒãããã§ããå¯èœãªå Žåã¯WebPãã©ãŒãããã䜿çšããŠãã ããã
ç»åã®æé©åã¯ã察象ãŠãŒã¶ãŒããŒã¹ã«é¢ä¿ãªãããã¹ãŠã®Reactã¢ããªã±ãŒã·ã§ã³ã«é©çšå¯èœãªæ®éçãªæé©åæŠç¥ã§ããç»åãæé©åããããšã«ãããéçºè ã¯ã¢ããªã±ãŒã·ã§ã³ãè¿ éã«èªã¿èŸŒãŸããããŸããŸãªããã€ã¹ããããã¯ãŒã¯æ¡ä»¶äžã§ã·ãŒã ã¬ã¹ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããããšãä¿èšŒã§ããŸãããããã®æé©åã¯ãäžæµ·ã®è³ãããªéããããã©ãžã«ã®å°æ¹ã®é éå°ãŸã§ãäžçäžã®ãŠãŒã¶ãŒã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãçŽæ¥åäžãããŸãã
6. ãµãŒãããŒãã£ã©ã€ãã©ãªã®æé©å
ãµãŒãããŒãã£ã©ã€ãã©ãªã¯ãè³¢æã«äœ¿çšããªããšããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ãäžããå¯èœæ§ããããŸããã©ã€ãã©ãªãéžæããéã«ã¯ã次ã®ç¹ãèæ ®ããŠãã ããïŒ
- ãã³ãã«ãµã€ãºïŒ ããŠã³ããŒããããJavaScriptã®éãæå°éã«æããããããã³ãã«ãµã€ãºãå°ããã©ã€ãã©ãªãéžæããŸããBundlephobiaã®ãããªããŒã«ã䜿çšããŠãã©ã€ãã©ãªã®ãã³ãã«ãµã€ãºãåæããŸãã
- ããªãŒã·ã§ã€ãã³ã°ïŒ 䜿çšããã©ã€ãã©ãªãããªãŒã·ã§ã€ãã³ã°ããµããŒãããŠããããšã確èªããŠãã ãããããã«ããããã«ãããŒã«ãæªäœ¿çšã®ã³ãŒããåé€ã§ããŸããããã«ãããæçµçãªãã³ãã«ãµã€ãºãåæžãããŸãã
- ã©ã€ãã©ãªã®é å»¶èªã¿èŸŒã¿ïŒ ã©ã€ãã©ãªãåæããŒãžèªã¿èŸŒã¿ã«äžå¯æ¬ ã§ãªãå Žåã¯ãé å»¶èªã¿èŸŒã¿ãæ€èšããŠãã ãããããã«ãããã©ã€ãã©ãªãå¿ èŠã«ãªããŸã§èªã¿èŸŒã¿ãé å»¶ãããŸãã
- 宿çãªæŽæ°ïŒ ããã©ãŒãã³ã¹ã®åäžããã°ä¿®æ£ã®æ©æµãåããããã«ãã©ã€ãã©ãªãææ°ã®ç¶æ ã«ä¿ã¡ãŸãã
ãµãŒãããŒãã£ã®äŸåé¢ä¿ã管çããããšã¯ã髿§èœãªã¢ããªã±ãŒã·ã§ã³ãç¶æããããã«äžå¯æ¬ ã§ããæœåšçãªããã©ãŒãã³ã¹ãžã®åœ±é¿ã軜æžããããã«ã¯ãã©ã€ãã©ãªã®æ éãªéžæãšç®¡çãäžå¯æ¬ ã§ããããã¯ãäžçäžã®å€æ§ãªãŠãŒã¶ãŒã察象ãšããReactã¢ããªã±ãŒã·ã§ã³ã«ãåœãŠã¯ãŸããŸãã
Reactããã©ãŒãã³ã¹ã®ãã¹ããã©ã¯ãã£ã¹
ç¹å®ã®æé©åãã¯ããã¯ãè¶ ããŠããã¹ããã©ã¯ãã£ã¹ãæ¡çšããããšã¯ãããã©ãŒãã³ã¹ã®é«ãReactã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ãã
- ã³ã³ããŒãã³ããå°ãããçŠç¹ã®çµããããã®ã«ä¿ã€ïŒ ã¢ããªã±ãŒã·ã§ã³ããåäžã®è²¬ä»»ãæã€å°ããåå©çšå¯èœãªã³ã³ããŒãã³ãã«åå²ããŸããããã«ãããã³ãŒãã®çè§£ãã³ã³ããŒãã³ãã®æé©åãäžèŠãªåã¬ã³ããªã³ã°ã®é²æ¢ã容æã«ãªããŸãã
- ã€ã³ã©ã€ã³ã¹ã¿ã€ã«ãé¿ããïŒ ã€ã³ã©ã€ã³ã¹ã¿ã€ã«ã®ä»£ããã«CSSã¯ã©ã¹ã䜿çšããŸããã€ã³ã©ã€ã³ã¹ã¿ã€ã«ã¯ãã£ãã·ã¥ã§ããªããããããã©ãŒãã³ã¹ã«æªåœ±é¿ãäžããå¯èœæ§ããããŸãã
- CSSãæé©åããïŒ CSSãã¡ã€ã«ã®ãµã€ãºãæå°éã«æããæªäœ¿çšã®CSSã«ãŒã«ãåé€ããSassãLessãªã©ã®CSSããªããã»ããµã䜿çšããŠæŽçãæ¹åããããšãæ€èšããŸãã
- ã³ãŒãã®éçè§£æïŒLintingïŒãšãã©ãŒãããããŒã«ã䜿çšããïŒ ESLintãPrettierã®ãããªããŒã«ã¯ãäžè²«ããã³ãŒãã¹ã¿ã€ã«ãç¶æããã®ã«åœ¹ç«ã¡ãã³ãŒããããèªã¿ããããæé©åããããããŸãã
- 培åºçãªãã¹ãïŒ ã¢ããªã±ãŒã·ã§ã³ã培åºçã«ãã¹ãããŠãããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããæé©åãæãŸãã广ãããããããšã確èªããŸãã宿çã«ããã©ãŒãã³ã¹ãã¹ãã宿œããŸãã
- Reactãšã³ã·ã¹ãã ãåžžã«ææ°ã®ç¶æ ã«ä¿ã€ïŒ Reactãšã³ã·ã¹ãã ã¯çµ¶ããé²åããŠããŸããææ°ã®ããã©ãŒãã³ã¹æ¹åãããŒã«ããã¹ããã©ã¯ãã£ã¹ã«ã€ããŠåžžã«æ å ±ãåŸãŠãã ãããé¢é£ããã°ã賌èªããæ¥çã®å°éå®¶ããã©ããŒããã³ãã¥ããã£ã®è°è«ã«åå ããŠãã ããã
- ããã©ãŒãã³ã¹ã宿çã«ç£èŠããïŒ æ¬çªç°å¢ã§ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã远跡ããããã®ç£èŠã·ã¹ãã ãå®è£ ããŸããããã«ãããçºçããããã©ãŒãã³ã¹ã®åé¡ãç¹å®ãã察åŠã§ããŸããNew RelicãSentryãGoogle Analyticsãªã©ã®ããŒã«ãããã©ãŒãã³ã¹ç£èŠã«äœ¿çšã§ããŸãã
ãããã®ãã¹ããã©ã¯ãã£ã¹ãéµå®ããããšã«ãããéçºè ã¯ããŠãŒã¶ãŒã®å Žæã䜿çšããŠããããã€ã¹ã«é¢ä¿ãªããã·ãŒã ã¬ã¹ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸãã髿§èœãªReactã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®åŒ·åºãªåºç€ã確ç«ã§ããŸãã
çµè«
Reactã®ããã©ãŒãã³ã¹æé©åã¯ããããã¡ã€ãªã³ã°ãçãçµã£ãæé©åãã¯ããã¯ããããŠãã¹ããã©ã¯ãã£ã¹ã®éµå®ãçµã¿åãããç¶ç¶çãªããã»ã¹ã§ããããã©ãŒãã³ã¹ã®éèŠæ§ãçè§£ãããããã¡ã€ãªã³ã°ããŒã«ã掻çšããã¡ã¢åãã³ãŒãåå²ãä»®æ³åãç»åæé©åãªã©ã®ãã¯ããã¯ãæ¡çšãããã¹ããã©ã¯ãã£ã¹ãåãå ¥ããããšã§ãé«éã§ã¹ã±ãŒã©ãã«ããã€åè¶ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããReactã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸããããã©ãŒãã³ã¹ã«éç¹ã眮ãããšã§ãéçºè ã¯èªåãã¡ã®ã¢ããªã±ãŒã·ã§ã³ãäžçäžã®ãŠãŒã¶ãŒã®æåŸ ã«å¿ãããŠãŒã¶ãŒãšã³ã²ãŒãžã¡ã³ããã³ã³ããŒãžã§ã³ããããŠããžãã¹ã®æåã«ããžãã£ããªåœ±é¿ãäžããããšãä¿èšŒã§ããŸããããã©ãŒãã³ã¹ã®åé¡ãç¹å®ã解決ããããã®ç¶ç¶çãªåªåã¯ã仿¥ã®ç«¶äºã®æ¿ããããžã¿ã«ç°å¢ã«ãããŠãå ç¢ã§å¹ççãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®éèŠãªèŠçŽ ã§ãã