Perry vs Static Hermes
Static Hermes(`shermes`)は Meta によるリサーチ段階の取り組みで、強い型を持つ JavaScript / TypeScript のサブセットを Hermes エンジン経由で事前コンパイルすることを目指しており、主に React Native を狙っています。Perry は同じ一般的なアイデア――TypeScript をネイティブにコンパイル――に対する別の賭けですが、Rust と LLVM の上で独立して構築されており、動作するコンパイラ、25+ のネイティブ UI ウィジェット、10 のコンパイレーションターゲットを今日出荷しています。2026 年 4 月時点で、Perry 自身のベンチマークスイートは Static Hermes をピアとして試したものの、テストした標準パッケージマネージャからクリーンにインストールできなかったと報告しています。
Static Hermes とは?
Hermes は Meta が React Native のために構築した JavaScript エンジンで――バイトコードベース、AOT 事前コンパイル、モバイルの起動時間に最適化されています。Static Hermes は Hermes に型付き JavaScript サブセットの事前ネイティブコンパイルを拡張するリサーチ的な取り組みで、React Native に真のネイティブコードへの道筋を与えることを意図しています。主にコンパイラの研究開発プロジェクトです。Perry のベンチマークノートによれば、現時点では macOS arm64 上で日常的にインストールできるパッケージにはなっていません(`shermes` は polyglot ベンチからスキップされ、「Homebrew や npm 経由で macOS arm64 にクリーンにインストールできる形では提供されていない」と注記されています――perry/benchmarks/README.md を参照)。
Perry とは?
Perry は Rust で書かれたネイティブ TypeScript コンパイラで、パースに SWC、コード生成に LLVM を使用します。動作する CLI(`perry compile`、`perry run`、`perry publish`)、25+ のネイティブ UI ウィジェット、10 のコンパイレーションターゲット、セルフホストランタイム、そして透明な条件で計測されたベンチマークスイート(M1 Max、RUNS=11)を出荷しています。Perry は 1.0 未満ですがプロダクション志向で、すでに Perry で構築されたアプリが出荷されています(Bloom Engine、Mango、Hone、Pry、dB Meter――perryts.com 参照)。
並べて比較
| 機能 | Perry | Static Hermes |
|---|---|---|
| ステータス | 1.0 未満(アルファ)――プロダクション志向 | リサーチ / 実験的 |
| インストール経路(macOS arm64) | Homebrew、APT、npm(@perryts/perry) | 執筆時点でクリーンインストール用にパッケージ化されていない(perry/benchmarks による) |
| バックエンド | LLVM | 独自(Hermes ベースの codegen) |
| 入力 | TypeScript(フル) | 型付き JS / TS のサブセット |
| コンパイレーションターゲット | 10:macOS、iOS、iPadOS、Android、Linux、Windows、watchOS、tvOS、WASM、Web/JS | 主にモバイル(React Native コンテキスト) |
| ネイティブ UI | AppKit、UIKit、GTK4、Win32、JNI 経由で 25+ ウィジェット | React Native ブリッジ経由(統合時) |
| スタンドアロン CLI アプリのワークフロー | あり――`perry compile main.ts` がバイナリを生成 | React Native コンテキストに紐付く |
| 公開ベンチマークスイート | あり――Node、Bun、Rust、C++、Go、Swift、Java に対して RUNS=11 | 内部 / リサーチ論文 |
Perry が優れている点
- +実用ツールとして存在しています。Perry は今日 Homebrew、APT、または `npm install @perryts/perry` でインストールでき、`perry compile main.ts` は最初の試行でバイナリを生成します。
- +より広いスコープ。Perry はひとつの TypeScript コードベースから、スタンドアロン CLI アプリ、ネイティブデスクトップアプリ、モバイルアプリ、ウォッチアプリ、TV アプリ、WASM、Web をコンパイルします。Static Hermes は React Native のネイティブコード経路に焦点を当てています。
- +ネイティブ UI が組込み済み。Perry の perry/ui モジュールは動作する SwiftUI スタイルの宣言的 UI レイヤで、AppKit / UIKit / GTK4 / Win32 / JNI ウィジェットにコンパイルされます。Static Hermes は UI をホスト(React Native)に委ねます。
- +公開かつ再現可能なベンチマークスイートと文書化された方法論――perry/benchmarks は名指しされたコンパイラとランタイムに対し、RUNS=11 にわたる中央値 + p95 + σ を示しています。
- +LLVM バックエンドにより、Perry は数十年にわたる成熟した最適化パス(自動ベクトル化、IndVarSimplify、scalar replacement)を継承し、LLVM がターゲットとするすべてのプラットフォームをサポートします。
Static Hermes が優れている点
- +Meta がバックアップ――潤沢なエンジニアリングリソースと React Native という明確な戦略的アンカーがあります。
- +Hermes はすでにプロダクションの React Native アプリでバイトコードエンジンとして出荷されており、Static Hermes はそのエコシステムとツールを継承します。
- +AOT 型付け規則と JS サブセットのセマンティクスに関するリサーチグレードの取り組みは真に新規性があります。
- +すでに React Native に乗っているなら、Static Hermes は(利用可能になれば)別のコンパイラに対して書き直すよりも漸進的な経路です。
Perry を選ぶべきとき
今日動作する TS-to-native コンパイラが必要なとき、ひとつの TypeScript コードベースでデスクトップ、モバイル、ウォッチ、TV、WASM、Web をターゲットにしたいとき、または React Native のブリッジなしでネイティブ UI ウィジェットが欲しいときは Perry を選んでください。
Static Hermes を選ぶべきとき
React Native にコミットしており、JavaScript / TypeScript からモバイル上の事前コンパイル済みネイティブコードへの経路が欲しく、リサーチツールの最先端で作業することに抵抗がない場合は Static Hermes(利用可能になれば)を選んでください。
結論
Static Hermes は信頼できるチームによる興味深いリサーチです。Perry は同じ一般的なアイデアに対する動作する製品で、モバイルよりはるかに広いスコープで、今日出荷されています。今すぐ手元に TS-to-native コンパイラが必要なら、Perry が選択肢です。React Native に乗っていてリサーチプロジェクトを追える余裕があるなら、Static Hermes を見守ってください。