メインコンテンツへスキップ

React Native 0.59のリリース

·7分で読めます
Ryan Turner
コアメンテナー & React Native開発者

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が遅延ロードするコンポーネントを識別できるようになります。コンポーネントアーキテクチャが深く多様なアプリは、最も大きな改善が見られるでしょう。

source of the metro.config.js file in the 0.59 template, demonstrating where to enable inlineRequires

この機能をデフォルトで有効にする前に、コミュニティからのフィードバックが必要です。0.59にアップグレードすると、新しいmetro.config.jsファイルが作成されます。オプションをtrueに設定して、フィードバックをお寄せください!アプリのベンチマークについては、パフォーマンスドキュメントでインラインrequireの詳細をご覧ください。

🚅 Lean Coreが進行中

React Nativeは、複雑なリポジトリを持つ大規模で複雑なプロジェクトです。これにより、コードベースはコントリビューターにとってアクセスしにくく、テストが困難であり、開発依存関係として肥大化しています。Lean Coreは、より良い管理のためにコードを別々のライブラリに移行することで、これらの問題に対処するための私たちの取り組みです。過去数回のリリースでその第一歩が見られましたが、本格的に取り組みましょう

一部の追加コンポーネントが正式に非推奨になったことに気づくかもしれません。これは素晴らしいニュースです。これらの機能には、現在、積極的にメンテナンスを行っている所有者がいます。警告メッセージに注意し、これらの機能には新しいライブラリに移行してください。なぜなら、それらは将来のリリースで削除されるからです。以下に、コンポーネント、そのステータス、および移行先を示す表を示します。

コンポーネント非推奨?新しいホーム
AsyncStorage0.59@react-native-community/react-native-async-storage
ImageStore0.59expo-file-systemまたはreact-native-fs
MaskedViewIOS0.59@react-native-community/react-native-masked-view
NetInfo0.59@react-native-community/react-native-netinfo
Slider0.59@react-native-community/react-native-slider
ViewPagerAndroid0.59@react-native-community/react-native-viewpager

今後数ヶ月で、さらに多くのコンポーネントがこの道をたどってコアをスリム化する予定です。この取り組みにご協力いただける方を募集しています。リーンコアアンブレラをご覧ください。

👩🏽‍💻 CLIの改善

React Nativeのコマンドラインツールは開発者にとってエコシステムへの入り口でしたが、長年の問題があり、公式のサポートが不足していました。CLIツールは新しいリポジトリに移動され、専門のメンテナーグループがすでにいくつかの刺激的な改善を行っています。

ログのフォーマットが大幅に改善されました。コマンドはほぼ瞬時に実行されるようになりました。すぐに違いに気づくでしょう。

0.58's CLI is slow to start0.58's CLI is nearly instantaneous

🚀 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の最新の推奨事項に従ってクリーンアップされており、既存のアプリに潜在的な破損を引き起こす可能性があります。この問題は、ランタイムクラッシュと「You need to use a Theme.AppCompat theme (or descendant) with this activity」というメッセージとして現れる可能性があります。プロジェクトのAndroidManifest.xmlファイルを更新し、android:themeの値がAppCompatテーマ(例:@style/Theme.AppCompat.Light.NoActionBar)であることを確認することをお勧めします。

react-native-git-upgradeコマンドは0.59で削除され、新しく改良されたreact-native upgradeコマンドが推奨されます。

🤗 感謝

多くの新しいコントリビューターがFlowタイプからのネイティブコード生成の有効化Xcodeの警告の解決に協力してくれました。これらはReact Nativeの仕組みを学び、より良いものに貢献するための素晴らしい方法です。ありがとうございます!今後も同様の問題にご期待ください。

これらが私たちが注目したハイライトですが、他にも多くのエキサイティングなアップデートがあります。すべてのアップデートについては、変更ログをご覧ください。0.59は大規模なリリースです。ぜひお試しください。

年末にかけて、さらに多くの改善が予定されています。ご期待ください!

RyanReact Nativeコアチーム一同