Expo SDK 52 アップグレード時の文字列変換エラー解決法 (largeエラー)
問題説明
Expo SDK 52へアップグレード後、次のエラーが発生するケースがあります:
(NOBRIDGE) ERROR Error: Exception in HostFunction: Unable to convert string to floating point value: "large"
このエラーの特徴:
- SDK 52アップグレード後に突然発生
- "large"という文字列を数値に変換できないことが原因
- スタイルプロパティでの誤った値指定で発生することが多い
- ライブラリ内部の互換性問題が根本原因である場合が多い
根本原因
このエラーの主な原因は以下のいずれかです:
古いライブラリの互換性問題:
- SDK 52で変更された内部実装に対応していないサードパーティライブラリ
- 特に日付ピッカーやUIコンポーネント系ライブラリで発生しやすい
スタイル値の不正な指定:
jsx// 誤った例 (string値が期待されていない場所) <View style={{ width: "large" }} /> // 正しい例 (数値か有効な文字列定数のみ) <View style={{ width: 100 }} /> <View style={{ width: "100%" }} />
アップグレード時の依存関係不一致:
node_modules
の依存関係キャッシュが原因で正常にアップデートされていない
解決手順
ステップ 1: 問題のあるライブラリを特定
bash
# 一時的にnode_modulesを削除
rm -rf node_modules
# パッケージロックファイルを削除
rm -rf package-lock.json # npm
rm -rf yarn.lock # yarn
# 依存関係を再インストール
npm install # or yarn install
# プロジェクト再起動
expo start --clear
ステップ 2: サードパーティライブラリを更新
使用しているライブラリの最新バージョンを確認:
bashexpo doctor
ライブラリを明示的に更新:
bashexpo install react-native-date-picker@latest # 例: 日付ピッカー
ステップ 3: ライブラリ再インストール
既知の不具合があるライブラリは完全削除→再インストール:
bash
# 問題のあるライブラリ削除
npm uninstall react-native-date-picker
# プロジェクトクリーンアップ
npx expo prebuild --clean
# 最新版を再インストール
expo install react-native-date-picker
ステップ 4: スタイル定義を精査
以下のパターンがないかプロジェクト全体を検索:
"large"
が数値が必要な場所で使用されていないかjsx// 誤った使用例 padding: "large" // エラーの原因 fontSize: "large" // 無効な値 // 有効な値 padding: 12 fontSize: 16
よく影響するライブラリ
アップデート必須の主なライブラリ:
react-native-date-picker
react-native-paper
react-native-elements
- その他のUIコンポーネントライブラリ
根本解決のベストプラクティス
段階的アップグレード:
bash# SDK 51→52の推奨アップグレードパス expo install expo@~52.0.0
互換性チェックリスト:
bash# 依存関係の整合性確認 npx expo install --check # 互換性問題を自動修正 npx @expo/doctor
更新前のバックアップ:
bashgit commit -m "Pre SDK52 upgrade state" # または expo prebuild --template /path/to/backup
モジュール解消キャッシュ:
bash# Metroバンドラのキャッシュ削除 npx react-native start --reset-cache
対応後の検証方法
最小再現環境でテスト:
bashexpo init test-project --template bare-minimum
問題ライブラリを個別追加:
bashcd test-project expo install react-native-date-picker
予防策
Expo CLIを使用した依存管理:
bash# インストールには常にexpo installコマンドを使用 expo install [package-name]
定期的な互換性チェック:
bashexpo doctor --fix-dependencies
ロックファイル管理:
json// package.jsonの推奨設定 { "scripts": { "postinstall": "expo install --fix" } }
アップグレード時には公式移行ガイドを必ず参照: → Expo SDK 52 Official Migration Guide