React Native 0.66 の発表
本日、Android 12とiOS 15のサポート、修正、および一般的なアップデートと共に、React Native v0.66をリリースします。
本日、Android 12とiOS 15のサポート、修正、および一般的なアップデートと共に、React Native v0.66をリリースします。
本日、新しいバージョンのHermes、アクセシビリティの改善、パッケージのアップグレードなどを含む、React Nativeバージョン0.65をリリースします。
React Native向けに最適化されたFacebookのオープンソースJavaScript VMであるHermesがバージョン0.8.1にアップグレードされました。このリリースにおける注目すべき機能の一部は以下のとおりです。
Intl
)がAndroidでHermesに組み込まれ、デフォルトで有効になりました。APIサイズオーバーヘッドは57〜62KBのみです(JSCの6MiBと比較)。この変更により、Hermesユーザーはロケールポリフィルを必要としなくなります。この実装を推進して実現してくれた@mganandrajとMicrosoftの他のパートナーに感謝します!Function.prototype.toString
への変更により、不適切な機能検出によるパフォーマンス低下が修正され、ソースコードの注入ユースケースがサポートされました。手順はこちらに従って、まだ行っていない場合はアプリでHermesをオプトインし、これらの新機能と利点を活用しましょう!
昨年、FacebookはGAAD誓約を行い、React Native内のアクセシビリティを向上させました。0.65はこの誓約の結果と、その他のアクセシビリティの成果を共有しています!注目すべき変更点には、以下が含まれます。
getRecommendedTimeoutMillis
APIを追加しました。これにより、Androidのアクセシビリティオプションで設定されたユーザーの推奨デフォルトタイムアウト値が公開されます。これは、コントロールの確認や操作に余分な時間が必要なユーザー向けです。disabled
やunselected
などのUIの状態をコンポーネントで適切に読み上げるように、一般的な修正を行いました。未解決のアクセシビリティの問題はこちらで確認したり、貢献したりできます!
package.json
でdevDependency
としてreact-native-codegen
バージョン0.0.7
が必要になりました。このリリースには、61人のコントリビューターによる1100件以上のコミットが含まれています。このリリースに貢献し、サポートしてくれた皆様に感謝申し上げます!変更ログ全文はこちら。
本日、iOSでHermesのサポートを提供するReact Native 0.64をリリースします。
Hermesは、React Nativeの実行に最適化されたオープンソースのJavaScriptエンジンです。メモリ使用量の削減、ダウンロードサイズの縮小、アプリが使用可能になるまでの時間(対話時間、TTI)の短縮により、パフォーマンスを向上させます。
今回のリリースでは、iOSでもHermesを使用できるようになったことをお知らせいたします。iOSでHermesを有効にするには、`Podfile`で`hermes_enabled`を`true`に設定し、`pod install`を実行してください。
use_react_native!(
:path => config[:reactNativePath],
# to enable hermes on iOS, change `false` to `true` and then install pods
:hermes_enabled => true
)
iOSにおけるHermesのサポートはまだ初期段階であることにご注意ください。現在もベンチマークテストを実施しているため、オプトイン方式としています。皆様のアプリケーションでお試しいただき、ご意見をお寄せいただければ幸いです!
インラインRequireは、Metroの設定オプションです。起動時にJavaScriptモジュールを実行するのではなく、使用されるまで実行を遅らせることで、起動時間を短縮します。
この機能は数年前からオプトイン設定オプションとして存在し、推奨されてきました。ドキュメントのパフォーマンスセクションに記載されています。今回、新しいアプリケーションではこのオプションをデフォルトで有効化することにより、追加の設定なしで高速なReact Nativeアプリケーションを実現できるようにしました。
インラインRequireは、モジュールインポートを処理してインライン化するBabel変換です。例として、インラインRequireは、ファイルの先頭にあるこのモジュールインポート呼び出しを、使用されている場所に移動します。
変更前
import {MyFunction} from 'my-module';
const MyComponent = props => {
const result = MyFunction();
return <Text>{result}</Text>;
};
変更後
const MyComponent = props => {
const result = require('my-module').MyFunction();
return <Text>{result}</Text>;
};
インラインRequireの詳細については、パフォーマンスドキュメントをご覧ください。
昨年、FacebookはMajor League Hackingフェローシップをスポンサーし、React Nativeへの貢献を支援しました。Jessie NguyenとSaphal Patroは、Hermesを使用している場合に、Chrome DevToolsのパフォーマンスタブを使用してアプリケーションの実行を視覚化できるようにしました。
詳細については、新しいドキュメントページをご覧ください。
HermesにProxyサポートを追加しました。これにより、react-native-firebaseやmobxなどの一般的なコミュニティプロジェクトとの互換性が向上します。これらのパッケージを使用している場合は、プロジェクトをHermesに移行できるようになりました。
今後のリリースで、HermesをAndroidのデフォルトJavaScriptエンジンにする予定です。そのため、Hermesを使用する際に発生する残りの問題を解決するために取り組んでいます。アプリのHermesへの移行を妨げている問題があれば、HermesのGitHubリポジトリで問題を報告してください。
React 17には、新しい開発者向け機能や主要な破壊的変更は含まれていません。React Nativeアプリケーションにとって主な変更点は、新しいJSX変換で、JSXを使用するためにファイルでReactをインポートする必要がなくなったことです。
React 17の詳細については、Reactブログをご覧ください。
0.64のリリースに貢献してくださった数百人のコントリビューターに感謝いたします!0.64の変更ログには、このリリースに含まれるすべての変更が記載されています。
本日、LogBoxをデフォルトで有効にしたReact Native 0.63をリリースします。
React Nativeでエラーや警告のデバッグが難しいというコミュニティからのフィードバックを頻繁に受けてきました。これらの問題に対処するために、React Nativeのエラー、警告、ログシステム全体を見直し、一から設計し直しました。
LogBoxは、React Nativeのredbox、yellowbox、およびロギングエクスペリエンスを完全に再設計したものです。0.62ではLogBoxをオプトインとして導入しましたが、今回のリリースでは、すべてのReact Nativeでデフォルトのエクスペリエンスとして提供します。
LogBoxは、エラーと警告が冗長すぎる、フォーマットが不適切である、または対処できないという不満に対処するために、次の3つの主要な目標に焦点を当てています。
これらの目標を達成するために、LogBoxには次のものが含まれています。
これらの機能をすべて、エラーと警告間で一貫性のある、改良された視覚デザインにまとめました。これにより、1つの使いやすいUIですべてのログをページングできます。
この変更に伴い、LogBox APIの代わりにYellowBoxを非推奨とします。
0.63では、これらの非推奨のモジュールまたはメソッドを使用している場合に警告が表示されます。0.64で削除される前に、これらのAPIからの呼び出しサイトを更新してください。
LogBoxとReact Nativeのデバッグの詳細については、こちらのドキュメントを参照してください。
React Nativeは、アプリケーションがプラットフォームのユーザーの期待を満たせるように構築されています。これには、「ヒント」—React Nativeで構築されたエクスペリエンスであることを示す小さなもの—を避けることが含まれます。これらのヒントの主な原因の1つは、Touchableコンポーネント(`Button`、`TouchableWithoutFeedback`、`TouchableHighlight`、`TouchableOpacity`、`TouchableNativeFeedback`、`TouchableBounce`)です。これらのコンポーネントにより、ユーザーインタラクションへの視覚的なフィードバックを提供することで、アプリケーションをインタラクティブにできます。ただし、プラットフォームのインタラクションと一致しない組み込みのスタイルとエフェクトが含まれているため、ユーザーはエクスペリエンスがReact Nativeで記述されていることがわかります。
さらに、React Nativeが成長し、高品質なアプリケーションに対する基準が高まるにつれて、これらのコンポーネントは成長していません。React Nativeは現在、Web、デスクトップ、TVなどのプラットフォームをサポートしていますが、追加の入力モダリティのサポートが不足していました。React Nativeは、すべてのプラットフォームで高品質なインタラクションエクスペリエンスをサポートする必要があります。
これらの問題に対処するために、`Pressable`という新しいコアコンポーネントを提供しています。このコンポーネントを使用して、さまざまな種類のインタラクションを検出できます。このAPIは、親コンポーネントで手動で状態を維持する必要なく、インタラクションの現在の状態に直接アクセスできるように設計されました。また、ホバー、ブラー、フォーカスなどを含む機能を拡張できるように設計されています。ほとんどの人は、`TouchableOpacity`などのデフォルトのエクスペリエンスに依存するのではなく、内部で`Pressable`を利用してコンポーネントを作成し、共有すると予想されます。
import {Pressable, Text} from 'react-native';
<Pressable
onPress={() => {
console.log('pressed');
}}
style={({pressed}) => ({
backgroundColor: pressed ? 'lightskyblue' : 'white',
})}>
<Text style={styles.text}>Press Me!</Text>
</Pressable>;
動作中のPressableコンポーネントの簡単な例
ドキュメントで詳細を確認できます。
すべてのネイティブプラットフォームには、システム定義の色という概念があります。ライトモードやダークモードなどのシステムテーマ設定、高コントラストモードなどのアクセシビリティ設定、含まれているビューやウィンドウの特性など、アプリ内のコンテキストにも自動的に対応する色です。
`Appearance`APIや`AccessibilityInfo`を使用してこれらの設定を検出し、それに応じてスタイルを設定することは可能ですが、そのような抽象化は開発コストが高く、ネイティブカラーの外観を近似しているに過ぎません。これらの不一致は、React Native要素とネイティブ要素が共存するハイブリッドアプリケーションで特に目立ちます。
React Nativeは、これらのシステムカラーを使用するためのすぐに使えるソリューションを提供するようになりました。`PlatformColor()`は、React Nativeの他の色と同じように使用できる新しいAPIです。
たとえば、iOSでは、システムは`labelColor`と呼ばれる色を提供しています。これは、次のように`PlatformColor`を使用してReact Nativeで使用できます。
import {Text, PlatformColor} from 'react-native';
<Text style={{color: PlatformColor('labelColor')}}>
This is a label
</Text>;
Textコンポーネントの色を、iOSで定義されている`labelColor`に設定します。
一方、Androidは`colorButtonNormal`などの色を提供しています。これは、次のようにReact Nativeで使用できます。
import {View, Text, PlatformColor} from 'react-native';
<View
style={{
backgroundColor: PlatformColor('?attr/colorButtonNormal'),
}}>
<Text>This is colored like a button!</Text>
</View>;
Viewコンポーネントの背景色を、Androidで定義されている`colorButtonNormal`に設定します。
`PlatformColor`の詳細については、ドキュメントを参照してください。また、RNTesterにある実際のコード例も確認できます。
`DynamicColorIOS`は、iOS専用のAPIで、ライトモードとダークモードで使用する色を定義できます。`PlatformColor`と同様に、これは色が使用できる場所であればどこでも使用できます。`DynamicColorIOS`は、内部的にiOSの`colorWithDynamicProvider`を使用します。
import {Text, DynamicColorIOS} from 'react-native';
const customDynamicTextColor = DynamicColorIOS({
dark: 'lightskyblue',
light: 'midnightblue',
});
<Text style={{color: customDynamicTextColor}}>
This color changes automatically based on the system theme!
</Text>;
システムテーマに基づいてテキストの色を変更します。
DynamicColorIOS
の詳細については、ドキュメントをご覧ください。
リリースから4年以上経過したため、iOS 9のサポートを終了します。この変更により、特定のiOSバージョンで特定の機能がサポートされているかどうかを検出するためにネイティブコードに配置する必要のある互換性チェックの数を減らすことができるようになり、開発速度を向上させることができます。市場シェアが1%であるため、お客様への悪影響はほとんどありません。
同時に、Node 8のサポートも終了します。LTSメンテナンスサイクルは2019年12月に終了しました。現在のLTSはNode 10であり、これが現在ターゲットとしているバージョンです。React Nativeアプリケーションの開発にNode 8を引き続き使用している場合は、最新のセキュリティ修正とアップデートを受信するためにアップグレードすることをお勧めします。
<Text />
内で<View />
を明示的なサイズなしでレンダリングするサポート: 幅と高さを明示的に設定せずに、任意の<View />
を任意の<Text />
コンポーネント内でレンダリングできるようになりました。以前のReact Nativeリリースでは、これによりRedBoxが表示されていました。xib
からstoryboard
に変更: 2020年4月30日から、App Storeに提出されるすべてのアプリは、アプリの起動画面にXcode storyboardを使用する必要があり、すべてのiPhoneアプリはすべてのiPhone画面をサポートする必要があります。このコミットにより、デフォルトのReact Nativeテンプレートがこの要件に準拠するように調整されています。0.63を可能にした何百人もの貢献者の方々に感謝します!
LogBox
に関するセクションの作成に貢献してくれたRick Hanlon氏と、この記事のPressable
部分の作成に貢献してくれたEli White氏に特別な感謝を申し上げます。
すべてのアップデートを確認するには、0.63の変更ログをご覧ください。
本日、FlipperをデフォルトでサポートするReact Nativeバージョン0.62をリリースします。
このリリースは、世界的なパンデミックの最中に発表されます。このリリースを可能にした何百人もの貢献者の方々の努力を尊重し、リリースがmasterからあまり遅れすぎないようにするために、本日このバージョンをリリースします。問題の解決に貢献できる能力の低下に留意し、必要に応じてアップグレードの延期を検討してください。
Flipperは、モバイルアプリのデバッグのための開発者ツールです。AndroidとiOSのコミュニティで人気があり、このリリースでは、新規および既存のReact Nativeアプリでデフォルトでサポートが有効になりました。
Flipperは、すぐに使用できる次の機能を提供します。
さらに、Flipperは拡張可能なプラットフォームであるため、NPMからプラグインを取得するマーケットプレイスを提供しており、ワークフローに固有のカスタムプラグインを公開およびインストールできます。利用可能なプラグインはこちらを参照してください。
詳細については、Flipperのドキュメントをご覧ください。
ユーザーの外観設定(好ましい配色スキーム(明または暗))にアクセスするための新しいAppearance
モジュールを追加しました。
const colorScheme = Appearance.getColorScheme();
if (colorScheme === 'dark') {
// Use dark color scheme
}
ユーザー設定の状態の更新を購読するためのフックも追加しました。
import {Text, useColorScheme} from 'react-native';
const MyComponent = () => {
const colorScheme = useColorScheme();
return <Text>useColorScheme(): {colorScheme}</Text>;
};
詳細については、AppearanceとuseColorSchemeのドキュメントをご覧ください。
Lean Coreの取り組みの一環として、React Native WindowsやReact Native macOSなどの他のプラットフォームとApple TVを連携させるために、コアからApple TV固有のコードの削除を開始しました。
今後は、React NativeのApple TVサポートは、対応するreact-native-tvos
NPMパッケージと共にreact-native-community/react-native-tvosで維持されます。これはメインリポジトリの完全なフォークであり、Apple TVをサポートするために必要な変更のみが含まれています。
react-native-tvos
のリリースは、React Nativeのパブリックリリースに基づいています。このreact-native
の0.62リリースでは、Apple TVプロジェクトをreact-native-tvos
0.62を使用するようにアップグレードしてください。
0.61がリリースされたとき、コミュニティは、React Nativeの新しいバージョンにアップグレードする開発者をサポートするために、新しいアップグレードヘルパーツールを導入しました。アップグレードヘルパーは、現在のバージョンからターゲットとするバージョンへの変更の差分を提供し、特定のアップグレードに必要な変更を確認できます。
このツールを使用しても、アップグレード時に問題が発生します。本日、Upgrade-Supportを発表することにより、より専用のアップグレードサポートを導入します。Upgrade Supportは、ユーザーがプロジェクトのアップグレードに固有の問題を提出してコミュニティからの支援を受けられるGitHubの問題トラッカーです。
アップグレードエクスペリエンスの改善に常に取り組んでおり、これらのツールにより、まだ対処していないエッジケースでユーザーに必要なサポートを提供できると期待しています。
require('react-native').unstable_enableLogBox()
をindex.js
ファイルに追加します。onSlidingComplete
アクセシビリティイベント、Switchコンポーネントのデフォルトの役割を"button"
から"switch"
に変更するなど、アクセシビリティが改善されました。propTypes
を削除します。accessibilityStates
プロパティを、コンポーネントがアクセシビリティサービスに状態に関する情報をより意味的に記述するための新しいaccessibilityState
プロップに置き換えました。onTextInput
をTextInputから削除しました。また、文書化されていないinputView
プロップとselectionState
も削除しました。AccessibilityInfo.fetch
は既に非推奨でしたが、このリリースでは警告を追加しました。useNativeDriver
の設定が必須になりました。Animated
コンポーネントのref
は、内部コンポーネントになり、getNode
は非推奨になりました。0.62を可能にした何百人もの貢献者の方々に感謝します!
すべてのアップデートを確認するには、0.62の変更ログをご覧ください。
新しいリロードエクスペリエンス「Fast Refresh」を含むReact Native 0.61を発表できることを嬉しく思います。
React Nativeコミュニティによくある問題点について尋ねたところ、上位の回答の1つは「ホットリロード」機能が壊れているということでした。関数コンポーネントでは信頼性高く動作せず、画面を更新できないことが多く、タイプミスやミスに対して回復力もありませんでした。多くの人が信頼性が低すぎるため、オフにしていたと聞いています。
React Native 0.61では、既存の「ライブリロード」(保存時のリロード)と「ホットリロード」機能を「Fast Refresh」という単一の新しい機能に統合しました。Fast Refreshは、以下の原則に基づいてゼロから実装されました。
Fast Refreshの動作を確認するには、このビデオをご覧ください。
ぜひお試しいただき、ご意見をお聞かせください!必要に応じて、Dev Menu(iOSではCmd+D、AndroidではCmd+MまたはCtrl+M)で無効にすることができます。オンとオフの切り替えは瞬時に行えるため、いつでも変更できます。
Fast Refreshに関するいくつかのヒントを以下に示します。
// @refresh reset
を追加できます。console.log
またはdebugger
ステートメントを追加することは、優れたデバッグテクニックです。Fast Refreshに関する問題については、GitHubで報告してください。調査いたします。
0.61を可能にしたすべての貢献者の方々に感謝します!
すべての更新を確認するには、0.61の変更ログをご覧ください。
数百人の貢献者による数ヶ月間の努力を経て、React Native Coreチームはバージョン0.60のリリースを発表できることを誇りに思います。このリリースでは、AndroidとiOSの両プラットフォームで重要な移行処理が行われ、多くの問題も解決されました。このブログ投稿では、リリースのハイライトについて説明します。ただし、常に変更ログを参照して、より詳細な情報を確認してください。最後に、このマイルストーン達成に貢献してくれた皆様に感謝いたします!
`announceForAccessibility`のようなアクセシビリティAPIに多くの改善が加えられ、ロール、アクションサポート、フラグなどが改善されました。アクセシビリティは複雑な科学ですが、これらの改善により、A11Yの取り組みが少し容易になることを願っています。2019年6月のReact Nativeオープンソースアップデートで、これらの変更の詳細を確認してください。
React Nativeのスタート画面が更新されました!新しいUIの作成に貢献してくれた多くの貢献者の方々に感謝します。この新しい「Hello World」は、よりフレンドリーで魅力的な方法で、ユーザーをエコシステムに歓迎します。
AndroidXは、Androidエコシステムにおける大きな一歩であり、古いサポートライブラリアーティファクトは非推奨になっています。0.60では、React NativeがAndroidXに移行されました。これは破壊的変更であり、ネイティブコードと依存関係も移行する必要があります。
この変更により、React NativeアプリはAndroidX自体を使用する必要があります。1つのアプリ内でこれらを併用することはできないため、アプリコードと依存関係コードのすべてで、どちらか一方を使用する必要があります。
独自のネイティブコードは自分で移行する必要がありますが、@mikehardy、@cawfree、および@m4tt72は、`node_modules`をパッチするための「jetifier」という巧妙なツールを構築しました。ライブラリメンテナーはアップグレードする必要がありますが、このツールはAndroidXバージョンをリリースする時間を与えながら、一時的な解決策を提供します。そのため、AndroidX移行に関連するエラーが見つかった場合は、これを試してみてください。
CocoaPodsは、React NativeのiOSプロジェクトの一部になりました。まだ行っていない場合は、これからは`xcworkspace`ファイルを使用してiOSプラットフォームコードを開くようにしてください(プロチップ:ルートプロジェクトディレクトリから`xed ios`を試してください)。また、内部パッケージの`podspec`がXcodeプロジェクトと互換性を持たせるように変更されたため、トラブルシューティングとデバッグが容易になります。このエキサイティングなサポートを実現するために、0.60へのアップグレードの一環として、`Podfile`にいくつかの簡単な変更を加える必要があります。`use_frameworks!`との互換性の問題があることを認識しており、回避策と将来のパッチに関する問題を追跡しています。
WebViewとNetInfoは以前は別々のリポジトリに抽出されており、0.60ではReact Nativeリポジトリからそれらを移行し終わりました。さらに、新しいApp Storeポリシーに関するコミュニティからのフィードバックに応えて、Geolocationが抽出されました。まだ行っていない場合は、react-native-webview、@react-native-community/netinfo、および@react-native-community/geolocationへの依存関係を追加することで移行を完了してください。自動化されたソリューションが必要な場合は、rn-upgrade-deprecated-modulesの使用を検討してください。メンテナーは抽出以降、これらのリポジトリに100以上のコミットを行い、コミュニティのサポートに興奮しています!
React Native CLIに取り組んでいるチームは、自動リンクと呼ばれるネイティブモジュールのリンクに大きな改善を加えました!ほとんどのシナリオでは、`react-native link`を使用する必要がなくなります。同時に、チームは一般的なリンクプロセスを全面的に見直しました。上記のドキュメントで説明されているように、既存の依存関係はすべて`react-native unlink`してください。
@lucasbento、@pvinis、@kelset、および@watadarkstarは、アップグレードプロセスを簡素化するためのUpgrade Helperという優れたツールを構築しました。これは、React Nativeユーザーがブラウンフィールドアプリや複雑なカスタマイズで、バージョン間の変更を確認するのに役立ちます。更新されたアップグレードに関するドキュメントを確認し、今日からアップグレードパスでお試しください!
AndroidXへの変更は、ほぼ確実にライブラリのアップデートが必要になりますので、早急にサポートを含めるようにしてください。まだアップグレードできない場合は、jetifierを使ってライブラリをチェックし、ユーザーがビルド時にライブラリをパッチできることを確認してください。
設定とREADMEを更新するには、オートリンキングに関するドキュメントを確認してください。ライブラリの以前の統合方法によっては、追加の変更が必要になる場合があります。依存関係インターフェースの定義方法については、CLIの依存関係に関するガイドを参照してください。
これらは私たちが注目したハイライトですが、他にも多くのエキサイティングなアップデートがあります。すべてのアップデートを見るには、変更ログをご覧ください。いつものように、今後のニュースにご期待ください。それまでの間、0.60をお楽しみください!
React Native 0.59リリースへようこそ!これは88人の貢献者による644コミットを含む、またひとつ大きなリリースです。貢献は様々な形でありますので、問題のメンテナンス、コミュニティの育成、React Nativeに関する教育をしてくださった皆様に感謝いたします。今月は多くの待望の変更が含まれており、皆様に喜んでいただければ幸いです。
このリリースには、状態を持つロジックをコンポーネント間で再利用できるReact Hooksが含まれています。Hooksについては多くの話題がありますが、まだ聞いたことがない方は、以下の素晴らしいリソースをご覧ください。
- Hooksの紹介では、なぜHooksをReactに追加するのかを説明しています。
- Hooksの概要は、ビルトインHooksの速習概要です。
- 独自のHooksの作成は、カスタムHooksによるコードの再利用を示しています。
- React Hooksを理解するでは、Hooksによって実現される新しい可能性を探ります。
- useHooks.comは、コミュニティが維持するHooksのレシピとデモを紹介しています。
ぜひ、あなたのアプリで試してみてください。私たちと同じように、再利用の素晴らしさを感じていただければ幸いです。
React Nativeは、アプリケーションの動作にJSC(JavaScriptCore)を使用しています。AndroidのJSCは数年前のもので、多くの最新のJavaScript機能がサポートされていませんでした。さらに悪いことに、iOSの最新のJSCと比較してパフォーマンスが低かったです。このリリースで、すべてが変わります。
@DanielZlotin、@dulmandakh、@gengjiawen、@kmagiera、そして@kudoによる素晴らしい作業のおかげで、JSCはここ数年の進歩を取り込みました。これにより、64ビットサポート、最新のJavaScriptサポート、そして大幅なパフォーマンス向上がもたらされます。今後のWebKitの改善をそれほど苦労せずに活用できるよう、このプロセスを維持可能なものにしたことにも称賛を送ります。そして、この作業を可能にしてくれたSoftware MansionとExpoに感謝します。
私たちは、デフォルトで高性能なReact Nativeアプリを提供することを目指しており、Facebookの最適化をコミュニティにもたらすために取り組んでいます。アプリケーションは、起動速度を低下させるのではなく、必要に応じてリソースをロードします。この機能は「インラインrequire」と呼ばれ、Metroが遅延ロードするコンポーネントを特定できるようにします。深く多様なコンポーネントアーキテクチャを持つアプリは、最も大きな改善が見られます。
デフォルトで有効にする前に、コミュニティの皆様に動作状況を知らせていただく必要があります。0.59にアップグレードすると、新しいmetro.config.js
ファイルが作成されます。オプションをtrueに切り替えて、フィードバックをお寄せください!インラインrequireの詳細については、パフォーマンスドキュメントでアプリのベンチマーク方法を確認してください。
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 |
今後数ヶ月で、さらに多くのコンポーネントがLean Coreへと移行していきます。この作業のお手伝いをお願いします—Lean Coreの包括的な課題にアクセスしてご協力ください。
React Nativeのコマンドラインツールは開発者にとってエコシステムへの入り口ですが、長年の問題を抱えており、公式サポートが不足していました。CLIツールは新しいリポジトリに移行され、専用のメンテナンスチームがすでにいくつかのエキサイティングな改善を行いました。
ログのフォーマットが大幅に改善されました。コマンドはほぼ瞬時に実行されるようになりました—違いをすぐに実感できるでしょう。
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 upgrade
コマンドに置き換えるため、react-native-git-upgrade
コマンドは0.59で削除されました。
多くの新しい貢献者の方々がFlow型からのネイティブコードの生成の有効化とXcodeの警告の解決に貢献してくれました—これらはReact Nativeの動作方法を学習し、より大きな利益に貢献するための素晴らしい方法です。ありがとうございます!今後同様の問題にご注目ください。
これらは私たちが注目したハイライトですが、他にも多くのエキサイティングなアップデートがあります。すべてのアップデートを見るには、変更ログをご覧ください。0.59は巨大なリリースです—皆様に試していただけることを楽しみにしています。
今年後半にもさらに多くの改善を予定しています。ご期待ください!
待望のReact Native 0.56バージョンがリリースされました🎉。このブログ記事では、この新リリースで導入された変更点の一部をハイライトします。また、3月以降に取り組んできたことについても説明します。
コントリビューターガイドは、React Nativeへのすべての変更が通過する統合プロセスを説明しています。このプロジェクトは多くの異なるツールで構成されており、すべてが適切に動作するように、調整と継続的なサポートが必要です。それに、プロジェクトに貢献する活気のあるオープンソースコミュニティを加えると、その規模の壮大さがわかります。
React Nativeの素晴らしい普及に伴い、破壊的変更は細心の注意を払って行う必要があり、プロセスは私たちが望むほどスムーズではありません。コアチームが新しい破壊的変更のセットを統合およびテストできるように、4月と5月のリリースをスキップするという決定が下されました。専用のコミュニティコミュニケーションチャネルが途中で使用され、2018年6月(0.56.0
)のリリースが、安定版リリースを辛抱強く待っていた人々にとって、できるだけ問題なく採用できるようにされました。
0.56.0
は完璧ですか? いいえ、世の中にあるすべてのソフトウェアと同様に完璧ではありません。しかし、「より多くの安定性を待つ」ことと「テストが成功した結果につながったので前進できる」ことのトレードオフにおいて、リリースの準備が整ったと感じています。さらに、最終的な0.56.0
リリースでは解決されていないいくつかの 問題 が あることを認識しています。ほとんどの開発者は、0.56.0
にアップグレードする際に問題はありません。上記の問題によってブロックされている開発者の皆様には、私たちのディスカッションに参加していただき、これらの問題の解決策を一緒に探していきたいと考えています。
0.56.0
は、より安定したフレームワークに向けた基本的な構成要素と考えることができます。すべてのエッジケースが解決されるまでには、おそらく広範囲な採用に1週間から2週間かかるでしょうが、これにより、2018年7月(0.57.0
)のリリースがさらに向上します。
このセクションの最後に、アプリをさらに向上させるのに役立つ合計818コミット(!)に取り組んだ67人のコントリビューター全員に感謝の意を表したいと思います👏。
では、これ以上遅延することなく…
ご存じのとおり、私たち全員がJavaScriptの最新かつ最高の機能を使用できるようにするトランスパイラツールであるBabelは、近日中にv7に移行します。この新しいバージョンにはいくつかの重要な変更が含まれているため、Metroがその改善点を活用できるように、今がアップグレードする良い時期だと感じました。
アップグレードで問題が発生した場合は、関連するドキュメントセクションを参照してください。
Androidでは、周囲のツールの多くが変更されました。Gradle 3.5、Android SDK 26、Fresco 1.9.0、およびOkHttp 3.10.0、さらにはNDK APIターゲットをAPI 16に更新しました。これらの変更は問題なく行われ、ビルド速度が向上するはずです。さらに重要なのは、これにより開発者は、来月発効する新しいPlayストアの要件を遵守できるようになることです。
これに関して、実現可能にするために多くのPRを送信してくれたDulmandakh氏に特に感謝したいと思います👏。
この方向に進むには、さらにいくつかの手順が必要です。Androidサポートの更新に関する今後の計画と議論は、専用のissue(およびJSCに関する補足的なissue)で確認できます。
Node 8がReact Nativeの標準になりました。実際にはすでにテストされていましたが、Node 6がメンテナンスモードに入ったため、本格的に導入しました。Reactも16.4に更新され、多くの修正が加えられました。
iOS 8のサポートを終了し、ターゲットにできる最も古いiOSバージョンをiOS 9にしました。iOS 8を実行できるデバイスはすべてiOS 9にアップグレードできるため、これが問題になることはないと予想しています。この変更により、古いiOS 8を実行しているデバイスの回避策を実装した、ほとんど使用されていないコードを削除することができました。
継続的インテグレーションツールチェーンは、Xcode 9.4を使用するように更新され、すべてのiOSテストがAppleが提供する最新の開発ツールで実行されるようにしました。
Flow 0.75にアップグレードして、多くの開発者が高く評価している新しいエラー形式を使用しました。また、さらに多くのコンポーネントの型を作成しました。まだプロジェクトで静的型付けを適用していない場合は、実行時ではなくコーディング時に問題を特定するためにFlowを使用することを検討してください。
たとえば、YellowBoxは新しい実装に置き換えられ、デバッグが大幅に改善されました。
完全なリリースノートについては、完全な変更ログはこちらを参照してください。また、この新しいバージョンへの移行で問題が発生しないように、アップグレードガイドを常に確認してください。
最後に、今週からReact Nativeコアチームは毎月のミーティングを再開します。カバーされている内容をすべての人に確実に最新の状態に保ち、今後のミーティングのために皆様からのフィードバックを常に活用できるようにします。
皆様、楽しいコーディングを!
Lorenzo氏、Ryan氏、およびReact Nativeコアチーム全員
PS: 常に、React Nativeはまだ多くの変更が進行中であるため、0.xのバージョン管理であることを思い出させてください。そのため、アップグレード時には、何かがクラッシュしたり壊れたりする可能性があることを忘れないでください。問題やPRの提出時には互いに助け合い、適用されている行動規範(CoC)に従ってください。画面の向こうには常に人間がいることを忘れないでください。