誕生
React Nativeは、2013年のFacebook内部ハッカソン(hackathon)から誕生しました:
Facebookのハッカー文化の本質に従い、React Nativeは2013年夏のハッカソンプロジェクトとして始まりました。
(In the beginning: React Native’s roots より引用)

Reactから始まる物語
Reactの大規模な採用に伴い、FacebookはReactとWeb技術の優位性をさらに実感し、ネイティブ開発もWebのように「Move fast(素早く動く)」ことを望みました:
-
高速なイテレーション(Rapid iteration cycle):Webは1日に2回リリース可能で、製品の更新サイクルが短い。
-
素早いフィードバック(Immediate testing feedback):Webならリリース後すぐにユーザーに届き、A/Bテストなどの実験結果も即座に得られ、製品の進化が早まる。
-
高速な開発(Rapid development velocity):Appを再ビルドすることなく、ブラウザをリロードするだけで変更が反映される。
この目的を達成するために、Facebookは3つのアプローチを試しました:
-
WebView:ネイティブがWebViewコンテナを提供し、業務ロジックをWeb技術で開発。Webの開発体験をそのまま持ち込めるメリットがあったが、Web技術の制約により体験がネイティブに及ばず、パフォーマンスと拡張性が期待に満たなかったため断念。
-
Porting React to native:Reactそのものをネイティブ実装に移植するという大胆なアイデア。2015年にiOS版(ComponentKit)、2017年にAndroid版(Litho)を完成させた。これによりネイティブ開発でもUIの予測可能性やFlexboxレイアウトといったReactの利点を享受できるようになったが、開発効率の向上という初衷(変更のたびに再ビルドが必要)は満たせず。またWeb版Reactとの互換性がなく、Webエコシステムで構築されたRelayなどの強力なツールを活用できなかった。
-
Scripting native:JavaScriptを通じてネイティブAPIを呼び出す。Webの高速イテレーション能力を持ちつつ、Web技術に縛られず、JavaScriptエコシステムとも共存できる、まさに完璧なソリューションに見えた。
そして、React Nativeこそが、この3つ目のアプローチの最終的な成果なのです。
2015年
-
React.js Conf Round-up 2015:React Nativeを初披露。プレゼン動画:React.js Conf 2015 Keynote - Introducing React Native、React.js Conf 2015 Keynote 2 - A Deep Dive into React Native
-
F8 2015: New Open Source Tools for Mobile Developers:React Nativeをリリースしオープンソース化。プレゼン動画:F8 2015 - React Native & Relay: Bringing Modern Web Techniques to Mobile
-
React Native: Bringing modern web techniques to mobile:初の公式紹介記事を公開。この時点ではiOSのみサポート。
-
React Native for Android: How we built the first cross-platform React Native app:Androidのサポートを発表。
2015年1月のReact.js Confでこの内部プロジェクトが初めて公表され、5月のF8 Conferenceで正式にオープンソース化されました。当初はiOSのみでしたが、同年9月にはAndroidもサポートされました。
2016年
-
Introducing Hot Reloading:Hot Reloadingをサポート。
-
Dive into React Native performance:パフォーマンスを全面的に向上。
-
React Native on the Universal Windows Platform:Windowsエコシステムへ進出。
-
Samsung Committed to Bringing React Native to Tizen:サムスンのIoTエコシステム(Tizen OS)へ進出。
-
Right-to-Left Layout Support For React Native Apps:RTL(右から左)レイアウトをサポート。
-
0.36: Headless JS, the Keyboard API, & more:0.36をリリース。バックグラウンドタスクやキーボード操作などをサポート。
-
Introducing Button, Faster Installs with Yarn, and a Public Roadmap:0.37をリリース。
<Button />コンポーネントの追加と Yarn のサポート。 -
Easier Upgrades Thanks to Git:バージョンアップ作業を簡素化。
Microsoft UWPとSamsung Tizenのサポートにより、React NativeはモバイルからPC(Win 10)、ゲーム機(Xbox One)、リストバンド(Gear Fit 2)、スマートテレビ(SUHD)、さらにはホログラフィック・ゴーグル(HoloLens)へと広がりました。また、開発体験、パフォーマンス、API能力も高速なイテレーションの中で絶えず向上しました。
2017年
-
A Monthly Release Cadence: Releasing December and January RC:月次リリースの計画。
-
Using Native Driver for Animated:アニメーションのパフォーマンスと使い勝手をさらに向上。
-
Better List Views in React Native:List Viewのサポートを改善。
-
Introducing Create React Native App:公式スターターキット Create React Native App をリリース。
-
React Native Monthly #1:AirbnbやMicrosoftなど8つのチームと定期的な月例会議を開始(半年間継続)。
-
React Native Performance in Marketplace:Facebookの主要なReact Nativeアプリ(Marketplace)におけるパフォーマンスの実践を紹介。
月次のイテレーション計画が確立され、コミュニティチームを含む定期的な会議が開催されるようになりました。パフォーマンスは引き続き重要なテーマであり、アニメーションやList Viewなどの重要な更新はいずれもパフォーマンス最適化に関連しています。また、Prepackなどを活用したビルド時のパフォーマンス最適化の探究も始まり、React Nativeコアの初期化時間を大幅に削減することを目指しました:
我々はPrepackのようなプロジェクトやビルド時の処理を増やすことで、React Nativeブリッジのコストをゼロに近づける計画です。
2018年
-
Implementing Twitter’s App Loading Animation in React Native:Twitterのローディングアニメーションの実装例。
-
Using AWS with React Native:Amazonのクラウドエコシステムとの連携。
-
Building For React Native:
InputAccessoryViewをサポート。 -
Using TypeScript with React Native:コミュニティによるTypeScriptサポート。
-
State of React Native 2018:React NativeがFacebook内外で広く普及。コアチームがアーキテクチャのアップグレードに着手。
-
Releasing 0.56:0.56をリリース。Babel、Android SDK、Xcode、Flowなどの依存バージョンをアップグレード。
-
Introducing new iOS WebViews:iOSで
WKWebViewへ切り替え。 -
Open Source Roadmap:コアモジュールの軽量化(Lean Core)と、Facebook内部インフラのオープンソース化を計画。
-
The State of the React Native Community in 2018:オープンソースコミュニティの管理規範を確立。
ネイティブとReact Nativeのハイブリッドアプリをより良くサポートするため、コアチームはアーキテクチャのアップグレード計画(Fabric)を始動させました。これには、スレッドモデルのリファクタリング、React非同期レンダリングへの対応、React Nativeコアの簡素化などの大幅な改修が含まれます。同時に、FacebookはJSI(JavaScript Interface)を含むインフラのオープンソース化も計画しました(詳細は Open Sourcing Internals and Updated Tooling を参照)。また、バージョン管理、RFC、議論プロセスなど、オープンソースコミュニティの運営も正規化されました。
2019年
-
Releasing React Native 0.59:0.59をリリース。React Hooksをサポートし、Android JSCをアップグレード。コアモジュールの軽量化計画を継続。
-
Mobile Innovation with React Native, ComponentKit, and Litho:Facebookのモバイル技術スタック(React Native + ComponentKit と Litho)を共有。
-
Meet Hermes, a new JavaScript Engine optimized for React Native:JSエンジンレベルのパフォーマンス向上を実現。詳細は Hermes: An open source JavaScript engine optimized for mobile apps, starting with React Native を参照。
オープンソースコミュニティの参加によりアーキテクチャのアップグレード計画は急速に進展し、一部の非コアモジュールがReact Native本体から切り出されて独立してメンテナンスされるようになり、良い成果を上げています:
これらのモジュールはReact Native内部にいた頃よりも多くのサポートを受けており、これはコミュニティにとって大きな前進であることを示しています。
同時に、パフォーマンス最適化の手が止まることはありませんでした。Androidプラットフォームでは、さらなるパフォーマンス向上を求めて、従来のJavaScriptCoreから Hermes エンジンへと切り替えられました:
Hermesは、Android上でReact Nativeアプリを実行するために最適化されたオープンソースのJavaScriptエンジンです。多くのアプリにおいて、Hermesを有効にするだけで、起動時間の改善、メモリ使用量の削減、アプリサイズの縮小が実現できます。
コメントはまだありません