比較一覧に戻る
クロスプラットフォーム UI

Perry vs React Native

React Native では JavaScript / TypeScript で書いたコードが iOS と Android のネイティブ UI を駆動します――UI コンポーネントは JS-to-native ブリッジ(あるいは New Architecture では同じ概念形状の JSI / Fabric レイヤ)経由でプラットフォームウィジェットにマップされます。Perry は別のアプローチを取ります:TypeScript は事前にネイティブマシンコードへコンパイルされ、ネイティブ UI はランタイムブリッジではなくコンパイル済みバイナリの一部です。

React Native とは?

React Native は React を使ってモバイルアプリを構築するための Meta のフレームワークです。JavaScript は組込みエンジン――デフォルトで Hermes、または JavaScriptCore――で実行され、ブリッジ(レガシー)または JSI / Fabric(New Architecture)経由でネイティブの iOS / Android ウィジェットと相互作用します。フレームワークはモバイルファースト(iOS と Android)です。Microsoft が Windows と macOS のコミュニティフォークを保守しています。React Native は Meta、Microsoft、Shopify、Discord などのアプリを支えてきました。

Perry とは?

Perry は TypeScript を直接ネイティブマシンコードへコンパイルします。perry/ui モジュールは SwiftUI スタイルの宣言的 UI システムで、ビルド時にネイティブプラットフォームウィジェットへコンパイルされます――バイナリ内に JS ランタイムはなく、ブリッジもなく、JSI もありません。同じ TypeScript コードベースが macOS、iOS、iPadOS、Android、Linux、Windows、watchOS、tvOS、Wear OS、WebAssembly、Web へコンパイルされます。

並べて比較

機能PerryReact Native
実行モデルAOT コンパイル済みネイティブマシンコードJS エンジン(Hermes / JSC)+ ネイティブブリッジ(または JSI / Fabric)
アプリ内の JS エンジンなしHermes(デフォルト)または JavaScriptCore
UIネイティブウィジェット――SwiftUI スタイルの宣言的 APIReact + ブリッジ / Fabric 経由のネイティブウィジェット
主要ターゲットmacOS、iOS、iPadOS、Android、Linux、Windows、watchOS、tvOS、WASM、WebiOS、Android(Windows / macOS はコミュニティフォーク経由)
サーバ / CLI / デスクトップバイナリあり(CLI ツール、サーバ、デスクトップアプリ)なし(モバイル UI フレームワーク)
JS とネイティブの間のブリッジブリッジなし――ネイティブコードがプログラム本体あり(レガシーブリッジまたは JSI / Fabric)
開発時のホットリロードperry dev(ウォッチモードの自動再コンパイル)Fast Refresh(非常に高速)
成熟度1.0 未満安定版、プロダクションで広く展開済み
コンポーネントライブラリperry/ui コアウィジェット + perry-react React 互換レイヤ膨大――React Native + コミュニティパッケージ

Perry が優れている点

  • +出荷アプリに JS エンジンがありません。Perry でコンパイルされたバイナリは Hermes も JSC も持ち運ばず、TypeScript そのものが実行ファイルです。
  • +ブリッジ / JSI のコストがありません。ネイティブ UI 呼出しは直接コンパイルされた関数呼出しであり、JS-to-native のマーシャリングではありません。
  • +より広いプラットフォーム到達。ひとつの Perry コードベースがデスクトップ(macOS / Linux / Windows)、モバイル(iOS / iPadOS / Android)、ウェアラブル(watchOS / Wear OS)、TV(tvOS)、WASM、Web にコンパイルされます。React Native はモバイルファーストです。
  • +同じコンパイラからのサーバサイド・CLI バイナリ――Perry は UI フレームワークだけでなくサーバランタイムでもあります。
  • +AOT コンパイル済みの計算性能――ウォームアップなし、JIT なし、ブリッジのラウンドトリップなし。
  • +perry-react はネイティブウィジェットにコンパイルされる React / JSX を提供します。バイナリに JS エンジンを入れずに React のメンタルモデルが利用できます。

React Native が優れている点

  • +成熟した実戦投入済みエコシステムと、巨大なコミュニティサポート、ライブラリ、ツール。
  • +開発時の Fast Refresh はクラス最高――コード変更がリビルドなしにミリ秒で反映されます。
  • +巨大な人材プール。React Native 開発者の採用は容易です。Perry は新参です。
  • +確立された CI / CD、App Store / Play Store の公開パイプライン、codepush スタイルの OTA 更新。
  • +JSI / Fabric と New Architecture により、React のプログラミングモデルを保ちつつネイティブとの歴史的なパフォーマンスギャップの大半を埋めました。
  • +Meta および主要採用者(Microsoft、Shopify、Amazon)からの直接サポートがフレームワークを推進し続けています。

Perry を選ぶべきとき

モバイル、デスクトップ、ウォッチ、TV、WASM、Web にまたがるひとつの TypeScript コードベースが欲しいとき、出荷アプリに JS ランタイムを入れたくないとき、ブリッジなしのネイティブ UI が欲しいとき、またはすでに TypeScript に投資しており JS エンジンではなくネイティブコンパイルが欲しいときは Perry を選んでください。

React Native を選ぶべきとき

モバイルアプリを構築しており、最も成熟したクロスプラットフォームのネイティブ UI フレームワークが欲しいとき、既存の React チームがあるとき、React Native のライブラリエコシステムに依存しているとき、または今日の業界標準であるモバイルクロスプラットフォームスタックが必要なときは React Native を選んでください。

結論

React Native はモバイルファーストのフレームワークで、JS ランタイムと(現在は改善された)ブリッジを伴います。Perry は TypeScript からネイティブバイナリを生成するコンパイラで、ネイティブ UI はコンパイル出力の一部です。最も深いエコシステムを伴うモバイル上の React が欲しいなら、今日は React Native が答えです。アプリ内に JS ランタイムなしでモバイル + デスクトップ + ウォッチ + TV へコンパイルされるひとつの TypeScript コードベースが欲しいなら、Perry が答えです。

Perry を試す

今日から TypeScript をネイティブにコンパイルしましょう。

はじめる