openaijamodel: gpt-5-mini-2025-08-07
React 18 へのアップグレードガイド
Key Points
- createRootに移行
- 自動バッチング導入
- サーバーAPIを更新
Summary
React 18 は段階的導入可能な新しい並行レンダラーと、それを使うための新しいルート API を導入します。本稿はエンジニア向けに実務的な移行手順と注意点をまとめたものです。まずパッケージを更新してください:
- npm:
npm install react react-dom - yarn:
yarn add react react-dom
Key Points
-
createRoot に移行
- 既存の
ReactDOM.renderは廃止。react-dom/clientのcreateRoot(container).render(<App />)に置き換える。アンマウントはroot.unmount()。 - サーバーサイドのハイドレーションは
hydrateRoot(container, <App />)に変更。
- 既存の
-
レンダリングコールバックの置き換え
- 旧
renderのコールバックは Suspense 下で期待通りに動かないため、useEffect等で副作用を処理するように書き換える。
- 旧
-
自動バッチング
createRoot利用時はすべての更新が自動でバッチされる(タイムアウト・Promise・ネイティブイベント含む)。即時更新が必要な場合はflushSyncを使用してオプトアウト。
-
サーバー側レンダリング API の更新
- Node のストリーミングは
renderToPipeableStreamへ移行。エッジ環境用にrenderToReadableStreamを導入。既存のrenderToString/renderToStaticMarkupは Suspense のサポートが限定的。
- Node のストリーミングは
-
TypeScript 定義の更新
@types/reactと@types/react-domを最新に更新。childrenを明示する等、型が厳格化された変更に対応する必要あり。自動移行スクリプトを活用。
-
ライブラリ向け新API
- 外部ストア対応の
useSyncExternalStore、スタイル注入向けのuseInsertionEffect、およびstartTransition/useDeferredValue/useIdなどの並行対応 API を確認・採用。
- 外部ストア対応の
-
Strict Mode の開発時チェック
- 開発時にコンポーネントを一度アンマウント→再マウントして副作用の堅牢性を検査。問題が出る場合は移行中に一時的に
StrictModeを外して修正する。
- 開発時にコンポーネントを一度アンマウント→再マウントして副作用の堅牢性を検査。問題が出る場合は移行中に一時的に
-
テスト環境の設定
createRootに切り替えたテストでact(...)警告が出たら、テストセットアップでglobalThis.IS_REACT_ACT_ENVIRONMENT = trueを設定。
-
ブラウザサポート
- Internet Explorer はサポート外。IE サポートが必要な場合は移行計画を検討する。
Recommended migration flow
- 依存更新 (
react,react-dom,@types/*) →createRoot/hydrateRootに置換 → テストと Strict Mode を実行 → 型およびライブラリ互換性の修正 → 本番リリース。
短い手順で段階的に進め、問題は都度修正してから Strict Mode を再度有効にすることを推奨します。