React画像配置の最適化
ReactJSにおける画像アセットの配置について
ReactJSでは、画像アセットをアプリケーション内で適切に配置することが重要です。一般的には、以下の2つの方法が使用されます。
publicフォルダに配置する
- 使用方法
import React from 'react'; function MyComponent() { return ( <img src="my-image.jpg" alt="My Image" /> ); }
- 利点
- 静的アセットとして扱われるため、ビルド時に自動的にコピーされ、アクセス可能になります。
- URLを直接指定して画像を表示することができます。
srcフォルダに配置する
- 利点
- モジュールとしてインポートし、画像を表示することができます。
- CSSモジュールや画像の最適化ツールを使用することができます。
どちらの方法を選択するかは、プロジェクトの構造や画像の扱い方によって異なります。
- 画像をプログラム的に操作したり、最適化が必要な場合
src
フォルダに配置し、モジュールとしてインポートすることで柔軟性が高まります。 - 静的な画像を多く使用する場合
public
フォルダに配置することで、シンプルに扱うことができます。
注意
src
フォルダに配置した画像をインポートする際には、ファイルの拡張子を含める必要があります。public
フォルダに配置した画像のURLは、ビルド時に変更される可能性があります。
画像アセットの配置
import React from 'react';
function MyComponent() {
return (
<img src="my-image.jpg" alt="My Image" />
);
}
- 静的アセットとして扱われ、ビルド時に自動的にコピーされます。
import React from 'react';
import myImage from './my-image.jpg';
function MyComponent() {
return (
<img src={myImage} alt="My Image" />
);
}
画像配置の最適化
画像フォーマットの選択
- WebP: Googleが開発した新しいフォーマットで、一般的にJPEGやPNGよりもファイルサイズが小さくなります。
- PNG: 透明度や細かいディテールが必要な場合に適しています。
- JPEG: 写真やグラデーションに適しています。
画像サイズを最適化
- 適切な解像度を選択します。
- 画像の実際の表示サイズに合わせてリサイズします。
画像圧縮
- 圧縮ツールを使用します。
- 適切な圧縮率を設定して、ファイルサイズを小さくします。
Lazy Loading
- Reactの
lazy
とSuspense
コンポーネントを使用します。 - 画面外にある画像を遅延読み込みすることで、初期読み込み時間を短縮します。
画像のキャッシュ
Cache-Control
ヘッダーを使用してキャッシュの設定を制御します。- ブラウザが画像をキャッシュすることで、再読み込み時のパフォーマンスを向上させます。
例
import React, { lazy, Suspense } from 'react';
const MyImage = lazy(() => import('./my-image.jpg'));
function MyComponent() {
return (
<Suspense fallback={<div>Loading...</div>}>
<MyImage alt="My Image" />
</Suspense>
);
}
import React from 'react';
function MyComponent() {
return (
<img src="my-image.jpg" alt="My Image" />
);
}
import React from 'react';
import myImage from './my-image.jpg';
function MyComponent() {
return (
<img src={myImage} alt="My Image" />
);
}
import React, { lazy, Suspense } from 'react';
const MyImage = lazy(() => import('./my-image.jpg'));
function MyComponent() {
return (
<Suspense fallback={<div>Loading...</div>}>
<MyImage alt="My Image" />
</Suspense>
);
}
- 命名衝突を防止し、コードの保守性を向上させることができます。
- CSSモジュールを使用することで、画像アセットをCSSファイルにインポートし、スタイルを適用することができます。
import React from 'react';
import styles from './MyComponent.module.css';
function MyComponent() {
return (
<img src={styles.myImage} alt="My Image" />
);
}
CSS-in-JSライブラリを使用する
- コンポーネントのスタイルを管理しやすくすることができます。
- Styled ComponentsやEmotionなどのCSS-in-JSライブラリを使用することで、画像アセットをJavaScriptコード内でスタイルを定義することができます。
import React from 'react';
import styled from 'styled-components';
const MyImage = styled.img`
width: 200px;
height: 200px;
`;
function MyComponent() {
return (
<MyImage src="my-image.jpg" alt="My Image" />
);
}
画像最適化ツールを使用する
- 複数のフォーマットや圧縮アルゴリズムを試して、最適な結果を得ることができます。
- ImageminやSquooshなどの画像最適化ツールを使用することで、画像のファイルサイズを圧縮することができます。
画像CDNを使用する
- キャッシュ機能や画像変換機能を利用することができます。
- CloudinaryやFastlyなどの画像CDNを使用することで、画像をグローバルに配信し、パフォーマンスを向上させることができます。
画像のレスポンシブ対応
srcset
属性やpicture
要素を使用します。- 画像のサイズをデバイスの画面サイズに合わせて調整することで、ユーザー体験を向上させることができます。
<picture>
<source srcset="image-small.jpg 320w, image-medium.jpg 640w, image-large.jpg 1280w" />
<img src="image-large.jpg" alt="My Image" />
</picture>
import React from 'react';
import styles from './MyComponent.module.css';
function MyComponent() {
return (
<img src={styles.myImage} alt="My Image" />
);
}
import React from 'react';
import styled from 'styled-components';
const MyImage = styled.img`
width: 200px;
height: 200px;
`;
function MyComponent() {
return (
<MyImage src="my-image.jpg" alt="My Image" />
);
}
<picture>
<source srcset="image-small.jpg 320w, image-medium.jpg 640w, image-large.jpg 1280w" />
<img src="image-large.jpg" alt="My Image" />
</picture>
reactjs