@expo/vector-icons から @react-native-vector-icons への移行推奨
Key Points
- codemodで自動変換
- expo-fontの確認必須
- バンドルサイズ削減
Summary
Expo は今後、ラッパーの @expo/vector-icons ではなく、アイコンパック別の @react-native-vector-icons(@react-native-vector-icons スコープ内の最新パッケージ)を推奨します。これらは expo-font とネイティブ連携し、Expo Go / 開発ビルド / OTA で動作します。移行によりエコシステムが簡潔になり、バンドルサイズが小さくなり、設定の煩雑さが減ります。@expo/vector-icons は将来的に非推奨予定ですが、移行期間は維持されます。オープンな問題報告を歓迎します。
Key Points
-
変更理由
@expo/vector-iconsはかつて利便性のためのラッパーだったが、エイリアスやメンテナンス負荷が増加。- 新しい
@react-native-vector-icons/*パッケージはexpo-fontと直接統合され、全コンテキストで動作する。
-
メリット
- 最新アイコンセット(例: Lucide など)へのアクセス
- アプリのバンドル/アセットサイズ削減(実例: インポート変更で約4MB 削減)
- エイリアス不要で設定が簡潔に
-
具体的な移行手順(実務向け)
npx @react-native-vector-icons/codemodを実行してインポートを自動変換npx expo doctorで@expo/vector-iconsや旧react-native-vector-iconsが残っていないか確認expo-fontがインストール・設定されていることを確認- 注意:
node_modules/@react-native-vector-icons/のフォントパスをexpo-font設定に直接追加しない(ビルドエラーになる) - カスタムアイコン(createIconSetFromIcoMoon 等)を再確認し、型チェックやジェネレータで再生成が必要か確認
-
問題に注意
- 異なるベンダーやバージョンのアイコンパッケージを混在させるとフォント競合(? や空白)が発生する可能性あり。
expo doctorの警告を確認すること。 - 現在 EAS Build の約60% のアプリが
@expo/vector-iconsを使っているため広範囲な影響あり。自動化ツールで移行を簡素化することを推奨。
- 異なるベンダーやバージョンのアイコンパッケージを混在させるとフォント競合(? や空白)が発生する可能性あり。
Action checklist
- プロジェクトで
npx @react-native-vector-icons/codemodを実行 -
npx expo doctorで不整合を検出・修正 -
expo-fontの存在と設定を確認(node_modules のパスを追加しない) - カスタム字体・アイコンの表示を検証
結論
小さな変更でビルドの予測可能性とバンドルサイズ改善が見込めます。提供された codemod と expo doctor を使って順次移行してください。