🔧 対象:フロントエンドエンジニア、Reactユーザー、Web APIを使う人
📅 投稿テーマ:「アプリケーションパフォーマンス最適化のヒントを共有しよう!」(Qiita Tech Festa 2025)
👋 はじめに
こんにちは、アミットです!
React × Web APIのアプリを作っていて、こんな悩みありませんか?
- ページ読み込みが遅い…
- スクロールがカクつく…
- 不要なレンダリングが発生している…
本記事では、実務で成果が出たReactアプリのパフォーマンス最適化テクニックを、「Before / After形式」でコード付きで紹介します!
① useMemo / useCallback で不要な再レンダリングを防ぐ
🐌 Before: 毎回再生成される関数
const handleClick = () => {
console.log("Clicked!");
};
<MyComponent onClick={handleClick} />
➡ 子コンポーネントが毎回再レンダリングされる可能性あり
⚡ After: useCallback でメモ化
const handleClick = useCallback(() => {
console.log("Clicked!");
}, []);
✅ 子コンポーネントの再レンダリングを最小限に!
② コンポーネント分割 + React.memo
大量データを扱う表などは、部品単位で分割&メモ化!
const TableRow = React.memo(({ data }) => {
return <tr><td>{data.name}</td></tr>;
});
➡ props.data
が変わらなければ、再描画されません!
③ 不要な再描画を防ぐ React Dev Tools
の活用
✅ Chrome拡張の「Highlight updates」機能をONにして、
✅ 「なぜここが再描画されるのか?」をチェック!
npm i react-devtools
④ Suspense + lazy で画面分割&初期ロードを高速化
const Dashboard = React.lazy(() => import('./Dashboard'));
<Suspense fallback={<Spinner />}>
<Dashboard />
</Suspense>
✅ 大画面の遅延読み込みで初期表示が高速に!
⑤ API呼び出しはキャッシュ戦略を使う(SWR or React Query)
🐌 Before
useEffect(() => {
fetch("/api/user").then(res => res.json()).then(setData);
}, []);
⚡ After(SWR)
import useSWR from "swr";
const fetcher = (url) => fetch(url).then((res) => res.json());
const { data, error } = useSWR("/api/user", fetcher);
✅ キャッシュ・再取得・エラーハンドリングが自動!
⑥ Web Vitals を Site24x7で監視(体験レベルを定量的に)
📊 Site24x7(クラウドAPMツール)を使えば:
- LCP / FID / CLS をグラフ化
- アラート通知
- 地域別のUXレポート
➡ 無料トライアルはこちら 👉 Site24x7を試す
⑦ useTransition で「体感パフォーマンス」をアップ!
React 18 の新機能!
const [isPending, startTransition] = useTransition();
const handleSearch = (text) => {
startTransition(() => {
setSearchQuery(text);
});
};
✅ 重たい処理でも「止まらないUI」を実現!
🧠 まとめ:最適化テクニック一覧
テクニック | 効果 |
---|---|
useCallback / useMemo
|
再描画防止 |
React.memo |
パフォーマンス改善 |
React.lazy + Suspense |
初期表示高速化 |
SWR / React Query |
ネットワーク最適化 |
useTransition |
UX向上(非同期感) |
Site24x7 | 本番環境のUX監視 |
React DevTools |
再レンダリング可視化 |
🎁 Site24x7を試してみた感想(応募用)
実際にSite24x7を使ってみて、以下のようなことがすぐに分かりました:
- 特定ページの読み込みが東南アジアで遅い
- Core Web Vitals がモバイルで悪化していた
- APIレスポンスの変動を通知で受け取れた
➡ 初期セットアップ5分、無料で使えるのが最高!