本日、React Native 0.85 をリリースしました。このリリースには新しい Shared Animation Backend(アニメーションバックエンド)の導入、Jest プリセットの専用パッケージへの移動、その他多くの改善と修正が含まれます。
ハイライト
- 新しい Animation Backend
- React Native DevTools の改善
- Metro の TLS サポート
主な変更点
- Jest プリセットが新しいパッケージへ移動
- EOL(サポート終了)となった Node.js バージョンのサポートを削除
- StyleSheet.absoluteFillObject の削除
新しいアニメーションバックエンド
React Native 0.85 では、Software Mansion と協力して構築された新しい Shared Animation Backend を導入しました。これは Animated と Reanimated 両方の内部でアニメーションがどのように適用されるかを担う新しいエンジンです。
アニメーションの主要な更新ロジックを React Native コアに移行することで、Reanimated はこれまで不可能だったパフォーマンス向上を実現でき、更新の調停(reconciliation)プロセスが適切にテストされ、今後の RN アップデートでも安定して保たれることが期待できます。
Animated では、以前は制約があったネイティブドライバーによるレイアウトプロパティのアニメーションが可能になりました(旧制約はもはや適用されません)。
- iOS、Android の両方で利用可能
- 追加の例は
react-native/packages/rn-tester/js/examples/AnimationBackend/ にあります
info: この実験的機能は React Native 0.85.1 から利用可能になります。0.85.1 は近日公開予定です。
レイアウトプロパティをアニメートする方法
新しいアニメーションバックエンドにより、Animated で Flexbox や位置プロパティを useNativeDriver でアニメートできます。
import { Animated, Button, View, useAnimatedValue, } from 'react-native'
function MyComponent() {
const width = useAnimatedValue(100)
const toggle = () => {
Animated.timing(width, {
toValue: 300,
duration: 500,
useNativeDriver: true,
}).start()
}
return (
<View style={{ flex: 1 }}>
<Animated.View style={{ width, height: 100, backgroundColor: 'blue' }} />
<Button title="Expand" onPress={toggle} />
</View>
)
}
実験的チャンネルの有効化方法はこのページで説明されています。
React Native DevTools の改善
- 複数の CDP 接続: React Native は複数の同時 Chrome DevTools Protocol 接続をサポートするようになりました。これにより、React Native DevTools、VS Code、AI エージェントなどのクライアントが同時に接続でき、セッションが予期せず終了することなくリッチで組み合わせ可能なツールワークフローが可能になります。
- macOS のネイティブタブ: デスクトップアプリを macOS 26 向けにコンパイルするよう更新し、システムレベルのタブ操作を有効にしました。複数の DevTools ウィンドウが開いているときは Window > Merge All Windows でアクセスできます。
- リクエストペイロードのプレビュー: 回帰のために無効になっていた Network パネルのリクエストボディプレビューが Android で復元されました。
Metro TLS サポート
Metro 開発サーバーは TLS 設定オブジェクトを受け付けられるようになり、開発中に HTTPS(および Fast Refresh 用の WSS)を利用できるようになりました。セキュア接続を必須とする API のテストに便利です。metro.config.js に次のように設定します。
const fs = require('fs');
config.server.tls = {
ca: fs.readFileSync('path/to/ca'),
cert: fs.readFileSync('path/to/cert'),
key: fs.readFileSync('path/to/key'),
};
ローカル開発向けには、mkcert を使うとブラウザ警告なしでローカルに信頼された証明書を生成できます。
破壊的変更(Breaking Changes)
Jest プリセットが新しいパッケージへ移動
React Native の Jest preset は react-native から @react-native/jest-preset に抽出され、コアパッケージのサイズが削減され、プロジェクト側でのテスト設定の柔軟性が向上しました。jest.config.js を次のように1行変更してください:
- preset: 'react-native',
+ preset: '@react-native/jest-preset',
EOL の Node.js バージョンのサポート削除
React Native 0.85 は EOL(サポート終了)となった Node.js バージョンや v20.19.4 より古いリリースをサポート対象外にしました。アップグレード前にサポート対象の Node.js を使用していることを確認してください。
- Node.js v20 (>=20.19.4) — Supported (Active LTS)
- Node.js v21 — Not supported (EOL)
- Node.js v22 — Supported (Active LTS)
- Node.js v23 — Not supported (EOL)
- Node.js v24+ — Supported
StyleSheet.absoluteFillObject の削除
非推奨だった StyleSheet.absoluteFillObject API は削除されました。代わりに StyleSheet.absoluteFill を使用するか、自分で絶対位置指定のスタイルを定義してください。
- const styles = StyleSheet.absoluteFillObject
+ const styles = StyleSheet.absoluteFill
その他の破壊的変更
全般
- Pressable が hidden Activity でイベントリスナーをアンマウントしなくなりました。
- ShadowNode::Shared、ShadowNode::Weak、ShadowNode::Unshared、ShadowNode::ListOfWeak、ShadowNode::ListOfShared、SharedImageManager、ContextContainer::Shared の非推奨の C++ 型エイリアスを削除しました。これらは使用されておらず、利用ライブラリは型を直接使用するべきです。
Android
- receiveTouches をデフォルトで no-op として RCTEventEmitter に再追加しました。まだこのメソッドを使っているライブラリとの互換性を低減するための修正です。
- ReactTextUpdate は内部実装となり、直接公開アクセスすべきではありません。
- レガシーアーキテクチャのクリーンアップとして複数のクラスが非推奨または削除されました:
- ReactZIndexedViewGroup は非推奨になりました。
- UIManagerHelper は非推奨になりました。
- CatalystInstanceImpl は削除されました(以前に非推奨)。
- NativeViewHierarchyManager は完全にスタブ化されました。
iOS
- RCTHostRuntimeDelegate は非推奨となり RCTHostDelegate に統合されました。
- React.XCFramework を使用した場合の重複シンボルエラーを修正しました(fmt を 12.1.0 に上げたことによる修正)。
その他の変更
- Metro を ^0.84.0 に更新しました。
- React は Hermes 250829098.0.10 を取り込むよう更新されました。
- Yoga: Android 側で YogaNode を Kotlin に移行しました。
- アクセシビリティ: AccessibilityInfo.setAccessibilityFocus は非推奨となり、代わりに AccessibilityInfo.sendAccessibilityEvent を使用してください。
- TypeScript: 複数のユーティリティ型変換($Values, mixed, $ReadOnly, $ReadOnlyArray)に関する修正。
- Android ビルド: reactNativeDevServerIp Gradle プロパティで dev server の IP を指定できるようになりました。
- iOS ビルド: React.XCFramework に clang virtual file system のサポートを追加しました。
謝辞
React Native 0.85 は 58 名のコントリビュータによる 604 件以上のコミットを含みます。皆さんの貢献に感謝します。特に本リリースで重要な貢献をしてくれたコミュニティメンバーに感謝します:
- Zeya Peng
- Bartłomiej Błoniarz
- Dawid Małecki(Animated Backend)
- Vitali Zaidman(Metro TLS)
- Moti Zilberman(Multiple CDP Connections)
- Phil Pluckthun、Alex Hunt(Jest Preset migration)
また、本リリース記事の機能ドキュメント作成に協力した追加の作者の皆様にも感謝します。
0.85 へのアップグレード
info: 0.85 は現在の最新の安定版です。0.82.x は非サポートになります。詳細は React Native のサポートポリシー を参照してください。
アップグレードする際は、既存プロジェクト間でのコード差分を確認するために React Native Upgrade Helper と Upgrading ドキュメントを併用してください。
新しいプロジェクトを作成する場合:
npx @react-native-community/cli@latest init MyProject --version latest
Expo を使用している場合、次の SDK(SDK 56)が React Native 0.85 を含む予定です。