- HOME >
- Jamstack用語集 >
- next/image
next/image
ネクストイメージ
next/image(ネクストイメージ)を分かりやすく?
next/image(読み方:ネクストイメージ)は、Next.js の機能の 1 つであり、画像の最適化・レイアウトシフト・レスポンシブ対応を簡単に行うことができます。next/image を使用することで、画像の最適化や遅延ロード(lazy loading)、自動サイズ調整などが可能になり、パフォーマンスが向上します。
next/image の導入方法
next/image を使用するためには、まず Next.js プロジェクトにImage
コンポーネントをインポートします。
// pages/index.tsx
import React from 'react'
import Image from 'next/image'
const HomePage = () => {
return (
<Image
src="/images/sample.png"
width={500}
height={500}
alt="テキスト"
/>
)
}
export default HomePage
上記の例では、Image
コンポーネントをインポートし、src
属性に画像のパスを指定しています。また、alt
属性には画像の代替テキストを指定し、width
およびheight
属性には画像のサイズを指定しています。
パラメーター
Image
コンポーネントには、次のパラメーターを指定することができます。
プロパティ | 例 | タイプ | 必須 | 説明 |
---|---|---|---|---|
src | src="/profile.png" | 文字列 | はい | 画像のソース URL。 |
width | width={500} | 整数(px) | はい | 画像の幅。 |
height | height={500} | 整数(px) | はい | 画像の高さ。 |
alt | alt="Picture of the author" | 文字列 | はい | 画像の代替テキスト。これは、画像が読み込まれなかった場合に表示されます。 |
loader | loader={imageLoader} | 関数 | - | 画像を読み込む関数。 |
fill | fill={true} | ブール値 | - | 画像を画像領域全体に塗りつぶすかどうか。 |
sizes | sizes="(max-width: 768px) 100vw" | 文字列 | - | 画像のサイズの指定。 |
quality | quality={80} | 整数(1〜100) | - | 画像の品質。 |
priority | priority={true} | ブール値 | - | 画像の読み込みの優先度。 |
placeholder | placeholder="blur" | 文字列 | - | 画像が読み込まれている間に表示されるプレースホルダー画像。 |
style | style={{objectFit: "contain"}} | オブジェクト | - | 画像のスタイル。 |
onLoadingComplete | onLoadingComplete={img => done())} | 関数 | - | 画像の読み込みが完了したときに呼び出される関数。 |
onLoad | onLoad={event => done())} | 関数 | - | 画像の読み込みが完了したときに呼び出される関数。 |
onError | onError(event => fail()} | 関数 | - | 画像の読み込みに失敗したときに呼び出される関数。 |
loading | loading="lazy" | 文字列 | - | 画像を遅延読み込みするかどうか。 |
blurDataURL | blurDataURL="data:image/jpeg..." | 文字列 | - | 画像のぼやけたデータ URL。 |
画像最適化の設定
next/image は、デフォルトで画像の最適化を行いますが、独自の設定を行いたい場合はnext.config.js
ファイルを作成し、images
オブジェクトに設定を記述します。
// next.config.js
module.exports = {
images: {
domains: ['example.com'],
loader: 'imgix',
path: 'https://example.com/myaccount/',
},
}
上記の例では、domains
に画像を取得するドメインを指定し、loader
に画像最適化サービスの種類を指定しています。また、path
には画像最適化サービスのパスを指定しています。
レスポンシブ対応
next/image を使用すると、簡単に画像のレスポンシブ対応ができます。layout
属性をresponsive
に設定し、width
およびheight
属性を指定することで、画像のアスペクト比が維持されたまま自動的にサイズ調整されます。
// pages/index.tsx
import React from 'react'
```typescript
import Image from 'next/image';
const HomePage = () => {
return (
<div>
<Image
src="/path/to/image.jpg"
alt="Sample Image"
layout="responsive"
width={500}
height={300}
/>
</div>
);
};
export default HomePage;
上記の例では、layout
属性にresponsive
を指定することで、画像のレスポンシブ対応が行われています。
画像の遅延ロード(lazy loading)
next/image はデフォルトで画像の遅延ロード(lazy loading)をサポートしています。これにより、画像が画面上に表示されるまで読み込みが遅延され、パフォーマンスが向上します。
ただし、遅延ロードを無効にしたい場合は、loading
属性をeager
に設定することができます。
// pages/index.tsx
import React from 'react'
import Image from 'next/image'
const HomePage = () => {
return (
<div>
<Image src="/path/to/image.jpg" alt="Sample Image" width={500} height={300} loading="eager" />
</div>
)
}
export default HomePage
上記の例では、loading
属性にeager
を指定することで、画像の遅延ロードが無効化されています。
画像の優先読み込み
next/image は、特定の画像を優先的に読み込むこともできます。これは、ページ上に表示される重要な画像を素早く読み込ませる場合に有用です。priority
属性をtrue
に設定することで、画像の優先読み込みが行われます。
// pages/index.tsx
import React from 'react'
import Image from 'next/image'
const HomePage = () => {
return (
<div>
<Image src="/path/to/important-image.jpg" alt="Important Image" width={500} height={300} priority />
</div>
)
}
export default HomePage
上記の例では、priority
属性を指定することで、画像の優先読み込みが行われています。
next/image を使用することで、画像の最適化やレスポンシブ対応、遅延ロードなどの機能が手軽に実現できます。これにより、Web サイトのパフォーマンスが向上し、より良いユーザーエクスペリエンスが提供できます。Next.js と TypeScript の組み合わせで、型安全な画像処理を行うことができます。