React Compiler 1.0公開日: 2025年10月7日
記事公開日: 2026年4月9日
最終確認日: 2026年7月25日
React Compiler 1.0は、ReactのcomponentとHookをbuild時に解析し、自動でmemoizationする最初の安定版です。
この記事の前半は1.0公開時の記録、後半は2026年時点の導入方法です。 frameworkの設定は更新されるため、利用中のversionに対応する公式手順も確認してください。
1.0で安定版になったもの
React Compilerは、renderに使われる値とfunctionの依存関係を解析し、必要な箇所へmemoizationを適用します。 開発者は最適化のためだけに、すべての値を手動で包む必要がなくなります。

type Product = {
id: string;
name: string;
available: boolean;
};
export function ProductList({ products }: { products: Product[] }) {
const availableProducts = products.filter((product) => product.available);
return (
<ul>
{availableProducts.map((product) => (
<li key={product.id}>{product.name}</li>
))}
</ul>
);
}
このような通常のcomponentを、Compilerがデータフローに基づいて最適化します。 ただし、Compilerを入れればすべての再renderが消えるわけではありません。
Rules of Reactを診断に利用
Compilerは、componentとHookが次の原則を守ることを前提に解析します。
- renderを純粋に保つ
- propsとstateを直接変更しない
- Hookをcomponentまたはcustom Hookのtop levelで呼ぶ
- render中にrefを不正に読み書きしない
現在のlint pluginは、Compilerが検出した問題も表示します。 対応できない構文を見つけた場合、CompilerはそのcomponentやHookの最適化をskipし、他の安全な箇所のcompileを続けられます。
lintの指摘を確認する価値はありますが、全警告を一度に消さなければ試せないわけではありません。
ReactとReact Native
1.0はReactとReact Nativeの両方を対象に公開されました。 新規projectでは、Expo、Vite、Next.jsの作成toolからCompilerを選べる構成も案内されています。
React 17または18を対象にする場合は、react-compiler-runtimeとCompilerのtarget設定が必要です。
Reactのversionだけでなく、build toolとlibraryの組み合わせもtestします。
lint pluginはReact Hooksへ統合
1.0公開時に、Compilerのlint ruleはeslint-plugin-react-hooksへ統合されました。
以前の独立したCompiler用lint pluginを前提にした設定は更新が必要です。
npm install --save-dev eslint-plugin-react-hooks@latest
Flat Configでは、公式pluginのrecommended presetを利用できます。
import reactHooks from "eslint-plugin-react-hooks";
import { defineConfig } from "eslint/config";
export default defineConfig([
reactHooks.configs.flat.recommended,
]);
Compiler本体をまだ導入していないprojectでも、このlint ruleを利用できます。
rules-of-hooksやexhaustive-depsに加え、immutability、purity、ref、manual memoizationの保持などを確認できます。
既存のmemoizationはすぐ消さない
新しく書くcodeでは、まずCompilerにmemoizationを任せ、必要な場合だけ手動で制御する方針を選べます。
一方、既存のuseMemo、useCallback、React.memoを検索置換で一括削除してはいけません。
React公式は、既存のmanual memoizationを残すか、十分にtestしてから削除するよう案内しています。
理由は、次のようなcodeが存在するためです。
- memoized valueのidentityをEffectのdependencyとして利用している
- child componentや外部libraryが参照の安定性に依存している
- 手動指定がCompilerの出力へ影響している
- performance以外の意図をcommentやtestが表している
preserve-manual-memoizationのlint指摘も確認し、削除候補ごとに挙動とProfilerを比較します。
2026年時点の導入手順
1. 現在の状態を測る
Compiler導入前に、遅い操作、render回数、主要なunit testとE2E testの結果を記録します。 測定対象がなければ、導入後の効果や回帰を判断できません。
2. lintだけ先に更新する
eslint-plugin-react-hooksを更新し、Compiler diagnosticsを確認します。
指摘の数だけで失敗と判断せず、Rules of React違反、非対応構文、library由来の問題に分類します。
3. Compilerをexact versionで追加する
npm install --save-dev --save-exact babel-plugin-react-compiler@latest
--save-exactは、その時点で解決されたversionを固定します。
Compilerのmemoization方法は将来変わる可能性があるため、upgradeはtestと一緒に行います。
frameworkを使わないBabel構成では、pluginを追加します。
export default {
plugins: ["babel-plugin-react-compiler"],
};
Vite、Next.js、Expoなどでは、上のBabel設定をそのまま転用せず、現在のframework公式手順を使ってください。 過去のexperimental flagを新しいversionへコピーしないようにします。
4. 小さな範囲から有効化する
既存projectでは、annotation modeやgatingなどの段階導入方法を検討できます。 最初は変更頻度が低く、testのある画面を選びます。
次を導入前後で比べます。
- 表示内容とuser操作
- Effectの実行回数
- render回数とinteraction時間
- error log
- development buildとproduction build
Compilerの導入そのものをperformance改善とみなさず、Profilerと実際の操作で判断します。
5. 段階的に広げる
限定範囲で問題がなければ、対象を少しずつ増やします。 manual memoizationの整理はCompilerの展開と分け、別の小さな変更としてreviewします。
導入checklist
- 利用中のReact、React Native、framework、build toolのversionを記録した
- 公式installationで現在の設定方法を確認した
- React 17または18ではruntimeとtargetを確認した
eslint-plugin-react-hooksを更新した- Compiler packageをexact versionで固定した
- Rules of Reactの指摘を分類した
- 既存manual memoizationを一括削除していない
- unit test、E2E test、production buildで確認した
- Profilerで導入前後を比較した
- Compiler upgrade時にも同じ確認を行う
2026年時点の読み方
React Compiler 1.0は安定版ですが、すべてのappで同じ効果や互換性を保証するものではありません。 Compilerがskipした箇所、非対応library、build時間、生成code、実際の操作速度をprojectごとに確認します。
また、framework側の統合はCompiler本体とは別に更新されます。 この記事の固定設定より、利用中versionの公式documentationを優先してください。
参考リソース
- React Compiler v1.0(公式)
- React Compiler installation(公式)
- Incremental adoption(公式)
- React Compiler configuration(公式)
- eslint-plugin-react-hooks(公式)
- React Compiler Playground(公式)