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

React Native 0.59のリリース

·6分の読書
Ryan Turner
コアメンテナーおよびReact Native開発者

React Nativeの0.59リリースへようこそ!これは、88人の貢献者による644件のコミットを含む、またしても大きなリリースです。貢献は他の形でも行われていますので、問題の維持、コミュニティの育成、React Nativeについての人々への教育に感謝いたします。今月は多くの期待されていた変更があり、皆様に楽しんでいただければ幸いです。

🎣 フックが登場

Reactフックはこのリリースの一部であり、コンポーネント間でステートフルロジックを再利用できます。フックについては多くの話題がありますが、まだ聞いたことがない場合は、以下の素晴らしいリソースをご覧ください

アプリでこれを試してみてください。再利用が私たちと同じようにエキサイティングであることを願っています。

📱 更新された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の詳細については、パフォーマンスドキュメントをご覧ください。

🚅 リーンコアが進行中

React Nativeは、複雑なリポジトリを持つ大規模で複雑なプロジェクトです。これにより、コードベースがコントリビューターにとって接近しにくくなり、テストが難しくなり、開発依存関係として肥大化します。リーンコアは、より良い管理のためにコードを個別のライブラリに移行することで、これらの問題に対処するための取り組みです。過去数回のリリースでこの最初のステップが見られましたが、真剣に取り組みましょう

追加のコンポーネントが公式に非推奨になったことに気付くかもしれません。これは、これらの機能を積極的に維持している所有者がいるようになったため、朗報です。警告メッセージに注意し、これらの機能の新しいライブラリに移行してください。今後のリリースで削除される予定です。以下は、コンポーネント、そのステータス、および使用を移行できる場所を示すテーブルです。

コンポーネント非推奨?新しい場所
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の最新の推奨事項に従ってクリーンアップされました。これにより、既存のアプリが潜在的に破損する可能性があります。この問題は、ランタイムクラッシュと「このアクティビティではTheme.AppCompatテーマ(または子孫)を使用する必要があります」というメッセージとして表示される場合があります。プロジェクトの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コアチームのメンバー一同