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

React Native 0.60の発表

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

何百人もの貢献者による数ヶ月の努力の末、React Nativeコアチームはバージョン0.60のリリースを発表できることを誇りに思っています。このリリースでは、AndroidとiOSプラットフォームの両方で重要な移行が行われ、多くの問題も解決されています。このブログ記事では、リリースのハイライトについて説明します。ただし、詳細については、常に変更履歴を参照してください。最後に、このマイルストーンを達成するのに協力してくれた貢献者に感謝します。

アクセシビリティに焦点を当てる

announceForAccessibilityなどのアクセシビリティAPIには多くの改善が加えられ、ロールアクションサポートフラグなどにも改善が加えられました。アクセシビリティは複雑な科学ですが、これらの改善によりA11Yが少し簡単になることを願っています。これらの変更の詳細については、React Nativeオープンソースの更新 2019年6月をご確認ください。

新たなスタート

React Nativeのスタート画面が更新されました!新しいUIの作成にご協力いただいた多くの貢献者に感謝します。この新しい「Hello World」は、より友好的で魅力的な方法でユーザーをエコシステムに歓迎します。

The new init screen helps developers get started from the get-go with resources and a good example

AndroidXのサポート

AndroidXはAndroidエコシステムにおける大きな進歩であり、古いサポートライブラリのアーティファクトは非推奨になっています。0.60では、React NativeはAndroidXに移行しました。これは破壊的な変更であり、ネイティブコードと依存関係も移行する必要があります

この変更により、React NativeアプリはAndroidX自体を使用し始める必要があります。それらは1つのアプリで並行して使用することはできないため、すべてのアプリコードと依存関係コードが一方または他方を使用する必要があります。

matt-oakes on discussions-and-proposals

自分のネイティブコードは自分で移行する必要がありますが、@mikehardy@cawfree、および@m4tt72は、node_modulesにパッチを適用するための「jetifier」という賢いツールを構築しました。ライブラリメンテナーはアップグレードする必要がありますが、このツールは、AndroidXバージョンをリリースする時間を与えながら、一時的なソリューションを提供します。したがって、AndroidXの移行に関連するエラーが見つかった場合は、これを試してみてください。

デフォルトでのCocoaPods

CocoaPodsがReact NativeのiOSプロジェクトの一部になりました。まだそうでない場合は、これからはxcworkspaceファイルを使用してiOSプラットフォームコードを開くようにしてください(ヒント:ルートプロジェクトディレクトリからxed iosを試してください)。また、内部パッケージのpodspecがXcodeプロジェクトと互換性を持つように変更されました。これにより、トラブルシューティングとデバッグが容易になります。このエキサイティングなサポートを実現するために、0.60へのアップグレードの一部として、Podfileいくつかの簡単な変更を加えることが予想されます。use_frameworks!との互換性の問題があることは認識しており、回避策と将来のパッチに関する問題を追跡しています。

リーンコアの削除

WebViewNetInfoは以前に個別のリポジトリに抽出されており、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ユーザーは、ブラウンフィールドアプリや複雑なカスタマイズを使用して、バージョン間で変更された内容を確認できます。更新されたアップグレードドキュメントを確認して、今日アップグレードパスを試してください!

Upgrade Helper cleanly and easily shows the changes needed to migrate to a different version of React Native

ライブラリメンテナーへの注意

AndroidXの変更には、ほぼ確実にライブラリの更新が必要になるため、早急にサポートを含めてください。まだアップグレードできない場合は、jetifierに対してライブラリを確認し、ユーザーがビルド時にライブラリにパッチを適用できることを確認してください。

設定とreadmeを更新するには、自動リンキングのドキュメントを確認してください。以前にライブラリを統合した方法によっては、追加の変更が必要になる場合もあります。依存関係のインターフェースを定義する方法については、CLIの依存関係ガイドを確認してください。

謝辞

これらは私たちが注目したハイライトですが、他にも多くの素晴らしい点があります。すべてのアップデートを確認するには、変更履歴をご覧ください。いつものように、今後のニュースにご期待ください。それまでの間、0.60をお楽しみください!

React Nativeオープンソースの更新 2019年6月

·8分で読めます
Christoph Nakazawa
クリストフ・ナカザワ
元Facebookエンジニア

コードとコミュニティの健全性

過去6か月間で、550人以上のコントリビューターによって、合計2800件のコミットがReact Nativeに行われました。コミュニティからの400人のコントリビューターが、1,150件以上のプルリクエストを作成し、そのうち820件のプルリクエストがマージされました。

過去6か月間の1日あたりの平均プルリクエスト数は、Lean Coreの取り組みによってウェブサイト、CLI、および多くのモジュールをReact Nativeから分割したにもかかわらず、3件から約6件に増加しました。未解決のプルリクエストの平均数は現在25件未満であり、通常、数時間または数日以内に提案とレビューを返信しています。

有意義なコミュニティ貢献

最近の素晴らしい貢献をいくつか紹介したいと思います。

Lean Core

Lean Coreの主な動機は、モジュールをReact Nativeから個別のリポジトリに分割して、より良いメンテナンスを受けられるようにすることでした。わずか6か月で、WebViewNetInfoAsyncStorageウェブサイトCLIなどのリポジトリは、合計800件以上のプルリクエストを受け取りました。メンテナンスの向上に加えて、これらのプロジェクトはReact Native自体よりも頻繁に独立してリリースすることもできます。

また、React Native自体から廃止されたポリフィルとレガシーコンポーネントを削除する機会も得ました。ポリフィルは、以前のバージョンのJavaScriptCore(JSC)でMapSetなどの言語機能をサポートするために、以前は必要でした。React Nativeが新しいバージョンで出荷されるようになったため、これらのポリフィルは削除されました。

この作業はまだ進行中であり、ネイティブ側とJavaScript側の両方でさらに多くのものを分割または削除する必要がありますが、サーフェス領域とアプリサイズを増やす傾向を逆転させた初期の兆候があります。たとえば、JavaScriptバンドルを見ると、約1年前のバージョン0.54ではReact Native JavaScriptバンドルサイズは530kbであり、わずか6か月でバージョン0.57までに607kb(+77kb)に増加しました。現在、マスターでは28kbのバンドルサイズ縮小で579kbになっており、100kb以上のデルタがあります!

Lean Coreの取り組みの最初の反復を終えるにあたり、React Nativeに追加される新しいAPIについてより意図的になり、React Nativeをより小さく、より高速にする方法を継続的に評価し、さまざまなコンポーネントの所有権をコミュニティに与える方法を見つけていきます。

ユーザーフィードバック

6か月前、私たちはコミュニティに「React Nativeで嫌いなことは何ですか?」と質問し、人々が直面している問題の概要を把握しました。数か月前に投稿に返信しました。上位の問題で行われた進捗状況をまとめる時が来ました。

  • アップグレード:React Nativeコミュニティは、アップグレードエクスペリエンスを向上させるための複数の改善に結集しました:自動リンキングrn-diff-purgeによる改善されたアップグレードコマンド、アップグレードヘルパーウェブサイト(近日公開)。また、各メジャーリリースのブログ投稿を公開して、重大な変更やエキサイティングな新機能をお知らせします。これらの改善の多くにより、0.60リリース以降の将来のアップグレードが大幅に容易になります。
  • サポート/不確実性:多くの人がプルリクエストでの活動の欠如や、React NativeへのFacebookの投資に関する一般的な不確実性に不満を感じていました。上記で示したように、私たちはより多くのプルリクエストに対応する準備ができており、皆様からの提案と貢献を心待ちにしています!
  • パフォーマンス:React Native 0.59には、新しく大幅に高速なバージョンのJavaScriptCore(JSC)が搭載されました。別に、inline-requiresをデフォルトで有効にする作業を進めており、今後数か月でさらにエキサイティングなアップデートをお届けします。
  • ドキュメント:最近、React Nativeのすべてのドキュメントを全面的に見直し、書き直す取り組みを開始しました。貢献したい場合は、ぜひご協力ください!
  • Xcodeでの警告:既存のすべての警告を削除し、新しい警告を導入しないように努めています。
  • ホットリロード:Reactチームは、まもなくReact Nativeに統合される新しいホットリロードシステムを構築しています。

残念ながら、すべてをすぐに改善することはできませんでした。

  • デバッグ:毎日発生していた不便なバグや問題をたくさん修正しましたが、残念ながら、これについては期待していたほどの進捗を遂げることができませんでした。React Nativeでのデバッグは最適ではないことを認識しており、今後この改善を優先します。
  • Metro シンボリックリンク: 残念ながら、これに対するシンプルで簡単な解決策はまだ実装できていません。ただし、React Native のユーザーは様々な回避策を共有しており、それが役立つかもしれません。

過去6ヶ月間で多くの変更があったため、改めて皆様に同じ質問をさせて頂きたく思います。最新バージョンのReact Nativeをご利用中で、フィードバックがあれば、新しく公開した「React Native の何が嫌いですか?」にご意見をお寄せください。

継続的インテグレーション

Facebookでは、すべてのプルリクエストと内部的な変更をまずFacebookのリポジトリに直接マージし、そのコミットをすべてGitHubに同期します。Facebookのインフラストラクチャは一般的な継続的インテグレーションサービスとは異なり、すべてのオープンソーステストがFacebook内部で実行されていたわけではありません。これは、GitHubに同期されるコミットが頻繁にオープンソースのテストを中断させ、その修正に多くの時間がかかることを意味します。

React NativeチームのHéctor Ramosは、過去2ヶ月間、FacebookとGitHubの両方でReact Nativeの継続的インテグレーションシステムを改善してきました。現在、ほとんどのオープンソーステストは、FacebookでReact Nativeに変更がコミットされる前に実行されるようになり、コミットが同期される際にGitHubでのCIが安定するようになります。

次へ

React Nativeの将来に関する私たちの講演をぜひチェックしてください!今後数ヶ月の間に、FacebookのReact NativeチームのメンバーがChain ReactReact Native EUで講演を行います。また、まもなくリリースされる 0.60 にもご期待ください。きっとエキサイティングなものになるでしょう

F8およびオープンソースポッドキャストでのReact Native

·3分で読めます
Christoph Nakazawa
クリストフ・ナカザワ
元Facebookエンジニア

今週、Eli WhiteF8 2019で、FacebookのAndroidおよびiOSアプリケーションにおけるReact Nativeについて講演しました。この2年間私たちが取り組んできたことと、今後の計画を皆様と共有できることを嬉しく思います。

Facebookの開発者向けウェブサイトでビデオをチェックしてください。

F8 Talk about React Native

講演のハイライト:

  • 私たちは2017年と2018年をReact Nativeの最大の製品であるFacebookのMarketplaceに注力しました。Marketplaceチームと協力して、製品の品質を向上させ、喜びを加えました。現時点では、MarketplaceはAndroidとiOSの両方でFacebookアプリの中で最も高品質な製品の一つです。
  • Marketplaceのパフォーマンスも、特にミッドレンジのAndroidデバイスでは大きな課題でした。私たちは過去1年間で起動時間を50%以上短縮し、さらに改善を進めています!最大の改善点はReact Nativeに組み込まれ、今年後半にコミュニティに提供される予定です。
  • 私たちは、Facebookが必要とする高品質でパフォーマンスの高いアプリをReact Nativeで構築できると確信しています。この確信により、私たちはReact Nativeの中核を再考するような、より大きな賭けに投資することができました。
  • Microsoftは、Windows向けにReact Nativeをサポートおよび使用しており、人々がその専門知識とコードベースを使用してMicrosoftのユニバーサルWindowsプラットフォームにレンダリングできるようにしています。来週のMicrosoft Buildでその詳細について聞くことができます。

React Radio ポッドキャスト (オープンソースについて)

Eliの講演は、最近のオープンソースの取り組みについて語って締めくくられました。私たちは3月に進捗状況のアップデートを公開しました。そして最近、Nader DabitGant Labordeが、ポッドキャストReact Native RadioにChristophを招き、オープンソースにおけるReact Nativeについて語り合いました。

ポッドキャストのハイライト:

  • 私たちは、FacebookのReact Nativeチームがオープンソースについてどのように考えているか、そして、React Nativeの規模のプロジェクトに対して、持続可能なコミュニティをどのように構築しているかについて話しました。
  • 私たちは、Lean Coreの取り組みの一環として、複数のモジュールを削除する予定です。WebViewやReact Native CLIなどの多くのモジュールは、抽出されてから100を超えるプルリクエストを受け取っています。
  • 次に、React Nativeのウェブサイトとドキュメントの徹底的な見直しに注力します。乞うご期待!

エピソードはお気に入りのポッドキャストアプリで間もなく見つかります。または、ここで録音を聴くこともできます。

React Native 0.59のリリース

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

React Native 0.59 リリースへようこそ!これは、88人のコントリビューターによる644のコミットを含む、もう一つの大きなリリースです。貢献は他の形でも行われるため、issueのメンテナンス、コミュニティの育成、React Nativeに関する教育にご協力いただき、ありがとうございます。今月は多くの待望の変更がもたらされ、皆様に楽しんで頂けることを願っています。

🎣 Hooks の登場

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

  • Introducing Hooksでは、ReactにHooksを追加する理由を説明しています。
  • Hooks at a Glanceは、組み込みのHooksの概要をすばやく紹介します。
  • Building Your Own Hooksは、カスタムHooksを使用したコードの再利用を示しています。
  • Making Sense of 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の最適化をコミュニティにもたらすように取り組んでいます。アプリケーションは、起動を遅らせるのではなく、必要に応じてリソースをロードします。この機能は、Metroが遅延ロードされるコンポーネントを識別できるようにする「インラインrequire」と呼ばれます。深く多様なコンポーネントアーキテクチャを持つアプリは、最大の改善が見られるでしょう。

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

今後数ヶ月で、より多くのコンポーネントがこのLean Coreへの道を進むでしょう。この点でサポートを探しています。貢献したい場合は、Lean Coreアンブレラにアクセスしてください。

👩🏽‍💻 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コマンドは、新しく改善されたreact-native upgradeコマンドに置き換えられ、0.59で削除されました。

🤗 感謝

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

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

今年後半に向けて、さらに多くの改善を進めています。ご期待ください!

RyanReact Nativeコアチームの皆さん

React Nativeオープンソースの更新 2019年3月

·5分で読めます
Christoph Nakazawa
クリストフ・ナカザワ
元Facebookエンジニア

2018年第4四半期に、React Nativeオープンソースコミュニティへの投資を増やすことを決定した後、React Nativeオープンソースロードマップを発表しました。

最初のマイルストーンとして、コミュニティで最も目立つ側面を特定し、改善することに重点を置きました。私たちの目標は、未解決のプルリクエストを減らし、プロジェクトの表面積を削減し、主要なユーザーの問題を特定し、コミュニティ管理のガイドラインを確立することでした。

過去2か月間で、予想以上の進捗がありました。詳細については、以下をお読みください。

プルリクエスト

健全なコミュニティを構築するためには、コードの貢献に迅速に対応する必要があります。過去数年間、コミュニティの貢献をレビューすることを優先順位を下げており、280件のプルリクエストが蓄積されていました(2018年12月)。最初のマイルストーンでは、未解決のプルリクエストの数を約65件に減らしました。同時に、1日あたりにオープンされるプルリクエストの平均数が3.5件から7件に増加しました。これは、過去3か月で約600件のプルリクエストを処理したことを意味します。

ほぼ3分の2をマージし、3分の1のプルリクエストをクローズしました。マージされずにクローズされたのは、それらが古い、品質が低い、またはプロジェクトの表面積を不必要に増加させる場合です。マージされたプルリクエストのほとんどは、バグを修正したり、クロスプラットフォームのパリティを改善したり、新しい機能を追加したりするものでした。注目すべき貢献には、型安全性の向上と、AndroidXをサポートするための継続的な作業が含まれます。

Facebookでは、React Nativeをmasterから実行しているため、すべての変更がReact Nativeリリースに入る前に最初にテストします。マージされたすべてのプルリクエストのうち、問題が発生したのは6件のみでした。4件は内部開発にのみ影響し、2件はリリース候補の段階で発見されました。

より目に見えるコミュニティの貢献の1つは、更新された「RedBox」画面でした。これは、コミュニティが開発者エクスペリエンスをよりフレンドリーにしている良い例です。

Lean Core

React Nativeは現在、Facebookではあまり使用されていない多くの未保守の抽象化を含む、非常に広い表面積を持っています。React Nativeをより小さくし、Facebookではほとんど使用されていない抽象化をコミュニティがより適切に管理できるようにするために、表面積を削減する作業を進めています。

最初のマイルストーンでは、Lean Coreプロジェクトへの協力をコミュニティに求めました。反響は圧倒的で、すべての進捗状況に追いつくのが困難でした。1か月足らずで完了したすべての作業をチェックしてください

最も期待しているのは、メンテナーが長年の問題を修正し、テストを追加し、長年要望のあった機能をサポートするために積極的に参加していることです。これらのモジュールは、React Native内よりも以前よりも多くのサポートを受けており、これはコミュニティにとって大きな一歩であることを示しています。そのようなプロジェクトの例としては、抽出後多くのプルリクエストを受け取っているWebViewや、現在コミュニティのメンバーによってメンテナンスされており、非常に必要な改善と修正が施されたCLIなどがあります。

主要なユーザーの問題

12月に、コミュニティにReact Nativeについて嫌いなことを尋ねました。回答を集約し、すべての問題に回答しました。幸いなことに、コミュニティが直面している問題の多くは、Facebookでも問題となっています。次のマイルストーンでは、主な問題のいくつかに対処する予定です。

最も投票数の多かった問題の1つは、React Nativeの新しいバージョンへのアップグレードの開発者エクスペリエンスでした。残念ながら、これはmasterからReact Nativeを実行しているため、私たち自身が経験していることではありません。幸いなことに、コミュニティのメンバーはすでにこの問題に対処するために立ち上がっています。

  • CallstackのMichał Pierzchałaは、内部でrn-diff-purgeを使用することで、react-native upgradeを改善しました。また、古くなったアップグレード手順を削除するためにウェブサイトを更新しました。
  • iOSプロジェクトでデフォルトでCocoaPodsを推奨する予定です。これにより、React Nativeをアップグレードする際にプロジェクトファイルで発生する変更が減少します。これにより、サードパーティモジュールをインストールしてリンクすることが容易になり、デフォルトでより多くのモジュールをリンクすることが予想されるLean Coreのコンテキストではさらに重要になります。

0.59リリース

React Nativeコミュニティ、特にMike GrabowskiLorenzo Sciandraの協力がなければ、リリースを提供することはできませんでした。リリース管理プロセスを改善し、今後はより積極的に関与する予定です。

  • 各メジャーリリースについて、コミュニティメンバーと協力してブログ記事を作成します。
  • 新しいバージョンにアップグレードするときに、破壊的な変更をCLIに直接表示します。
  • リリースにかかる時間を短縮します。自動テストを増やす方法を検討しており、改善された手動テスト計画も作成しています。

これらの計画の多くは、近日公開予定のReact Native 0.59リリースに組み込まれます。0.59には、React Hooks、Android用の新しい64ビットバージョンのJavaScriptCore、および多くのパフォーマンスと機能の改善が含まれます。現在、リリース候補として公開されており、今後2週間以内に安定すると予想されます。

次のステップ

次の2か月間は、軌道に乗るためにプルリクエストの管理を継続すると同時に、未解決のGitHubイシューの数を減らし始めます。Lean Coreプロジェクトを通じて、React Nativeの表面積を削減し続けます。コミュニティの主要な問題のうち5つに対処する予定です。コミュニティガイドラインを確定する際に、ウェブサイトとドキュメントに注意を向けます。

3月にFacebook Londonで、これらの取り組みを推進するために、コミュニティから10人以上の貢献者を迎えることを非常に楽しみにしています。React Nativeをご利用いただきありがとうございます。2019年に取り組んでいる改善を実感していただければ幸いです。数か月後には別のアップデートをお届けし、*それまでの間は皆様のプルリクエストをマージしていきます!* ⚛️✌️

2018年のReact Nativeコミュニティの状況

·4分の読書時間
Lorenzo Sciandra
コアメンテナー兼React Native開発者

2018年、React Nativeコミュニティは、React Nativeの開発とコミュニケーションの方法に多くの変更を加えました。数年後には、この変化がReact Nativeのターニングポイントであったと振り返るでしょう。

多くの人々が、React Nativeのアーキテクチャの書き換え、一般にFabricとして知られるものに期待を寄せています。特に、これによりReact Nativeのアーキテクチャにおける根本的な制限が修正され、JSIとTurboModulesとともに、React Nativeの将来的な成功に向けて準備が整うでしょう。

2018年の最大の変化は、React Nativeコミュニティの強化でした。当初から、Facebookは世界中の開発者がReact Nativeのオープンソースプロジェクトに参加することを奨励してきました。それ以来、多くのコアコントリビューターが現れ、リリースプロセスなどを担当するようになりました。

これらのメンバーは、以下のリソースを通じて、コミュニティ全体がこのプロジェクトの将来を形作るための力を高めるために、いくつかの重要なステップを踏み出しました。

react-native-releases 📬

1月に作成されたこのリポジトリは、誰もがより協調的な方法で新しいリリースを把握できるようにするという二重の目的を果たし、特定のリリースの一部となるものを、チェリーピックを提案したい人なら誰でも提案できるような会話を始めました(0.57.8とその以前のすべてのバージョンなど)。

これが、月次リリースサイクルから脱却し、現在バージョン0.57.xで使用されている「長期サポート」アプローチへと移行する原動力となっています。

これらの決定に至った功績の半分は、今年作成されたもう1つのリポジトリにあります。

discussions-and-proposals 🗣

7月に作成されたこのリポジトリは、React Nativeに関する会話のための、よりオープンな環境というアイデアを拡大しました。以前は、このニーズはメインリポジトリのFor Discussionというラベルの付いたIssueで処理されていましたが、他のライブラリ(例:React)が採用しているRFCアプローチにこの戦略を拡張したいと考えました。

この実験は、React Nativeのライフサイクルにおいてすぐにその役割を見出しました。Facebookチームは現在、コミュニティRFCプロセスを使用して、React Nativeで改善できる点を議論し、Lean Coreプロジェクトに関する取り組みを調整しています。他の興味深い議論も行われています。

@ReactNativeComm 🐣

これらの取り組みを伝える私たちのアプローチが、私たちが望んでいたほど効果的ではなかったことを認識しており、React Nativeコミュニティで起こっているすべてのこと(リリースから活発な議論まで)をより簡単に把握できるようにするために、信頼できる新しいTwitterアカウント@ReactNativeCommを作成しました。

あなたがそのソーシャルネットワークを利用していない場合は、GitHub経由でリポジトリをいつでもウォッチできることを忘れないでください。この機能は過去数か月で、リリースのみを通知するように改善されているため、いずれにせよ利用を検討してください。

今後の展望 🎓

過去7〜8か月間、コアコントリビューターは、React Nativeの開発に対するオーナーシップを強化し、Facebookとのコラボレーションを強化するために、React Native Community GitHub組織を強化しました。しかし、これには常に、同様のプロジェクトが持つ可能性のある正式な構造が欠けていました。

この組織は、ホストされているすべてのパッケージ/リポジトリに対して一連の標準を適用し、メンテナーが互いに助け合い、コミュニティで合意された標準に準拠した高品質のコードに貢献するための単一の場所を提供することで、より大きな開発者コミュニティのすべての人々の模範となることができます。

2019年初頭には、この新しいガイドラインが整備される予定です。専用のディスカッションでご意見をお聞かせください。

これらの変更により、コミュニティがより協力的になり、1.0に到達するときには、この共同の取り組みを活用して、(さらに)素晴らしいアプリを書き続けることができると確信しています🤗


このコミュニティの将来について、私たちと同じくらいあなたが興奮していることを願っています。上記のリストされたリポジトリで行われている会話や、あなたが作成する素晴らしいコードを通じて、皆様が関与してくれることを楽しみにしています。

ハッピーコーディング!

オープンソースロードマップ

·5分で読めます
Héctor Ramos
Facebookのエンジニア

今年、React Nativeチームは、React Nativeの大規模な再アーキテクチャに焦点を当ててきました。SophieがReact Nativeの現状に関する投稿で述べたように、Facebook以外の活発なReact Nativeユーザーと協力者をより良くサポートする計画を概説しました。私たちが取り組んできたことについて、さらに詳細を共有する時が来ました。そうする前に、オープンソースにおけるReact Nativeの長期的なビジョンを説明したいと思います。

React Nativeのビジョンは...

  • 健全なGitHubリポジトリ。Issueとプルリクエストは、妥当な期間内に処理されます。
    • テストカバレッジの増加。
    • Facebookコードリポジトリから同期されるコミットは、オープンソーステストを中断するべきではありません。
    • 意味のあるコミュニティ貢献のスケール拡大。
  • 安定したAPIにより、オープンソースの依存関係とのインターフェースが容易になります。
    • Facebookはオープンソースと同じパブリックAPIを使用します
    • セマンティックバージョニングに従うReact Nativeリリース。
  • 活気のあるエコシステム。高品質のViewManager、ネイティブモジュール、およびコミュニティによって維持される複数のプラットフォームサポート。
  • 優れたドキュメント。ユーザーが高品質なエクスペリエンスを作成するのを支援することと、最新のAPIリファレンスドキュメントに焦点を当てます。

このビジョンを達成するために、次の重点分野を特定しました。

✂️ Lean Core

私たちの目標は、非コアコンポーネントと未使用コンポーネントを削除することにより、React Nativeの表面積を減らすことです。非コアコンポーネントをコミュニティに移管して、より迅速に移行できるようにします。表面積が小さくなると、React Nativeへの貢献を管理しやすくなります。

WebViewは、コミュニティに移管したコンポーネントの例です。リポジトリから削除した後も、内部チームがこれらのコンポーネントを引き続き使用できるようにするワークフローに取り組んでいます。さらに数十個のコンポーネントを特定しており、コミュニティに所有権を移管する予定です。

🎁 内部のオープンソース化と🛠更新されたツール

Facebookの製品チーム向けのReact Native開発エクスペリエンスは、オープンソースとはかなり異なる場合があります。オープンソースコミュニティで人気のあるツールは、Facebookでは使用されていません。同じ目的を達成する内部ツールが存在する場合があります。場合によっては、FacebookチームはFacebook以外には存在しないツールに慣れてしまっています。これらの不一致は、今後のアーキテクチャ作業をオープンソース化する際に課題となる可能性があります。

これらの内部ツールの一部をリリースする予定です。また、オープンソースコミュニティで人気のあるツールのサポートも改善します。取り組むプロジェクトの網羅的ではないリストを以下に示します。

  • JSIをオープンソース化し、コミュニティが独自のJavaScript VMを持ち込み、RNの初期リリースからの既存のJavaScriptCoreを置き換えることができるようにします。JSIについては今後の投稿で説明します。それまでの間、React ConfでのParashuramの講演でJSIの詳細を確認できます。
  • Androidで64ビットライブラリをサポートします。
  • 新しいアーキテクチャでのデバッグを有効にします。
  • CocoaPods、Gradle、Maven、および新しいXcodeビルドシステムのサポートを改善します。

✅ テストインフラストラクチャ

Facebookのエンジニアがコードを公開する場合、すべてのテストに合格した場合に安全に実行できると見なされます。これらのテストでは、変更によってReact Nativeの表面の1つが中断される可能性があるかどうかを特定します。ただし、FacebookでのReact Nativeの使用方法には違いがあります。これにより、オープンソースでReact Nativeを気付かずに中断させてしまう可能性がありました。

オープンソースにできるだけ近い環境で実行されるように、内部テストを強化します。これにより、これらのテストを中断するコードがオープンソースに移行するのを防ぐことができます。また、GitHubのコアリポジトリのより良いテストを可能にするインフラストラクチャにも取り組み、将来のプルリクエストでテストを簡単に含められるようにします。

表面積の削減と組み合わせることで、コントリビューターは自信を持ってプルリクエストをより迅速にマージできるようになります。

📜 パブリックAPI

Facebookは、意図しない破壊的な変更を減らすために、オープンソースと同じように、パブリックAPI経由でReact Nativeを利用します。この問題を解決するために、内部コールサイトの変換を開始しました。私たちの目標は、安定したパブリックAPIに収束し、バージョン1.0でセマンティックバージョニングを採用することです。

📣 コミュニケーション

React Nativeは、貢献者数でGitHubでトップのオープンソースプロジェクトの1つです。これは私たちを本当に幸せにしており、今後も継続していきたいと考えています。透明性の向上やオープンな議論など、貢献者の関与につながるイニシアチブに引き続き取り組んでいきます。ドキュメントは、React Nativeを初めて使用する人が最初に遭遇するものの1つですが、優先事項ではありませんでした。自動生成されたAPIリファレンスドキュメントを復活させ、高品質のユーザーエクスペリエンスの作成に焦点を当てた追加コンテンツを作成し、リリースノートを改善することから始めます。

タイムライン

これらのプロジェクトは、今後1年程度をかけて段階的に導入していく予定です。一部はすでに進行中で、例えばJSIはすでにオープンソースで利用可能になっています。表面積の削減など、完了までに時間がかかるものもあります。進捗状況については、コミュニティに最新情報を提供するよう努めます。ぜひ、Discussions and Proposalsリポジトリにご参加ください。これは、React Nativeコミュニティのイニシアチブであり、このロードマップで議論されているイニシアチブのいくつかを生み出すきっかけとなりました。

新しいiOS WebViewの紹介

·2分で読めます
Facebookのソフトウェアエンジニア

Appleは以前からUIWebViewの使用を推奨しておらず、WKWebViewを推奨してきました。今後数ヶ月以内にリリースされるiOS 12では、UIWebViewは正式に非推奨になります。React NativeのiOS WebView実装は、UIWebViewクラスに大きく依存しています。そのため、これらの状況を踏まえ、WKWebViewを使用するWebView React Nativeコンポーネント用の新しいネイティブiOSバックエンドを構築しました。

これらの変更の最終段階はこのコミットで完了し、0.57リリースで利用可能になります。

この新しい実装を有効にするには、useWebKitプロパティを使用してください。

<WebView
useWebKit={true}
source={{url: 'https://www.google.com'}}
/>

改善点

UIWebViewには、WebViewで実行されているJavaScriptとReact Nativeの間で通信を容易にするための正当な方法がありませんでした。WebViewからメッセージが送信された場合、React Nativeにメッセージを配信するためにハックに依存していました。簡潔に言うと、メッセージデータを特別なスキームを持つURLにエンコードし、WebViewをそのURLに移動させました。ネイティブ側では、このナビゲーションをインターセプトしてキャンセルし、URLからデータを解析し、最後にReact Nativeを呼び出しました。この実装はエラーが発生しやすく、安全ではありませんでした。WKWebViewの機能を活用して、完全に置き換えたことを発表できて嬉しく思います。

UIWebViewに対するWKWebViewのその他の利点には、JavaScriptの実行速度の向上とマルチプロセスアーキテクチャが含まれます。詳細については、この2014年のWWDCをご覧ください。

注意点

コンポーネントで以下のプロパティを使用している場合、WKWebViewに切り替える際に問題が発生する可能性があります。当面の間、これらのプロパティの使用を避けることをお勧めします。

一貫性のない動作

automaticallyAdjustContentInsetscontentInsets (コミット)

WKWebViewにcontentInsetsを追加しても、WKWebViewのビューポートは変更されません。ビューポートはフレームと同じサイズになります。UIWebViewでは、ビューポートのサイズが実際に変更されます(コンテンツインセットが正の場合、小さくなります)。

backgroundColor (コミット)

WebViewの新しいiOS実装では、このプロパティを使用すると、背景色がちらつく可能性があります。さらに、WKWebViewは透明な背景をUIWebviewとは異なる方法でレンダリングします。詳細については、コミットの説明を参照してください。

サポートされていません

scalesPageToFit (コミット)

WKWebViewはscalesPageToFitプロパティをサポートしていなかったため、WebView React Nativeコンポーネントでこれを実装できませんでした。

アクセシビリティAPIの更新

·7分で読めます
Ziqi Chen
カリフォルニア大学バークレー校の学生

動機

テクノロジーが進歩し、モバイルアプリが日常生活でますます重要になるにつれて、アクセシブルなアプリケーションを作成する必要性も同様に重要になっています。

React Nativeの限られたAccessibility APIは、開発者にとって常に大きな問題点であったため、インクルーシブなモバイルアプリケーションをより簡単に作成できるように、Accessibility APIにいくつかの更新を加えました。

既存のAPIの問題点

問題1:まったく異なるが類似した2つのプロパティ - accessibilityComponentType(Android)とaccessibilityTraits(iOS)

accessibilityComponentTypeaccessibilityTraitsは、ユーザーが操作しているUI要素の種類をAndroidのTalkBackとiOSのVoiceOverに伝えるために使用される2つのプロパティです。これらのプロパティの2つの最大の問題点は、次のとおりです。

  1. 同じ目的を持ちながら、異なる使用方法を持つ2つの異なるプロパティであること。以前のAPIでは、これらは(各プラットフォームに1つずつ)2つの別々のプロパティであり、不便であるだけでなく、多くの開発者を混乱させていました。iOSのaccessibilityTraitsは17種類の値を許可するのに対し、AndroidのaccessibilityComponentTypeは4種類のみ許可します。さらに、値はほとんど重複していませんでした。これらの2つのプロパティの入力タイプさえ異なっていました。accessibilityTraitsは、渡す特性の配列または単一の特性のいずれかを許可するのに対し、accessibilityComponentTypeは単一の値のみを許可します。
  2. Androidの機能が非常に限られている。古いプロパティでは、Talkbackが認識できたUI要素は、「button」、「radiobutton_checked」、「radiobutton_unchecked」のみでした。

問題2:存在しないアクセシビリティヒント:

アクセシビリティヒントは、TalkBackまたはVoiceOverを使用しているユーザーが、アクセシビリティラベルだけでは明らかではないアクセシビリティ要素に対してアクションを実行したときに何が起こるかを理解するのに役立ちます。これらのヒントは、設定パネルでオン/オフを切り替えることができます。以前は、React NativeのAPIはアクセシビリティヒントをまったくサポートしていませんでした。

問題3:反転色の無視:

視覚障害を持つ一部のユーザーは、画面のコントラストを向上させるために、携帯電話で反転色を使用しています。Appleは、開発者が特定のビューを無視できるようにするAPIをiOSに提供しました。これにより、ユーザーが反転色の設定をオンにしている場合でも、画像やビデオが歪むことはありません。このAPIは現在、React Nativeではサポートされていません。

新しいAPIの設計

解決策1:accessibilityComponentType(Android)とaccessibilityTraits(iOS)の結合

accessibilityComponentTypeaccessibilityTraitsの間の混乱を解決するために、単一のプロパティにマージすることにしました。これらは技術的には同じ目的の機能を持っており、マージすることで、開発者はアクセシビリティ機能を構築する際にプラットフォーム固有の複雑さを心配する必要がなくなるため、理にかなっていました。

背景

iOSでは、UIAccessibilityTraitsは任意のNSObjectに設定できるプロパティです。javascriptプロパティを介してネイティブに渡される17の特性のそれぞれは、Objective-CのUIAccessibilityTraits要素にマップされます。特性はそれぞれlong intで表され、設定されているすべての特性はORで結合されます。

ただし、Androidでは、AccessibilityComponentTypeはReact Nativeによって作成された概念であり、Androidのプロパティに直接マップされません。アクセシビリティは、アクセシビリティデリゲートによって処理されます。各ビューにはデフォルトのアクセシビリティデリゲートがあります。アクセシビリティアクションをカスタマイズする場合は、新しいアクセシビリティデリゲートを作成し、カスタマイズする特定のメソッドをオーバーライドしてから、処理しているビューのアクセシビリティデリゲートを新しいデリゲートに関連付ける必要があります。開発者がAccessibilityComponentTypeを設定すると、ネイティブコードは渡されたコンポーネントに基づいて新しいデリゲートを作成し、ビューにそのアクセシビリティデリゲートを持たせるように設定しました。

変更点

新しいプロパティでは、2つのプロパティのスーパーセットを作成したいと考えました。accessibilityTraitsは値が大幅に多いため、新しいプロパティは既存のプロパティaccessibilityTraitsを主にモデル化することにしました。これらの特性に対するAndroidの機能は、アクセシビリティデリゲートを変更することでポリフィルされます。

iOSのaccessibilityTraitsに設定できるUIAccessibilityTraitsの値は17個あります。ただし、新しいプロパティの可能な値として、そのすべてを含めたわけではありません。これは、これらの特性の一部を設定することの効果があまりよく知られておらず、これらの値の多くが実際にはほとんど使用されていないためです。

UIAccessibilityTraitsの値は、一般的に2つの目的のいずれかを担っていました。UI要素が持つ役割を表すか、UI要素が置かれている状態を表すかのどちらかです。以前のプロパティのほとんどの用途では、通常、役割を表す1つの値と、「state selected」、「state disabled」、またはその両方を組み合わせていました。したがって、accessibilityRoleaccessibilityStateという2つの新しいアクセシビリティプロパティを作成することにしました。

accessibilityRole

新しいプロパティaccessibilityRoleは、TalkbackまたはVoiceoverにUI要素の役割を伝えるために使用されます。この新しいプロパティは、次のいずれかの値を取ることができます。

  • none
  • button
  • link
  • search
  • image
  • keyboardkey
  • text
  • adjustable
  • header
  • summary
  • imagebutton

UI要素は一般的にこれらのうち複数を論理的に取らないため、このプロパティは1つの値のみを渡すことができます。例外は画像とボタンであるため、両方を組み合わせた役割imagebuttonを追加しました。

accessibilityStates

新しいプロパティaccessibilityStatesは、TalkbackまたはVoiceoverにUI要素が置かれている状態を伝えるために使用されます。このプロパティは、次のいずれかまたは両方の値を含む配列を取ります。

  • selected
  • disabled

解決策2:アクセシビリティヒントの追加

このために、新しいプロパティaccessibilityHintを追加しました。このプロパティを設定すると、TalkbackまたはVoiceoverがユーザーにヒントを読み上げることができます。

accessibilityHint

このプロパティは、文字列の形式で読み上げるアクセシビリティヒントを受け取ります。

iOSでは、このプロパティを設定すると、ビューに対応するネイティブプロパティAccessibilityHintが設定されます。次に、iPhoneでアクセシビリティヒントがオンになっている場合、Voiceoverによってヒントが読み上げられます。

Androidでは、このプロパティを設定すると、アクセシビリティラベルの末尾にヒントの値が追加されます。この実装の利点は、iOSでのヒントの動作を模倣していることですが、欠点は、これらのヒントをiOSのようにAndroidの設定でオフにできないことです。

Androidでこの決定をした理由は、通常、アクセシビリティのヒントが特定のアクション(例:クリック)に対応しており、プラットフォーム間で動作の一貫性を保ちたかったからです。

問題3の解決策

accessibilityIgnoresInvertColors

AppleのAPIであるAccessibilityIgnoresInvertColorsをJavaScriptに公開しました。これにより、色を反転させたくないビュー(例:画像)がある場合、このプロパティをtrueに設定すると、反転されなくなります。

新しい使用法

これらの新しいプロパティは、React Native 0.57リリースで利用可能になります。

アップグレード方法

現在accessibilityComponentTypeaccessibilityTraitsを使用している場合は、新しいプロパティにアップグレードするための手順は次のとおりです。

1. jscodeshiftの使用

最も単純なユースケースは、jscodeshiftスクリプトを実行することで置き換えることができます。

このスクリプトは、以下のインスタンスを置き換えます

accessibilityTraits=“trait”
accessibilityTraits={[“trait”]}

以下のように

accessibilityRole= “trait”

このスクリプトは、AccessibilityComponentTypeのインスタンスも削除します(AccessibilityComponentTypeを設定するすべての場所で、AccessibilityTraitsも設定すると仮定します)。

2. 手動コードモッドの使用

AccessibilityTraitsを使用しており、対応するAccessibilityRoleの値がない場合、および複数の特性がAccessibilityTraitsに渡された場合は、手動でコードモッドを行う必要があります。

一般的に、

accessibilityTraits= {[“button”, “selected”]}

は手動で以下のように置き換えられます。

accessibilityRole=“button”
accessibilityStates={[“selected”]}

これらのプロパティは、Facebookのコードベースですでに使用されています。Facebookのコードモッドは驚くほど簡単でした。jscodeshiftスクリプトは約半分のインスタンスを修正し、残りの半分は手動で修正しました。全体として、プロセス全体には数時間もかかりませんでした。

更新されたAPIがお役に立てば幸いです!そして、アクセシブルなアプリを作り続けてください!#inclusion

0.56のリリース

·5分で読めます
Lorenzo Sciandra
Drivetribeのコアメンテナー兼React Native開発者

待望の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人の貢献者全員に感謝します👏。

さて、前置きはこれくらいにして...

大きな変更点

Babel 7

ご存知かもしれませんが、私たち全員が最新かつ最高のJavaScript機能を使用できるようにするトランスパイラツールであるBabelは、まもなくv7に移行します。この新しいバージョンにはいくつかの重要な変更が伴うため、今がアップグレードするのに良いタイミングであると感じ、Metroその改善点を活用できるようにします

アップグレードで問題が発生した場合は、それに関連するドキュメントセクションを参照してください。

Androidサポートの最新化

Androidでは、周囲のツールの多くが変更されました。Gradle 3.5Android SDK 26Frescoを1.9.0、OkHttpを3.10.0に更新し、さらにNDK APIのターゲットをAPI 16に更新しました。これらの変更は問題なく行われ、ビルドが高速化されるはずです。さらに重要なのは、これにより、開発者は来月発効する新しいPlayストアの要件に準拠できるようになることです。

これに関連して、Dulmandakhに、これを可能にするために提出された多くのPRに特に感謝したいと思います👏。

この方向でさらにいくつかの手順を実行する必要があり、専用のissue(およびJSCのサイドissue)で、Androidサポートの更新に関する将来の計画と議論を追うことができます。

新しいNode、Xcode、React、Flow – なんてことだ!

Node 8がReact Nativeの標準になりました。実際にはすでにテストされていましたが、Node 6がメンテナンスモードに入ったため、両足を前に踏み出しました。Reactも16.4に更新され、多くの修正が含まれています。

iOS 8のサポートを終了し、iOS 9をターゲットにできる最も古いiOSバージョンにしました。iOS 8を実行できるデバイスはiOS 9にアップグレードできるため、これは問題にならないと考えています。この変更により、iOS 8を実行している古いデバイスの回避策を実装しためったに使用されないコードを削除できました。

継続的インテグレーションツールチェーンがXcode 9.4を使用するように更新され、すべてのiOSテストがAppleが提供する最新の開発ツールで実行されるようになりました。

Flow 0.75にアップグレードして、多くの開発者が高く評価している新しいエラー形式を使用しています。また、さらに多くのコンポーネントの型を作成しました。プロジェクトで静的型付けをまだ強制していない場合は、実行時ではなくコーディング中に問題を特定するためにFlowの使用を検討してください。

その他多くのこと...

たとえば、YellowBoxは置き換えられ、デバッグが大幅に向上する新しい実装になりました。

完全なリリースノートについては、完全な変更ログはこちらを参照してください。また、この新しいバージョンへの移行での問題を避けるために、アップグレードガイドに注目してください。


最後に:今週から、React Nativeコアチームは月次会議を再開します。会議でカバーされた内容を全員に最新の状態に保ち、今後の会議のために皆様からのフィードバックを手元に置いておくようにします。

皆さん、ハッピーコーディング!

LorenzoRyan、およびReact Nativeコアチーム全体

追伸: いつものことですが、React Nativeはまだ多くの変更が進行中のため、0.xバージョンであることを改めてお知らせします。アップグレードする際には、おそらく何かクラッシュしたり、壊れたりする可能性があることを覚えておいてください。イシューやPRを提出する際には、お互いに協力し合い、行動規範が適用されることを忘れないでください。画面の向こうには常に人がいます。