Next.jsã®Imageã³ã³ããŒãã³ãã䜿çšããé«åºŠãªæé©åæè¡ãæ¢æ±ããããéãã¬ã¹ãã³ã·ããªãŠã§ããµã€ããå®çŸãã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«æé©ãªããã©ãŒãã³ã¹ãä¿èšŒããŸãã
Next.jsã®Imageã³ã³ããŒãã³ãïŒã°ããŒãã«Webåãé«åºŠãªæé©åæ©èœ
仿¥ã®ããžã¿ã«ç°å¢ã«ãããŠãç»åã¯ãŠã§ããµã€ãã³ã³ãã³ãã®éèŠãªéšåã§ããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãšãšã³ã²ãŒãžã¡ã³ããåäžãããŸããããããæé©åãããŠããªãç»åã¯ãŠã§ããµã€ãã®ããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ãäžããç¹ã«åž¯åå¹
ãéãããŠãããŠãŒã¶ãŒãå°ççã«é¢ããå Žæããã¢ã¯ã»ã¹ãããŠãŒã¶ãŒã«ãšã£ãŠã¯ãèªã¿èŸŒã¿æéãé
ããªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãäœäžããåå ãšãªããŸãã人æ°ã®ããReactãã¬ãŒã ã¯ãŒã¯ã§ããNext.jsã¯ããããã®èª²é¡ã«å¯ŸåŠããããã«èšèšããã匷åãª<Image>
ã³ã³ããŒãã³ããæäŸããé«åºŠãªç»åæé©åæ©èœãæšæºã§æäŸããŸãã
ãã®å æ¬çãªã¬ã€ãã§ã¯ãNext.jsã®Imageã³ã³ããŒãã³ãã®é«åºŠãªæ©èœã«ã€ããŠè©³ãã解説ããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«æé©åãããç»åãé ä¿¡ããæ¹æ³ãæ¢ããŸããããã«ãããèªã¿èŸŒã¿æéã®ççž®ã垯åå¹ ã®æ¶è²»åæžããããŠå šäœçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäžãå®çŸããŸããã¬ã¹ãã³ã·ããªç»åãµã€ãžã³ã°ããã©ãŒãããæé©åãããé å»¶èªã¿èŸŒã¿ãé«åºŠãªèšå®ãªãã·ã§ã³ãŸã§ãå¹ åºããããã¯ãã«ããŒããŸãã
ã³ã¢ãšãªãã¡ãªããã®çè§£
é«åºŠãªæ©èœã«é£ã³èŸŒãåã«ãNext.jsã®Imageã³ã³ããŒãã³ãã䜿çšããã³ã¢ãªã¡ãªãããå確èªããŸããã:
- èªåç»åæé©å: ç»åããªã³ããã³ãã§æé©åãããã©ãŠã¶ã®ãµããŒãç¶æ³ã«å¿ããŠãªãµã€ãºãWebPãAVIFã®ãããªã¢ãã³ãªãã©ãŒãããã«å€æããŸãã
- ã¬ã¹ãã³ã·ãç»å: ããŸããŸãªç»é¢ãµã€ãºãããã€ã¹ã®è§£å床ã«å¯Ÿå¿ããããã«è€æ°ã®ç»åãµã€ãºãèªåçã«çæããã¢ãã€ã«ããã€ã¹ã§ã®ããã©ãŒãã³ã¹ãåäžããã垯åå¹ ã®äœ¿çšéãåæžããŸãã
- é å»¶èªã¿èŸŒã¿: ç»åããã¥ãŒããŒãã«å ¥ã£ããšãã«ã®ã¿èªã¿èŸŒãããšã§ãåæããŒãžã®èªã¿èŸŒã¿æéãççž®ããäœæããã©ãŒãã³ã¹ãåäžãããŸãã
- çµã¿èŸŒã¿ã®ããã©ãŒãã³ã¹: ãã¡ãŒã¹ããã¥ãŒã®ç»åã®ããªããŒããèªåç»åãµã€ãžã³ã°ãªã©ã®æ©èœã«ãããããã©ãŒãã³ã¹ãæé©åãããŠããŸãã
- ã¬ã€ã¢ãŠãã·ããã®é²æ¢:
width
ãšheight
ãæå®ããããfill
ããããã£ã䜿çšããããšã§ãCore Web Vitalsã®äž»èŠãªææšã§ããCumulative Layout Shift (CLS)ãé²ããŸãã
é«åºŠãªæé©åãã¯ããã¯
1. ã¢ãããã£ãç»åã®ããã®`sizes`ããããã£ã®ç¿åŸ
sizes
ããããã£ã¯ãããŸããŸãªç»é¢ãµã€ãºããã¥ãŒããŒãå¹
ã«é©å¿ããçã«ã¬ã¹ãã³ã·ããªç»åãäœæããããã®åŒ·åãªããŒã«ã§ããã¡ãã£ã¢ã¯ãšãªã«åºã¥ããŠç°ãªãç»åãµã€ãºãå®çŸ©ããããšãã§ãããã©ãŠã¶ããŠãŒã¶ãŒã®ããã€ã¹ã«æãé©ããç»åãèªã¿èŸŒãããã«ããŸãã
äŸ:
å°ããªããã€ã¹ã§ã¯ç»é¢ã®å
šå¹
ãäžãµã€ãºã®ããã€ã¹ã§ã¯ååã®å¹
ã倧ããªããã€ã¹ã§ã¯3åã®1ã®å¹
ãå ããç»åããããšããŸããããã¯sizes
ããããã£ã䜿çšããŠå®çŸã§ããŸãã
<Image
src="/my-image.jpg"
alt="My Responsive Image"
width={1200}
height={800}
sizes="(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw"
/>
解説:
(max-width: 768px) 100vw
: æå€§å¹ 768pxã®ç»é¢ïŒéåžžã¯ã¢ãã€ã«ããã€ã¹ïŒã§ã¯ãç»åã¯ãã¥ãŒããŒãå¹ ã®100%ãå ããŸãã(max-width: 1200px) 50vw
: æå€§å¹ 1200pxã®ç»é¢ïŒäžãµã€ãºã®ããã€ã¹ïŒã§ã¯ãç»åã¯ãã¥ãŒããŒãå¹ ã®50%ãå ããŸãã33vw
: 1200pxãã倧ããç»é¢ã§ã¯ãç»åã¯ãã¥ãŒããŒãå¹ ã®33%ãå ããŸãã
sizes
ããããã£ã¯width
ããã³height
ããããã£ãšé£æºããŠããã©ãŠã¶ãæ£ããç»åãµã€ãºãèªã¿èŸŒãããã«ããŸããé©åã«å®çŸ©ãããsizes
ããããã£ãæäŸããããšã§ãããŸããŸãªããã€ã¹ãç»é¢ãµã€ãºã«å¯ŸããŠç»åã®é
ä¿¡ãæé©åããããã©ãŒãã³ã¹ã倧å¹
ã«åäžãããããšãã§ããŸãã
ã°ããŒãã«ãªå¿çš: ãšãŒããããšã¢ãžã¢ã®äž¡æ¹ã®ãŠãŒã¶ãŒãã¿ãŒã²ãããšããeã³ããŒã¹ãµã€ããèããŠã¿ãŸããããããã€ã¹ã®äœ¿çšãã¿ãŒã³ã¯å€§ããç°ãªãå¯èœæ§ããããŸãããšãŒãããã®ãŠãŒã¶ãŒã¯äž»ã«ãã¹ã¯ãããã䜿çšãããããããŸããããã¢ãžã¢ã®ãŠãŒã¶ãŒã¯ã¢ãã€ã«ããã€ã¹ã«é Œãããšãå€ããããããŸãããsizes
ã§æé©åããããšã§ãããã€ã¹ã«é¢ä¿ãªãããã¹ãŠã®ãŠãŒã¶ãŒã«é«éãªèªã¿èŸŒã¿æéãä¿èšŒããŸãã
2. éèŠãªãã¡ãŒã¹ããã¥ãŒç»åã®ããã®`priority`ã®æŽ»çš
priority
ããããã£ã¯ãåæããŒãžã®èªã¿èŸŒã¿ã«äžå¯æ¬ ãªç»åãéåžžã¯ãã¡ãŒã¹ããã¥ãŒïŒã¹ã¯ããŒã«ããã«èŠããããŒãžã®éšåïŒã«è¡šç€ºãããç»åã®èªã¿èŸŒã¿ãåªå
ããããã«äœ¿çšãããŸãããããã®ç»åã«priority={true}
ãèšå®ããããšã§ãNext.jsã«ããããããªããŒãããããã«æç€ºããè¿
éã«èªã¿èŸŒãŸããŠè¡šç€ºãããããã«ããŠããŠãŒã¶ãŒã®äœæããã©ãŒãã³ã¹ãåäžãããŸãã
äŸ:
<Image
src="/hero-image.jpg"
alt="Hero Image"
width={1920}
height={1080}
priority={true}
/>
䜿çšããå Žé¢:
- ããŒããŒç»å: ããŒãžã®äžéšã«ãããããã«ãŠãŒã¶ãŒã®æ³šæãåŒãã¡ã€ã³ç»åã
- ããŽ: éåžžããããŒã«è¡šç€ºããããŠã§ããµã€ãã®ããŽã
- äž»èŠãªããžã¥ã¢ã«èŠçŽ : åæã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«äžå¯æ¬ ãªãã®ä»ã®ç»åã
éèŠãªèæ ®äºé :
- ããªããŒãããç»åãå€ããããšãããŒãžå
šäœã®èªã¿èŸŒã¿æéã«æªåœ±é¿ãäžããå¯èœæ§ãããããã
priority
ããããã£ã¯æ§ããã«äœ¿çšããŠãã ããã - åªå ããç»åããã¡ã€ã«ãµã€ãºãæå°éã«æããããã«é©åã«æé©åãããŠããããšã確èªããŠãã ããã
ã°ããŒãã«ãªå¿çš: äžçäžã«èªè
ããããã¥ãŒã¹ãµã€ããæ³åããŠã¿ãŠãã ãããããŒã ããŒãžã®ã¡ã€ã³ãã¥ãŒã¹ç»åã¯ãç¹ã«çºå±éäžåœã®ã€ã³ã¿ãŒãããæ¥ç¶ãé
ãèªè
ã«ãšã£ãŠãpriority
ã®æ©æµã倧ãã«åããŸããããã«ãããéèŠãªããžã¥ã¢ã«èŠçŽ ãè¿
éã«èªã¿èŸŒãŸãããšã³ã²ãŒãžã¡ã³ããåäžããŸãã
3. ã«ã¹ã¿ã ç»åããŒããŒã®èšå®
ããã©ã«ãã§ã¯ãNext.jsã®Imageã³ã³ããŒãã³ãã¯çµã¿èŸŒã¿ã®ç»åæé©åãµãŒãã¹ã䜿çšããŸããããããã«ã¹ã¿ã ç»åããŒããŒãæäŸããããšã§ããã®åäœãã«ã¹ã¿ãã€ãºã§ããŸããããã¯ãCloudinaryãImgixãªã©ã®ãµãŒãããŒãã£ã®ç»åæé©åãµãŒãã¹ããç»åæé©åæ©èœãåããã³ã³ãã³ãããªããªãŒãããã¯ãŒã¯ïŒCDNïŒã䜿çšããŠããå Žåã«ç¹ã«äŸ¿å©ã§ãã
äŸ: Cloudinaryã®äœ¿çš
ãŸããCloudinary SDKãã€ã³ã¹ããŒã«ããŸã:
npm install cloudinary-core
次ã«ãã«ã¹ã¿ã ããŒããŒé¢æ°ãäœæããŸã:
// utils/cloudinaryLoader.js
import { Cloudinary } from 'cloudinary-core';
const cloudinary = new Cloudinary({
cloud_name: 'your_cloud_name',
});
export function cloudinaryLoader({ src, width, quality }) {
const params = ['f_auto', 'c_limit', `w_${width}`, 'q_auto'];
if (quality) {
params.push(`q_${quality}`);
}
return cloudinary.url(src, { transformation: params });
}
æåŸã«ãnext.config.js
ãã¡ã€ã«ã§loader
ããããã£ãèšå®ããŸã:
// next.config.js
module.exports = {
images: {
loader: 'custom',
loaderFile: './utils/cloudinaryLoader.js',
},
}
ãããŠãã³ã³ããŒãã³ãã§äœ¿çšããŸã:
<Image
src="/my-image.jpg"
alt="My Image"
width={600}
height={400}
loader={cloudinaryLoader}
/>
ã«ã¹ã¿ã ããŒããŒã䜿çšããã¡ãªãã:
- æè»æ§: 奜ã¿ã®ç»åæé©åãµãŒãã¹ãšçµ±åã§ããŸãã
- é«åºŠãªæé©å: ãµãŒãããŒãã£ãµãŒãã¹ãæäŸããé«åºŠãªæé©åæ©èœã«ã¢ã¯ã»ã¹ã§ããŸãã
- CDNçµ±å: éžæãããµãŒãã¹ã®ã°ããŒãã«ãªCDNã€ã³ãã©ã¹ãã©ã¯ãã£ã掻çšã§ããŸãã
ã°ããŒãã«ãªå¿çš: ã°ããŒãã«ãªæ è¡äºçŽãã©ãããã©ãŒã ã¯ãAkamaiãCloudflareã®ãããªCDNãåããã«ã¹ã¿ã ããŒããŒã䜿çšã§ããŸããããã«ããããŠãŒã¶ãŒã«æãè¿ããµãŒããŒããç»åãé ä¿¡ããããŠãŒã¶ãŒãæ±äº¬ããã³ãã³ããã¥ãŒãšãŒã¯ã®ã©ãã«ããŠããé å»¶ãå€§å¹ ã«åæžãããèªã¿èŸŒã¿æéãåäžããŸãã
4. ç»åãã©ãŒãããã®æé©å: WebPãšAVIF
WebPãAVIFã®ãããªã¢ãã³ãªç»åãã©ãŒãããã¯ãJPEGãPNGã®ãããªåŸæ¥ã®ãã©ãŒããããšæ¯èŒããŠãåªããå§çž®çãšå質ãæäŸããŸããNext.jsã®Imageã³ã³ããŒãã³ãã¯ããã©ãŠã¶ã®ãµããŒãç¶æ³ã«åºã¥ããŠç»åããããã®ãã©ãŒãããã«èªåçã«å€æãããã¡ã€ã«ãµã€ãºãããã«åæžããŠããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
WebP: Googleãéçºããã¢ãã³ãªç»åãã©ãŒãããã§ãåªããå¯éããã³éå¯éå§çž®ãæäŸããŸããçŸä»£ã®ãã©ãŠã¶ã§åºããµããŒããããŠããŸãã
AVIF: AV1ãããªã³ãŒããã¯ãããŒã¹ã«ããæ°ããç»åãã©ãŒãããã§ããWebPãããããã«åªããå§çž®çãæäŸããŸããããã©ãŠã¶ã®ãµããŒãã¯ãŸã ããã»ã©åºããããŸããã
èªåãã©ãŒããã倿: Next.jsã®Imageã³ã³ããŒãã³ãã¯ããã©ãŠã¶ããµããŒãããŠããã°ãç»åãèªåçã«WebPãŸãã¯AVIFã«å€æããŸããæç€ºçã«ãã©ãŒããããæå®ããå¿ èŠã¯ãªããã³ã³ããŒãã³ããèªåçã«åŠçããŸãã
ãã©ãŠã¶ã®ãµããŒã: WebPãšAVIFã®çŸåšã®ãµããŒãç¶æ³ãçè§£ããããã«ããã©ãŠã¶äºææ§ããŒãã«ïŒäŸ: caniuse.comïŒã確èªããŠãã ããã
èæ ®äºé :
- ç»åæé©åãµãŒãã¹ãCDNãWebPãšAVIFããµããŒãããŠããããšã確èªããŠãã ããã
- ãããã®ãã©ãŒãããããµããŒãããŠããªãå€ããã©ãŠã¶ã®ããã®ãã©ãŒã«ããã¯ãæäŸããããšãæ€èšããŠãã ããïŒNext.jsã®Imageã³ã³ããŒãã³ãã¯éåžžããããé©åã«åŠçããŸãïŒã
ã°ããŒãã«ãªå¿çš: åœéçãªãã¥ãŒã¹ã¢ã°ãªã²ãŒã¿ãŒã¯ãWebPãšAVIFãã倧ããªæ©æµãåããããšãã§ããŸããå°åã«ãã£ãŠã€ã³ã¿ãŒãããé床ãç°ãªããããç»åãã¡ã€ã«ãµã€ãºãå°ããã»ã©ã垯åå¹ ãéãããŠããå°åã®ãŠãŒã¶ãŒã«ãšã£ãŠã¯èªã¿èŸŒã¿æéãççž®ãããããŒã¿æ¶è²»éãåæžãããŸãã
5. ãã€ãããã¯ã¬ã€ã¢ãŠãã®ããã®`fill`ãš`objectFit`ã®æŽ»çš
fill
ããããã£ã¯ãç»åã芪ã³ã³ããã®å¯žæ³ã«åãããããšãã§ããŸããããã¯ãç»åãµã€ãºãå©çšå¯èœãªã¹ããŒã¹ã«åçã«é©å¿ããå¿
èŠãããã¬ã¹ãã³ã·ããªã¬ã€ã¢ãŠããäœæããã®ã«ç¹ã«äŸ¿å©ã§ããobjectFit
CSSããããã£ãšçµã¿åãããããšã§ãç»åãã³ã³ãããã©ã®ããã«åããããå¶åŸ¡ã§ããŸãïŒäŸ: cover
, contain
, fill
, none
, scale-down
ïŒã
äŸ:
<div style={{ position: 'relative', width: '100%', height: '300px' }}>
<Image
src="/my-image.jpg"
alt="My Image"
fill
style={{ objectFit: 'cover' }}
/>
</div>
解説:
div
èŠçŽ ã¯ç»åã®ã³ã³ãããšããŠæ©èœããçžå¯Ÿäœçœ®ãæã¡ãŸãã<Image>
ã³ã³ããŒãã³ãã«ã¯fill
ããããã£ãèšå®ãããŠããã芪ã³ã³ããã®å¯žæ³ãåãããã«ãªããŸããobjectFit: 'cover'
ã¹ã¿ã€ã«ã¯ãç»åãã³ã³ããå šäœãèŠãããã«ããã¢ã¹ãã¯ãæ¯ãç¶æããããã«ç»åã®äžéšãåãåãããå¯èœæ§ããããŸãã
ãŠãŒã¹ã±ãŒã¹:
- å šå¹ ãããŒ: ç»é¢ã®å šå¹ ã«ãããã¬ã¹ãã³ã·ããªãããŒã®äœæã
- èæ¯ç»å: ã»ã¯ã·ã§ã³ãã³ã³ããŒãã³ãã®èæ¯ç»åã®èšå®ã
- ç»åã®ã£ã©ãªãŒ: ç»åãµã€ãºãå©çšå¯èœãªã¹ããŒã¹ã«é©å¿ããã°ãªããã¬ã€ã¢ãŠãã§ã®ç»åã®è¡šç€ºã
ã°ããŒãã«ãªå¿çš: 補åã玹ä»ããå€èšèªãŠã§ããµã€ãã§ã¯ãç°ãªãããã¹ãã®é·ããç»é¢ãµã€ãºã«é©å¿ããæè»ãªã¬ã€ã¢ãŠããå¿
èŠã§ããfill
ãšobjectFit
ã䜿çšããããšã§ãèšèªãããã€ã¹ã«é¢ä¿ãªããç»åãèŠèŠçãªé
åãç¶æããã¬ã€ã¢ãŠãã«ã·ãŒã ã¬ã¹ã«åãŸãããã«ãªããŸãã
6. ç¹å®ã®ã·ããªãªã®ããã®`unoptimized`ããããã£ã®èšå®
ãŸãã«ãç¹å®ã®ç»åã«å¯ŸããŠèªåç»åæé©åãç¡å¹ã«ãããå ŽåããããŸããããšãã°ããã§ã«é«åºŠã«æé©åãããŠããç»åããCDNããçŽæ¥ããããªãåŠçãªãã§é
ä¿¡ãããç»åããããããããŸãããããã¯ãunoptimized
ããããã£ãtrue
ã«èšå®ããããšã§å®çŸã§ããŸãã
äŸ:
<Image
src="/already-optimized.png"
alt="Already Optimized Image"
width={800}
height={600}
unoptimized={true}
/>
䜿çšããå Žé¢:
- ãã§ã«æé©åãããç»å: ãµãŒãããŒãã£ã®ããŒã«ããµãŒãã¹ã䜿çšããŠãã§ã«æé©åãããŠããç»åã
- CDNããçŽæ¥é ä¿¡ãããç»å: ãããªãåŠçãªãã§CDNããçŽæ¥é ä¿¡ãããç»åã
- ç¹æ®ãªç»åãã©ãŒããã: Next.jsã®Imageã³ã³ããŒãã³ãã§ãµããŒããããŠããªãç¹æ®ãªãã©ãŒãããã䜿çšããç»åã
泚æ:
unoptimized
ããããã£ã¯ããã¹ãŠã®èªåç»åæé©åæ©èœãç¡å¹ã«ãããããæ§ããã«äœ¿çšããŠãã ãããunoptimized
ãšããŒã¯ããç»åãããã¡ã€ã«ãµã€ãºãæå°éã«æããããã«ãã§ã«é©åã«æé©åãããŠããããšã確èªããŠãã ããã
ã°ããŒãã«ãªå¿çš: åçå®¶ãäœåãå±ç€ºãããŠã§ããµã€ããèããŠã¿ãŸãããã圌ãã¯ãNext.jsã®ãªããã£ãã€ã¶ã倿Žããå¯èœæ§ã®ããç¹å®ã®ã«ã©ãŒãããã¡ã€ã«ã粟å¯ãªèšå®ã§ç»åãé
ä¿¡ããããããããŸãããunoptimized
ã䜿çšããããšã§ãæå³ããéãã«ç»åãé
ä¿¡ããã³ã³ãããŒã«ãåŸãããŸãã
7. äœæããã©ãŒãã³ã¹åäžã®ããã®`blurDataURL`ã®æŽ»çš
blurDataURL
ããããã£ã䜿çšãããšãå®éã®ç»åãèªã¿èŸŒãŸããŠããéã«äœè§£å床ã®ãã¬ãŒã¹ãã«ããŒç»åã衚瀺ã§ããŸããããã«ãããäœããèªã¿èŸŒã¿äžã§ããããšãèŠèŠçã«ç€ºãããšã§ããŠãŒã¶ãŒã®äœæããã©ãŒãã³ã¹ã倧å¹
ã«åäžãããããŒãžã空çœãŸãã¯ç¡åå¿ã«èŠããã®ãé²ããŸããNext.js 13以éã®ããŒãžã§ã³ã§ã¯ããããèªåçã«åŠçãããããšããããããŸãã
äŸ:
ãŸããBlurHashã®ãããªããŒã«ãåæ§ã®ãµãŒãã¹ã䜿çšããŠãç»åãããã©ãŒããŒã¿URLãçæããŸããããã«ãããç»åã®ãŒãããããŒãžã§ã³ã衚ãå°ããªbase64ãšã³ã³ãŒããããæååãåŸãããŸãã
<Image
src="/my-image.jpg"
alt="My Image"
width={600}
height={400}
placeholder="blur"
blurDataURL="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkqAcAAIUAgUW0RjgAAAAASUVORK5CYII="
/>
ã¡ãªãã:
- äœæããã©ãŒãã³ã¹ã®åäž: äœããèªã¿èŸŒã¿äžã§ããããšãèŠèŠçã«ç€ºããŸãã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäž: ããŒãžã空çœãŸãã¯ç¡åå¿ã«èŠããã®ãé²ããŸãã
- ã¬ã€ã¢ãŠãã·ããã®åæž: ç»åã®ããã®ã¹ããŒã¹ã確ä¿ããããšã§ãã¬ã€ã¢ãŠãã·ãããé²ãã®ã«åœ¹ç«ã¡ãŸãã
ã°ããŒãã«ãªå¿çš: çŽ æŽãããåçã§ç®çå°ã玹ä»ããåœéçãªæ
è¡ããã°ãblurDataURL
ã䜿çšããããšã§ãäœéãããã¯ãŒã¯äžã®ãŠãŒã¶ãŒã§ãã¹ã ãŒãºãªèªã¿èŸŒã¿äœéšãæäŸããè¯ã第äžå°è±¡ãäžããã³ã³ãã³ãã®æ¢çŽ¢ãä¿ããŸãã
ã°ããŒãã«ãªç»åæé©åã®ããã®ãã¹ããã©ã¯ãã£ã¹
ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«æé©ãªç»åããã©ãŒãã³ã¹ã確ä¿ããããã«ã以äžã®ãã¹ããã©ã¯ãã£ã¹ãæ€èšããŠãã ãã:
- é©åãªç»åãã©ãŒãããã®éžæ: ã¢ãã³ãªãã©ãŠã¶ã«ã¯WebPãŸãã¯AVIFã䜿çšããå€ããã©ãŠã¶ã«ã¯ãã©ãŒã«ããã¯ãæäŸããŸãã
- ç»åãµã€ãºã®æé©å: ã¿ãŒã²ããã®è¡šç€ºãµã€ãºã«åãããŠç»åãé©åãªå¯žæ³ã«ãªãµã€ãºããŸãã
- ç»åã®å§çž®: å¯éãŸãã¯éå¯éå§çž®ã䜿çšããŠãã¡ã€ã«ãµã€ãºãåæžããŸãã
- é å»¶èªã¿èŸŒã¿ã®äœ¿çš: ç»åããã¥ãŒããŒãã«å ¥ã£ããšãã«ã®ã¿èªã¿èŸŒã¿ãŸãã
- éèŠãªç»åã®åªå : åæããŒãžã®èªã¿èŸŒã¿ã«äžå¯æ¬ ãªç»åãããªããŒãããŸãã
- CDNã®æŽ»çš: CDNã䜿çšããŠããŠãŒã¶ãŒã«æãè¿ããµãŒããŒããç»åãé ä¿¡ããŸãã
- ããã©ãŒãã³ã¹ã®ç£èŠ: Google PageSpeed InsightsãWebPageTestãªã©ã®ããŒã«ã䜿çšããŠããŠã§ããµã€ãã®ããã©ãŒãã³ã¹ã宿çã«ç£èŠããŸãã
çµè«
Next.jsã®Imageã³ã³ããŒãã³ãã¯ããŠã§ãçšã®ç»åãæé©åããããã®åŒ·åã§æè»ãªãœãªã¥ãŒã·ã§ã³ãæäŸããŸãããã®é«åºŠãªæ©èœã掻çšããããšã§ãèªã¿èŸŒã¿æéã®ççž®ã垯åå¹
ã®æ¶è²»åæžããããŠã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«å¯Ÿããå
šäœçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäžãå®çŸã§ããŸããsizes
ããããã£ã®ç¿åŸãpriority
ã®æŽ»çšãããã«ã¹ã¿ã ããŒããŒã®èšå®ãç»åãã©ãŒãããã®æé©åãŸã§ããã®ã¬ã€ãã¯ãã©ã®ããã€ã¹ãå Žæã§ãåªããããã©ãŒãã³ã¹ãçºæ®ããçã«æé©åãããç»åãäœæããããã«å¿
èŠãªç¥èãšããŒã«ãæäŸããŸããã
ãŠã§ããµã€ãã®ããã©ãŒãã³ã¹ãç¶ç¶çã«ç£èŠããå¿ èŠã«å¿ããŠç»åæé©åæŠç¥ãé©å¿ãããŠããŠãŒã¶ãŒã«å¯èœãªéãæé«ã®äœéšãæäŸããŠããããšã確èªããããšãå¿ããªãã§ãã ããã