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

Hermes の使用

Hermes は、React Native 向けに最適化されたオープンソースの JavaScript エンジンです。多くのアプリで、Hermes を使用すると、JavaScriptCore と比較して、起動時間、メモリ使用量、アプリサイズの削減につながります。Hermes は React Native でデフォルトで使用されており、有効化するための追加設定は必要ありません。

バンドルされた Hermes

React Native には、バンドルされたバージョンの Hermes が含まれています。新しいバージョンの React Native をリリースするたびに、Hermes のバージョンを構築しています。これにより、使用している React Native のバージョンと完全に互換性のあるバージョンの Hermes を利用できます。

この変更は React Native のユーザーにとって完全に透過的です。このページで説明されているコマンドを使用して、Hermes を無効にすることもできます。このページで技術的な実装の詳細を読むことができます

Hermes が使用されていることの確認

最近新規アプリを作成した場合は、ウェルカムビューで Hermes が有効になっているかどうかを確認してください。

Where to find JS engine status in AwesomeProject

Hermes が使用されていることを検証するために使用できる、HermesInternal グローバル変数が JavaScript で利用可能になります。

const isHermes = () => !!global.HermesInternal;
注意

標準的ではない方法で JS バンドルをロードしている場合、HermesInternal 変数は利用可能でも、高度に最適化されたプリコンパイル済みバイトコードを使用していない可能性があります。.hbc ファイルを使用していることを確認し、以下に詳述されているように、前後のベンチマークも実行してください。

Hermes の利点を確認するには、アプリのリリースビルド/デプロイを作成して比較してみてください。例:プロジェクトのルートから

npm run android -- --mode="release"

これにより、ビルド時に JavaScript が Hermes バイトコードにコンパイルされ、デバイスでのアプリの起動速度が向上します。

JavaScriptCore への切り替え

React Native は、JavaScript エンジンとして JavaScriptCore を使用することもサポートしています。Hermes をオプトアウトするには、次の手順に従ってください。

Android

android/gradle.properties ファイルを編集し、hermesEnabled を false に戻します。

# Use this property to enable or disable the Hermes JS engine.
# If set to false, you will be using JSC instead.
hermesEnabled=false

iOS

ios/Podfile ファイルを編集し、以下に示す変更を加えます。

   use_react_native!(
:path => config[:reactNativePath],
+ :hermes_enabled => false,
# An absolute path to your application root.
:app_path => "#{Pod::Config.instance.installation_root}/.."
)