React Native 0.59のリリース
React Native 0.59のリリースへようこそ!これは、88人の貢献者による644のコミットを含む、もう1つの大規模なリリースです。貢献は他の形でも行われているため、問題の維持、コミュニティの育成、React Nativeに関する指導に感謝いたします。今月は待望の変更がいくつか行われ、皆様に楽しんでいただければ幸いです。
🎣 Hooksが登場
React Hooksはこのリリースの一部であり、コンポーネント間でステートフルなロジックを再利用できます。Hooksについては多くの話題がありますが、まだ聞いたことがない場合は、以下の素晴らしいリソースをご覧ください。
- Hooksの紹介では、なぜReactにHooksを追加するのかを説明しています。
- Hooksの概要では、組み込みHooksの概要を素早く説明しています。
- 独自のHooksの構築では、カスタムHooksによるコードの再利用を示しています。
- React Hooksを理解するでは、Hooksによって開かれた新しい可能性を探求しています。
- useHooks.comでは、コミュニティが管理するHooksのレシピとデモを紹介しています。
ぜひご自身のアプリでお試しください。私たちと同じくらい、再利用性にワクワクしていただけることを願っています。
📱 JSCの更新により、Androidでのパフォーマンス向上と64ビットサポートが実現
React Nativeは、アプリケーションの動作にJSC(JavaScriptCore)を使用しています。Android版のJSCは数年前のものであり、多くの最新JavaScript機能がサポートされていませんでした。さらに悪いことに、iOSの最新JSCと比較してパフォーマンスが劣っていました。このリリースで、それらすべてが変わります。
@DanielZlotin、@dulmandakh、@gengjiawen、@kmagiera、および@kudoの素晴らしい努力のおかげで、JSCはこの数年間の進歩に追いつきました。これにより、64ビットサポート、最新JavaScriptサポート、そして大幅なパフォーマンス改善が実現しました。将来のWebKitの改善を少ない労力で活用できる、維持可能なプロセスを構築してくれたことにも感謝します。また、この作業を可能にしてくれたSoftware MansionとExpoにも感謝します。
💨 インラインrequireでアプリの起動を高速化
私たちは、デフォルトでパフォーマンスの高いReact Nativeアプリを開発できるよう支援し、Facebookの最適化をコミュニティに提供することに取り組んでいます。アプリケーションは、起動を遅らせるのではなく、必要に応じてリソースをロードします。この機能は「インラインrequire」と呼ばれ、Metroが遅延ロードするコンポーネントを識別できるようにします。深く多様なコンポーネントアーキテクチャを持つアプリは、最も改善を実感できるでしょう。

この機能をデフォルトで有効にする前に、コミュニティにその動作を知らせてもらう必要があります。0.59にアップグレードすると、新しいmetro.config.jsファイルが作成されます。オプションをtrueに設定して、ご意見をお聞かせください!アプリをベンチマークするには、パフォーマンスドキュメントでインラインrequireの詳細をご覧ください。
🚅 Lean Coreが進行中
React Nativeは、複雑なリポジトリを持つ大規模で複雑なプロジェクトです。これにより、コードベースがコントリビューターにとって扱いにくく、テストが困難になり、開発依存関係として肥大化しています。Lean Coreは、これらの問題に対処するため、より良い管理のためにコードを別のライブラリに移行する取り組みです。過去数回のリリースでその第一歩が踏み出されましたが、本腰を入れて取り組む時が来ました。
追加のコンポーネントが正式に非推奨になったことに気づかれるかもしれません。これは素晴らしいニュースです。なぜなら、これらの機能のアクティブなメンテナーが今やいるからです。警告メッセージに注意し、これらの機能には新しいライブラリに移行してください。なぜなら、それらは将来のリリースで削除されるからです。以下に、コンポーネント、そのステータス、そして移行先の場所を示す表を示します。
| コンポーネント | 非推奨? | 新しいホーム |
|---|---|---|
| AsyncStorage | 0.59 | @react-native-community/react-native-async-storage |
| ImageStore | 0.59 | expo-file-system または react-native-fs |
| MaskedViewIOS | 0.59 | @react-native-community/react-native-masked-view |
| NetInfo | 0.59 | @react-native-community/react-native-netinfo |
| Slider | 0.59 | @react-native-community/react-native-slider |
| ViewPagerAndroid | 0.59 | @react-native-community/react-native-viewpager |
今後数ヶ月で、より多くのコンポーネントがこのパスに従ってよりスリムなコアに移行する予定です。これに関するご協力を求めています — ぜひリーンコアの包括的なイシューにご協力ください。
👩🏽💻 CLIの改善
React Nativeのコマンドラインツールは開発者にとってエコシステムへの入り口ですが、長年の問題があり、公式サポートが不足していました。CLIツールは新しいリポジトリに移動され、専任のメンテナーグループがすでにいくつかの素晴らしい改善を行っています。
ログのフォーマットが大幅に改善されました。コマンドはほぼ瞬時に実行されるようになりました。すぐに違いに気づくでしょう。


🚀 0.59へのアップグレード
React Nativeのアップグレードプロセスに関するフィードバックをいただきましたので、今後のリリースでのエクスペリエンスを改善するための措置を講じています。0.59にアップグレードするには、rn-diff-purgeを使用して、現在のReact Nativeバージョンと0.59の間で何が変更されたかを特定し、それらの変更を手動で適用することをお勧めします。プロジェクトを0.59にアップグレードすると、新しく改善されたreact-native upgradeコマンド(rn-diff-purgeベース!)を使用して、新しいリリースが利用可能になったときに0.60以降にアップグレードできるようになります。
🔨 破壊的変更
0.59のAndroidサポートはGoogleの最新推奨事項に従って整理され、既存のアプリに潜在的な破損をもたらす可能性があります。この問題は、実行時クラッシュとして「このアクティビティではTheme.AppCompatテーマ(またはその子孫)を使用する必要があります」というメッセージで表示される場合があります。プロジェクトのAndroidManifest.xmlファイルを更新し、android:themeの値がAppCompatテーマ(例:@style/Theme.AppCompat.Light.NoActionBar)であることを確認することをお勧めします。
react-native-git-upgradeコマンドは0.59で削除され、新しく改良されたreact-native upgradeコマンドが推奨されます。
🤗 感謝
多くの新しいコントリビューターがフロー型からのネイティブコード生成を有効にすることやXcodeの警告を解決することに協力してくれました。これらはReact Nativeの動作を学び、より大きな善に貢献する素晴らしい方法です。ありがとうございました!今後も同様の問題に注目してください。
これらが私たちが注目したハイライトですが、他にも多くの興奮すべき点があります。すべてのアップデートを見るには、チェンジログをご覧ください。0.59は大規模なリリースです。ぜひお試しください。
年末にかけて、さらに多くの改善が予定されています。ご期待ください!